Neo4j Cypher 使用 csv 构建图形
Neo4j Cypher building a graph using csv
下午好!
我有一个具有以下结构的 csv 文件:
numberRow,A,B,C
0,a1,b1,c1
1,,,c2
2,,b2,c3
3,a2,b3,c4
4,,,c5
...
我上传使用,其他节点,脚本类似
LOAD CSV WITH HEADERS FROM 'file:///file.csv' AS row
WITH row
WHERE row.a IS NOT NULL
CREATE
(aa:A {numberRow: toInteger(row.numberRow), value: row.a});
我的任务是得到如下形式的图表
CREATE
(a1:A {numberRow: 0, value: 'a1'})-[:R]-(b1:B {numberRow: 0, value: 'b1'})-[:R]->(c1:C {numberRow: 0, value: 'c1'}),
(a1)-[:R]-(b1)-[:R]->(c2:C {numberRow: 1, value: 'c2'}),
(a1)-[:R]-(b2:B {numberRow: 2, value: 'b2'})-[:R]->(c3:C {numberRow: 2, value: 'c3'}),
(a2:A {numberRow: 3, value: 'a2'})-[:R]-(b3:B {numberRow: 3, value: 'b3'})-[:R]->(c4:C {numberRow: 3, value: 'c4'}),
(a2)-[:R]-(b3)-[:R]->(c5:C {numberRow: 4, value: 'c5'})
请告诉我如何请求绘制图形,可能会同时加载所有节点,在此先感谢
您的案例需要跟踪前几行中的项目。我建议首先创建一个完整的数组,然后从那里合并。可以使用 REDUCE
创建一个完整的数组并循环遍历项目:
WITH [
{numberRow:0,A:'a1',B:'b1',C:'c1'},
{numberRow:1,C:'c2'},
{numberRow:2,B:'b2',C:'c3'},
{numberRow:3,A:'a2',B:'b3',C:'c4'},
{numberRow:4,C:'c5'}
] AS rows
UNWIND rows AS row
WITH row ORDER BY row.numberRow ASC
WITH COLLECT(row) AS rows
RETURN REDUCE(arr=[], row IN rows |
arr
+ {
numberRow: row.numberRow,
A:COALESCE(row.A,LAST(arr).A),
B:COALESCE(row.B,LAST(arr).B),
C:COALESCE(row.C,LAST(arr).C)
}
) AS completeArray
下午好! 我有一个具有以下结构的 csv 文件:
numberRow,A,B,C
0,a1,b1,c1
1,,,c2
2,,b2,c3
3,a2,b3,c4
4,,,c5
...
我上传使用,其他节点,脚本类似
LOAD CSV WITH HEADERS FROM 'file:///file.csv' AS row
WITH row
WHERE row.a IS NOT NULL
CREATE
(aa:A {numberRow: toInteger(row.numberRow), value: row.a});
我的任务是得到如下形式的图表
CREATE
(a1:A {numberRow: 0, value: 'a1'})-[:R]-(b1:B {numberRow: 0, value: 'b1'})-[:R]->(c1:C {numberRow: 0, value: 'c1'}),
(a1)-[:R]-(b1)-[:R]->(c2:C {numberRow: 1, value: 'c2'}),
(a1)-[:R]-(b2:B {numberRow: 2, value: 'b2'})-[:R]->(c3:C {numberRow: 2, value: 'c3'}),
(a2:A {numberRow: 3, value: 'a2'})-[:R]-(b3:B {numberRow: 3, value: 'b3'})-[:R]->(c4:C {numberRow: 3, value: 'c4'}),
(a2)-[:R]-(b3)-[:R]->(c5:C {numberRow: 4, value: 'c5'})
请告诉我如何请求绘制图形,可能会同时加载所有节点,在此先感谢
您的案例需要跟踪前几行中的项目。我建议首先创建一个完整的数组,然后从那里合并。可以使用 REDUCE
创建一个完整的数组并循环遍历项目:
WITH [
{numberRow:0,A:'a1',B:'b1',C:'c1'},
{numberRow:1,C:'c2'},
{numberRow:2,B:'b2',C:'c3'},
{numberRow:3,A:'a2',B:'b3',C:'c4'},
{numberRow:4,C:'c5'}
] AS rows
UNWIND rows AS row
WITH row ORDER BY row.numberRow ASC
WITH COLLECT(row) AS rows
RETURN REDUCE(arr=[], row IN rows |
arr
+ {
numberRow: row.numberRow,
A:COALESCE(row.A,LAST(arr).A),
B:COALESCE(row.B,LAST(arr).B),
C:COALESCE(row.C,LAST(arr).C)
}
) AS completeArray