amazon-web-services - 如何为通过 CSV 导入 AWS Neptune 的 Vertex 属性安排单一基数?

标签 amazon-web-services csv gremlin cardinality amazon-neptune

Neptune 文档说他们仅支持通过 CSV 导入的属性数据的“设置”属性基数,这意味着新到达的属性值无法覆盖同一属性上同一顶点上的旧属性值。

例如,如果第一个 CSV 导入

~id,~label,age
Marko,person,29

然后 Marko 有一个生日和第二个 CSV 导入

~id,~label,age
Marko,person,30

“Marko”顶点的“age”属性将包含两个年龄值,这似乎没有用。

AWS 说这(折叠设置为单一基数属性(仅保留最后到达的值)需要通过 Gremlin 遍历通过后处理完成。

这是否意味着应该有一个遍历,不断扫描具有多个(Set)属性的 Vertexes 并再次使用 Single cardinality 设置属性,最后一个可能的值?如果是这样,执行此操作的最佳 Gremlin 查询是什么?

在 pseudo-Gremlin 中,我会想象这样的事情:

g.V().property(single, properties(*), _.tail())

是否可以保证 Set-cardinality 属性始终按到达顺序列出?

还是我完全走错了路。

如有任何帮助,我们将不胜感激。

更新: 所以到目前为止,我能想到的最好的事情仍然远非完美的解决方案,但它仍然可能对我这样的人有用。

在计划 A 中,如果我们碰巧知道属性名称并且到达顺序根本不重要(只希望这些属性具有单一基数),则所有顶点的遍历可能类似于:

g.V().has(${propname}).where(property(single, ${propname}, properties(${propname}).value().order().tail() ) )

计划 B 是在同一顶点(例如以 _ 开头)的临时属性名称下收集新的属性值,并遍历具有此类临时属性名称的顶点,并使用单基数的尾部值设置原始属性:

g.V().has(${temp_propname}).where(property(single, ${propname}, properties(${temp_propname}).value().order().tail() ) ).properties('temp_propname').drop()

计划 C 是最酷的,但不幸的是行不通,它是在专用顶点中继续收集属性值,以纪元时间戳作为属性名称,属性值作为它们的值:

g.V(${vertexid}).out('has_propnames').properties()
==>vp[1542827843->value1]
==>vp[1542827798->value2]
==>vp[1542887080->latestvalue]

并对属性名称(键)进行排序,取最后一个,并使用其值使主顶点属性值与最新值保持同步:

g.V().has(${propname}).where(out(${has_these_properties}).count().is(gt(0))).where(property(single, ${propname}, out(${has_these_properties}).properties().value(  out(${has_these_properties}).properties().keys().order().tail()  ) ) )

看起来 value() 步骤的参数必须是常量,它不能使用另一个遍历的结果作为参数,所以我无法让它工作。也许拥有更多 Gremlin 经验的人知道解决此问题的方法。

最佳答案

AWS 最近在 CSV 批量加载器上引入了“单一”基数支持: https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html 因此,不再需要 Gremlin 级别的属性值安排。

关于amazon-web-services - 如何为通过 CSV 导入 AWS Neptune 的 Vertex 属性安排单一基数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53340849/

相关文章:

amazon-web-services - AWS Eventbridge : Pattern to capture ALL events

bash - Unix uniq命令到CSV文件

python - 选择合适的方式在 Python 中使用 Neo4j

amazon-web-services - 共享 Multi-Tenancy 模型中的亚马逊和多客户支持

wordpress - 如何隐藏 wp-admin AWS NginX

javascript - D3.js 缩放从数据集中返回错误值

neo4j - 是否可以在大型密集图上使用 graphdb

java - 解析没有时区转换的日期

python-3.x - 使用 Python 3.6 和密码学模块部署 AWS Lambda 包

python - 在 Python 中从 CSV 文件中读取数据