2015-11-03 46 views
2

每一行拆分操作我有這個疑問 -爲暗號

LOAD CSV from "file:/C:/1m/movies1.csv" AS rows 
FIELDTERMINATOR ';' unwind rows as row 
foreach (r in row| 
SPLIT(r[3],"|") as genre 
merge (c:Genres { name: genre }) 
merge (m:Movies { MovieID: row[1] }) 
MERGE (m)-[:HAS_GENRE]->(c)) 

行都是這樣 -

1;Toy Story (1995);Animation|Children's|Comedy 
2;Jumanji (1995);Adventure|Children's|Fantasy 
3;Grumpier Old Men (1995);Comedy|Romance 
4;Waiting to Exhale (1995);Comedy|Drama 

所以每行的第三個元素有,我想放鬆多個值與'|'分隔符。但我得到錯誤 -

Invalid input 'P': expected 't/T' or 'e/E' (line 4, column 2 (offset: 108)) 
"SPLIT(r[3],"|") as genre" 

我怎麼每行中拆分第三項,並將它們添加合併到一個節點?

回答

5

一般來說,FOREACH的東西可以用UNWIND來完成。

LOAD CSV from "file:/C:/1m/movies1.csv" AS rows FIELDTERMINATOR ';' 
MERGE (movie:Movie {MovieID:rows[0]}) 
SET movie.name = rows[1] 
WITH movie, SPLIT(rows[2], "|") AS genres 
UNWIND genres AS g 
MERGE (genre:Genre {name:g}) 
MERGE (movie)-[:HAS_GENRE]->(genre) 
RETURN movie, genre; 

產量:

enter image description here

也被提及rows[3],這是空的。 csv文件只有3列,其中第三列用rows[2]訪問。

+0

感謝您清除那個。相同的查詢格式需要超過15分鐘才能創建100萬次關係(不佔用大量內存或CPU時間)。任何建議,以加快速度? – goelakash

+0

確保您有索引:電影(MovieID)和:流派(名稱)。還要改變它做'MERGE(movie:Movie {MovieID:rows [0]})SET movie.name = rows [1]'。另請考慮使用週期性提交。 –

+0

爲什麼SET部分,如果我已經在MovieID上定義了索引? – goelakash