我使用 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})