1

我已经将我的 gremlin-csv 格式的数据上传到 S3 并最终从糟糕的 AWS 文档中弄清楚了如何通过 Python Jupyter 运行加载器 gremlin 脚本,但是当节点数据完全加载到图中时,边缘数据不是,但没有错误。

from gremlin_python import statics
from gremlin_python.structure.graph import Graph
from gremlin_python.process.graph_traversal import __
from gremlin_python.process.strategies import *
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection

graph = Graph()
url = 'wss://<<cluster>>.<<region>>.neptune.amazonaws.com:<<port>>/gremlin'
remoteConn = DriverRemoteConnection(url,'g')
g = graph.traversal().withRemote(DriverRemoteConnection(url,'g'))
remoteConn.close()

这会创建一个空的图形对象,所以现在我使用以下方法将数据加载到其中:

import requests
import json

url="https://<<cluster>>.<<region>>.neptune.amazonaws.com:<<port>>/loader"
data = {
    "source" : "s3://neptune-data/neptuneEdgeData.csv",
    "format" : "csv",
    "iamRoleArn" : "arn:aws:iam::<<###>>:role/NeptuneLoadFromS3",
    "region" : "<<region>>",
    "failOnError" : "FALSE",
    "parallelism" : "MEDIUM"
}
headers={'Content-Type': 'application/json'}
res = requests.post(url, data=json.dumps(data), headers=headers)

这适用于节点数据,但 EdgeData 文件没有完全加载。一个原因可能是 EdgeData 文件为 455 Mb。AWS Neptune 限制页面上有一条含糊不清的注释:

Gremlin 和 SPARQL HTTP 请求的总大小必须小于 150 MB。如果请求超过此大小,Neptune 将返回 HTTP 400:BadRequestException。

我没有得到BadRequestException(即使我设置failOnErrorTRUE),但由于大小/时间限制,它可能只加载约 1/3 的数据。

有人真的知道为什么会发生这种情况以及如何加载完整的边缘数据吗?

4

1 回答 1

0

您在文档中看到的 150MB 限制是指查询有效负载限制。在您的情况下,您的查询/请求是批量加载请求,因此限制不适用于那里。您存储在 S3 中的数据没有限制。进行此操作的方法很少,但看起来最有用的方法是通过支持案例,因为这可以让工程师查看您的特定集群并了解发生了什么。

loader statusAPI 为您的 loadId 提供了什么信息?它是说加载失败并出现错误还是说它已完成?如果是后者,您会看到它能够作为负载的一部分插入的记录数。如果是前者,那么您可以使用 load 命令的参数来查看更多详细信息(错误、文件中的失败行等),如 [1] 中所述。

我的猜测是边缘文件有一些问题,因此加载程序无法正确解析它。

感谢您对文档没有太大帮助的直言不讳,所以如果您能分享具体的痛点(什么是误导性的、缺少什么等),那就太好了,我会确保有人从我们这里解决这些问题。我们非常乐于接受来自社区的反馈。

[1] 加载程序状态 API - https://docs.aws.amazon.com/neptune/latest/userguide/load-api-reference-status.html#load-api-reference-status-parameters

于 2019-06-18T06:17:01.420 回答