问题描述
我知道使用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