【实战-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 
相关推荐
科技发布32 分钟前
出海转化链路断裂,传播易如何打通全流程营销闭环?
大数据
爱学习的小可爱卢1 小时前
Git全解析(2W+长文):从原理到高频操作手册
大数据·elasticsearch·搜索引擎
远光九天5 小时前
远光软件亮相2026 CIO百人会高峰论坛 分享“模数共振”新范式构建之路
大数据·人工智能
LitchiCheng6 小时前
DGX Spark部署Isaac Sim(一键安装脚本)
大数据·elasticsearch·spark
RockHopper20257 小时前
企业智能体为何应面向“活动”而非“数据”——一个架构范式的转变
大数据·人工智能·智能体·活动驱动
JustNow_Man7 小时前
【openspec】存量项目中如何使用进行开发
大数据·人工智能
Geeys7 小时前
拼多多新店快速起流量完整实操
大数据·网络·人工智能
逸Y 仙X8 小时前
Spark部署
大数据·分布式·spark
BD_Marathon9 小时前
什么是Spark
大数据·分布式·spark
xlrqx9 小时前
2026年沧州家电清洗培训成本核算方法及成本控制要点
大数据·python