2017-04-05 124 views
1

我正在加载一个基本的CSV文件到Neo4j数据库,它有两列 - “名称”和“属性”。名称列始终有一个值,“属性”列可以有值或空白。我想将价值观与“property1”关系联系起来。Neo4j CSV文件加载空单元格

我使用这个代码:

LOAD CSV WITH HEADERS FROM 'file:///fileName.csv' AS line 
MERGE (Test_Document:A {name: line.name}) 
WITH line, Test_Document 
FOREACH (x IN CASE WHEN line.property IS NULL THEN [] ELSE [1] END | 
    MERGE (Properties:B {property1: line.property}) 
WITH Test_Document, Properties 
FOREACH (y IN CASE WHEN Properties IS NULL THEN [] ELSE [1] END | 
    MERGE (Test_Document)-[:property1]->(Properties)) 

我收到一条错误消息:

Unexpected end of input: expected whitespace, LOAD CSV, START, MATCH, UNWIND, MERGE, CREATE, SET, DELETE, REMOVE, FOREACH, WITH, CALL, RETURN or ')' (line 8, column 54 (offset: 423)) 
" MERGE (Test_Document)-[:property1]->(Properties))" 

任何帮助,将不胜感激。

回答

3

有两个问题与您的查询:

  1. 缺少第5行
  2. Properties关闭括号不在范围内的第二FOREACH,因为它是内声明的前面FOREACH(别名声明FOREACH只作用域到FOREACH子句中)

试试这个:

LOAD CSV WITH HEADERS FROM 'file:///fileName.csv' AS line 
MERGE (Test_Document:A {name: line.name}) 
WITH line, Test_Document 
FOREACH (x IN CASE WHEN line.property IS NULL THEN [] ELSE [1] END | 
    MERGE (Properties:B {property1: line.property}) 
    MERGE (Test_Document)-[:property1]->(Properties) 
) 
+0

谢谢,是的,这一直按预期工作! –

2

另一种方法是使用WHERE仅创建关系时,有缺失值并不如:

LOAD CSV WITH HEADERS FROM 'file:///fileName.csv' AS line 
WITH line, line.name AS Name, line.property AS Property 
MERGE (Test_Document:A {name: Name}) 
WITH Property 
WHERE Property <> "" 
MERGE (Properties:B {property1: Property}) 
MERGE (Test_Document)-[:property1]->(Properties) 

这将创建链接与B节点只有当属性字段不为空。