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
Unity打包WebGL是将Unity项目转换为WebGL应用程序的过程。通过这种方式,您可以在Web浏览器中运行和展示Unity项目。要打包WebGL项目,您可以按照以下步骤进行操作: 1. 调整分辨率和演示方式(Resolution and Presentation)。您可以在Unity中设置项目的分辨率和展示方式,以确保在Web浏览器中适当显示。 2. 解决输入框不能输入中文的问题。您可以使用一个插件来解决Unity打包WebGL后输入框无法输入中文的问题。该插件中包含一个WebGlInput脚本,您只需将其挂载到输入框上,并且需要替换输入框上的字体。 3. 将打包出来的WebGL项目放置到相应的路径。在完成WebGL项目的打包后,您需要将生成的文件(包括index.html等)放置到Web服务器的对应路径下。 通过按照以上步骤进行操作,您就可以成功地打包Unity项目为WebGL应用程序,并在Web浏览器中展示它了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [如何将Unity的WebGl项目打包发布](https://blog.csdn.net/yilvyangguang520/article/details/116134335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [WebGLSupport解决unity打包webgl输入框不能输入中文插件](https://download.csdn.net/download/qq_42603590/85524015)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [unity打包webgl 部署到本地Web服务器](https://blog.csdn.net/qq_37524903/article/details/126155477)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值