Re:Re: 维度表变化,关联结果全部更新在Flink SQL该如何实现

2022-03-22 文章 Michael Ran
可以考虑存储层 局部更新
在 2022-03-21 17:00:31,"zns" <865094...@qq.com.INVALID> 写道:
>Cdc join
>
>> 2022年3月21日 14:01,JianWen Huang  写道:
>> 
>> 事实表流A需关联维度表B做数据打宽。需求是当纬度表B发生变化时,关联结果需全部发生变化更新到最新。
>> 例子:
>> 变化前:
>> A流:
>> name  gender
>> a male
>> b male
>> c female
>> 
>> 纬度表B:
>> nameage
>> a   16
>> b17
>> 
>> 结果:
>> name   gender   age
>> a   male  16
>> b   male 17
>> 
>> 发生变化后:
>> 纬度表B:
>> nameage
>> a   16->17
>> b17->18
>> 
>> 结果:
>> name   gender   age
>> a   male  17
>> b   male  18
>> 
>> 目前我想到一个做法是将维度表做成流然后关联事实表,最后根据更新时间取top1最新sink到存储里。请问大家有别的更好做法吗


Re:Re: 维度表变化,关联结果全部更新在Flink SQL该如何实现

2022-03-21 文章 casel.chen
用cdc join也需要将事实表缓存下来才能实现吧,这就是普通的regular 
join,优点是双流驱动,缺点是需要缓存两边的数据,状态会变得很大,建议使用带ssd的rocksdb增量状态后端。
业务上如果可以接受超过一定时间范围不用关联的话,还可以设置state ttl 进一步使状态大小可控。

















在 2022-03-21 17:00:31,"zns" <865094...@qq.com.INVALID> 写道:
>Cdc join
>
>> 2022年3月21日 14:01,JianWen Huang  写道:
>> 
>> 事实表流A需关联维度表B做数据打宽。需求是当纬度表B发生变化时,关联结果需全部发生变化更新到最新。
>> 例子:
>> 变化前:
>> A流:
>> name  gender
>> a male
>> b male
>> c female
>> 
>> 纬度表B:
>> nameage
>> a   16
>> b17
>> 
>> 结果:
>> name   gender   age
>> a   male  16
>> b   male 17
>> 
>> 发生变化后:
>> 纬度表B:
>> nameage
>> a   16->17
>> b17->18
>> 
>> 结果:
>> name   gender   age
>> a   male  17
>> b   male  18
>> 
>> 目前我想到一个做法是将维度表做成流然后关联事实表,最后根据更新时间取top1最新sink到存储里。请问大家有别的更好做法吗