Flink SQL之Interval Joins
1.Interval Joins(区间Join)
区间是双流join的优化,基于处理时间或事件时间,在一定时间区间内数据,相同的key进行join(支持 Batch\Streaming)。Interval Join 可以让一条流去 Join 另一条流中前后一段时间内的数据。
对于stream查询,时间区间join只支持有时间属性的 append-only表。由于时间属性是准单调递增的,Flink可以从其状态中删除旧值,而不会影响结果的正确性。
优点:由于给定了关联的区间,因此只需要保留很少的状态,内存压力较小。
缺点:如果关联的数据晚到或者早到,导致落不到 JOIN 区间内,就可能导致结果不准确。只支持普通 Append 数据流,不支持含 Retract 的动态表。支持事件时间和处理时间
区间join支持基本特征如下:
- 支持INNER、LEFT、RIGHT、FULL OUT JOIN
- 语义语法和传统sql join一致
- 左右流都会触发更新
- state根据时间区间保留,自动清理
- 输出流保留时间属性
2.语法
语法和sql join一致。
SELECT * FROM Orders
[INNER|RIGHT|LEFT|FULL OUTER] JOIN Product
ON Orders.productId = Product.id
区别在于join连接条件,有效的join连接条件如下:
- ltime = rtime
- ltime >= rtime AND ltime < rtime + INTERVAL '10' MINUTE
- ltime BETWEEN rtime - INTERVAL '10' SECOND AND rtime + INTERVAL '5' SECOND
3.Interval Join实例
如果订单在收到订单10小时后发货,则此查询将把所有订单与其相应的发货联系起来
# 两表有时间戳字段,并且作为 watermark。或者使用PROCTIME() 函数来生成一个处理时间戳
SELECT *
FROM Orders o, Shipments s
WHERE o.id = s.order_id
AND o.order_time BETWEEN s.ship_time - INTERVAL '10' HOUR AND s.ship_time
总的来说,Interval join 主要用于处理时间序列数据的场景,在 join 操作时需要在时间窗口内匹配数据;而 Regular join 主要用于一般的数据 join 操作。Interval join处理更高效,可定时清除状态数据,性能更好。实际开发中,需要考虑具体业务场景、流表数据大小及更新频率、源数据是否有时间属性等因素,选择适合的方式。
Flink SQL之Interval Joins相关推荐
- flink sql实现interval join的图解
完整SQL代码 https://gitee.com/appleyuchi/Flink_Code/blob/master/flink-sql-cookbook/SQL/Interval_Joins.sq ...
- Flink SQL:Queries(Joins)
Joins Batch Streaming Flink SQL supports complex and flexible join operations over dynamic tables. T ...
- Demo:基于 Flink SQL 构建流式应用
摘要:上周四在 Flink 中文社区钉钉群中直播分享了<Demo:基于 Flink SQL 构建流式应用>,直播内容偏向实战演示.这篇文章是对直播内容的一个总结,并且改善了部分内容,比如除 ...
- Flink SQL CDC 上线!我们总结了 13 条生产实践经验
#2020云栖大会#阿里云海量offer来啦!投简历.赢阿里云限量礼品及阿里云ACA认证免费考试资格!>>> 摘要: 7月,Flink 1.11 新版发布,在生态及易用性上有大幅提升 ...
- Flink SQL CDC 13 条生产实践经验
摘要:7月,Flink 1.11 新版发布,在生态及易用性上有大幅提升,其中 Table & SQL 开始支持 Change Data Capture(CDC).CDC 被广泛使用在复制数据. ...
- Flink SQL:Queries(Windowing TVF)
Windowing table-valued functions (Windowing TVFs) Batch Streaming Windows are at the heart of proces ...
- Flink SQL 如何实现数据流的 Join?
无论在 OLAP 还是 OLTP 领域,Join 都是业务常会涉及到且优化规则比较复杂的 SQL 语句.对于离线计算而言,经过数据库领域多年的积累,Join 语义以及实现已经十分成熟,然而对于近年来刚 ...
- 32.flink sql 语法大全
flink sql 大全 摘要 先来看一个例子 1.executeSql(...) 2. hints 2.1 sql hits 2.2.Dynamic Table Options 2.3 语法demo ...
- Flink最锋利的武器:Flink SQL入门和实战 | 附完整实现代码
作者 | 机智的王知无 转载自大数据技术与架构(ID: import_bigdata) 一.Flink SQL 背景 Flink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时计算门 ...
最新文章
- 什么是CPI指数和GDP
- java中并不是任意多个接口都可以实现多实现
- 使用Python列表方法模拟约瑟夫环问题
- shell执行perl_TOOLFK工具-在线Perl代码执行工具
- VS2012下MFC程序的换肤(Skin++、SkinMagic、USkin、SkinSharp)
- 用Android自带的signapk.jar + .x509.pem + .pk8签名应用程序 - anfflee
- 【ZBrush笔刷】实用笔刷和Alpah下载,及笔刷使用方法
- Postman中的Pre-request Scrip详解
- sqlplus使用update操作完数据,不要忘记commit,不然并没有写入到数据库中去
- BIOS知识枝桠——PCD
- 软件测试的环境部署怎么做?
- 移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下:
- 计算机主机声音怎么办,电脑主机声音大,详细教您电脑主机声音大怎么办
- 2022年河北二级建造师建设工程施工管理《施工合同管理》练习及答案
- Coggle打卡——Linux使用基础
- 虚拟机linux环境的地址怎么映射给局域网内其他电脑访问
- “封号斗罗”程序员修炼之道:通向务实的最高境界
- django MVT模式介绍
- 自动驾驶(三十二)---------车辆行人识别
- RSA加密解密算法代码实现【scalajava】