我正在使用以下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)
答案 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
该关系。