FlinkSql系列5之 Regular Join
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相关推荐
- 【一起去大厂系列】针对left join以及limit的两条优化小技巧
记两则亲身经历的sql优化技巧: 一.主表数据不到100万,以下查询结果集约200左右,第一条sql执行效率为40ms,第二条为200ms,使用上面方法,其效率明显优于left join: sql1: ...
- 【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维表里 ...
- Apache Flink 漫谈系列(12) - Time Interval(Time-windowed) JOIN...
说什么 JOIN 算子是数据处理的核心算子,前面我们在<Apache Flink 漫谈系列(09) - JOIN 算子>介绍了UnBounded的双流JOIN,在<Apache Fl ...
- FlinkSql多表(三表) join/interval join
直接上sql和数据流图 三张表 flink_kafka_join_click, flink_kafka_join_pay, flink_kafka_join_price 三张表都类似,看官们主要关注 ...
- flink sql 知其所以然(十三):流 join 很难嘛?(下)
看了那么多的技术文,你能明白作者想让你在读完文章后学到什么吗? 大数据羊说__的文章会让你明白 大数据羊说 用数据提升美好事物发生的概率~ 43篇原创内容 公众号 博主会阐明博主期望本文能给小伙伴们带 ...
- leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列
剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...
- MySQL Join算法与调优白皮书
转载自 InsideMySQL 公众号,微信公众号不好被搜索引擎收录,所以转载一份备看. 原文地址: https://mp.weixin.qq.com/s/vt7YjxaikJh14pnY2FAWvg ...
- Flink SQL 如何实现数据流的 Join?
无论在 OLAP 还是 OLTP 领域,Join 都是业务常会涉及到且优化规则比较复杂的 SQL 语句.对于离线计算而言,经过数据库领域多年的积累,Join 语义以及实现已经十分成熟,然而对于近年来刚 ...
- Flink temporal table join研究
作者:王东阳 前言 ANSI-SQL 2011 中提出了Temporal 的概念,Oracle,SQLServer,DB2等大的数据库厂商也先后实现了这个标准.Temporal Table记录了历史上 ...
- Apache Flink 漫谈系列(13) - Table API 概述
什么是Table API 在<Apache Flink 漫谈系列(08) - SQL概览>中我们概要的向大家介绍了什么是好SQL,SQL和Table API是Apache Flink中的同 ...
最新文章
- 慈溪计算机编程培训,慈溪Python编程培训
- Asp.Net Core 入门(一)——Program.cs做了什么
- 三十七、Prim算法--求解最小生成树
- IT服务台来电分配技术——ACD介绍
- router vue 动态改变url_Vue教程(路由router-基本使用)
- JSP+JavaBean+Servlet工作原理实例…
- Ubuntu16.04彻底删除旧内核
- node mysql 事件循环_NodeJs 的 Event loop 事件循环机制详解
- python自动写作软件_有哪些适合长文的轻量级写作软件值得推荐?
- jeecg流程梳理学习
- ICCV 2019 | 商汤科技57篇论文入选,13项竞赛夺冠
- python中异常处理的两种方式_Python 之异常处理
- onenote快捷键_onenote快捷键的高效用法
- POJ1860Currency Exchange(SPFA)
- Python 程序设计方法
- php车牌输入,微信小程序车牌号码模拟键盘输入功能的实现代码
- 01【托业口语】考试介绍
- 【学习资料分享】光纤KVM坐席管理系统解决方案
- Luogu 1606 [USACO07FEB]白银莲花池Lilypad Pond
- Matlab快捷键等总结
热门文章
- Android仿人人客户端(v5.7.1)——新鲜事之状态
- 计算机专业排名2017教育部,软件工程专业大学排名最新版(教育部2017学科排名数据整理)...
- ITOP4412----Uboot2020移植记录
- 详述快捷支付产品功能及设计要点
- js 验证的银行卡信息(哪家银行、储蓄卡还是信用卡)
- html中的embed标签属性,html中Embed标签的语法和属性设置
- c4d快速启动语言对话框脚本错误,如何解决“当前页面脚本发生错误”的问题
- し: make jianjie的文本网页
- [TEST123] Performance Test
- 连续型随机变量及概率密度