为了账号安全,请及时绑定邮箱和手机立即绑定

如何在python中实现:检查顶点是否存在,如果不存在,则创建一个新顶点

如何在python中实现:检查顶点是否存在,如果不存在,则创建一个新顶点

临摹微笑 2022-06-14 10:54:00
我想创建一个海王星数据库,并将数据转储到它。我将历史数据从 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'])


查看完整回答
反对 回复 2022-06-14
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信