Neo4j 實戰(三)-- Neo4j Loads CSV Files


前言:

這篇文章通過 NorthWind Graph 的例子熟悉並掌握 neo4j 導入 CSV 文件。

 

一、環境配置

在導入之前確保  neo4j.conf  中允許 CSV 導入。

打開 neo4j.conf:  $ vim neo4j.conf  

修改 dbms.security.allow_csv_import_from_file_urls=true 

 

二、數據准備

注意:從本地導入 CSV 文件時,需要將文件放在 import 文件夾下!

 

三、數據導入(本地)

1. 導入 products.csv 

//load products.csv LOAD CSV WITH HEADERS FROM "file:///northwind/products.csv" AS row CREATE (n:Product) SET n = row, n.unitPrice = toFloat(row.unitPrice), n.unitsInStock = toInteger(row.unitsInStock), n.unitsOnOrder = toInteger(row.unitsOnOrder), n.reorderLevel = toInteger(row.reorderLevel), n.discontinued = (row.discontinued <> "0")

 

2.導入 categories.csv

//load categories.csv
LOAD CSV WITH HEADERS FROM "file:///northwind/categories.csv" AS row CREATE (n:Category) SET n = row

 

 3. 導入 suppliers.csv

//load suppliers.csv
LOAD CSV WITH HEADERS FROM "file:///northwind/suppliers.csv" AS row CREATE (n:Supplier) SET n = row

 

4. 為產品等實體創建索引

給三類實體分別創建索引,方便后期提高查詢效率。

//create indexes
CREATE INDEX ON :Product(productID) CREATE INDEX ON :Category(categoryID) CREATE INDEX ON :Supplier(supplierID)

 

5. 為產品等實體建立聯系

為這三類實體建立聯系,通過相同的 id 作為連接。

MATCH (p:Product),(c:Category) WHERE p.categoryID = c.categoryID CREATE (p)-[:PART_OF]->(c)

 商品和種類通過 categoryID 建立了聯系

 

MATCH (p:Product),(s:Supplier) WHERE p.supplierID = s.supplierID CREATE (s)-[:SUPPLIES]->(p)

 商品和供應商通過 supplierID 建立了聯系

 

6. 列出每個供應商提供的產品類別

MATCH (s:Supplier)-->(:Product)-->(c:Category) RETURN s.companyName as Company, collect(distinct c.categoryName) as Categories

 每個食品供應商提供的產品種類表

 

7. 查找提供海產品("Seafood")的供應商

MATCH (c:Category {categoryName:"Seafood"})<--(:Product)<--(s:Supplier) RETURN DISTINCT s.companyName as ProduceSuppliers

 

 8. 加載 customer.csv

LOAD CSV WITH HEADERS FROM "http://data.neo4j.com/northwind/orders.csv" AS row CREATE (n:Order) SET n = row

 

 9. 加載 order.csv

//load orders.csv
LOAD CSV WITH HEADERS FROM "file:///northwind/orders.csv" AS row CREATE (n:Order) SET n = row

 

10. 為訂單等實體創建索引

//create indexes for customer and order
CREATE INDEX ON :Customer(customerID) CREATE INDEX ON :Order(orderID)

 

11. 為訂單等實體創建關系

//create relationships
MATCH (c:Customer),(o:Order) WHERE c.customerID = o.customerID CREATE (c)-[:PURCHASED]->(o)

 

12. 加載 order-details.csv

//load order-details.csv LOAD CSV WITH HEADERS FROM "file:///northwind/order-details.csv" AS row MATCH (p:Product), (o:Order) WHERE p.productID = row.productID AND o.orderID = row.orderID CREATE (o)-[details:ORDERS]->(p) SET details = row, details.quantity = toInteger(row.quantity)

 

四、數據查詢

1. 列出訂購了海產品(Seafood)的客戶以及采購量

MATCH (cust:Customer)-[:PURCHASED]->(:Order)-[o:ORDERS]->(p:Product), (p)-[:PART_OF]->(c:Category {categoryName:"Seafood"}) RETURN DISTINCT cust.contactName as CustomerName, SUM(o.quantity) as TotalProductsPurchased

 

 2. 列出 "Thomas Hardy" 訂購的產品及種類

match (cust:Customer{contactName:"Thomas Hardy"})-[:PURCHASED]->(:Order)-[ORDERS]->(p:Product),  (p)-[:PART_OF]->(c:Category)   return p.productName as Product , c.categoryName as Category

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM