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