点击上方蓝
字关注~
SQL是开发人员与数据分析师必备的技能,Flink也提供了Sql方式编写任务,能够很大程度降低开发运维成本,这篇是flink join的终极篇SQL Join, 首先介绍sql join使用方式、然后介绍global join带来的状态存储成本及解决方式、最后从源码角度分析sql join实现。
一、SQL JOIN使用方式
对于sql join可以分为两类:Global Join、Time-windowed Join
Global Join
Global Join表示全局join, 也可以称为无限流join, 由于没有时间限制,任何时候流入的数据都可以被关联上,支持inner join、left join、right join、full join 连接语法。使用语法遵循standard ANSI SQL。使用方式:
SELECT *
FROM Orders INNER/LEFT/RIGHT/FULL JOIN Product ON Orders.productId = Product.id
Time-windowed Join
基于时间窗口的join, 流表的数据关联必须在一定的时间范围内,同样支持inner join、left join、right join、full join,但是不同的是条件中带有时间属性条件,有以下几种使用方式:
ltime = rtime
ltime >= rtime AND ltime < rtime + INTERVAL '10' MINUTE
ltime BETWEEN rtime - INTERVAL '10' SECOND AND rtime + INTERVAL '5' SECOND
ltime、rtime表示流表的时间属性字段。
其实现与interval join 使用了相同的实现方式,不同的是:
a. Time-windowed Join 即可支持Event-Time,也可支持Processing-Time
b. interval join 只支持inner join,Time-windowed Join支持多种类型join
以