【问题标题】:ClickHouse query row order behaviourClickHouse 查询行顺序行为
【发布时间】:2019-07-14 03:38:47
【问题描述】:

SQL 本质上是无序的。
ClickHouse 在这件事上的表现如何?我们可以期望相同的查询在随后的执行中以相同的顺序返回行吗?它是否取决于表引擎,例如ENGINE = Memory()?如果是这样,请详细说明可能影响订单的引擎情况。
如果无法保证订单结果,最便宜的方法是什么? ORDER BY 主键/排序键?

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    答案是否定的:除非您要求,否则 ClickHouse 不会以确定的顺序返回数据。

    更广泛地说,您不应该对 ClickHouse 结果集中的数据默认排序做出任何假设。 MergeTree 表引擎系列(它是大型数据集的主力引擎)将数据组织在“部分”中,并在它们之间并行运行查询,即使在单个节点上也是如此。默认情况下,它会在每个部分从查询处理中出现时返回结果。部分中的数据通常会按表中的排序顺序返回,但每个部分的结果可以按任何顺序返回。

    因此,如果您关心排序,则应该应用排序。最有效的排序是 CREATE TABLE ORDER BY 子句已经强制执行的顺序。如果您需要完全不同的订单,只需在查询中询问。如果它们变得很慢(如果您对相同的数据有非常不同的查询模式,可能会出现这种情况),您可以通过添加物化视图来优化结果,以便对特定查询的数据进行更好的排序。

    有关此主题的更多一般性问题,请查看 ClickHouse 文档,尤其是 https://clickhouse.yandex/docs/en/operations/table_engines/mergetree/。几天前,我还做了一个 ClickHouse 演讲,探讨了为什么结果集看起来像他们那样的确切问题。幻灯片在这里:https://www.slideshare.net/Altinity/dangerous-on-clickhouse-in-30-minutes-by-robert-hodges-altinity-ceo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2020-04-11
      相关资源
      最近更新 更多