neo4j如何導入csv,導入關係與節點
常見導入形式對比
CREATE語句 | LOAD CSV語句 | Batch Inserter | Batch Import | Neo4j-import | |
---|---|---|---|---|---|
適用場景 | 1 ~ 1w nodes | 1w ~ 10 w nodes | 千萬以上 nodes | 千萬以上 nodes | 千萬以上 nodes |
速度 | 很慢 (1000 nodes/s) | 一般 (5000 nodes/s) | 非常快 (數萬 nodes/s) | 非常快 (數萬 nodes/s) | 非常快 (數萬 nodes/s) |
優點 | 使用方便,可實時插入。 | 使用方便,可以加載本地/遠程CSV;可實時插入。 | 速度相比於前兩個,有數量級的提升 | 基於Batch Inserter,可以直接運行編譯好的jar包;可以在已存在的數據庫中導入數據 | 官方出品,比Batch Import佔用更少的資源 |
缺點 | 速度慢 | 需要將數據轉換成CSV | 需要轉成CSV;只能在JAVA中使用;且插入時必須停止neo4j | 需要轉成CSV;必須停止neo4j | 需要轉成CSV;必須停止neo4j;只能生成新的數據庫,而不能在已存在的數據庫中插入數據。 |
採用load 形式導入csv
本文使用的是windows下的neo4j broswer,在導入數據之前,需要將EXCEL另存爲CSV,如果有多個sheet,則需要分開單獨存儲
USING PERIODIC COMMIT 300 LOAD CSV WITH HEADERS FROM “file:///test.csv” AS line
MERGE (a:actors{name:line.name,type:line.type,id:line.id})
本地數據文件放在XXX\Neo4j\graph.db\import文件夾內,遠程數據文件可以使用文件URL
在這裏本人就是在import文件夾裏放了一個actors.csv 文件,然後指定file:///actors.csv 即可訪問該文件
可變參數解釋:
1、USING PERIODIC COMMIT 300
使用自動提交,每滿300條提交一次,防止內存溢出
2、WITH HEADERS
從文件中讀取第一行作爲參數名,只有在使用了該參數後,纔可以使用line.name這樣的表示方式,否則需使用line[0]的表示方式
3、AS line
爲每行數據重命名
4、MERGE
用merge比用create好一點,可以防止數據重複
上面的語句可修改爲如下(我用的是下面的)
USING PERIODIC COMMIT 10
LOAD CSV FROM "file:///actors.csv" AS line
create (a:actors{personId:line[0],name:line[1],type:line[2]})
actors.csv 文件位於neo4j 的import 文件目錄下。
導入成功後的結果:
繼續導入:
USING PERIODIC COMMIT 10
LOAD CSV FROM "file:///movies.csv" AS line
create (a:movies{movieId:line[0],name1:line[1],year:line[2],tag:line[3]})
MATCH(m:movies) return m
接下來導入關係
USING PERIODIC COMMIT 10
LOAD CSV FROM “file:///roles.csv” AS line
MATCH (from:movies{movieId:line[2]}),(to:actors{personId:line[0]})
merge (from)-[r:ACTED_IN{miles:line[1]}]-> (to)
return r
MATCH p=()-[r:ACTED_IN]->() RETURN p LIMIT 25
用於測試,忽略效果,注意語法與細節
可能遇到的問題:
1、導入後中文亂碼
因爲neo4j是utf-8的,而CSV默認保存是ANSI的,需要用記事本另存爲成UTF-8的
2、如何導入關係
在neo4j中,雖然有一個自增的id屬性,但是要想使用它還是很麻煩的,尤其是在web管理端
因此在使用CSV創建關係時,需要我們自己指定或添加一個屬性來作爲“主鍵”,在創建關係時根據該屬性來獲取節點,並添加關係
USING PERIODIC COMMIT 10
LOAD CSV FROM “file:///test.csv” AS line
match (from:actors{persionid:line[0]),(to:position{id:[1]})
merge (from)-[r:fly{miles:line[2],time:line[3],price:line[4]}]-(to)
return r
參考文獻
https://blog.csdn.net/zfqbd/article/details/78808678 按照此鏈接數據生成了,把neo4j關閉了.刪除graph.db仍然失敗。
先整理出一些收集的資料,稍後整理
https://blog.csdn.net/alantuling_jt/article/details/58181556
https://blog.csdn.net/macanv/article/details/78296066
https://blog.csdn.net/ilasjdklfj/article/details/79118461
https://blog.csdn.net/xingxiupaioxue/article/details/71747284
https://blog.csdn.net/qq_23318779/article/details/66970960