天天看點

雲原生之資料庫導入工具

常見的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)

導入: