我想创建一个海王星数据库,并将数据转储到它。我将历史数据从 DynamoDB 下载到 S3,这些文件为 csv 格式。这些 csv 中的标题如下:~id, someproperties:String, ~label然后,我需要通过 lambda 实现对这个 neptune db 的实时流式传输,在 lambda 函数中,我会检查一个顶点(或边)是否存在,如果存在,我将更新顶点(或边),否则我创建一个新的。在python中,我的实现是这样的:g.V().hasLabel('Event').has(T.id, event['Id']).fold().coalesce(unfold(), addV('Event').property(T.id, event['Id'])).property(Cardinality.single, 'State', event['State']).property('sourceData', event['sourceData']).next()在这里我有一些问题:在实时流中,我需要查询是否已经存在带有id的顶点,所以我需要查询历史数据的节点,那么可以 has(T.id, event['Id'])这样做吗?还是我应该只使用 has(id, event['Id'])or has("id", event['Id'])?我正在使用g.V().has('Event', T.id, event['Id'])而不是 g.V().hasLabel('Event').has(T.id, event['Id']),但得到了类似的错误cannot local NeptuneGraphTraversal.has()。这两个查询是一样的吗?
1 回答
皈依舞
TA贡献1851条经验 获得超3个赞
这是您对 Gremlin 有疑问的三个部分:
g.V().has(T.id, "some-id")
g.V().has(id, "some-id")
g.V().has("id", "some-id")
前两个将返回与id成员相同的结果T(作为一种风格,Gremlin 用户通常静态导入id,以便为简洁起见以这种方式引用它)。最后一次遍历与前两次不同,因为String它作为一个值引用了一个名为“id”的标准属性键。一般来说,TinkerPop 会建议您不要使用像“id”或“label”这样的属性键名,因为它可能会导致错误和混淆T.
至于你的问题的第二部分围绕:
g.V().has('Event', T.id, event['Id'])
g.V().hasLabel('Event').has(T.id, event['Id'])
正如 Kelvin 指出的那样,您不能传递T.id到 3 元形式,因为步骤签名只允许 a在第二个位置。允许那里也没有意义,因为第一个参数已经说明了它并引用了实际的图形元素标识符。如果您知道该值,那么您就不会首先指定 ,因为已经唯一标识了元素。你会做的。has()StringTT.labelT.idT.labelT.idg.V(event['Id'])
添加回答
举报
0/150
提交
取消