Neo4j CSV文件加载空单元格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Neo4j CSV文件加载空单元格相关的知识,希望对你有一定的参考价值。

我正在将一个基本的CSV文件加载到Neo4j数据库中,该数据库有两列 - “name”和“property”。 name列始终具有值,“property”列可以具有值或空格。我想将值与“property1”关系联系起来。

我正在使用此代码:

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))"

任何帮助,将不胜感激。

答案

您的查询有两个问题:

  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)
)
另一答案

另一种方法是使用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)

仅当属性字段不为null时,才会创建链接和B节点。

以上是关于Neo4j CSV文件加载空单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何在kdb中加载空单元格的csv?

如果标签不存在,XSLT 处理 CSV 的空单元格

POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解

Neo4j - 使用标题加载CSV的语法

MySQL Workbench 从 CSV 导入 NULL

仅将可见单元格从 Excel 保存到 CSV