使用Clickhouse的Order By确保结果绝对准确,却以牺牲性能为代价,有何优化建议?
- 内容介绍
- 文章标签
- 相关推荐
本文共计702个文字,预计阅读时间需要3分钟。
一些聚合函数的结果与流入数据的顺序有关,CH文档明确指出这类函数的结果是不确定的。这是为什么呢?让我们用+explain+pipeline+来探究真相。
以一个简单的查询为例:select any('');
一些聚合函数的结果跟流入数据的顺序有关,CH文档明确说明这样的函数的结果是不确定的。这是为什么呢?让我们用explain pipeline来一探究竟。
以一个很简单的查询为例:
select any( step ) from events group by request_id;
events表的定义如下:
CREATE TABLE default.events
(
`ID` UInt64,
`request_id` String,
`step_id` Int64,
`step` String
)
ENGINE = MergeTree
ORDER BY ID
该查询从events表里面读取数据步骤 step 和请求ID request_id ,按照request_id分组并取第一个step。
本文共计702个文字,预计阅读时间需要3分钟。
一些聚合函数的结果与流入数据的顺序有关,CH文档明确指出这类函数的结果是不确定的。这是为什么呢?让我们用+explain+pipeline+来探究真相。
以一个简单的查询为例:select any('');
一些聚合函数的结果跟流入数据的顺序有关,CH文档明确说明这样的函数的结果是不确定的。这是为什么呢?让我们用explain pipeline来一探究竟。
以一个很简单的查询为例:
select any( step ) from events group by request_id;
events表的定义如下:
CREATE TABLE default.events
(
`ID` UInt64,
`request_id` String,
`step_id` Int64,
`step` String
)
ENGINE = MergeTree
ORDER BY ID
该查询从events表里面读取数据步骤 step 和请求ID request_id ,按照request_id分组并取第一个step。

