一、几大导入方式的差异

1. neo4j-admin import:

只能初始化,若要用的话必需清空之前的数据库。不能很好的适应不断要添加新节点和关系的需求。必需关闭数据库 neo4j stop

2. LOAD CSV

可以在原数据库基础上新增数据,导入中小型数据,1kw条左右不用关闭数据库,可以直接在browser操作CSV文件的URL可以由后面的任意表达式来确定LOAD CSV也支持通过HTTPS、HTTP和FTP来访问CSV文件LOAD CSV支持以gzip,Deflate和ZIP压缩的资源但数度较慢

二、LOAD CSV 文件URL的配置项

1. 在配置文件中,默认是运行使用file:///URL来加载数据的。

2. 若把值改为false,则完全禁止LOAD CSV访问文件系统。

dbms.security.allow_csv_import_from_file_urls=false //完全禁止访问文件系统

 3. file:///根路径的设置:默认在import文件夹

# See the `LOAD CSV` section of the manual for details.

dbms.directories.import=import

可以限制访问数据库import文件夹以外的文件

示例:若URL为’file:///ceshi.csv‘

LOAD CSV 语句从 /import/ceshi.csv 读取数据

绝对路径:D:/neo4j/neo4j-community-4.4.18/import/ceshi/ceshi.csv

相对路径:file:///ceshi/ceshi.csv

file:/// == /import/

4.也可以把默认的访问地址改为别的文件夹,即:dir_name

dbms.directories.import=dir_name

TIPS:若此行代码生效后,数据库则不能访问该文件夹以外的其他文件。

 

 三、LOAD CSV语句

USING PERIODIC COMMIT n

LOAD CSV WITH HEADERS FROM 'URL' AS line

 with headers: 读取首行 读取文件第一行作为参数名  若没有该参数名,则要用line[0]、line[1]来索引;有该参数则可用line.name来索引 as line: 重命名  建立索引USING PERIODIC COMMIT n:分批导入 每n条提交一次;默认值为1000fieldterminator',' :自定义字段定界符 默认csv分隔符为逗号 

TIPS: CSV读取文件数据是String类型,可以通过函数转换为其他类型 toInt()...

示例:

LOAD CSV WITH HEADERS FROM 'file:///ceshi/ceshi.csv' AS line

CREATE (:盾构机初始维护 { ID: line.ID, 系统名称: line.系统名称, 部件名称: line.部件名称, 初始维护工作内容: line.初始维护工作内容, 补充说明: line.补充说明, 油品名称: line.油品名称, 备注: line.备注, LABEL: line.LABEL})

问题1:

不能判断节点是否已经存在,会重复导入 没有判别能力与neo4j-admin import相比:ID只是属性列 不是索引列 没有唯一性

解决:

先设定好文档,一次性导入,避免冲突。---最好的解利用create constraint on俩添加唯一性约束

CREATE CONSTRAINT ON (n:`label_name`) ASSERT n.ID IS UNIQUE 

label_name:即用label来筛选节点,再将节点的id设唯一约束

问题2???用merge来判断节点是否存在有很大的问题:若原数据库某些节点的某些属性为空值,则在用merge时会报错:

解决1:---不成功

 查询到官网的解决办法:Explanation of error "Cannot merge node using null property value for" - Knowledge Base (neo4j.com)

LOAD CSV WITH HEADERS FROM 'file:///ceshi1/7.4.3-4盾构机周维护1.csv' AS line with line where line.补充说明 and line.备注 is not null

merge (:盾构机周维护 { ID: line.ID, 系统名称: line.系统名称, 部件名称: line.部件名称, 周维护工作: line.周维护工作, 补充说明: line.补充说明, 备注: line.备注, LABEL: line.LABEL })

依旧存在问题:对于新添加节点中有被忽略属性其值不为空时,会报错下面例子为:新添加的节点其’补充说明‘列不为空,则无法处理。

解决2:

将所有空值单元格用'\'填充  结合 merge 则不会出现空值报错

先添加的文件节点文件【7.4.3-4盾构机周维护.csv】:空值填充

 二次导入节点文件【7.4.3-4盾构机周维护1.csv】---仅新增最后一个

 结果:添加成功

新添加节点信息如下图: 

四、流程小结

Step1:命令直接创建节点 用 MERGE 

LOAD CSV WITH HEADERS FROM 'file:///file_name.csv' AS line 

MERGE (:Label { ID: line.ID, 系统名称: line.系统名称, 部件名称: line.部件名称, 周维护工作: line.周维护工作, 补充说明: line.补充说明, 备注: line.备注, LABEL: line.LABEL }) 

自动命令生成见python代码: 3.Load_csv.py

Step2:创建唯一约束-ID列 CREATE CONSTRAINT ON

CREATE CONSTRAINT ON (n:`label`) ASSERT n.ID IS UNIQUE 

Step3:检验能否判断节点是否存在 继续用step1的代码导入新文件~

补充:

删除节点命令:用LABEL检索---换成要删除的节点的label

MATCH (r:`LABEL`) DETACH DELETE r

删除约束命令:---与创建约束代码对应

DROP CONSTRAINT ON (n:`LABEL`)  ASSERT n.ID IS UNIQUE

Neo4j系列记录: 

(1)导入导出dump文件:(21条消息) Neo4j---(1)导入导出dump文件_俩小歪的博客-CSDN博客 

(2)批量导入实体和关系csv文件之neo4j-admin import:

(6条消息) Neo4j---(2)批量导入实体和关系csv文件之neo4j-admin import_俩小歪的博客-CSDN博客

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: