常見的Neo4j資料導入方式如下:
1.通過Cypher中的create語句。
2.Cypher中的load csv方式。
3.官方提供的neo4j-import工具。
4.官方提供的Java API BatchInserter。
5.batch-import 工具。
6.neo4j-apocload.csv +apoc.load.relationship。
其各自使用對比如下圖(網上):
在這裡插入圖檔描述
現就LOAD CSV及neo4j-import工具進行說明。
**
LOAD CSV
**
LOAD CSV可支援讀取本地檔案及遠端檔案,文法分别為:
本地:LOAD CSV FROM "file:///data.csv"
遠端:LOAD CSV FROM 'https://neo4j.com/docs/cypher-manual/3.5/csv/artists.csv'
使用參數:
1.using periodic commit n : 每n條自動送出一次
2.with headers :檔案第一行作為參數名,加上該參數才能使用line.name這種方式
3.with line :為每行資料重命名
Neo4j資料導入中最關鍵的是csv檔案資料的格式,要求如下,
在這裡插入圖檔描述
即字元編碼為UTF-8,行分隔符為\n,預設列分隔符為逗号,但可加FIELDTERMINATOR參數指定分隔符,當dbms.import.csv.legacy_quote_escaping參數為true時,預設轉義字元為\。
示例
節點
csv檔案為:
在這裡插入圖檔描述
導入:
load csv from 'file:///node.csv' As line create (a:qianfu{name:line[1],post:line[2]});
得到
在這裡插入圖檔描述
這裡若将csv檔案改為:
在這裡插入圖檔描述
則語句可為
load csv with headers from 'file:///node.csv' As line create (a:qianfu{name:line.name,post:line.post});
為避免重複插入,可将create關鍵字換為merge。
還有個值得注意的點是csv檔案目錄的問題,筆者第一次導入時就碰到了這個坑,報Couldn’t load the external resource at: file…錯誤,仔細一看報錯資訊,是路徑的問題。
在這裡插入圖檔描述
原來load csv的時候會去/usr/local/neo4j-community-3.5.11/import目錄下找相應檔案,是以寫相對路徑就ok。
若想使用絕對路徑或修改預設路徑,可在neo4j.conf配置檔案中,找到 dbms.directories.import=import,将該行注釋掉或者改成自己習慣的路徑。
關系
csv檔案為:
在這裡插入圖檔描述
導入,
load csv with headers from "file:///relation.csv" As line match (from:qianfu{name:line.name1}),(to:qianfu{name:line.name2})
merge (from) -[r:rel{pro:line.rela}]-> (to);
在這裡插入圖檔描述
**
neo4j-import
**
neo4j-import同neo4j-admin import (官方推薦),使用前提是關閉neo4j服務,原有庫不存在。
文法:
neo4j-admin import [--mode=csv] [--database=<name>]
[--report-file=<filename>]
[--nodes[:Label1:Label2]=<"file1,file2,...">]
[--relationships[:RELATIONSHIP_TYPE]=<"file1,file2,...">]
[--id-type=<STRING|INTEGER|ACTUAL>]
[--input-encoding=<character-set>]
[--ignore-extra-columns[=<true|false>]]
[--ignore-duplicate-nodes[=<true|false>]]
[--ignore-missing-nodes[=<true|false>]]
[--multiline-fields[=<true|false>]]
[--delimiter=<delimiter-character>]
[--array-delimiter=<array-delimiter-character>]
[--quote=<quotation-character>]
[--max-memory=<max-memory-that-importer-can-use>]
[--f=<File containing all arguments to this import>]
[--high-io=<true/false>]
主要選項說明:
mode:預設為csv。
database:預設為graph.db。
report-file:為檔案導入記錄(導入時會生成import.report檔案,記錄未導入成功的條目)。
nodes:待導入的節點csv檔案,可直接使用nodes:Label的方式顯示指定标簽。
relationships:待導入的關系csv檔案,relationships:RELATIONSHIP_TYPE指定關系。
id-type:每個節點需有唯一辨別,id-type指定唯一辨別類型,預設為string。
input-encoding:導入資料的字元集,預設UTF-8。
delimiter:csv檔案資料間分隔符,預設逗号。
ignore-extra-columns:導入時忽略未指定的列。預設false。
ignore-duplicate-nodes:導入時節點忽略重複節點。預設false。
ignore-missing-nodes:導入時忽略關系裡缺失的節點。預設false。
示例
csv檔案分别為:
customers.csv
customerId:ID(Customer),name
23,Delicatessen Inc
42,Delicous Bakery
products.csv
productId:ID(Product),name,price,:LABEL
11,Chocolate,10,Product;Food
orders_header.csv
orderId:ID(Order),date,total,customerId:IGNORE
orders1.csv
1041,2015-05-10,130,23
orders2.csv
1042,2015-05-12,20,42
order_details.csv
:START_ID(Order),amount,price,:END_ID(Product)
1041,13,130,11
1042,2,20,11
customer_orders_header.csv
:END_ID(Order),date:IGNORE,total:IGNORE,:START_ID(Customer)
導入: