【问题标题】:Import csv into Neo4j where multiple columns have empty cells将 csv 导入 Neo4j,其中多列有空单元格
【发布时间】:2020-04-30 13:14:25
【问题描述】:

我希望导入一个 csv,其中列中的记录具有空值(空)。任何列都有可能有空记录,因此最终查询应该能够处理任何列。这是我的表格示例和预期图形输出示例:

Group       Capability      Functionality   Status        Dev    Input         Output  
Pipeline    DataIngest      Read CSV        Complete      Ben    source.csv    masterTable
Pipeline    DataQuality     Quality score   Complete             masterTable
Analytics   Summary         Minimum score   In progress   Jill   masterTable   dataSummary  
Analytics   Summary         Maximum score   In progress          masterTable   dataSummary 
Analytics   Prediction      Future score                  
Output      Report          Bar chart       Not started   Ben    dataSummary
Output      Report          Line chart      Not started   Fred

以下是我尝试过的,但没有产生我期望的结果。该查询产生以下问题:

  1. 功能不是它自己的标签节点(它是功能的一部分)
  2. 属性未存储在功能中(这可能是由于问题 1)
CREATE CONSTRAINT ON (g:Group) ASSERT g.name is UNIQUE;
CREATE CONSTRAINT ON (c:Capability) ASSERT c.name is UNIQUE;
CREATE CONSTRAINT ON (f:Functionality) ASSERT f.name is UNIQUE;
LOAD CSV WITH HEADERS FROM 'file:///MasterSheet.csv' AS line

WITH line
MERGE (g:Group {name: line.Group})
MERGE (c:Capability {name: line.Capability})
FOREACH(x IN CASE WHEN line.DevStage IS NULL THEN [] ELSE [1] END |
  MERGE (f:Functionality {name: line.Functionality, status: line.Status, developer: line.Dev}))
MERGE (i:Data {name: line.Input})
MERGE (o:Data {name: line.Output})

CREATE UNIQUE (g)-[:PART_OF]->(c)
CREATE UNIQUE (c)-[:HAS]->(f)
CREATE UNIQUE (f)-[:INPUT]->(i)
CREATE UNIQUE (f)-[:OUTPUT]->(o)

【问题讨论】:

  • 你能显示你的 CSV 文件的实际内容吗?
  • 问题中的示例表是表的内容

标签: csv neo4j cypher


【解决方案1】:

您有多个问题。

  1. 一个大问题是您的逗号分隔值 (CSV) 文件格式错误。默认情况下,顾名思义,CSV 文件应使用逗号字符作为值分隔符。您的数据文件根本没有逗号。这是您文件格式正确的版本:

    Group,Capability,Functionality,Status,Dev,Input,Output
    Pipeline,DataIngest,Read CSV,Complete,Ben,source.csv,masterTable
    Pipeline,DataQuality,Quality score,Complete,,masterTable
    Analytics,Summary,Minimum score,In progress,Jill,masterTable,dataSummary
    Analytics,Summary,Maximum score,In progress,,masterTable,dataSummary
    Analytics,Prediction,Future score
    Output,Report,Bar chart,Not started,Ben,dataSummary
    Output,Report,Line chart,Not started,Fred
    

    注意“空”值是如何用连续的逗号表示的,或者如果它们位于行尾,它们将被省略。值可以嵌入空格。

  2. 你有一个错字。 DevStage 应该是 Dev

  3. 除非创建了f 节点,否则不能执行依赖于f 的子句,并且必须在f 在范围内时执行它们。 f 超出了FOREACH 子句的范围。

  4. neo4j 的最新版本不再支持CREATE UNIQUE,应改用MERGE

这是一个解决问题 2 到 4 的查询,它依赖于上述正确的数据格式:

LOAD CSV WITH HEADERS FROM 'file:///MasterSheet.csv' AS line
MERGE (g:Group {name: line.Group})
MERGE (c:Capability {name: line.Capability})
MERGE (g)-[:PART_OF]->(c)
FOREACH(x IN CASE WHEN line.Dev IS NOT NULL THEN [1] END |
  MERGE (f:Functionality {name: line.Functionality, status: line.Status, developer: line.Dev})
  MERGE (c)-[:HAS]->(f)
  FOREACH(x IN CASE WHEN line.Input IS NOT NULL THEN [1] END |
    MERGE (i:Data {name: line.Input})
    MERGE (f)-[:INPUT]->(i)
  )
  FOREACH(x IN CASE WHEN line.Output IS NOT NULL THEN [1] END |
    MERGE (o:Data {name: line.Output})
    MERGE (f)-[:OUTPUT]->(o)
  )
)

注意:您的示例数据无法实现您预期的输出数据可视化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多