【实战-05】 flinksql look up join

摘要

look up join 能做什么? 不饶关子直接说答案, look up join 就是 广播。 重要是事情说三遍,广播。flinksql中的look up join 就类似于flinks flink Datastream api中的广播的概念,但是又不完全相同,对于初次访问的数据会加入缓存, 一定时间未访问到的则会从缓存中去除。而广播则是直接广播到每个exxcotor.

比如我们有一张订单表orders, 那么假设我们在进行flink计算的时候想获取该订单的相关的用户数据。 此时可以将用户数据用look up join 加载进来。
look up join 又称维表 在DataStream 中又称伟广播, 理解了这些就比较简单了。

缺点

不适合大量数据的 look up join, 因为会占用过多内存。 在业内很多人喜欢用hbase做缓存插件。也可以用 mysql 等其他外部存储系统,在任务启动的时候 外部的维表会被加载到任务内存中

语法

左表 要设置proress Time , 右表为 缓存表

sql 复制代码
create TEMPORARY table orders(
   `order_id` VARCHAR,                                                
   `order_info` VARCHAR,
   `user_id` VARCHAR,
   process_time AS PROCTIME()  # 这句语法是严格要求的
)with(
    'connector' = 'kafka',                                       
 	'topic' = 'topic-01;topic-02',                                   
 	'properties.bootstrap.servers' = 'xxx:9092,yyy:9092',
 	'properties.group.id' = 'test',
 	'scan.startup.mode' = 'timestamp',
   'scan.startup.timestamp-millis' = '1680883200000',
 	'format' = 'raw'
 );
create TEMPORARY table users(     
	`user_id` VARCHAR,                                          
	`user_name` VARCHAR
)with(
    # 其他外部系统,省略
 );
 
SELECT 
	o.order_id, 
	o.order_info,
	u.user_id,
	u.user_name
FROM orders AS o
left JOIN users FOR SYSTEM_TIME AS OF o.proc_time AS u # 这句语法是严格要求的
ON o.user_id= u.user_id
where ...# 省略where语句
;
# 注意: 一般都是用left  join 
相关推荐
q***474318 分钟前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
寰宇视讯1 小时前
奇兵到家九周年再进阶,获36氪“WISE2025商业之王 年度最具商业潜力企业”
大数据
声网1 小时前
活动推荐丨「实时互动 × 对话式 AI」主题有奖征文
大数据·人工智能·实时互动
Hello.Reader2 小时前
在 YARN 上跑 Flink CDC从 Session 到 Yarn Application 的完整实践
大数据·flink
Learn Beyond Limits3 小时前
Data Preprocessing|数据预处理
大数据·人工智能·python·ai·数据挖掘·数据处理
放学有种别跑、3 小时前
GIT使用指南
大数据·linux·git·elasticsearch
gAlAxy...4 小时前
SpringMVC 响应数据和结果视图:从环境搭建到实战全解析
大数据·数据库·mysql
ganqiuye4 小时前
向ffmpeg官方源码仓库提交patch
大数据·ffmpeg·video-codec
越努力越幸运5085 小时前
git工具的学习
大数据·elasticsearch·搜索引擎
不会写程序的未来程序员5 小时前
详细的 Git 操作分步指南
大数据·git·elasticsearch