Flink join 不同join案例介绍和总结

1. Regular Join

类似与普通的两张表关联,当左右表任何一张表有数据变化时,最终关联的结果会进行更新,如这篇文章里面的示例图:

SELECT id, price, name FROM Price_Table A
Left Outer JOIN Name_Table B
ON A.id = B.id
①–⑥号输入数据,代表随时间增加,按顺序输入事件到左、右侧流。
①–⑥号输入数据,可以对应到最右侧Join后输出数据,-号代表回撤,+号代表最新数据
输入数据会更新左、右侧状态数据(内部一般都是MapState实现,如果当前侧为Outer,还会存储引用数,用于计算回撤)

在这里插入图片描述


2. 流和维表join

维表Join(SQL语句中具有FOR SYSTEM_TIME关键字)。维表Join(分同步和异步两种方式,可以查询维表数据库数据,补全流中字段信息,例如补全订单用户名场景)


3. Time Window Join

参考资料:Apache Flink 漫谈系列(12) - Time Interval(Time-windowed) JOIN-阿里云开发者社区

Flink intervalJoin 使用与原理分析_张普的专栏-CSDN博客

可实现两个流之间跨窗口join。

也可以叫做Time Interval Join,即Join条件中,带有时间范围的双流Join,例如订单表和付款表进行补全的场景,付款有1小时时效信息。(不用一直保留state,可以将无效过时的state清理掉;unbounded join则不会清理历史state,因此 time interval join比unbounded join更高效)。

unbounded join和time interval join都可以实现双流join。区别是time interval join会清理无效的state。

Time Window Join(条件上带有BETWEEN … AND时间表达式):

SELECT
    o.orderId,
    o.productName,
    p.payType,
    o.orderTime,
    cast(payTime as timestamp) as payTime
FROM
    Orders AS o JOIN Payment AS p 
ON
    o.orderId = p.orderId AND
    p.payTime BETWEEN orderTime AND
    orderTime + INTERVAL ‘1’ HOUR

在这里插入图片描述


5. 参考资料

FLink 源码分析--(三)Time Window Join_LS_ice的专栏-CSDN博客

Apache Flink 漫谈系列(12) - Time Interval(Time-windowed) JOIN-阿里云开发者社区

https://developer.aliyun.com/article/683681

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值