将修改后的节点重新加载到 aws-neptune 时出现意外行为

Undesired behavior when reloading modified nodes into aws-neptune

我正在使用批量加载程序将数据从 S3 上的 csv 文件加载到 Neptune 数据库集群中。 数据加载成功。但是,当我在修改了某些节点的 属性 值的情况下重新加载数据时,新值并没有替换旧值,而是被添加到其中,使其成为一个用逗号分隔的值列表。例如:

加载的初始值:

~id,~label,ip:string,creationTime:date
2,user,"1.2.3.4",2019-02-13

如果我用不同的 ip 重新加载此节点:

2,user,"5.6.7.8",2019-02-13

然后我运行如下遍历:g.V(2).valueMap(),得到:ip=[1.2.3.4, 5.6.7.8], creationTime=[2019-02-13]

虽然这种行为可能对某些用例有益,但大多数情况下并不希望如此。我想要新值来替换旧值。 在重新加载节点的情况下,我在文档中找不到任何关于加载程序行为的参考,并且在 API 请求中没有要配置的相关参数。 我怎样才能让重新加载的节点覆盖现有的节点?[​​=14=]

目前 Neptune 批量加载器使用 Set 基数。要更新现有的 属性,最好的方法是通过 HTTP 或 WS 端点使用 Gremlin。

从 Gremlin 中,您可以指定您想要单一基数(因此替换而不是添加到 属性 值)。一个例子是

g.V('2').property(single,"ip","5.6.7.8")

希望对您有所帮助, 开尔文

更新: Neptune 现在支持单基数批量加载。只需设置

updateSingleCardinalityProperties = TRUE

来源: https://docs.aws.amazon.com/neptune/latest/userguide/load-api-reference-load.html