Neo4J加载CSV并创建关系并不导入所有数据

时间:2016-06-23 09:28:42

标签: csv neo4j cypher

我正在使用以下CSV加载Cypher语句来导入大约3.5米记录的csv文件。但它只进口了大约320万。因此,大约有300000条记录未导入。

value_array[matching] == needed_value

请注意,Stop节点已在单独的import语句中创建。

当我只创建节点而没有创建关系时,它能够导入所有数据。这个相同的import语句适用于较小的相同格式的csv数据集。

我试了两次只是为了确保它不会意外终止。

Neo4J中有关系限制的节点吗?或者可能是其他原因?

USING PERIODIC COMMIT 1000 LOAD CSV WITH HEADERS FROM ("file:///path/to/csvfile.csv") as line CREATE (ticket:Ticket {id: line.transaction_hash, from_stop: toInt(line.from_stop), to_stop: toInt(line.to_stop), ride_id: toInt(line.ride_id), price: toFloat(line.price)}) MATCH (from_stop:Stop)-[r:RELATES]->(to_stop:Stop) WHERE toInt(line.route_id) in r.routes CREATE (from_stop)-[:CONNECTS {ticket_id: ID(ticket)}]->(to_stop)

1 个答案:

答案 0 :(得分:1)

这可能是因为只要select * from sa_tran_head WHERE TRUNC(TRAN_DATETIME) BETWEEN NVL(:STARTDATE, TRUNC(TRAN_DATETIME)) AND NVL(:ENDDATE, TRUNC(TRAN_DATETIME)); 某行不成功,该行的整个查询(包括第一个MATCH)也会失败。

另一方面,CREATE的失败不会中止整行的查询。试试这个:

OPTIONAL MATCH

USING PERIODIC COMMIT 1000 LOAD CSV WITH HEADERS FROM ("file:///path/to/csvfile.csv") as line CREATE (ticket:Ticket {id: line.transaction_hash, from_stop: toInt(line.from_stop), to_stop: toInt(line.to_stop), ride_id: toInt(line.ride_id), price: toFloat(line.price)}) OPTIONAL MATCH (from:Stop)-[r:RELATES]->(to:Stop) WHERE toInt(line.route_id) in r.routes FOREACH(x IN CASE WHEN from IS NULL THEN NULL ELSE [1] END | CREATE (from)-[:CONNECTS {ticket_id: ID(ticket)}]->(to) ); 子句使用一种稍微迂回的技术,如果FOREACH成功获得一条线,则仅CREATE该关系。