Clickhouse:runningAccumulate() 不像我预期的那样工作

Posted

技术标签:

【中文标题】Clickhouse:runningAccumulate() 不像我预期的那样工作【英文标题】:Clickhouse: runningAccumulate() does not work as I expect 【发布时间】:2021-01-29 10:47:33 【问题描述】:

说,我们有一张桌子testint

        SELECT *
    FROM testint
    
    ┌─f1─┬─f2─┐
    │  2 │  3 │
    │  2 │  3 │
    │  4 │  5 │
    │  4 │  5 │
    │  6 │  7 │
    │  6 │  7 │
    └────┴────┘

我们尝试用sumState()查询runningAccumulate()

    SELECT runningAccumulate(col)
    FROM 
    (
        SELECT sumState(f1) AS col
        FROM testint
        GROUP BY f1
    )
    
    ┌─runningAccumulate(col)─┐
    │                      8 │
    │                     12 │
    │                     24 │
    └────────────────────────┘

为什么响应中的第一行是8,而不是4?如果我们按 f1 分组,第一行似乎是 4(我们确实在 f1 列中将第一行 2 和第二行 2 相加)。

【问题讨论】:

【参考方案1】:

对于累积函数,元素的顺序很重要,因此只需添加 ORDER BY 即可解决:

SELECT runningAccumulate(col)
FROM 
(
    SELECT sumState(f1) AS col
    FROM testint
    GROUP BY f1
    ORDER BY f1 ASC /* <-- */
)

您得到了输入数据 [8, 4, 12] 的结果 [8, 12, 24] 什么时候应该使用有序输入 - [ 4, 8, 12].

【讨论】:

以上是关于Clickhouse:runningAccumulate() 不像我预期的那样工作的主要内容,如果未能解决你的问题,请参考以下文章

ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计

ClickHouse

clickhouse-S3

clickhouse安装与启动

clickhouse常见的一些问题

大数据 OLAP ClickHouse 引擎ClickHouse 系统架构和存储引擎实现原理 : 为什么 ClickHouse 这么快? Why is ClickHouse so fast?