【问题标题】:Is there any way I an delete more than 20k mutation in Google Cloud Spanner?有什么方法可以删除 Google Cloud Spanner 中超过 20k 的突变?
【发布时间】:2020-06-20 11:00:40
【问题描述】:

我在 Spanner 表中有数百万条记录,我想使用一些查询条件从 Spanner 中删除行。例如:从 id > 2000 的扳手表中删除。由于单个操作中的 Spanner 20k 突变限制,我无法在 Spanner UI 中运行此查询。那么有什么方法可以通过对 api 级别代码进行一些调整来从 spanner 表中删除这条记录,或者我们是否有针对这种用例的解决方法。

【问题讨论】:

    标签: google-cloud-platform google-cloud-dataflow google-cloud-spanner


    【解决方案1】:

    根据官方文档Deleting rows in a table,我认为你应该考虑Particioned DML执行模型:

    如果你想删除大量数据,你应该使用 分区 DML,因为 Partitioned DML 处理事务限制 并针对处理大规模删除进行了优化

    分区 DML 支持大规模、数据库范围的操作 分区对并发事务处理的影响最小 键空间并在单独的分区上运行语句, 范围更小的事务。

    【讨论】:

    • 我正在执行分区 DML 以进行批量删除,但我遇到了限制,说我一次执行了太多突变
    • 文档中没有提到。但这是因为我正在删除一个带有交错表的表。在删除父表之前,我必须从交错表中删除行。
    【解决方案2】:

    您可以使用 gcloud 命令行:

    gcloud spanner databases execute-sql <database_id> --instance=<instance_id> --enable-partitioned-dml --sql="delete from YourTable where id > 2000"
    

    注意:SQL 查询必须完全是partitionable and idempotent

    【讨论】:

      猜你喜欢
      • 2020-07-03
      • 2020-06-10
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多