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相关推荐

  1. flink sql实现interval join的图解

    完整SQL代码 https://gitee.com/appleyuchi/Flink_Code/blob/master/flink-sql-cookbook/SQL/Interval_Joins.sq ...

  2. Flink SQL:Queries(Joins)

    Joins Batch Streaming Flink SQL supports complex and flexible join operations over dynamic tables. T ...

  3. Demo:基于 Flink SQL 构建流式应用

    摘要:上周四在 Flink 中文社区钉钉群中直播分享了<Demo:基于 Flink SQL 构建流式应用>,直播内容偏向实战演示.这篇文章是对直播内容的一个总结,并且改善了部分内容,比如除 ...

  4. Flink SQL CDC 上线!我们总结了 13 条生产实践经验

    #2020云栖大会#阿里云海量offer来啦!投简历.赢阿里云限量礼品及阿里云ACA认证免费考试资格!>>> 摘要: 7月,Flink 1.11 新版发布,在生态及易用性上有大幅提升 ...

  5. Flink SQL CDC 13 条生产实践经验

    摘要:7月,Flink 1.11 新版发布,在生态及易用性上有大幅提升,其中 Table & SQL 开始支持 Change Data Capture(CDC).CDC 被广泛使用在复制数据. ...

  6. Flink SQL:Queries(Windowing TVF)

    Windowing table-valued functions (Windowing TVFs) Batch Streaming Windows are at the heart of proces ...

  7. Flink SQL 如何实现数据流的 Join?

    无论在 OLAP 还是 OLTP 领域,Join 都是业务常会涉及到且优化规则比较复杂的 SQL 语句.对于离线计算而言,经过数据库领域多年的积累,Join 语义以及实现已经十分成熟,然而对于近年来刚 ...

  8. 32.flink sql 语法大全

    flink sql 大全 摘要 先来看一个例子 1.executeSql(...) 2. hints 2.1 sql hits 2.2.Dynamic Table Options 2.3 语法demo ...

  9. Flink最锋利的武器:Flink SQL入门和实战 | 附完整实现代码

    作者 | 机智的王知无 转载自大数据技术与架构(ID: import_bigdata) 一.Flink SQL 背景 Flink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时计算门 ...

最新文章

  1. 什么是CPI指数和GDP
  2. java中并不是任意多个接口都可以实现多实现
  3. 使用Python列表方法模拟约瑟夫环问题
  4. shell执行perl_TOOLFK工具-在线Perl代码执行工具
  5. VS2012下MFC程序的换肤(Skin++、SkinMagic、USkin、SkinSharp)
  6. 用Android自带的signapk.jar + .x509.pem + .pk8签名应用程序 - anfflee
  7. 【ZBrush笔刷】实用笔刷和Alpah下载,及笔刷使用方法
  8. Postman中的Pre-request Scrip详解
  9. sqlplus使用update操作完数据,不要忘记commit,不然并没有写入到数据库中去
  10. BIOS知识枝桠——PCD
  11. 软件测试的环境部署怎么做?
  12. 移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下:
  13. 计算机主机声音怎么办,电脑主机声音大,详细教您电脑主机声音大怎么办
  14. 2022年河北二级建造师建设工程施工管理《施工合同管理》练习及答案
  15. Coggle打卡——Linux使用基础
  16. 虚拟机linux环境的地址怎么映射给局域网内其他电脑访问
  17. “封号斗罗”程序员修炼之道:通向务实的最高境界
  18. django MVT模式介绍
  19. 自动驾驶(三十二)---------车辆行人识别
  20. RSA加密解密算法代码实现【scalajava】

热门文章

  1. 嘉为蓝鲸DevOps平台V5.0,以平台工程提升企业软件研发质效
  2. 仿鲜果网切换activity
  3. ADC采集数据(DMA模式)
  4. 三维实验用螺口瓶绘制PPT教程
  5. Windows使用ROS机器人操作系统全面资料汇总
  6. easyexcel分批次导出excel文件
  7. 移动端调试神器 eruda
  8. centos make 升级_CentOS7 升级 cmake
  9. Java 输出数组的方法
  10. devtool使用介绍(2)