clickhouse里物化视图如何跟随源表更新数据

创建两个源表,只有两个字段,通过id关联:

以前在使用oracle等数据库的物化视图,只要源数据表有更新,视图就能跟随更新。但使用了Clickhouse的物化视图后,有多表关联时,官方文档上就没有标明如何触发物化视图的更新了。本文就是要解决这个问题。
*
创建两个源表,只有两个字段,通过id关联:*

CREATE TABLE default.test0 (
`id` String,
 `name` String
) ENGINE = MergeTree PARTITION BY id ORDER BY id SETTINGS index_granularity = 8192

CREATE TABLE default.test00 (
`id` String,
 `name2` String
) ENGINE = MergeTree PARTITION BY id ORDER BY id SETTINGS index_granularity = 8192
insert into `default`.test0 values ('1','name1')

insert into `default`.test00 values ('1','name10')

select t0.id,name,name2 from `default`.test0 t0 join `default`.test00 t00 on t0.id=t00.id

当前用于建视图的as select语句是有结果的:

idnamename2
1name1name10
创建视图:
create  MATERIALIZED VIEW default.test_view  ENGINE = MergeTree PARTITION BY id ORDER BY id SETTINGS index_granularity = 8192
AS select t0.id,name,name2 from `default`.test0 t0 join `default`.test00 t00 on t0.id=t00.id

select * from default.test_view 
idnamename2

–插数据再查

insert into `default`.test0 values ('2','name2')

insert into `default`.test00 values ('2','name20')

select * from default.test_view 

新增数据没有同步到物化视图:

idnamename2

只针对单表创建一个物化视图,不使用join:

create  MATERIALIZED VIEW default.test_view0  ENGINE = MergeTree PARTITION BY id ORDER BY id SETTINGS index_granularity = 8192
AS select  id,name FROM `default`.test0 

select * from default.test_view

insert into `default`.test0 values ('5','name5')

select * from default.test_view0

结果物化视图数据同步了:

idname
5name5

那么,基于单表建的物化视图与带关联的物化视图有何区别?这里是问题关键所在。

后来,在clickhouse上提问,得到了回复:

Materialiezed view 将在最左边的表插入后更新。

下面进行最左原则测试:
视图的查询语句是:

AS select t0.id,name,name2 from 
`default`.test0 t0
	 join 
	 	`default`.test00 t00 on t0.id=t00.id

按从右表到左表插入数据:

insert into `default`.test00 values ('1','name10')
insert into `default`.test0 values ('1','name1')

查询一下物化视图:

select * from default.test_view

新插入数据进入视图了:

idnamename2
1name1name10

然后换顺序插一次:

insert into `default`.test0 values ('2','name2')
insert into `default`.test00 values ('2','name20')

再查询一下物化视图:

select * from default.test_view

新插到源表的数据没有进入视图:

idnamename2
1name1name10
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值