iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 9
0
AI & Data

看圖說故事,讓 Neo4j 重新詮釋你的資料庫系列 第 9

Neo4j 大量匯入 CSV 資料

上次介紹了 Cypher 語法 LOAD CSV匯入 CSV 檔案,但如果想匯入大量 CSV,建議還是使用 neo4j-admin,這個工具可以做的事頗多,其中匯入的指令是 neo4j-admin import

Bulk Import CSV by neo4j-admin

neo4j-admin import 是一個高效率的匯入工具,早期的版本是 neo4j-import,執行後可能會有警告訊息如下

WARNING: neo4j-import is deprecated and support for it will be removed in a future
version of Neo4j; please use neo4j-admin import instead.

新版的 Neo4j 已經移除 neo4j-import,所以請都改用 neo4j-admin import。使用這個工具匯入 CSV 之前,CSV 檔案必須先整理過,不然工具根本看不懂你哪個欄位是 Label、需要哪些 Property、以及之間的關聯是什麼。以下是一個官方範例:

bin/neo4j-admin import --database orders
     --nodes=Customer=customers.csv
     --nodes=products.csv
     --nodes=Order="orders_header.csv,orders1.csv,orders2.csv"
     --relationships=CONTAINS=order_details.csv
     --relationships=ORDERED="customer_orders_header.csv,orders1.csv,orders2.csv"
     --trim-strings=true

上述的指令會建立一個新的資料庫 orders,而 Node、Relation 的建立則試著用各種不同的作法,請根據自己的情況擇一使用即可。

--nodes=Customer=customers.csv

直接在參數上指定 Label,並以 customers.csv 的資料來建立 nodes

customerId:ID(Customer), name
23, Delicatessen Inc
42, Delicious Bakery

--nodes=products.csv

products.csv 也是建立 nodes,但 Label 取決於 CSV 的 :LABEL 欄位,如果一個 node 想要有多個 Label,就必須採用這種做法,Label 之間用分號區隔

productId:ID(Product), name, price, :LABEL
11,Chocolate,10,Product;Food

--nodes=Order="orders_header.csv,orders1.csv,orders2.csv"
--relationships=ORDERED="customer_orders_header.csv,orders1.csv,orders2.csv"

假設資料量非常大,那麼可以讓 CSV header 獨立一個檔案,修改 header 會方便得多。並且可以試著把超大檔案拆分成多個小檔匯入,如上述的 orders1.csv、orders2.csv
另外,匯入 CSV 時預設所有欄位都會儲存成 Property,如果不想被儲存成 Property,只需要宣告 :IGNORE 即可。

orders_header.csv

orderId:ID(Order),date,total,customerId:IGNORE

orders1.csv

1041,2020-05-10,130,23

orders2.csv

1042,2020-05-12,20,42

customer_orders_header.csv

:END_ID(Order),date:IGNORE,total:IGNORE,:START_ID(Customer)

--relationships=CONTAINS=order_details.csv

表達 Relation 的 CSV 檔案,一定要有 :START_ID:END_ID 兩個欄位,這樣才能建立關係。上述是以 order_details.csv 來建立 CONTAINS 關係

:START_ID(Order),amount,price,:END_ID(Product)
1041,13,130,11
1042,2,20,11

以上就是今天的分享,除了匯入 CSV,我們也常會需要匯入關聯式資料庫或 API,之後再介紹給大家囉~


上一篇
Neo4j 匯入 CSV 資料
下一篇
Neo4j 匯入 API 資料 (JSON)
系列文
看圖說故事,讓 Neo4j 重新詮釋你的資料庫30

尚未有邦友留言

立即登入留言