neo4j進階操作(四)neo4j導入csv,使用load導入csv文件進入neo4j

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章