CSV
- 一、load csv
- 二、neo4j-admin import
- <一>、导入入口
- <二>、文件准备
- <三>、命令详解
一、load csv
在neo4j Browser中使用Cypher语句LOAD CSV,对于数据量比较大的情况,建议先运行create constraint语句来生成约束
create constraint for (s:Student) require s.student_id is unique;
该代码为学生的student_id生成了唯一性约束,可将该属性视为主键。添加约束后,不论是生成还是查询,效率都会显著提升
生成学生节点的代码示例如下
:auto
LOAD CSV with HEADERS from 'file:///student.csv' AS row
call {
with row
merge (s:Student{student_id:row.student_id,name:row.name,age:row.age})
} in transactions of 100000 rows;
- LOAD CSV from '.csv’表示从csv文件中导入数据
- 若csv文件包含表头则加入with headers
- 单引号内写csv文件的路径,若csv文件已在当前数据库的Import文件夹内(可在桌面版主页点击数据库右侧三点键–Open folder --Import打开import文件夹),则直接写’file:///…csv’;若不在,则写绝对路径
- as row表示给数据表赋别名row,这时数据表相当于一个变量,后续用row.[字段]即可取得数据表的某列
- with row表示在此处接收变量row并将其传递至后续语句
- merge用于生成数据点,类似于match(查询)和create(创建)的结合
- {name:row.name}表示将row的name列赋值给节点的属性name
- call {} in transactions of 100000 rows表示批量处理数据,每批100000行。在处理大量数据时,建议使用该语句,不然易出现内存溢出错误
下述代码生成班级数据点
:auto
LOAD CSV with HEADERS from 'file:///class_id.csv' AS row
call {
with row
merge (s:Student{class_id:row.class_id,math_teacher:row.math_teacher,english_teacher:row.english_teacher,chinese_teacher:row.chinese_teacher})
} in transactions of 100000 rows;
接着生成关系(边)
:auto
LOAD CSV with HEADERS from 'file:///student.csv' AS row
call {
with row
match (s:student {student_id:row.student_id})
match (c:class {class_id:row.class_id})
merge (s)-[:BELONG] -> (c)
} in transactions of 100000 rows;
二、neo4j-admin import
<一>、导入入口
- neo4j-admin针对的是数据量比较大,千万级数据,用LOAD CSV方法会报内存溢出错误
- 这一方法需在终端中使用(桌面版neo4j-desctop主页点击数据库右侧三点键–Terminal即可打开终端)
进入终端以后就可以执行导入命令了
<二>、文件准备
1、节点文件
- 顶点数据表头:“[…]:ID”,“[…]:LABEL”,“[…]:IGNORE”,"[…]:double"等
对于顶点数据表头
- “[…]:ID"是必需项,比如将"CLASS_ID"改为"CLASS_ID:ID”
- 若整张表都是同一标签,则不需"[…]:LABEL"列,而是在命令行,见命令详解,–nodes=Class="…csv"表示这些节点都带Class标签
- "[…]:IGNORE"表示导入时忽略该列
- "[…]:double"表示导入时将该列的值转为double型,默认是string
eg:
class_id:ID | math_teacher | english_teacher | chinese_teacher |
---|---|---|---|
1 | 祖冲之 | 狄更斯 | 李白 |
2 | 张苍 | 莎士比亚 | 杜甫 |
导入到图数据库时,class_id,match_teacher,english_teacher,chinese_teacher都是节点的属性,Class为节点的标签
2、关系文件
- 边数据表头:“[…]:START_ID”,“[…]:END_ID”,“[…]:TYPE”,“[…]:IGNORE”,"[…]:double"等
对于边数据表头
- “[…]:START_ID”、“[…]:END_ID"为必需项,比如"student_id:start_id"和"class_id:end_id”
- “[…]:TYPE"类似于顶点数据表头的”[…]:LABEL",如"belong:TYPE",也可在命令行中指定,如–relationships=BELONG=“…csv”
- 其它项同理
eg:
student_id:START_ID | class_id:END_ID | “belong”:type | name | age |
---|---|---|---|---|
300 | 1 | belong | 李世民 | 18 |
301 | 2 | belong | 朱元璋 | 20 |
导入到图数据库时,会生成两条关系:如300 -[belong]->1,301 -[belong]->2,name、age为student的属性
注意:文件需放在当前数据库的import文件夹下
<三>、命令详解
neo4j-admin database import full
--overwrite-destination
--multiline-fields=true
--skip-bad-relationships
--nodes=Class="import\class.csv"
--relationships="import\student.csv"
--input-encoding=UTF-8
neo4j
- –overwrite-destination:指定在导入数据时是否覆盖目标数据库中的现有数据,如果目标数据库中已经存在数据,导入操作会覆盖这些数据
- multiline-fields:用于指定是否允许导入的字段包含多行数据。当设置为 true 时,该参数允许字段中的数据跨越多行,这对于处理包含换行符的文本数据非常有用
- –skip-bad-relationships:用于指定是否跳过那些引用了不存在节点ID的关系。如果设置为 true,则在导入过程中,如果遇到引用了不存在的起始节点或结束节点的关系,这些关系将被跳过,而不会中断整个导入过程。这个参数的默认值是 false
- –nodes:导入节点
- –relationships:导入关系
- neo4j:表示导入到哪个数据库,这里指的是默认的neo4j,如想更改,只需改成想导入的数据库即可