2017-04-05 17 views
1

"name"と "property"という2つのカラムを持つNeo4jデータベースに基本CSVファイルをロードしています。名前列は常に値を持ち、「プロパティ」列は値または空白のいずれかを持つことができます。私は、関係 "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

2つのクエリに問題があります。それは内で宣言以前FOREACH(別名で宣言されているので、ライン5

  • Properties上のクロージング括弧がありません

    1. は、第二FOREACHのためのスコープではありません

      を:FOREACHはこれを試してみてください

    )そのFOREACH句内にスコープされていますこれは、プロパティフィールドがnullでない場合にのみ、リンクおよびBのノードを作成します

    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) 
    

    :として

    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を使用します。

    関連する問題