neo4j - 使用 LOAD CSV 在 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程序来生成密码子句。因为实际文件比我提供的样本大得多,所以我尝试使用 cat mynodes.cql | 通过 cypher shell 加载它。./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"} ) "
然而,在 neo4j 浏览器中输入 CREATE (ROOT_EC3_800:ROOT:eoi { name: "Enterprise", records: 0, scope: "False"} ),节点被创建。
我正在非常努力地完成这项工作。任何帮助表示赞赏。
解决方案
该指令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 } ) ;
干杯。
推荐阅读
- r - 试图加载 tidyverse 但我遇到了 "> library(tidyverse) 库中的错误(tidyverse):没有名为 'tidyverse' 的包"
- json - 如何定期将大型 JSON 数据集导入 Cloud Firestore?
- php - simplexml_load_string():实体:第 1 行:解析器错误:字符串未关闭预期问题
- apache-spark - 使用 Spark BigQuery 连接器查询 BigQuery 视图时未启用缓存
- sql-server - 查找给定开始日期和结束日期的可用日期
- c# - NanoFramework 缺少库
- python - 如何使用 python 编辑 S3 文件
- vb.net - Visual basic - 函数内的函数作为变量
- r - 使用 data.table 避免 mget
- reactjs - 在 useEffect 中使用本地 var 进行乱序操作