我正在尝试在 python 中运行一个 python 作业,该作业从 csv 文件批量加载 Neptune 图表。该作业通过使用请求参数的curl命令加载这些文件(如下所示)。然而,加载失败,因为图中已存在边 id。
{
"mode": "AUTO",
"updateSingleCardinalityProperties": "TRUE",
"parallelism": "OVERSUBSCRIBE",
"source": <file pathe>,
"failOnError": "FALSE",
"region": <region>,
"format": "csv",
"queueRequest": "TRUE",
"iamRoleArn": <IAM role>,
}
为了避免这些失败,我尝试在加载图形之前查询边缘 id,但我需要加载的数据非常大,并且该作业需要一天多的时间才能完成。是否有另一种解决方案,可以覆盖这些边,或者如果边 id 已存在,则忽略新边?
仅当您尝试创建具有相同 ID 但不同边缘标签的边缘时,才会发生有关重复边缘 ID 的错误。
有几种方法可以解决这个问题:
如果您不关心边缘 ID 是什么(如果您在将它们写入 Neptune 之前使用 UUID 之类的东西生成这些 ID),那么您可能需要考虑让 Neptune 为您分配这些 ID。 使用 Gremlin CSV 批量加载格式无法实现此目的,但可以使用 openCypher CSV 批量加载格式:https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format- opencypher.html。 无论您使用哪种格式加载数据,都可以使用 Gremlin 或 openCypher 查询数据(它们在相同数据上是可互操作的)。
使用 openCypher CSV 批量加载格式时,您可以在发出批量加载作业时使用
userProvidedEdgeIds
参数。 将其设置为 False
,Neptune 将为您生成 ID。
或者,您可以发出整个批量加载,并允许加载器累积由重复边缘 ID 生成的错误。 将
failOnError
参数设置为 false 时,Neptune 将在收集错误时继续加载剩余数据。 作业完成后,您可以返回并查询作业日志中的错误 (https://docs.aws.amazon.com/neptune/latest/userguide/load-api-reference-error-logs-examples .html)并单独解决重复的 ID(可能仅通过查询或创建新的 CSV 文件并发出另一个批量加载作业)。