我们可以使用S3批量上传器更新AWS Neptune中现有节点和图形边缘的属性吗

问题描述

我知道使用S3 CSV批量上传器,我们可以在AWS Neptune GraphDB中创建新的顶点和边。我想知道是否可以使用S3 CSV批量上传器来更新Neptune图中的边缘和节点的某些属性

解决方法

是的,批量加载器可用于更新属性,但仅在属性具有单个基数的情况下[1]。在Neptune中,属性默认设置为基数。如果您的CSV文件具有正确的标头规范(请参见下面的示例),则可以在批量加载API请求中将updateSingleCardinalityProperties参数设置为TRUE,这将允许批量加载器更新这些参数属性。

这是一个示例。如果我的顶点具有以下CSV文件(请注意标头格式[2]用于定义单个基数属性):

~id,~label,name:String(single),address:String(single)
test001,test-label,John Doe,"101 Elm St.  Herndon,VA"
test002,Jane Doe,test002,"321 Main St.  Ashburn,VA"
test001,John Dox,"504 Congress Ave.  McLean,VA"

如果我通过将updateSingleCardinalityProperties参数设置为TRUE发出以下API请求:

curl -X POST \
-H 'Content-Type: application/json' \
https://$NEPTUNE_CLUSTER_ENDPOINT:$NEPTUNE_CLUSTER_PORT/loader -d ‘
{
"source" : "s3://somes3bucket/dl-testload/testload.csv","format" : "csv","iamRoleArn" : "'$NEPTUNE_LOAD_FROM_S3_ROLE_ARN'","region" : "us-west-2","failOnError" : "FALSE","parallelism" : "OVERSUBSCRIBE","updateSingleCardinalityProperties" : "TRUE"
}‘

此批量加载的输出如下:

[{'name': ['John Dox'],<T.label: 4>: 'test-label','address': ['504 Congress Ave.  McLean,VA'],<T.id: 1>: 'test001'},{'name': ['Jane Doe'],'address': ['321 Main St.  Ashburn,<T.id: 1>: 'test002'}]

请注意,test001顶点的名称和地址属性是如何被CSV文件中的后一行覆盖的。发生的情况可能与最后一行在不同的CSV文件中,并且是后一个批量加载作业的一部分可以执行更新一样。

[1] https://docs.aws.amazon.com/neptune/latest/userguide/load-api-reference-load.html [2] https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html