Flink sql join的4种不同类型

本文详细介绍了Flink SQL中的4种JOIN类型:UnBounded的双流JOIN、单流与UDTF JOIN、单流与版本表的Temporal JOIN以及Interval JOIN。每种JOIN类型都结合实例进行了深入解析,包括其工作原理、SQL写法以及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. UnBounded的双流JOIN:

2. 单流与UDTF的JOIN操作:

3. 单流与版本表的JOIN:

4.interval join


1. UnBounded的双流JOIN:


https://developer.aliyun.com/article/672760?spm=a2c6h.13262185.0.0.6c007e186Tt5n

是双流驱动,即任何一个流有新数据过来都会触发计算。

关联过程:左右两边的没进来一条数据,都会保存到state中,然后与另一边的state中的数据进行关联,然后输出。

sql的写法,和普通mysql表关联的sql写法是一样的,支持inner join、left/right outer join。

如下inner join场景和left join的流程图:

inner join只有关联上才会输出结果,left join则左边来了会先输出(右边没关联上就置为null,等右边来新的数据可以关联上左边的数据,则会先回撤结果,然后再新增。+代表正向记录,-代表撤回记录

2. 单流与UDTF的JOIN操作:


https://developer.aliyun.com/article/674345?spm=a2c6h.12873639.0.0.47903da5UARE9Vhttps://developer.aliyun.com/article/674345?spm=a2c6h.12873639.0.0.47903da5UARE9V

3. 单流与版本表的JOIN:

由左边的单流驱动,temporal join。左表是流,右表是temporal table

temporal table 支持FOR SYSTEM_TIME AS OF语法,

例如DDL语句

CREATE TABLE Emp
ENo INTEGER,
Sys_Start TIMESTAMP(12) GENERATED
ALWAYS AS ROW Start,
Sys_end TIMESTAMP(12) GENERATED
ALWAYS AS ROW END,
EName VARCHAR(30),
PERIOD FOR SYSTEM_TIME (Sys_Start,Sys_end)
) WITH SYSTEM VERSIONING

DML语句

INSERT INTO Emp (ENo, EName) VALUES (22217, 'Joe')

说明: 其中Sys_Start和Sys_End是数据库系统默认填充的。

例如查询:

SELECT ENo,EName,Sys_Start,Sys_End FROM Emp 
FOR SYSTEM_TIME AS OF TIMESTAMP '2011-01-02 00:00:00'
说明: 这个查询会返回所有Sys_Start <= 2011-01-02 00:00:00 并且 Sys_end > 2011-01-02 00:00:00 的记录。

https://github.com/ververica/flink-sql-cookbook/blob/main/joins/03_kafka_join/03_kafka_join.md

Apache Flink 漫谈系列(11) - Temporal Table JOIN-阿里云开发者社区


https://developer.aliyun.com/article/679659?spm=a2c6h.12873639.0.0.47903da5UARE9V

4.interval join

在UnBounded数据流上按时间维度进行数据划分进行JOIN操作 - Time Interval(Time-windowed)JOIN, 后面我们叫做Interval JOIN:
https://developer.aliyun.com/article/683681

https://github.com/ververica/flink-sql-cookbook/blob/main/joins/02_interval_joins/02_interval_joins.md

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值