csv文件格式:
使用load csv指令必须遵循以下规则:
字符串是utf8格式
数据的行结束符依赖系统,windows是\r\n,linux是\n
默认的字段分隔符是 ","
默认的字段分隔符,可以使用load csv指令的FIELDTERMINATOR选项指定
字符串前后可以使用引号,但是导入时会无视引号
字符串的引号使用双引号
如果dbms.import.csv.legacy_quote_escaping=true,则\被当做转义字符
引号必须成双出现
导入CSV文件的方式
导入CSV文件(不带csv头)
文件artists.csv内容:
1,ABBA,1992
2,Roxette,1986
3,Europe,1979
4,The Cardigans,1992
执行导入语句:
LOAD CSV FROM '{csv-dir}/artists.csv' AS line
CREATE (:Artist { name: line[1], year: toInteger(line[2])})
指令执行效果:
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 4
Properties set: 8
Labels added: 4
解释:
该语句实现了,在导入csv时,从csv文件中获取内容做为结点的属性。
line很有意思,csv内部将每一行拆解成list,line[1]代表了第二列,line[2]则代表是了数字年份
导入带文件头的CSV文件
文件artists-with-headers.csv内容:
Id,Name,Year
1,ABBA,1992
2,Roxette,1986
3,Europe,1979
4,The Cardigans,1992
执行导入语句:
LOAD CSV WITH HEADERS FROM '{csv-dir}/artists-with-headers.csv' AS line
CREATE (:Artist { name: line.Name, year: toInteger(line.Year)})
指令执行效果:
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 4
Properties set: 8
Labels added: 4
解释:
该语句同上,实现了在导入csv时,从csv文件中获取内容做为结点的属性。
line很有意思,与上面使用序号不同,csv内部将每一行拆解成list,以表头为属性,获取对应数据,与上一个序号有些不同
自定义csv文件的分隔符
文件artists-fieldterminator.csv内容:
1;ABBA;1992
2;Roxette;1986
3;Europe;1979
4;The Cardigans;1992
执行导入语句:
LOAD CSV FROM '{csv-dir}/artists-fieldterminator.csv' AS line FIELDTERMINATOR ';'
CREATE (:Artist { name: line[1], year: toInteger(line[2])})
指令执行效果:
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 4
Properties set: 8
Labels added: 4
使用csv文件上传大量数据
在上传大量语句时,必须使用USING PERIODIC COMMIT语句实现分段上传,这可以避免内存的极大扩散导致的问题。
默认每次上传1000条
执行导入语句:
USING PERIODIC COMMIT
LOAD CSV FROM '{csv-dir}/artists.csv' AS line
CREATE (:Artist { name: line[1], year: toInteger(line[2])})
指令执行效果:
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 4
Properties set: 8
Labels added: 4
使用csv文件上传大量数据时,限制批次上传的数量
执行导入语句:
USING PERIODIC COMMIT 500
LOAD CSV FROM '{csv-dir}/artists.csv' AS line
CREATE (:Artist { name: line[1], year: toInteger(line[2])})
指令执行效果:
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 4
Properties set: 8
Labels added: 4