【问题标题】:How to load ALL the columns from a *.csv into Neo4j nodes如何将 *.csv 中的所有列加载到 Neo4j 节点中
【发布时间】:2015-03-10 00:45:13
【问题描述】:

假设我需要加载一个 csv 文件 c:\myData.csv

alfa,beta,gamma
0001,1000,thousant
0002,2000,two-K
...

在节点中

(:myData{alfa:0001,beta:1000,gamma'thousant'})
(:myData{alfa:0002,beta:2000,gamma'two-k'})

有没有办法将所有列导入属性而不一一指定?

类似

LOAD CSV WITH HEADERS FROM 'file:/c:/myData.csv' AS line set line:myData create line
or
LOAD CSV WITH HEADERS FROM 'file:/c:/myData.csv' AS line create (:myData {line.*})

【问题讨论】:

    标签: csv neo4j load


    【解决方案1】:

    你可以使用

    LOAD CSV WITH HEADERS FROM 'file:/c:/myData.csv' AS line 
    create (:MyData {line})
    

    LOAD CSV WITH HEADERS FROM 'file:/c:/myData.csv' AS line 
    MATCH (m:MyData {id:line.id})
    SET m += {line}
    

    【讨论】:

    • 这会产生一个名为 line Neo.ClientError.Statement.ParameterMissing 的参数
    • 删除第二个解决方案的行周围的括号,第一个解决方案使用 MERGE (n:MyData {id: line.id}) ON CREATE SET += line
    • @MichaelHunger 请更正您的第一个代码块以读取... AS line CREATE (n:MyData) SET n += line,因为这有效,并且您的版本给出了 Dirk 提到的错误。
    • @ChristopheWillemsen 您在SET+= 之间忘记了n。我从您的评论中获取了线索,并在我的上一条评论中提出了 CREATE 语法。当您还没有架构索引时,性能比 MERGE方式 方式
    • 如何在将IS NOT NULL 应用于每一列以避免空值时也使用它。
    【解决方案2】:

    在尝试了不同的选项后,以下对我有用,Neo4j 3.3.2:

    USING PERIODIC COMMIT 10000
    LOAD CSV WITH HEADERS FROM 'file:///apples.csv' AS appleAllLineProperties
    CREATE(apple:Apple)
    set apple += appleAllLineProperties
    

    几个观察:

    1. CREATE(apple: {appleAllLineProperties}) 导致错误,因为 Neo4j 期望 appleAllLineProperties 是一个参数 - 这在这个位置也是无效的。
    2. Neo4j 期望文件位于以下文件夹中

      C:\Users\\AppData\Roaming\Neo4j Desktop\Application\neo4jDatabases\database-\installation-3.3.2\import

    【讨论】:

    • 如何提取节点的名称而不仅仅是 id。?
    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多