普通视图与物化视图

1) 普通视图

ClickHouse拥有普通和物化两种视图,其中物化视图拥有独⽴的存储,⽽普通视图只是⼀层简单的查询代理

CREATE VIEW [IF NOT EXISTS] [db_name.]view_name AS SELECT ...

普通视图不会存储任何数据,它只是⼀层单纯的SELECT查询映射,起着简化查询、明晰语义的作⽤,对查询性能不会有任何增强

create view test3_view as select id , upper(name) , role from tb_test3 ;
┌─name────────────┐
│ tb_test3 │
│ test3_view │
│ test_partition1 │
│ test_partition2 │
│ test_rep │
│ tt1 │
└─────────────────┘
drop view test3_view ; -- 删除视图

2) 物化视图

物化视图⽀持表引擎,数据保存形式由它的表引擎决定,创建物化视图的完整语法如下所示

create materialized view mv_log engine=Log populate as select * from log ;

物化视图创建好之后,如果源表被写⼊新数据,那么物化视图也会同步更新。POPULATE修饰符决定了物化视图的初始化策略:如果使⽤了POPULATE修饰符,那么在创建视图的过程中,会连带将源表中已存在的数据⼀并导⼊,如同执⾏了INTO SELECT ⼀般;反之,如果不使⽤POPULATE修饰符,那么物化视图在创建之后是没有数据的,它只会同步在此之后被写⼊源表的数据。物化视图⽬前并不⽀持同步删除,如果在源表中删除了数据,物化视图的数据仍会保留

create materialized view test3_view engine = Log populate as select * from
tb_test3 ;
-- 建表的时候同步数据 , 当数据更新以后 物化视图中的数据会同步更新 , 但是当删除数据以后,物化视
图中的数据不会被删除
SELECT *
FROM test3_view ;
┌─id─┬─name───┬─role─┐
│ 1 │ HANGGE │ VIP │
│ 2 │ BENGE │ VIP │
│ 3 │ PINGGE │ VIP │
└────┴────────┴──────┘
-- 向源表中擦混⼊数据
SELECT *
FROM test3_view
┌─id─┬─name──┬─role─┐
│ 4 │ TAOGE │ VIP │
└────┴───────┴──────┘
┌─id─┬─name───┬─role─┐
│ 1 │ HANGGE │ VIP │
│ 2 │ BENGE │ VIP │
│ 3 │ PINGGE │ VIP │
└────┴────────┴──────┘
-- 删除源表中的数据 , 物化视图中的数据 不会变化 ****
注意: 数据删除语法只适⽤于MergeTree引擎的表 基本语法如下
ALTER TABLE db_name.table_name DROP PARTITION '20210601'
ALTER TABLE db_name.table_name DELETE WHERE day = '20210618'
ALTER TABLE <table_name> UPDATE col1 = expr1, ... WHERE <filter>

猜你喜欢

转载自blog.csdn.net/qq_41081716/article/details/130030080