使用LOAD CSV

时间:2018-10-22 05:50:54

标签: neo4j

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

示例:

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子句。因为实际文件比我提供的示例大得多,所以我尝试通过cypher shell加载它, 猫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 {名称:” Enterprise“,记录:0,范围:” False“})”

但是,输入 在neo4j浏览器上创建(ROOT_EC3_800:ROOT:eoi {名称:“ Enterprise”,记录:0,范围:“ False”})。

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

1 个答案:

答案 0 :(得分:1)

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 } ) ;

干杯。