负载csv的查询即使在12小时后仍未完成

时间:2019-01-17 11:28:42

标签: csv neo4j cypher

我已经使用Neo4j已有一段时间了。我在7天前计算机崩溃之前就运行了此查询,现在又以某种方式无法运行它。我需要从银行交易的csv中创建一个图形数据库。原始数据集大约有500万行,大约有60列。

这是我使用的查询,从妮可·怀特(Nicole White)的“从真实数据导出CSV” demo开始:

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///Transactions_with_risk_scores.csv" AS line
WITH DISTINCT line, SPLIT(line.VALUE_DATE, "/") AS date
WHERE line.TRANSACTION_ID IS NOT NULL AND line.VALUE_DATE IS NOT NULL
MERGE (transaction:Transaction {id:line.TRANSACTION_ID})
SET transaction.base_currency_amount =toInteger(line.AMOUNT_IN_BASE_CURRENCY),
transaction.base_currency = line.BASE_CURRENCY,
transaction.cd_code = line.CREDIT_DEBIT_CODE,
transaction.txn_type_code = line.TRANSACTION_TYPE_CODE,
transaction.instrument = line.INSTRUMENT,
transaction.region= line.REGION,
transaction.scope = line.SCOPE,
transaction.COUNTRY_RISK_SCORE= line.COUNTRY_RISK_SCORE,
transaction.year = toInteger(date[2]),
transaction.month = toInteger(date[1]),
transaction.day = toInteger(date[0]);

我尝试过:

  1. 根据Micheal Hunger在有关“加载大型数据集”的帖子中的建议,在运行查询之前使用LIMIT 0。

  2. 每个语句使用单个MERGE(这是第一次合并,还有4个其他合并要使用),正如Michael在另一个post中再次建议的那样。

  3. 尝试使用apoc.periodic.iterate和apoc.cypher.parallel调用,但不适用于LOAD CSV(似乎仅适用于不使用LOAD CSV的MERGE和CREATE查询)。 我收到CALL apoc.periodic.iterate(“”)的以下错误: Neo.ClientError.Statement.SyntaxError:无效的输入'f':预期的空格,'。',节点标签,'[',“ =〜”,IN,STARTS,ENDS,CONTAINS,IS,'^','*' ,“ /”,“%”,“ +”,“-”,“ =”,“〜”,“ <>”,“!=“,“ <”,“>”,“ <=”,“> =“,AND,XOR,OR,','或')'(第2行,第29列(偏移量:57))

  4. 由于我的笔记本电脑具有16GB RAM,因此最大堆大小增加到16G。顺便说一句,发现我写这篇文章很困难,因为我现在尝试使用'PROFILE'再次运行,并且它已经运行了一个小时。

需要帮助来加载此500万行数据集的查询。任何帮助将不胜感激。谢谢!我正在PC上使用Neo4j 3.5.1。

1 个答案:

答案 0 :(得分:1)

  1. 最重要的:在键属性上创建索引/约束
  

创建约束(t:Transaction)ASSERT t.id是唯一的;

  1. 不要将最大堆大小设置为已满系统RAM。将其设置为 50%

  2. 尝试创建设置,而不是 SET

  3. 您也可以使用 apoc.periodic.iterate 加载数据,但是使用PERIODIC COMMIT 也可以。

  4. 重要的是,如果您正在使用PERIODIC COMMIT,并且查询未完成或内存不足,则可能是由于使用了Distinct。避免Distinct,因为重复的事务将由MERGE处理。

注意:(如果您使用 apoc.periodic.iterate 合并参数为 parallel = true 的节点/关系,则失败并显示NULL POINTER EXCEPTION。请小心使用)

Questioner编辑:删除“交易”节点第三行中的Distinct,然后重新运行查询即可!