Hi, 你这个例子中,捕获到B的变更CDC,若最终结果表支持部分字段更新,就直接更新结果表就行,都不需要关联, 只要你的B的CDC处理 晚于 A流的join处理就行 如果一定要全部关联的话,ttl又不可行,那你这个数据量会无限增大,后面就无法关联了的,设计肯定得改
在 2022-03-22 09:01:30,"JianWen Huang" <jianwen.huang....@gmail.com> 写道: >是的。其实我想到的也是将维度表和事实表都通过Cdc方式做成流,然后regular >join,实现这样的需求好像只能把双流数据都得存到状态里才可以实现,但是状态会不断增大且业务上不能接受数据不准确的结果,配ttl又不可行。所以来请教大家有没有碰到过这种场景。 > >casel.chen <casel_c...@126.com> 于2022年3月22日周二 08:43写道: >> >> 用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 <jianwen.huang....@gmail.com> 写道: >> >> >> >> 事实表流A需关联维度表B做数据打宽。需求是当纬度表B发生变化时,关联结果需全部发生变化更新到最新。 >> >> 例子: >> >> 变化前: >> >> A流: >> >> name gender >> >> a male >> >> b male >> >> c female >> >> >> >> 纬度表B: >> >> name age >> >> a 16 >> >> b 17 >> >> >> >> 结果: >> >> name gender age >> >> a male 16 >> >> b male 17 >> >> >> >> 发生变化后: >> >> 纬度表B: >> >> name age >> >> a 16->17 >> >> b 17->18 >> >> >> >> 结果: >> >> name gender age >> >> a male 17 >> >> b male 18 >> >> >> >> 目前我想到一个做法是将维度表做成流然后关联事实表,最后根据更新时间取top1最新sink到存储里。请问大家有别的更好做法吗