clickhouse 视图和物化视图

视图

视图只是封装的一层简单的查询代理

物化视图

1)物化视图拥有独立的存储
2)实时同步

写入ck为明细数据

1)创建订单明细表
-- 1、创建明细表
drop table tb_orders_detail_base;
create table tb_orders_detail_base
(
    uid   UInt32,
    money UInt64,
    ctime Date
) engine = MergeTree()
      partition by ctime
      order by uid;

-- 2、往明细表中插入数据
insert into tb_orders_detail_base
values (1, 100, toDate(now()));
insert into tb_orders_detail_base
values (1, 100, toDate(now()));
insert into tb_orders_detail_base
values (2, 200, toDate(now()));
insert into tb_orders_detail_base
values (2, 200, toDate(now()));

optimize table tb_orders_detail_base final;

select *
from tb_orders_detail_base;

在这里插入图片描述

2)创建物化视图(引擎指定为聚合引擎),并向物化视图中同步数据

-- 3、创建物化视图,并向物化视图中同步数据
drop table tb_orders_detail_view;
create materialized view tb_orders_detail_view
            engine = AggregatingMergeTree()
                partition by ctime
                order by uid
            populate
as
select uid,
       ctime,
       sumState(money) as sum_money
from tb_orders_detail_base
group by uid, ctime;


-- 4、查询物化视图
select uid,
       ctime,
       sumMerge(sum_money) as sum_money
from tb_orders_detail_view
group by uid, ctime;

在这里插入图片描述

3)查看同步聚合效果
-- 5、向明细表中插入明细数据
insert into tb_orders_detail_base
values (2, 200, toDate(now()));


-- 6、查询物化视图
select uid,
       ctime,
       sumMerge(sum_money) as sum_money
from tb_orders_detail_view
group by uid, ctime;

在这里插入图片描述

写入ck为聚合数据

-- 1、创建订单宽表
drop table if exists tb_orders_base;
create table tb_orders_base
(
    uid          UInt32,
    total_amount UInt64,
    dt           Date,
    ctime        Datetime
) engine = MergeTree()
      partition by toDate(dt)
      order by uid;

-- 2、往订单宽表中插入聚合数据
insert into tb_orders_base
values (1, 100, toDate(now()), now());
insert into tb_orders_base
values (1, 200, toDate(now()), dateAdd(now(), INTERVAL 10 SECOND));
insert into tb_orders_base
values (2, 400, toDate(now()), dateAdd(now(), INTERVAL 10 SECOND));
insert into tb_orders_base
values (2, 200, toDate(now()), now());

optimize table tb_orders_base final;

select *
from tb_orders_base;

在这里插入图片描述

-- 3、创建物化视图,并向物化视图中同步数据
drop table if exists tb_orders_view;
create materialized view tb_orders_view
            engine = AggregatingMergeTree()
                partition by toDate(dt)
                order by uid
            populate
as
select uid,
       dt,
       argMaxState(total_amount, ctime) as total_amount
from tb_orders_base
group by uid, dt;


show create table tb_orders_view;

-- 4、查询物化视图
select uid,
       dt,
       argMaxMerge(total_amount) as flinal_total_amount
from tb_orders_view
group by uid, dt;

在这里插入图片描述

-- 5、向订单宽表中插入聚合数据
insert into tb_orders_base
values (2, 801, toDate(now()),dateAdd(now(), INTERVAL 10 SECOND));


-- 6、查询物化视图
select uid,
       dt,
       argMaxMerge(total_amount) as flinal_total_amount
from tb_orders_view
group by uid, dt;

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值