在 neo4j 批量导入中作为 int 的 ID 会在关系导入中产生错误



我使用 Neo4j 的管理员导入工具导入 csv 格式的批量数据。我在标题 [journal:ID:int(Journal-ID(] 中使用 Integer 作为 ID 数据类型,导入节点的部分工作正常。当导入工具涉及到关系时,我收到引用节点丢失的错误。 似乎关系导入它正在以字符串格式搜索 ID。 我已经尝试更改关系文件中ID的类型,但出现其他错误。我发现没有办法在关系文件中将 ID 指定为 int。

下面是一个最小示例。假设我们有两种带有标头的节点类型:

journal:ID:int(Journal-ID)

documentID:ID(Document-ID),title

和示例文件日志.csv:

"123"
"987"

和文档.csv:

"PMID:1", "Title"
"PMID:2", "Other Title"

我们还有一个与标题的关系"hasDocument":

:START_ID(Journal-ID),:END_ID(Document-ID)

以及示例文件关系.csv:

"123", "PMID:1"

运行导入时,我收到错误:

Error in input data
Caused by:123 (Journal-ID)-[hasDocument]->PMID:1 (Document-ID) referring to missing node 123

我试图将关系标题指定为

:START_ID:int(Journal-ID),:END_ID(Document-ID)

但这也会产生错误。

开始导入的命令是:

neo4j-admin import --nodes:Document="document-header.csv,documentNodes.csv" --nodes:Journal="journal-header.csv,journalNodes.csv" --relationships:hasDocument="hasDocument-header.csv,relationsHasDocument.csv"

有没有办法将关系文件中的ID指定为整数,或者是否有其他解决方案可以解决这个问题?

它似乎不受支持。文档没有提到它,代码也没有这样的测试用例。

可以使用字符串 ID 导入数据,并在启动数据库后强制转换它。

MATCH (j:Journal)
SET j.id = toInteger(j.id)

如果数据集很大,则可以将apoc与迭代一起使用:

call apoc.periodic.iterate("
MATCH (j:Journal) RETURN j
","
SET j.id = toInteger(j.id)
",{batchSize:10000})

相关内容

最新更新