FlinkSql系列5之 Regular Join

文章目录

  • FlinkSql系列5之 Regular Join
  • 前言
  • 一、Regular Join是什么?
    • 1.1 Inner Join
    • 1.2 Left Join
    • 1.3 Right Join
    • 1.4 Full Join
  • 二、实际测试记录
    • 1.Inner Join
    • 2.Left Join
    • 3.Right Join
    • 4.Full Join
  • 总结

前言

join,对于我们无论是实时数仓还是离线数仓都是不可缺少的一部分,我们经常需要涉及到多条流的join来扩充字段,筛选字段等。

一、Regular Join是什么?

Regular Join就是通过条件关联两条流数据输出。
Regular Join 包含以下几种

1.1 Inner Join

在flink无界流式处理中,只有当流Join到的时候才会输出+[L,R]

1.2 Left Join

在flink 流式计算中,以左流为主流,不管右流有没有join的上都会输出左流 ,如果右流可以匹配的上那么就会输出+[L,R],匹配不上也依然会输出 + [L,null],不过如果当左流是先到达的,后面我们右流到了后,符合条件匹配上的时候就会先发出一条撤回流 -[L,null],然后再更新一条追加流,+[L,R].

1.3 Right Join

如上

1.4 Full Join

这个相对比较复杂,就是不管哪边流先到,都会输出结果类似于 +[L,null],+[null,R],
如果后面流到了就撤回前一条,-[L,null],-[null,R],然后再追加+[L,R].

二、实际测试记录

建立源表


CREATE TABLE show_log_table(
--曝光日志id
`log_id` BIGINT,
--曝光日志参数
`show_params` STRING
) WITH ('connector' = 'datagen','rows-per-second' = '2','fields.show_params.length' = '1','fields.log_id.min' = '1','fields.log_id.max' = '100'
)CREATE TABLE click_log_table(
--点击日志id
`log_id` BIGINT,
--点击日志参数
`click_params` STRING
) WITH ('connector' = 'datagen','rows-per-second' = '2','fields.click_params.length' = '1','fields.log_id.min' = '1','fields.log_id.max' = '10'
)

建目标表

CREATE TABLE sink_table6(
--曝光日志id
`s_id` BIGINT,
--点击日志id
`c_id` BIGINT,
--曝光日志参数
`show_params` STRING,
--点击日志参数
`click_params` STRING
) WITH (
'connector' = 'print'
)

1.Inner Join

INSERT INTO sink_table6
SELECT
show_log_table.log_id as s_id,
click_log_table.log_id as c_id,
show_log_table.show_params,
click_log_table.click_params
FROM show_log_table
INNER JOIN click_log_table ON show_log_table.log_id = click_log_table.log_id

2.Left Join

INSERT INTO sink_table6
SELECT
show_log_table.log_id as s_id,
click_log_table.log_id as c_id,
show_log_table.show_params,
click_log_table.click_params
FROM show_log_table
LEFT JOIN click_log_table ON show_log_table.log_id = click_log_table.log_id

3.Right Join

INSERT INTO sink_table6
SELECT
show_log_table.log_id as s_id,
click_log_table.log_id as c_id,
show_log_table.show_params,
click_log_table.click_params
FROM show_log_table
RIGHT JOIN click_log_table ON show_log_table.log_id = click_log_table.log_id

4.Full Join

INSERT INTO sink_table6
SELECT
show_log_table.log_id as s_id,
click_log_table.log_id as c_id,
show_log_table.show_params,
click_log_table.click_params
FROM show_log_table
FULL JOIN click_log_table ON show_log_table.log_id = click_log_table.log_id

总结

以上是对flinksql regular join的学习记录,对于此方式,在时效性上确实有比较好的结果,但是相反来说,对于state状态的要求很大,需要设置好state ttl,因为我们相当于对于之前的把数据都保存到状态里面,当流来了之后保证可以匹配的上,另外一点是这种情况是相当于有回撤流的,也就是如果我们把结果输出到外部系统的话,就需要外部系统支持删除更新!

FlinkSql系列5之 Regular Join相关推荐

  1. 【一起去大厂系列】针对left join以及limit的两条优化小技巧

    记两则亲身经历的sql优化技巧: 一.主表数据不到100万,以下查询结果集约200左右,第一条sql执行效率为40ms,第二条为200ms,使用上面方法,其效率明显优于left join: sql1: ...

  2. 【Flink】Flink1.12.0 FlinkSQL消费Kafka 使用 temporal join 关联维表Hive 最新分区数据 join 不上

    文章目录 1.概述 2.场景1 2.1 概述 2.2 解决 1.概述 2.场景1 2.1 概述 场景是这样的 Flink SQL 消费kafka 关联Hive维表 最新分区 刚开始 我往Hive维表里 ...

  3. Apache Flink 漫谈系列(12) - Time Interval(Time-windowed) JOIN...

    说什么 JOIN 算子是数据处理的核心算子,前面我们在<Apache Flink 漫谈系列(09) - JOIN 算子>介绍了UnBounded的双流JOIN,在<Apache Fl ...

  4. FlinkSql多表(三表) join/interval join

    直接上sql和数据流图 三张表  flink_kafka_join_click, flink_kafka_join_pay, flink_kafka_join_price 三张表都类似,看官们主要关注 ...

  5. flink sql 知其所以然(十三):流 join 很难嘛?(下)

    看了那么多的技术文,你能明白作者想让你在读完文章后学到什么吗? 大数据羊说__的文章会让你明白 大数据羊说 用数据提升美好事物发生的概率~ 43篇原创内容 公众号 博主会阐明博主期望本文能给小伙伴们带 ...

  6. leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列

    剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...

  7. MySQL Join算法与调优白皮书

    转载自 InsideMySQL 公众号,微信公众号不好被搜索引擎收录,所以转载一份备看. 原文地址: https://mp.weixin.qq.com/s/vt7YjxaikJh14pnY2FAWvg ...

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

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

  9. Flink temporal table join研究

    作者:王东阳 前言 ANSI-SQL 2011 中提出了Temporal 的概念,Oracle,SQLServer,DB2等大的数据库厂商也先后实现了这个标准.Temporal Table记录了历史上 ...

  10. Apache Flink 漫谈系列(13) - Table API 概述

    什么是Table API 在<Apache Flink 漫谈系列(08) - SQL概览>中我们概要的向大家介绍了什么是好SQL,SQL和Table API是Apache Flink中的同 ...

最新文章

  1. 慈溪计算机编程培训,慈溪Python编程培训
  2. Asp.Net Core 入门(一)——Program.cs做了什么
  3. 三十七、Prim算法--求解最小生成树
  4. IT服务台来电分配技术——ACD介绍
  5. router vue 动态改变url_Vue教程(路由router-基本使用)
  6. JSP+JavaBean+Servlet工作原理实例…
  7. Ubuntu16.04彻底删除旧内核
  8. node mysql 事件循环_NodeJs 的 Event loop 事件循环机制详解
  9. python自动写作软件_有哪些适合长文的轻量级写作软件值得推荐?
  10. jeecg流程梳理学习
  11. ICCV 2019 | 商汤科技57篇论文入选,13项竞赛夺冠
  12. python中异常处理的两种方式_Python 之异常处理
  13. onenote快捷键_onenote快捷键的高效用法
  14. POJ1860Currency Exchange(SPFA)
  15. Python 程序设计方法
  16. php车牌输入,微信小程序车牌号码模拟键盘输入功能的实现代码
  17. 01【托业口语】考试介绍
  18. 【学习资料分享】光纤KVM坐席管理系统解决方案
  19. Luogu 1606 [USACO07FEB]白银莲花池Lilypad Pond
  20. Matlab快捷键等总结

热门文章

  1. Android仿人人客户端(v5.7.1)——新鲜事之状态
  2. 计算机专业排名2017教育部,软件工程专业大学排名最新版(教育部2017学科排名数据整理)...
  3. ITOP4412----Uboot2020移植记录
  4. 详述快捷支付产品功能及设计要点
  5. js 验证的银行卡信息(哪家银行、储蓄卡还是信用卡)
  6. html中的embed标签属性,html中Embed标签的语法和属性设置
  7. c4d快速启动语言对话框脚本错误,如何解决“当前页面脚本发生错误”的问题
  8. し: make jianjie的文本网页
  9. [TEST123] Performance Test
  10. 连续型随机变量及概率密度