Я загрузил свои данные в формате gremlin-csv на S3 и в конце концов выяснил, как запустить скрипт gremlin загрузчика через Python Jupyter из ужасной документации AWS, но пока данные Node полностью загружены в график, данные Edge нет, но ошибки нет.
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)
И это прекрасно работает для данных Node, но файл EdgeData загружается не полностью. Одной из причин может быть то, что файл EdgeData имеет размер 455 Мб. На странице ограничений AWS Neptune есть расплывчатая и неинформативная заметка:
Общий размер HTTP-запросов Gremlin и SPARQL должен быть менее 150 МБ. Если запрос превышает этот размер, Нептун возвращает HTTP 400: BadRequestException.
Я не получил BadRequestException
(даже когда я установил failOnError
на TRUE
), но это может быть только загрузка ~ 1/3 данных из-за ограничения размера / времени.
Кто-нибудь на самом деле знает, почему это может происходить и как загружать полные данные?