Matrix 如何将excel关系矩阵导入Neo4j?

Matrix 如何将excel关系矩阵导入Neo4j?,matrix,import,neo4j,cypher,load-csv,Matrix,Import,Neo4j,Cypher,Load Csv,我想导入一个excel文件,它实际上是一个关系矩阵nxn,n个元素之间有几种关系类型 id| name | element1 | element2 | element3 ... n 1 | element1 1;2;3 1;5 2 | element2 1;2;3 3 | element3 1;5 ... 我将excel保存为CSV,这会创建许多空单元格(空单元格) 在Neo4j中,我尝试了: load csv with header

我想导入一个excel文件,它实际上是一个关系矩阵nxn,n个元素之间有几种关系类型

id| name     | element1 | element2 | element3 ... n
1 | element1              1;2;3        1;5
2 | element2   1;2;3
3 | element3     1;5
...
我将excel保存为CSV,这会创建许多空单元格(空单元格)

在Neo4j中,我尝试了:

load csv with headers from 'file:///test.csv' as line
WITH line where not line.ID is null
merge (c:element{id: toInteger(line.id),name: line.name})

因此,我没有收到任何更改和记录。

在Neo4j Cypher中,属性名称区分大小写。

您的文件具有列
id
,但您正在检查
中的not line.id为null
。 这将跳过所有行,因为CSV文件中没有
ID

请在下面查找查询的修改版本以提高可读性:

LOAD CSV WITH HEADERS FROM 'file:///test.csv' AS line
WITH line 
WHERE line.id IS NOT NULL
MERGE (c:element{id: toInteger(line.id),name: line.name})
除了@Raj的答案(属性名称区分大小写),CSV文件需要在所有值之间使用相同的分隔符

您的CSV文件(如问题中所示)使用了不一致的分隔符。它有时使用空格,有时使用空格和竖条(
|
)。这将不起作用,因为该子句只支持一种分隔符。此外,如果未使用默认分隔符逗号,则需要使用
FIELDTERMINATOR
选项指定该分隔符是什么

下面是CSV文件的固定版本,它使用默认分隔符逗号。请注意,两个相邻的逗号用于表示缺少的值。如果一行缺少其第一个值,则第一个逗号应位于该行的开头。此外,请注意,没有多余的空格

id,name,element1,element2,element3
1,element1,,1;2;3,1;5
2,element2,1;2;3
3,element3,1;5

如果这不能解决您的问题,请检查您的文件是逗号分隔的还是制表符分隔的。现在我还想导入关系,如何实现自动化?下面仅为一行创建关系,如何使用名称沿所有行迭代?“从“加载带有标题的CSV”file:///test.csv'AS line WITH line,其中line.element1不为空匹配(c:element{id:toInteger(line.id),name:line.name})匹配(d:element{name:'element1})合并(d)-[:REL{type:line.element1}]-(c)返回c,我认为您应该提出一个新问题。在您的评论中,密码有很多潜在的问题,解决这些问题会使这个已经很复杂的问题变得过于复杂。