【问题标题】:What could prevent me from deleting data from a clickhouse database?什么会阻止我从 clickhouse 数据库中删除数据?
【发布时间】:2021-12-28 18:06:56
【问题描述】:

我想删除 clickhouse 数据库中包含的数据子集,而不是截断整个数据库。我知道依赖于 in this SO answerin this SO comment 描述的突变的语法。

例如从表 mytable 中删除与 myid 42 关联的数据:

ALTER TABLE mytable DELETE WHERE myid = 42

这在 Clickhouse 20.11.2.1 下 Linux VM (Ubuntu 18.04.5) 上托管的数据库上按预期工作。

但是,此命令不会从 Clickhouse 21.2.5.5 下托管在 Azure(也是 Ubuntu 18.04.5)上的不同 Linux VM 上托管的数据库中删除数据。

无论删除是否成功,clickhouse 都不会返回任何错误信息,只是 Query id 后跟 Ok

什么可能导致此问题? 如何解决?

【问题讨论】:

  • 21.2 不支持。
  • 如果突变根本不起作用,可能是您配置了后台轮询,其中有 0 个线程可用于突变
  • 取决于引擎。复制和非复制的不同问题。
  • 感谢您的 cmets 丹尼。您知道此问题是否已在最新版本的 Clickhouse 中得到解决?

标签: database clickhouse alter


【解决方案1】:

ALTER TABLE ... DELETE 是一个突变。在 Clickhouse,默认情况下突变是异步的。因此,您的数据将被一些后台进程(而不是原子地)删除。也许你应该等待。

其他选项是使用 mutations_sync 设置:https://clickhouse.com/docs/en/operations/settings/settings/#mutations_sync。这样,您的请求就会挂起,直到数据被删除(或直到 request_timeout)

【讨论】:

  • 感谢您的回复安德鲁。我不确定等待是否能解决问题。确实,我正在使用的其中一个表很大(约 8M 行),但我在使用较小的表(约 44K 行)时遇到了类似的问题,我希望该过程能够快速运行。还是处理时间与表格大小无关?
  • 当然这可能取决于表的大小。此外,它可能取决于您要删除多少行。从技术上讲,ALTER DELETE(在最坏的情况下)是通过重写所有数据(要删除的行除外)来执行的。因此,删除一行可能非常糟糕。此外,不建议经常使用DELETES,仅在极少数情况下使用。
  • “从技术上讲,ALTER DELETE(在最坏的情况下)是通过重写所有数据来执行的”。感谢这个有用的评论:我不知道ALTER 是这样工作的! mutations_sync 似乎也不是删除少量行的一种非常有效的方法,但至少它可以允许监视重写何时完成。
  • 您也可以在system.mutations表中查看进度。 SELECT * from system.mutations where not is_done 会告诉你所有未完成的突变
【解决方案2】:

Andrei Koch 提出的答案是正确的,因为突变需要一些时间。

但是,我的问题与要更改的表格大小有关。

max_table_size_to_drop 是设置为 50Gb 的 Clickhouse 服务器配置参数。我试图更改的表大于此默认阈值(56Gb),从而阻止删除正常工作。更改服务器设置可解决此问题。

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2021-10-20
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多