视图
clickhouse拥有普通和物化两种视图
- 物化视图拥有独立的存储
- 普通视图只是一层简单的查询代理
create table tb_insert(
id UInt8,
name String
)engine=Memory;
insert into tb_insert values(1,'cxy'),(2,'zyt'),(3,'hx'),(4,'wyy');
select * from tb_insert;
┌─id─┬─name─┐
│ 1 │ cxy │
│ 2 │ zyt │
│ 3 │ hx │
│ 4 │ wyy │
└────┴──────┘
create view insert_view as
select id,upper(name) from tb_insert; //创建普通视图
select * from insert_view;
┌─id─┬─upper(name)─┐
│ 1 │ CXY │
│ 2 │ ZYT │
│ 3 │ HX │
│ 4 │ WYY │
└────┴─────────────┘
show tables;
┌─name─────────┐
│ insert_view │
│ tb_array │
│ tb_date │
│ tb_insert │
└──────────────┘
drop view insert_view; //删除视图
普通视图不会存储任何数据,它只是一层单纯的select查询映射,起着简化查询,明晰语义的作用,对查询性能不会有任何增强。
create materialized view view_mater engine=Log populate as select * from tb_insert; //创建物化视图
- 物化视图创建好后,如果原表被写入新数据,那么物化视图也会同步更新
- populate关键字在创建视图的过程中,会连带将原表中已存在的数据一并导入
- 物化视图目前并不支持同步删除,如果原表中删除了数据,物化视图的数据仍会保留
select * from view_mater;
┌─id─┬─name─┐
│ 1 │ cxy │
│ 2 │ zyt │
│ 3 │ hx │
│ 4 │ wyy │
└────┴──────┘
insert into tb_insert values(5,'zss'),(6,'zj');
select * from view_mater;
┌─id─┬─name─┐
│ 5 │ zss │
│ 6 │ zj │
└────┴──────┘
┌─id─┬─name─┐
│ 1 │ cxy │
│ 2 │ zyt │
│ 3 │ hx │
│ 4 │ wyy │
└────┴──────┘