聚合物化视图

Aggregated Materialized View

我正在构建一个 KPI 查看器,我必须在其中显示 5-6 年期间的某些聚合值。由于我是 CH 的新手,我非常依赖阅读文档,但有时找不到示例。

CREATE TABLE test1.table1
(
    seriesId Int32,
    amount Int64, 
    txt varchar(100)
) ENGINE = MergeTree()
order by (seriesId)
;

现在的目标是获得一个物化视图

  1. 系列中所有金额的总和
  2. 系列中所有金额的计数(不同)
  3. 分钟(量)
  4. 最大(数量)

我已经想出如何使用 SummingMergeTree 来解决 SUM 和计数部分(如果我只为这 2 个聚合值创建一个单独的视图),但我无法计算出最小值和最大值。我得到的每个解决方案在视图上都有重复项。对于 SummingMergeTree,也可能存在重复项 但它们最终会合并 但是对于 aggregatingMergeTree,我似乎无法将它们合并。

原始 table 大约有。 40 亿行

我的尝试就是那样做

CREATE MATERIALIZED VIEW test1.MV1
ENGINE=AggregatingMergeTree() 
ORDER BY seriesId
POPULATE
AS 
SELECT  
    seriesId ,
    sum(amount) as amt ,
    min(amount) as minAmt,
    max(amount) as maxAmt
from test1.table1 t 
group by seriesId 

现在这并没有像我希望的那样起作用。

试试这个:

CREATE MATERIALIZED VIEW test1.MV1
(
  seriesId Int32,
  sumAmt SimpleAggregateFunction(sum, Int64),
  minAmt SimpleAggregateFunction(min, Int64),
  maxAmt SimpleAggregateFunction(max, Int64),
  uniqAmt AggregateFunction(uniqExact, Int64)
)
ENGINE=AggregatingMergeTree() 
ORDER BY seriesId 
AS 
SELECT  
    seriesId ,
    sum(amount) sumAmt,
    min(amount) minAmt,
    max(amount) maxAmt,
    uniqExactState(amount) uniqAmt
from test1.table1 t 
group by seriesId 
select seriesId, sum(sumAmt), min(minAmt), max(maxAmt), uniqExactMerge(uniqAmt)
from test1.MV1
/* where seriesId = ..  */
group by seriesId