Neo4j·数据导入需要注意的坑·方案对比
- 2020 年 2 月 17 日
- 笔记
如果觉得写的好或对您有帮助,麻烦右边点个赞哦~~
- 数据导入方案对比
- neo4j-admin import
- 最快的方案
- 10s导入15w节点
- Spark(同事)
- 0.5h, 50w节点
- apoc导入hdfs里的csv文件
- 100w个节点数据0.5h导不完
- neo4j-admin import
- CSV处理经验
- 源数据到CSV,注意将源数据中的英文,进行提前处理
- 字符串内部的引号不提前转义或过滤会引起导入错误
- 如: 的合法时间“为人特让他”发顺丰 被识别为三个字符串
- hash不是唯一映射, 自增长ID可以解决唯一性问题
- .CSV说明
- Node的类型用:Label做header
- Edge的类型用:TYPE做header
- 官方文档里ID用的是不带引号的字符串,ID是32位内整型(忘记在哪查到的了)
- .CSV中的字符串不一定要有单引号' '或双引号,两种引号应该都可以。但请一定加引号,避免字段内有英文逗号。
- header中propertyName后面的“:类型" 可以省略
- node.csv里加了ID namespace,edge.csv里也得加上才能互相识别出来
- Official Document. https://neo4j.com/docs/operations-manual/current/tutorial/import-tool/
- 可以把同一个label的csv文件分成多个,比如:person-part1.csv, person-part2.csv,只要把它们写在一个–nodes参数就可以了。
neo4j 批量导入数据
- 将大规模数据导入Neo4j的五种方法. https://blog.csdn.net/xingxiupaioxue/article/details/71747284
- 【推荐】.http://arganzheng.life/import-json-data-into-neo4j.html
- 内容:
- 通过neo4j-admin import命令可以将数据从 CSV 文件批量导入到未使用的数据库。load data into a previously unused database.
- 通过[LOAD CSV](https://neo4j.com/docs/developer-manual/3.2/cypher/clauses/load-csv/)语句 import small to medium-sized CSV files into an existing database.
- 内容:
- 官方提供的 neo4j-import
- https://neo4j.com/docs/operations-manual/current/tutorial/import-tool/
- 步骤:
- 不需要启动数据库可以执行
- 默认只支持相对路径。 请将需要导入的文件放到bin目录下(其他路径没试过)
- 执行neo4j-import命令一定要在neo4j根目录的bin文件夹下进行,否则回报参数不全这种奇怪的问题。
- X.db不能已经存在,即使不报错,最后数据也不正确。
- .neo4j-import –into ..datadatabasesgraph-geo.db –nodes node*.csv –relationships edge*.csv –ignore-extra-columns=true –multiline-fields=true –skip-bad-relationships=true –bad-tolerance=500
- (windows) .neo4j-import –into ..datadatabasesgraph5.db –nodes food*.csv –nodes geography*.csv –nodes location*.csv –nodes travel*.csv –relationships:Relation edge.csv –ignore-extra-columns=true –multiline-fields=true –skip-bad-relationships=true –bad-tolerance=500
- –ignore-extra-columns=false && –bad-tolerance=500 时,当某行列数超过头部,导入数据会直接失败,这一行不会被忽略。
- Input error: Expected '–nodes' to have at least 1 valid item, but had 0 [] 表示文件路径不支持
- 如果要是用缩写,结尾必须带有.csv
- 失败的原因是geography*,location*这种写法不支持
-
-
- geography*.csv是允许的,geography*是不允许的。
- –nodes food*.csv –nodes geography*.csv –nodes location*.csv –nodes travel*.csv是允许的,food*.csv,geography*.csv,location*.csv,travel*.csv是不允许的
-
-
- 如果.csv中没有:LABEL这一列,需要在命令中显示指定LABEL,如下:
- –nodes:Entity –relationships:Relation
- 使用绝对路径的方法. https://my.oschina.net/sunyouling/blog/882754
- 没试过
- 在配置文件中注释#dbms.directories.import=import
- 如果.csv中没有:LABEL这一列,需要在命令中显示指定LABEL,如下:
- Load CSV 支持周期性分批导入
- Linux下使用neo4j-import
- 不需要先执行neo4j console
- sudo /usr/bin/neo4j-import –into /var/lib/neo4j/data/databases/graph.db –nodes ~/node*.csv –relationships ~/edge*.csv
Tips
- 导入关系的时候最好先把节点的id索引构建了。这样在做关系节点关联查询的时候会比较快。
- mac导入数据. http://arganzheng.life/import-json-data-into-neo4j.html