将修改后的节点重新加载到 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
我正在使用批量加载程序将数据从 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