Flink SQL之Interval Joins

这篇具有很好参考价值的文章主要介绍了Flink SQL之Interval Joins。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Interval Joins(区间Join)

区间是双流join的优化,基于处理时间或事件时间,在一定时间区间内数据,相同的key进行join(支持 Batch\Streaming)。Interval Join 可以让一条流去 Join 另一条流中前后一段时间内的数据。

对于stream查询,时间区间join只支持有时间属性的 append-only表。由于时间属性是准单调递增的,Flink可以从其状态中删除旧值,而不会影响结果的正确性。

Flink SQL之Interval Joins

优点:由于给定了关联的区间,因此只需要保留很少的状态,内存压力较小。

缺点:如果关联的数据晚到或者早到,导致落不到 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

Flink SQL之Interval Joins

总的来说,Interval join 主要用于处理时间序列数据的场景,在 join 操作时需要在时间窗口内匹配数据;而 Regular join 主要用于一般的数据 join 操作。Interval join处理更高效,可定时清除状态数据,性能更好。实际开发中,需要考虑具体业务场景、流表数据大小及更新频率、源数据是否有时间属性等因素,选择适合的方式。文章来源地址https://www.toymoban.com/news/detail-488074.html

到了这里,关于Flink SQL之Interval Joins的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 说说Flink双流join

    Flink双流JOIN主要分为两大类 一类是基于原生State的Connect算子操作 另一类是基于窗口的JOIN操作。其中基于窗口的JOIN可细分为window join和interval join两种。 基于原生State的Connect算子操作 实现原理:底层原理依赖Flink的State状态存储,通过将数据存储到State中进行关联join, 最终输出

    2024年02月10日
    浏览(30)
  • Flink多流转换(2)—— 双流连结

    双流连结(Join):根据某个字段的值将数据联结起来,“配对”去做处理 可以 定义时间窗口 ,并将两条流中 共享一个公共键 (key)的数据放在窗口中进行配对处理 首先需要调用 DataStream 的 .join() 方法来合并两条流,得到一个 JoinedStreams;接着通过 .where() 和 .equalTo() 方法指

    2024年02月19日
    浏览(26)
  • flink双流ioin的大状态如何解决和调优

    Flink 中的双流 ioin 操作(双流连接)通常涉及大状态的处理,这可能导致一些性能和状态管理的挑战。以下是解决和调优 Flink 中双流 ioin 大状态的一些建议: 解决方案: 增大任务管理器的堆内存: 对于处理大状态的任务,增加 Flink 任务管理器的堆内存可以提供更多的内存

    2024年01月22日
    浏览(33)
  • flink重温笔记(十三): flink 高级特性和新特性(2)——ProcessFunction API 和 双流 join

    前言:今天是学习 flink 的第 13 天啦!学习了 flink 高级特性和新特性之ProcessFunction API 和 双流 join,主要是解决大数据领域数据从数据增量聚合的问题,以及快速变化中的流数据拉宽问题,即变化中多个数据源合并在一起的问题,结合自己实验猜想和代码实践,总结了很多自

    2024年03月12日
    浏览(52)
  • MySQL:七种 SQL JOINS 的实现(图文详解)

    新星计划,等你来造,一起学习进步! 7月3日-7月15日期间,完成计划任务,完成打卡赢好礼,活动报名链接如下:点击跳转 活动奖励: ❀【新秀奖】新注册用户发布第一篇文章(500字以上)获得电子【新秀勋章】; ❀【基础奖】完成任务挑战用户可获专属电子勋章(潜力新

    2024年02月09日
    浏览(29)
  • 【flink番外篇】2、flink的23种算子window join 和interval join 数据倾斜、分区介绍及详细示例(1)- window join

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月03日
    浏览(48)
  • 【flink番外篇】2、flink的23种算子window join 和interval join 数据倾斜、分区介绍及详细示例(3)- 数据倾斜处理、分区示例

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月03日
    浏览(44)
  • Flink-SQL join 优化 -- MiniBatch + local-global

    问题1. 近期在开发flink-sql期间,发现数据在启动后,任务总是进行重试,运行一段时间后,container heartbeat timeout,内存溢出(GC overhead limit exceede) ,作业无法进行正常工作 问题2. 未出现container心跳超时的,作业运行缓慢,超过一天 ,作业仍存在反压情况 查看日志内容发现,出

    2024年02月06日
    浏览(34)
  • 【SQL开发实战技巧】系列(十八):数据仓库中时间类型操作(进阶)INTERVAL、EXTRACT以及如何确定一年是否为闰年及周的计算

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2024年02月01日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包