1. 问题
状态对flink计算至关重要, 评估状态保留时间就非常重要。
短了,丢状态,计算不准。 长了,状态大,影响性能。
2. sum group by
select key ,count(*) from table group by key .
评估: 相同的key ,多久之后绝对不会重复重现。
状态丢失的后果: 丢失以前汇总的值,从头计算。
优化:加一个时间, 评估数据延迟程度
select key ,dt ,count(*) from table group by key , dt
只要状态保留时间大于 一天+最大延迟时间就不会有问题。
3. 根据处理时间去重去第一条
select * from (
select *,
row_number() over (partition by key order by proc_time asc) rn
) t where rn=1
效果: 第一个key出现后, 后面出现的相同的key都会被过滤掉
评估: 第一个key出现后, 相同的key多久以后绝对不会再出现
状态丢失的后果: 过滤不准确, 想通的key会有多条记录。
写这个好无聊,先挂着吧