neo4j導入數據之LOAD CSV

一  爲什麼用load csv,

   之前寫過用neo4j-import 的一個博客,本以爲我的neo4j奇幻之旅就要結束了,然鵝,領導說咱們每天還有100w的數據需要跑進去。

    neo4j-import肯定不能再用了,因爲每次都要清空數據庫,第一次投產生成的csv文件有10多個G,把這些數據文件傳輸到neo4j的服務器上很佔資源,如果每天重跑一次,顯然不太現實。

    batch-neo4j我也研究了一下,只需要下載一個jar包,執行就可以了,不過好像這種只適合新增的數據,而我們的100w數據中還有修改的,即  如果節點已存在則修改,不存在則新增。

    load csv 上邊最快的兩種方式都不能滿足我的要求,我也很無奈,只得退而求其次,選擇了不是很快的load csv,不過他的好處就是不用關閉neo4j的服務也可導入,導入方式也簡單

二 遇到的問題

   使用load csv非常簡單,直接將之前生成csv文件的腳本拿來就可以,在查詢語句加上 where updateDate=sysdate

生成了三個csv文件pernode.csv  comnode.csv  rel.csv放到neo4j/import目錄下,因爲conf配置load csv默認目錄是這裏。

   

  然後就是寫導入命令

LOAD CSV FROM 'file:///pernode.csv' as line

   merge(per:PERSONAL{cstId:line[0]}) 

   on create set per.name=line[1],per.city=line[2]

   on match set per.name =line[1],per.city=line[2]

LOAD CSV FROM 'file:///company.csv' as line

   merge(com:COMPANY{cstId:line[0]}) 

   on create set com.name=line[1],per.city=line[2]

   on match set com.name =line[1],per.city=line[2]

  這兩個節點的導入還算順利,but,關係的導入卻出現了問題,就在第三行r:line[2]這個地方報錯了,提示不能用‘[’這種特殊符號,研究了好久還是沒有辦法解決,我有大概十幾種關係,總不可能自己寫死吧。

LOAD CSV FROM 'file:///rel.csv' as line
   match(f{cstId:line[0]}),match(t{cstId:line[1]})

   merge(f) -[r:line[2]{property:line[3]}]-(t)

   on create set r.property = line[3]

   on match set r.property = line[3]

於是,我絞盡腦汁,千方百計,殫精竭慮,日思夜想,衣帶漸寬 ,  還是沒想到解決的辦法,就在我要放棄的時候,我尋思就將就着用java查詢,然後用merge一條一條的修改吧,突然無意間找到了一篇博客,,,,,,,,

真是救了我的狗命。

https://jpanj.com/2018/neo4j-import-dynamic-relationship-type/

於是我把關係的導入語句改爲

LOAD CSV FROM 'file:////rel.csv' AS line
MATCH (p1:{cstId:line[0]})
MATCH (p2:{cstId:line[0]})
WITH p1, p2, line
CALL apoc.merge.relationship(p1, line[2], {name: line[3]}, {}, p2) YIELD rel
RETURN rel

COOL!

三,總結

任何問題都能在網上找到答案!!!

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