聚合物化视图
Aggregated Materialized View
我正在构建一个 KPI 查看器,我必须在其中显示 5-6 年期间的某些聚合值。由于我是 CH 的新手,我非常依赖阅读文档,但有时找不到示例。
CREATE TABLE test1.table1
(
seriesId Int32,
amount Int64,
txt varchar(100)
) ENGINE = MergeTree()
order by (seriesId)
;
现在的目标是获得一个物化视图
- 系列中所有金额的总和
- 系列中所有金额的计数(不同)
- 分钟(量)
- 最大(数量)
我已经想出如何使用 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
- 考虑使用uniqCombined instead of uniqExact优化内存消耗
我正在构建一个 KPI 查看器,我必须在其中显示 5-6 年期间的某些聚合值。由于我是 CH 的新手,我非常依赖阅读文档,但有时找不到示例。
CREATE TABLE test1.table1
(
seriesId Int32,
amount Int64,
txt varchar(100)
) ENGINE = MergeTree()
order by (seriesId)
;
现在的目标是获得一个物化视图
- 系列中所有金额的总和
- 系列中所有金额的计数(不同)
- 分钟(量)
- 最大(数量)
我已经想出如何使用 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
- 考虑使用uniqCombined instead of uniqExact优化内存消耗