更新时间:2024-10-11 GMT+08:00
Stream SQL Join
Flink开源增强特性:Stream SQL Join
Flink的Table API&SQL是一种用于Scala 和Java的语言集成式查询API,它支持非常直观的从关系运算符(如选择、筛选和连接)进行组合查询。Table API&SQL详细内容请参见官网:https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/table/index.html。
Stream SQL Join介绍
SQL Join用于根据两个或多个表中的列之间的关系,从这些表中查询数据。Flink Stream SQL Join允许对两个流式table进行join,并从中查询结果。支持类似于以下内容的查询:
SELECT o.proctime, o.productId, o.orderId, s.proctime AS shipTime FROM Orders AS o JOIN Shipments AS s ON o.orderId = s.orderId AND o.proctime BETWEEN s.proctime AND s.proctime + INTERVAL '1' HOUR;
目前,Stream SQL Join需在指定的窗口范围内进行。对窗口范围内的数据进行连接,需要至少一个相等连接谓词和一个绑定双方时间的条件。这个条件可以由两个适当的范围谓词(<, <=, >=, >),一个BETWEEN谓词或者一个单一的相等谓词来定义。这个相等谓词主要是比较两个输入表的同类型时间属性(比如处理时间或者事件时间)。
以下是一个关于在收到订单后四小时内发货, 将所有订单及其相应的货件进行Join的示例:
SELECT * FROM Orders o, Shipments s WHERE o.id = s.orderId AND o.ordertime BETWEEN s.shiptime - INTERVAL '4' HOUR AND s.shiptime
- Stream SQL Join仅支持Inner Join。
- ON子句应包括相等连接条件。
- 时间属性只支持处理时间和事件时间。
- 窗口条件只支持有界的时间范围,如 o.proctime BETWEEN s.proctime - INTERVAL '1' HOUR AND s.proctime + INTERVAL '1' HOUR,不支持像o. proctime > s.proctime这样无界的范围,并应包括两个流的proctime属性,不支持o.proctime BETWEEN proctime () AND proctime () + 1。
父主题: Flink开源增强特性