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默认目录是这里。

   neo4j导入数据之LOAD CSV_第1张图片neo4j导入数据之LOAD CSV_第2张图片

  然后就是写导入命令

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!

三,总结

任何问题都能在网上找到答案!!!

你可能感兴趣的:(java,neo4j)