使用版本阿里云clickhouse 21.8.2.1
创建一个物化视图
CREATE TABLE dwd.dwd_a
(
`id` Int32,
`a` DateTime,
`b` String
)
ENGINE = ReplacingMergeTree()
ORDER BY id
SETTINGS index_granularity = 8192;
CREATE TABLE dwd.dwd_b
(
`id` Int32,
`a` DateTime,
`c` String
)
ENGINE = ReplacingMergeTree()
ORDER BY id
SETTINGS index_granularity = 8192;
create MATERIALIZED view dwd.dwd_c
ENGINE = ReplacingMergeTree()
ORDER BY id
as select a.id,
a.a,
a.b,
b.c
from dwd.dwd_a as a
join dwd.dwd_b as b
当往dwd.dwd_a插入数据触发物化视图后,dwd.dwd_c中的结果,id,a列都是没有值的,或者是默认值。b和c列是正常的。
这应该是clickhouse这个版本的bug。参考 https://altinity.com/blog/2020-07-14-joins-in-clickhouse-materialized-views
当物化视图中join的两张表有列名相同是,需要使用as重新指定下列名。
create MATERIALIZED view dwd.dwd_c
ENGINE = ReplacingMergeTree()
ORDER BY id
as select a.id as id,
a.a as a,
a.b,
b.c
from dwd.dwd_a as a
join dwd.dwd_b as b
这样就能正常保存id列和a列了。