使用join语句更新实例化视图

时间:2018-07-08 15:28:34

标签: clickhouse

假设我有2个表AB。我用两个表的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_bonly updated when inserting data到表A中,当将数据推送到B时没有其他事情发生。 我希望在更新两个表时都必须更新我的MV。

我的解决方法是创建另一个MV来更改AB的位置并指向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_ABD_B将同时插入到AB中。他们自己(BD_A_B)两批次的一些数据符合join条件。 MV失去了那些BD_A_B的机会是因为MV a_b使用先前插入的BD_AB的过程{{1} },并插入MV a_b_2

1 个答案:

答案 0 :(得分:0)

据我了解,您正在尝试一种限制的解决方法。

Clickhouse不支持MV的多个源表,它们有充分的理由。我实际上是问开发者的,并得到了this answer

  

在ClickHouse实例化视图中,每次插入插入处理新块时,其行为都类似于INSERT TRIGGER之前。

     

这是很自然的限制,因为向2个不同表的插入将异步进行,并且您通常希望在JOINs中看到整个表不仅是新到达的块。