Neo4J ClientError.Statement.SyntaxError

标签 neo4j cypher load-csv

从 CSV 文件加载数据时遇到 Neo.ClientError.Statement.SyntaxError

Neo.ClientError.Statement.SyntaxError: Invalid input 'h': expected 'i/I' (line 5, column 3 (offset: 189)) "Merge (Zip_Code:Zip_Code {code: row.zip_cd,type:'location'})"

这是我的查询:

 Using Periodic Commit
LOAD CSV WITH HEADERS FROM "file:///DOL_data_whd_whisard_reduced.csv" AS row
Merge (State_Code:State_Code {code: row.st_cd})
    where not row.st_cd is null

Merge (Zip_Code:Zip_Code {code: row.zip_cd,type:'location'})
    where not row.zip_cd is null
Merge (Zip_Code)-[:located_in]->(State_Code)

csv 中有一些空白记录,因此我使用了 not null,但这给了我错误:

谁能帮我解决这个问题吗?

最佳答案

您收到错误是因为您将 WHEREMERGE 子句一起使用。 WHERE 不能与 MERGE 一起使用。

您可以修改查询以删除语法错误,如下所示:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///DOL_data_whd_whisard_reduced.csv" AS row
WITH row
WHERE NOT row.st_cd IS NULL AND NOT row.zip_cd IS NULL
MERGE (state_code:State_Code {code: row.st_cd})
MERGE (zip_code:Zip_Code {code: row.zip_cd, type:'location'})
MERGE (zip_code)-[:located_in]->(state_code)

NOTE:

  1. This will skip the record if one of st_cd or zip_cd is NULL.
  2. It's not recommended to use more than one MERGE in a single query, consider writing 3 separate queries for this.

推荐方法:

加载状态代码:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///DOL_data_whd_whisard_reduced.csv" AS row
WITH row
WHERE NOT row.st_cd IS NULL 
MERGE (state_code:State_Code {code: row.st_cd})

加载邮政编码:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///DOL_data_whd_whisard_reduced.csv" AS row
WITH row
WHERE NOT row.zip_cd IS NULL
MERGE (zip_code:Zip_Code {code: row.zip_cd, type:'location'})

创建州-邮政编码关系:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///DOL_data_whd_whisard_reduced.csv" AS row
WITH row
WHERE NOT row.st_cd IS NULL AND NOT row.zip_cd IS NULL
MATCH (state_code:State_Code {code: row.st_cd})
MATCH (zip_code:Zip_Code {code: row.zip_cd, type:'location'})
MERGE (zip_code)-[:located_in]->(state_code)

关于Neo4J ClientError.Statement.SyntaxError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56593300/

相关文章:

neo4j - 如何在neo4j中使用cypher创建多个节点

c# - 指定neo4j docker容器的 bolt 端口

neo4j - 可视化图形数据库

neo4j - 如何通过在 neo4J apoc 中加载更新的 CSV 文件来更新 graphdb 中现有的特定节点

neo4j - Neo.ClientError.Statement.ExternalResourceFailed

neo4j - Spring Data REST Neo4j 创建关系

neo4j - 如何在 cypher neo4j 中对关系进行分组和计数

database - Neo4j 是否将整个节点图带到 RAM 中以执行单个查询?

强制索引的 Neo4j 问题