Flink SQL中TopN和去重算子的SQL写法

本文比较了FlinkSQL中TopN算子和去重算子Deduplication的SQL写法,指出两者在orderby条件下的区别,着重强调了Deduplication的优化性能以及在特定场景(如时间窗口计算)下的追加流与回撤流选择。
摘要由CSDN通过智能技术生成

TopN算子和去重算子 Deduplication 的sql写法比较相近,从下图中的蓝色部分可以看出差别。

如果order by 后的字段不为时间属性字段,且sql 中有 rownum <= N 子句,则flink会将其解析为TopN的查询。

如果如果order by 后的字段为时间属性字段,且sql 中有 rowNum = 1子句,则flink会将其解析为Deduplication 的查询。

(官网链接: flink sql中的topN和去重对比

去重算子dedupilcation 是 TopN的一种特殊情况,相比于TopN算子专门做了优化,性能有比较大的提升。常用于按照主键去重 或者 按照主键保留最新数据的情景。

在dedupilcation的sql写法中, 由于order by 后的时间字段有 处理时间和事件时间,依照升序或者降序的不同,加上可能出现的数据乱序情况,输出流可能分为回撤流Retract和追加流Append-only。

在一些场景下如需要在结果数据流上进行时间窗口计算,则上图中的 processingTime + Asc组合对应的追加流 Append-only是必须的。这种情况下对应的dedupilcation的sql写法如下。

 

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值