Данные Edge не полностью загружены в Нептун (через Python и Gremlin)

Я загрузил свои отформатированные данные 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 данных из-за ограничения размера / времени.

Кто-нибудь на самом деле знает, почему это может происходить и как загружать данные по всему фронту?

1 ответ

Ограничение в 150 МБ, которое вы видите в документах, относится к пределу полезной нагрузки запроса. В вашем случае ваш запрос / запрос является запросом массовой загрузки, поэтому ограничение там не применяется. Нет никаких ограничений на данные, которые вы сохранили в S3. Есть несколько способов сделать это, но, похоже, наиболее полезным будет обратиться в службу поддержки, поскольку это позволит инженерам взглянуть на ваш конкретный кластер и посмотреть, что происходит.

Что это loader status API подскажет для твоего loadId? Это говорит о том, что загрузка не удалась с ошибкой, или это говорит, что она завершена? Если это последнее, вы увидите количество записей, которые он смог вставить как часть загрузки. Если это был первый вариант, то есть аргументы для команды загрузки, которые вы можете использовать для просмотра более подробной информации (ошибки, ошибочные строки в файле и т. Д.), Как указано в [1].

Я предполагаю, что у пограничного файла есть некоторые проблемы, и, следовательно, загрузчик не может его правильно проанализировать.

Благодарю вас за то, что вы открыто говорите о том, что документация не слишком полезна, поэтому было бы здорово, если бы вы могли поделиться конкретными болевыми точками (что вводило в заблуждение, что отсутствовало и т. Д.), И я позабочусь, чтобы кто-то обратился к ним с нашей стороны. Мы очень восприимчивы к отзывам сообщества.

[1] API состояния загрузчика - https://docs.aws.amazon.com/neptune/latest/userguide/load-api-reference-status.html

Другие вопросы по тегам