假设我有2个表A
和B
。我用两个表的MV
查询创建了一个join
(物化视图),像这样的伪表:
create materialized view a_b engine = Memory as
select * from(
select * from A
) all inner join (
select * from B
) using some_col;
我知道a_b
是only updated when inserting data到表A
中,当将数据推送到B
时没有其他事情发生。 我希望在更新两个表时都必须更新我的MV。
我的解决方法是创建另一个MV
来更改A
,B
的位置并指向a_b
,就像
create materialized view a_b_2 to a_b as
select * from(
select * from B
) all inner join (
select * from A
) using same_col;
我对此方法有疑问:
1.是否有more legal way
要在clickhouse
中存档相同的效果?
2.假设我有2个传入的批处理数据,BD_A
和BD_B
将同时插入到A
和B
中。他们自己(BD_A_B
)两批次的一些数据符合join
条件。 MV
失去了那些BD_A_B
的机会是因为MV a_b
使用先前插入的BD_A
和B
的过程{{1} },并插入MV a_b_2
。
答案 0 :(得分:0)
据我了解,您正在尝试一种限制的解决方法。
Clickhouse不支持MV的多个源表,它们有充分的理由。我实际上是问开发者的,并得到了this answer:
在ClickHouse实例化视图中,每次插入插入处理新块时,其行为都类似于INSERT TRIGGER之前。
这是很自然的限制,因为向2个不同表的插入将异步进行,并且您通常希望在JOINs中看到整个表不仅是新到达的块。