clickhouse基础语法

物化视图

物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。

参考博客

参考知乎的博客

1
2
3
4
5
6
7

     
create  materialized view v_xxoo engine = Log 
 populate as  
select * from cmdb_idc; 
     
     
  • populate关键字 : 直接把原始表的数据同步过来

不用 populate 的 话,视图表是没有数据的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
-- 物化视图的问题,删除 表中的数据,视图数据不会删除


create  materialized  view IF NOT EXISTS v_year_summary
  engine = MergeTree()
  order by (y,m,d)
  populate


as select YMD.1 as y, YMD.2 as m , YMD.3 as d from v_year_summary0;

触发物化视图去重

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19

create
materialized  view IF NOT EXISTS v_year_summary
  engine = ReplacingMergeTree()
  order by (y,m)
  populate

as (
select ymd.1 as y ,ymd.2 as m , ymd.3 as d from (

    select  argMax( tuple(t.y,t.m,t.d) ,tuple(t.m,t.d)) as ymd  from    (
        select db_archive_year y ,db_archive_month m ,db_archive_day d from `_db_archive_from_mysql_log` tb where tb.db_exec_status = 1) t
        group by t.y

 )

)

OPTIMIZE TABLE  v_year_summary  final;