我遵循了Neo4J-Kafka-Connector的快速入门教程。
MATCH (ts:TestSource) WHERE ts.timestamp > $lastCheck RETURN ts.name AS name, ts.surname AS surname, ts.timestamp AS timestamp
字符串
如果满足ts.timestamp > $lastCheck
条件,则在Kafka主题中插入name, surname, timestamp
行。
如果我从return-clause中删除了ts.timestamp as timestamp
,那么$lastCheck
参数就不会再更新了,所以where条件总是为true,并且每次请求都会查询整个图。有没有一种方法可以在不返回时间戳的情况下更新$lastCheck
参数?这将是很好的,特别是对于聚合,如果不需要对时间戳进行分组的话。
编辑
为了更好地说明这个问题,我在return子句中添加了$lastCheck
参数。
MATCH (ts:TestSource) WHERE ts.timestamp > $lastCheck RETURN ts.name AS name, ts.surname AS surname, ts.timestamp AS timestamp, $lastCheck as lastCheck
型
将以下消息写入我的主题:x1c 0d1x
在这里,我插入了示例TestSource
节点两次(经过短暂的延迟),以显示更新后的$lastCheck
参数。
CREATE(:TestSource {name:“约翰”,姓:'doe',时间戳:}); CREATE(:TestSource {name:“玛丽”,姓:'doe',时间戳:}); CREATE(:TestSource {name:“杰克”,姓:'small',时间戳:});
现在我从return子句中删除ts.timestamp as timestamp
。
MATCH (ts:TestSource) WHERE ts.timestamp > $lastCheck RETURN ts.name AS name, ts.surname AS surname, $lastCheck as lastCheck
型
数据库中的节点被删除,我只插入了一次。主题中的消息如下所示:
的
截图只显示了前七个,但这些消息被无限打印出来。有时候主题中的$lastCheck
也只是被第二个查询返回为-1
。
1条答案
按热度按时间avwztpqn1#
您从源示例的
neo4j.source.query
值中删除了timestamp
,但假定neo4j.streaming.property
仍然分配给“timestamp”。根据the documentation,可选的
neo4j.streaming.property
属性是:为了确定最后查询的记录,我们需要考虑的属性的名称;如果没有定义,我们使用最后执行的检查中给出的内部值。我们使用此值将其作为
$lastCheck
参数注入到neo4j.source.query
中定义的查询中。尝试删除可选的
neo4j.streaming.property
属性,以便可以使用内部值。