使用 LOAD CSV 在 neo4j 中加载不同类型的节点



我正在尝试使用LOAD CSV,但遇到了一些挑战... 我想根据我的csv(类型(中特定列的内容创建不同类型的节点

例:

ID,NAME,VALUE,LABEL,TYPE,KEY,GROUP,COLOR,SIZE,RECORDS,SCOPE
3,ERKRS_11CO,11CO,"Operating Concern 1122",ERKRS,ERKRS_11CO,EOI,#FF99CC,1,0,False
5,ERKRS_8500,8500,"IDES Australia and New Zealand",ERKRS,ERKRS_8500,EOI,#FF99CC,1,0,False
21,KKBER_1000,1000,"Credit control area Europe",KKBER,KKBER_1000,EOI,#336699,1,0,False
329,KOKRS_1111,1111,"1111 CONTROLLING AREA IN",KOKRS,KOKRS_1111,EOI,#CC99FF,1,0,False
330,KOKRS_1112,1112,"US COMPANY",KOKRS,KOKRS_1112,EOI,#CC99FF,1,0,False

我第一次尝试:

// Build Nodes
USING PERIODIC COMMIT 500
LOAD CSV WITH HEADERS 
FROM 'file:///mynodesfile.csv' AS line
CREATE (line.NAME:line.TYPE :ee { name: line.LABEL , color: line.COLOR, records: TOINT(line.RECORDS), scope: line.SCOPE } ) ;

这根本不起作用。 然后我试了

USING PERIODIC COMMIT 500
LOAD CSV WITH HEADERS 
FROM 'file:///mynodesfile.csv' AS line
WITH line
CASE line.TYPE
WHEN 'ERKRS' THEN
CREATE (e:ERKRS { ID: TOINT(line.ID) } )
WHEN 'KKBER' THEN
CREATE (e:KKBER { ID: TOINT(line.ID) } )    
WHEN 'KOKRS' THEN
CREATE (e:KOKRS { ID: TOINT(line.ID) } )    
SET e.name = line.LABEL 
e.color = line.COLOR
e.records = TOINT(line.RECORDS)
e.scope = line.SCOPE )
;

也不行.... 然后我写了一个python程序来生成cypher子句。 由于实际文件比我给出的示例大得多,因此我尝试通过密码外壳加载它 cat mynodes.cql | ./bin/cypher-shell.bat -u yourneo4juser -p yourpassword (我使用的是Windows,所以我使用了Power shell...

mynodes.cql 前 4 条记录 ....

USING PERIODIC COMMIT 500
CREATE (ROOT_EC3_800:ROOT:eoi { name: "Enterprise", records: 0, scope: "False"} )
CREATE (ERKRS_11CO:ERKRS:eoi { name: "Operating Concorn 1122", records: 0, scope: "False"} )
CREATE (ERKRS_8500:ERKRS:eoi { name: "IDES Australia and New Zealand", records: 0, scope: "False"} )

无效输入"C":预期的空格、注释或 LoadCSVQuery(第 2 行,第 1 列(偏移量:26(( "CREATE (ROOT_EC3_800:ROOT:eoi { name: "Enterprise", records: 0, scope: "False"} ("

然而,进入 CREATE (ROOT_EC3_800:ROOT:eoi { name: "Enterprise", records: 0, scope: "False"} ( 在 neo4j 浏览器中,节点被创建。

我正在努力使这项工作。 任何帮助表示赞赏。

指令USING PERIODIC COMMIT仅适用于LOAD CSV命令,这就是您在生成脚本上收到错误的原因。

为了回答你的第一个问题,问题是在纯密码中,标签和相关性类型不可能是动态的。 因此,如果要创建具有动态标签的节点,则必须将APOC(https://neo4j-contrib.github.io/neo4j-apoc-procedures/(与过程一起使用,apoc.create.node如下所示:

USING PERIODIC COMMIT 500
LOAD CSV WITH HEADERS 
FROM 'file:///mynodesfile.csv' AS line
CALL apoc.create.node([line.TYPE, 'eoi'], { name: line.LABEL , color: line.COLOR, records: TOINT(line.RECORDS), scope: line.SCOPE } ) ;

干杯。

最新更新