首页 > 解决方案 > 从 CSV 文件导入关系

问题描述

我正在尝试从 CSV 文件导入数据,虽然我已经设法导入节点,但我不知道如何导入关系。

我有三个文件:Customer.csv、Orders_Test.csv 和 Order_history.csv。数据被捕获在不同的列和行中。Customer.csv 有两个标题,Customer_ID 和 Name,并包含以下数据:1 Jaap,2 Victoria。Orders_Test.csv 有一个标头 Order_ID,其中包含以下数据:1 2 3 4 5 6 7 8 9 10。Order_history.csv 有两个标头 Customer_ID 和 Order_ID,其中包含数据(同样在列中)1 1、1 2、 1 3, 1 4, 1 5, 2 6, 2 7, 2 8, 2 9, 2 10。换句话说,在这个文件中,我必须将每个客户链接到五个订单。

这是我用来加载/导入数据的代码:

LOAD CSV WITH HEADERS FROM 'file:///Customer.csv' AS row 
CREATE (c:Customer {CustomerID: toInteger (row.Customer_ID), name: 
row.Name})

LOAD CSV WITH HEADERS FROM 'file:///Orders_test.csv' AS row 
CREATE (o:Order {OrderID: toInteger (row.Order_ID)})

LOAD CSV WITH HEADERS FROM 'file:///Order_history.csv' AS row
MATCH (c:Customer {CustomerID: row.Customer_ID})
MATCH (o:Order {OrderID: row.Order_ID}) 
MERGE (c)-[:ORDERED]->(o)

导入有关客户和订单的数据不是问题,但是当我执行最后一个加载语句时没有任何反应。当我只有一个客户时,会创建关系,但当我有两个或更多时,则不会。知道我做错了什么吗?

标签: csvneo4jcypher

解决方案


您忘记添加toInteger函数,因此您必须输入 mismatch :

LOAD CSV WITH HEADERS FROM 'file:///Order_history.csv' AS row
MATCH (c:Customer {CustomerID: tointeger(row.Customer_ID)})
MATCH (o:Order {OrderID: toInteger(row.Order_ID)}) 
MERGE (c)-[:ORDERED]->(o)

推荐阅读