2017-01-13 2 views
1

csvから読むと、 "scotch"と "region"ノードを持つ単純なグラフDBを作成しています。neo4jで区切られたcsvカラムから複数のプロパティを割り当てるCypher

パイプ区切りフィールドのスコッチノードにプロパティを割り当てたいとします。キャッチは、各フィールドインスタンスには必ずしも同数の区切り値が含まれているとは限りません。

LOAD CSV WITH HEADERS FROM 
'file:///scotch_narrow.csv' AS line 

WITH line, SPLIT(line.NOSE, '|') AS v1 

CREATE (scotch:Scotch {name: line.SCOTCH, nose: v1}) 

MERGE (region:REGION {name: line.REGION, district: line.DISTRICT}) 

CREATE (scotch)-[:MADE_IN]->(region) 
:、私は成功し、次のクエリを実行し、単一のフィールド、ここで( '| SEA FRESH' や 'FRESH | | SEA FRUIT' 例えば '新鮮な' またはを含めることができます) 'NOSE' の

私は、かつて以下のように同じパラダイムを使用しての複数のプロパティを割り当てよう:

LOAD CSV WITH HEADERS FROM 
'file:///scotch_narrow.csv' AS line 

WITH line, SPLIT(line.NOSE, '|') AS v1 
WITH line, SPLIT(line.BODY, '|') AS v2 
WITH line, SPLIT(line.FINISH, '|') AS v3 
WITH line, SPLIT(line.PALETTE, '|') AS v4 

CREATE (scotch:Scotch {name: line.SCOTCH, nose: v1, body: v2, finish: v3, palette: v4}) 

MERGE (region:REGION {name: line.REGION, district: line.DISTRICT}) 

CREATE (scotch)-[:MADE_IN]->(region) 

私は、エラーを取得します。変数「v2は」が定義されていない:

Variable `v2` not defined (line 4, column 115 (offset: 178)) 
"WITH line, SPLIT(line.NOSE, '|'), SPLIT(line.BODY, '|'), 
SPLIT(line.FINISH, '|'), SPLIT(line.PALETTE, '|') AS v1, v2, v3, v4" 
私の構文が間違ってい

答えて

1

WITHは、どの変数が有効範​​囲内にあるかを変更し、以前に定義された変数がWITH句に含まれていない場合、その変数は有効範囲に含まれなくなります。

あなたの一連のWITHsは新しい変数(あなたの "v"変数)を導入しますが、次のWITHから離れるのですぐに範囲外になります。それぞれの新しいWITHにそれらを含める必要があるので、v1は2番目のWITHに含まれ、v1とv2の両方が3番目のWITHなどになければなりません。

これは構文の問題を解決するはずです。

また、これらの値を与えられたラベルのノードとしてモデル化することも考えられます(たとえば、新鮮、海、果実の値を持つNoseラベルのノード)。次のような検索クエリを作成する予定がある場合:いくつかの特性セットに基づいてスコッチします。そうでなければ、あなたが今やっていることはちょうど良いはずです。

+0

優秀、@InverseFalconに感謝します - 私のクエリの "WITH"部分を修正すると、私の構文の問題が解決しました。 プロパティをノードとしてモデル化することをお勧めします。この演習は、グラフDBの機能を理解するのに役立ちます。 –

関連する問題