创建明细与聚合表:
```
CREATE TABLE events (
ts DateTime,
uid UInt64,
category LowCardinality(String)
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(ts)
ORDER BY (ts, uid);
CREATE TABLE events_agg (
month Date,
category LowCardinality(String),
cnt AggregateFunction(count)
) ENGINE = AggregatingMergeTree()
PARTITION BY month
ORDER BY (month, category);
```
创建物化视图做预聚合:
```
CREATE MATERIALIZED VIEW mv_events_agg
TO events_agg AS
SELECT toStartOfMonth(ts) AS month, category, countState() AS cnt
FROM events
GROUP BY month, category;
```
查询聚合结果:
```
SELECT month, category, finalizeAggregation(cnt) AS total
FROM events_agg
ORDER BY month DESC, category
LIMIT 10;
```

发表评论 取消回复