大睿,DBA,爱好减肥,瘦了30多斤,负责公司数据库集群的管理和维护。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
物化视图使用to
的方式写入到存储表中,即如下:
CREATE MATERIALIZED VIEW
[IF NOT EXISTS]
[db.]table_name
[ON CLUSTER] TO
[db.]nameAS
SELECT ...
范例
1s记录的明细表
CREATE TABLE dba_test.t_1s
(
`ctime` DateTime64(0),
`pv` Int64
)
ENGINE = MergeTree
PARTITION BY toDate(ctime)
ORDER BY ctime
SETTINGS index_granularity = 8192
1min 记录的聚合数据
CREATE TABLE dba_test.t_1m
(
`ctime` DateTime64(0),
`pv` Int64
)
ENGINE = SummingMergeTree
PARTITION BY toDate(ctime)
ORDER BY ctime
SETTINGS index_granularity = 8192
物化视图
CREATE MATERIALIZED VIEW dba_test.t_1m_mv TO dba_test.t_1m
(
`toStartOfMinute(ctime)` DateTime,
`pv` Int64
) AS
SELECT
toStartOfMinute(ctime),
sum(pv) AS pv
FROM dba_test.t_1s
GROUP BY ctime
写入测试
dba-clickhouse-001 :) insert into t_1s values('2022-01-01 00:10:01',1),('2022-01-01 00:10:01',1),('2022-01-01 00:20:01',2),('2022-01-01 00:20:01',2),('2022-01-01 00:30:01',3);
INSERT INTO t_1s VALUES
Query id: 0bf16844-0123-4e25-a3d4-f9b5a5c8db37
Ok.
5 rows in set. Elapsed: 0.003 sec.
dba-clickhouse-001 :) select * from t_1s;
SELECT *
FROM t_1s
Query id: cb442100-37a6-4de7-b6f3-f80f084710dc
┌───────────────ctime─┬─pv─┐
│ 2022-01-01 00:10:01 │ 1 │
│ 2022-01-01 00:10:01 │ 1 │
│ 2022-01-01 00:20:01 │ 2 │
│ 2022-01-01 00:20:01 │ 2 │
│ 2022-01-01 00:30:01 │ 3 │
└─────────────────────┴────┘
5 rows in set. Elapsed: 0.002 sec.
dba-clickhouse-001 :) select * from t_1m;
SELECT *
FROM t_1m
Query id: f9d2d05d-8ad7-44a4-b66a-ea8c3c758f1f
┌───────────────ctime─┬─pv─┐
│ 1970-01-01 08:00:00 │ 9 │
└─────────────────────┴────┘
1 rows in set. Elapsed: 0.002 sec.
插入的时间竟然是1970-01-01 08:00:00
开始验证是否是查询语句有误
dba-clickhouse-001 :) SELECT
:-] toStartOfMinute(ctime),
:-] sum(pv) AS pv
:-] FROM dba_test.t_1s
:-] GROUP BY ctime;
SELECT
toStartOfMinute(ctime),
sum(pv) AS pv
FROM dba_test.t_1s
GROUP BY ctime
Query id: 1ecaf07e-c766-40b7-bfa2-0f87ee54abad
┌─toStartOfMinute(ctime)─┬─pv─┐
│ 2022-01-01 00:20:00 │ 4 │
│ 2022-01-01 00:30:00 │ 3 │
│ 2022-01-01 00:10:00 │ 2 │
└────────────────────────┴────┘
3 rows in set. Elapsed: 0.002 sec.
查询结果符合预期
直接通过insert ...select...
方式确认下插入数据是否符合预期
dba-clickhouse-001 :) insert into t_1m SELECT
:-] toStartOfMinute(ctime),
:-] sum(pv) AS pv
:-] FROM dba_test.t_1s
:-] GROUP BY ctime;
INSERT INTO t_1m SELECT
toStartOfMinute(ctime),
sum(pv) AS pv
FROM dba_test.t_1s
GROUP BY ctime
Query id: 5db8279a-ffb1-4174-843c-80cee48b448c
Ok.
0 rows in set. Elapsed: 0.002 sec.
dba-clickhouse-001 :) select * from t_1m;
SELECT *
FROM t_1m
Query id: acd79ea7-dc82-49f1-bb71-430a05895f19
┌───────────────ctime─┬─pv─┐
│ 1970-01-01 08:00:00 │ 9 │
└─────────────────────┴────┘
┌───────────────ctime─┬─pv─┐
│ 2022-01-01 00:10:00 │ 2 │
│ 2022-01-01 00:20:00 │ 4 │
│ 2022-01-01 00:30:00 │ 3 │
└─────────────────────┴────┘
4 rows in set. Elapsed: 0.002 sec.
直接插入,数据正确,时间没有被转化。
验证
dba-clickhouse-001 :) insert into t_1m values('',100);
INSERT INTO t_1m VALUES
Query id: af1785ef-dca1-467b-84c6-27f9da6547f6
Ok.
1 rows in set. Elapsed: 0.002 sec.
dba-clickhouse-001 :) select * from t_1m;
SELECT *
FROM t_1m
Query id: 34db2057-7274-4859-898e-6132f8df4465
┌───────────────ctime─┬─pv─┐
│ 1970-01-01 08:00:00 │ 9 │
└─────────────────────┴────┘
┌───────────────ctime─┬─pv─┐
│ 2022-01-01 00:10:00 │ 2 │
│ 2022-01-01 00:20:00 │ 4 │
│ 2022-01-01 00:30:00 │ 3 │
└─────────────────────┴────┘
┌───────────────ctime─┬──pv─┐
│ 1970-01-01 08:00:00 │ 100 │
└─────────────────────┴─────┘
5 rows in set. Elapsed: 0.002 sec.
对比下物化视图和目标的聚合表的结构
dba-clickhouse-001 :) desc t_1m;
DESCRIBE TABLE t_1m
Query id: 96c6a5ca-e42a-47e1-8212-cbcfefa6ffa4
┌─name──┬─type──────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ ctime │ DateTime64(0) │ │ │ │ │ │
│ pv │ Int64 │ │ │ │ │ │
└───────┴───────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
2 rows in set. Elapsed: 0.001 sec.
dba-clickhouse-001 :) desc t_1m_mv;
DESCRIBE TABLE t_1m_mv
Query id: a258f6b5-f195-4386-a9bb-4ec86e7e9bd1
┌─name───────────────────┬─type─────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ toStartOfMinute(ctime) │ DateTime │ │ │ │ │ │
│ pv │ Int64 │ │ │ │ │ │
└────────────────────────┴──────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
2 rows in set. Elapsed: 0.001 sec.
重新调整物化视图的写法,并清理t_1m表中的数据
dba-clickhouse-001 :) show create table t_1m_mv\G
statement: CREATE MATERIALIZED VIEW dba_test.t_1m_mv TO dba_test.t_1m
(
`ctime` DateTime,
`pv` Int64
) AS
SELECT
toStartOfTenMinutes(ctime) AS ctime,
sum(pv) AS pv
FROM dba_test.t_1s
GROUP BY ctime
dba-clickhouse-001 :) insert into t_1s values('2022-01-01 00:10:01',1),('2022-01-01 00:10:01',1),('2022-01-01 00:20:01',2),('2022-01-01 00:20:01',2),('2022-01-01 00:30:01',3);
INSERT INTO t_1s VALUES
Query id: 812d1bbd-55f3-4a8f-b9f7-bbbe93e694af
Ok.
5 rows in set. Elapsed: 0.003 sec.
dba-clickhouse-001 :) select * from t_1m;
SELECT *
FROM t_1m
Query id: 2d1a045a-4e53-4f94-bb6a-fe5e5d58f5c7
┌───────────────ctime─┬─pv─┐
│ 2022-01-01 00:10:00 │ 2 │
│ 2022-01-01 00:20:00 │ 4 │
│ 2022-01-01 00:30:00 │ 3 │
└─────────────────────┴────┘
3 rows in set. Elapsed: 0.002 sec.
结论
物化视图的字段(t_1m_mv)要与目标表(t_1m)的字段名对齐
(表达不是很严谨,大概是上面的意思)
本文关键字:#clickhouse# #物化视图#
技术分享 | 国产麒麟 arm 上编译安装 xtrabackup8
爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。
| 类型 | 地址 |
|---|---|
| 版本库 | https://github.com/actiontech/sqle |
| 文档 | https://actiontech.github.io/sqle-docs-cn/ |
| 发布信息 | https://github.com/actiontech/sqle/releases |
| 数据审核插件开发文档 | https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/auditplugin_development.html |
更多关于 SQLE 的信息和交流,请加入官方QQ交流群:637150065...

文章转载自爱可生开源社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




