我的数据看起来像
Bob Joe Nathan
4 5 4
3 6 111
3 3 3
111 3 4
5 2
但我有大约300列'名称',而数字是CSV中的'属性'。如何在不输入所有“名称”和“属性”并将它们链接到彼此的情况下将所有这些数据加载到neo4j中?在此先感谢。
答案 0 :(得分:1)
我不知道这是否是更优雅的解决方案,但我有一个提示给你。
首先,您应该使用Transpose CSV Tool之类的工具。使用此工具,您可以输入CSV文件,如:
Bob,Joe,Nathan
4,5,4
3,6,111
3,3,3
111,3,4
5,2,
输出将是:
Bob,4,3,3,111,5
Joe,5,6,3,3,2
Nathan,4,111,3,4,
之后,您可以将CSV文件放入导入目录并使用LOAD CSV
,如下所示:
LOAD CSV FROM "file:///convertedcsv.csv" AS line
WITH line[0] as name, filter(l IN line where l is not null) AS line
UNWIND line[1..] as number
WITH name, collect(toInteger(number)) as numbers
CREATE ({name:name,numbers:numbers})
在第一个WITH
中,上面的查询存储名为name
的变量中每行的名称,并删除整行的所有空值,将结果保存到名为line
的变量中。之后,UNWIND
获取从索引1开始的数字(因为索引0是名称)并将每个数字保存到number
。每个number
都会收集到numbers
并转换为整数。
结果节点是:
MATCH (node) RETURN node as nodes
╒═══════════════════════════════════════╕
│"nodes" │
╞═══════════════════════════════════════╡
│{"name":"Bob","numbers":[4,3,3,111,5]} │
├───────────────────────────────────────┤
│{"name":"Nathan","numbers":[4,111,3,4]}│
├───────────────────────────────────────┤
│{"name":"Joe","numbers":[5,6,3,3,2]} │
└───────────────────────────────────────┘