【问题标题】:Mass delete empty properties in a Neo4j database批量删除 Neo4j 数据库中的空属性
【发布时间】:2022-12-09 09:36:53
【问题描述】:

我有一个具有 100M 个节点的 Neo4j 数据库。许多这些节点包含空属性,我想删除这些属性。

我尝试了以下查询:

:auto MATCH (n)
WITH n
call { with n
UNWIND keys(n) as k
WITH n, k 
WHERE n[k] = ''
WITH n, collect(k) as propertyKeys
CALL apoc.create.removeProperties(n, propertyKeys)
YIELD node
RETURN node
} in transactions of 50000 rows;

我收到以下错误消息:

查询不能以 CALL 结尾(必须是 RETURN 子句、更新子句、单元子查询调用或没有 YIELD 的过程调用)(第 3 行,第 1 列(偏移量:19)) “用 n 调用 {” ^

有人可以告诉我我做错了什么以及如何解决吗?

谢谢你的帮助 !

【问题讨论】:

    标签: neo4j neo4j-apoc


    【解决方案1】:

    我为您的查询提出了一个反解决方案。下面是使用 apoc iterate 函数,它将提取具有空属性的数据并并行执行批量(50k)删除属性。

    CALL apoc.periodic.iterate(
      "MATCH (n) UNWIND keys(n) as k WITH n, k WHERE n[k] = '' RETURN n, k",
      "WITH n, collect(k) as propertyKeys
       CALL apoc.create.removeProperties(n, propertyKeys) YIELD node
       RETURN node",
      {batchSize:50000, parallel:true})
    

    为了解释您收到的错误,子查询调用不能使用另一个需要 yield 函数的调用。最后的错误信息中提到了

    quote: 查询不能以 CALL 与另一个过程调用结束 屈服

    【讨论】:

      猜你喜欢
      • 2023-01-30
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 2013-04-22
      相关资源
      最近更新 更多