flink sql 知其所以然(十五):改了改源码,实现了个 batch lookup join(附源码)

本文介绍了如何基于Flink源码实现批处理查找JOIN(batch lookup join)。通过一个曝光用户日志流与用户画像维表的实战案例,展示batch lookup join的功能与优势。博主详述了从transformation出发,分析lookup join原理,指导如何通过修改源码实现batch lookup join,包括RedisRowDataLookupFunction和fetcher的批量访问逻辑。文章最后指出当前实现与SQL语义不符,鼓励读者按照SQL标准进行改进。
摘要由CSDN通过智能技术生成

看了那么多的技术文,你能明白作者想让你在读完文章后学到什么吗?

大数据羊说__的文章会让你明白

大数据羊说

用数据提升美好事物发生的概率~

44篇原创内容

公众号

  1. 博主会阐明博主期望本文能给小伙伴们带来什么帮助,让小伙伴萌能直观明白博主的心思

  2. 博主会以实际的应用场景和案例入手,不只是知识点的简单堆砌

  3. 博主会把重要的知识点的原理进行剖析,让小伙伴萌做到深入浅出

1.序篇

源码公众号后台回复1.13.2 sql batch lookup join获取。

[

图片

flink sql 知其所以然(十四):维表 join 的性能优化之路(上)附源码

](http://mp.weixin.qq.com/s?__biz=MzkxNjA1MzM5OQ==&mid=2247489814&idx=1&sn=085b93194dfd0feae5ac43ab6d3fb524&chksm=c15495eef6231cf8df60f1c0b1d2f7f277732090888f6b52ae02181a4f1fb688aad540fbccb6&scene=21#wechat_redirect)

书接上回,上节说到了博主发现由于在 flink sql 中 lookup join 访问外部维表存在的性能问题。

由此诞生了一个想法,以 Redis 维表为例,Redis 支持 pipeline 批量访问模式,因此 flink sql lookup join 能不能按照 DataStream 方式一样,先攒一批数据 ,然后使用 Redis pipeline 批量访问外部存储。博主亲切的将这个功能称为 flink sql batch lookup join,本节就是讲述博主基于 flink 源码对此功能的实现。

废话不多说,咱们先直接上本文的目录和结论,小伙伴可以先看结论快速了解博主期望本文能给小伙伴们带来什么帮助:

  1. 直接来一个实战案例:博主以曝光用户日志流关联用户画像(年龄、性别)维表为例介绍 batch lookup join 具有的基本能力(怎么配置参数,怎么写 sql,最终效果咋样)。

  2. batch lookup join:主要介绍 batch lookup join 的功能是从 flink transformation 出发,确定要 batch lookup join 涉及改动的地方以及其实现思路、原理。也会教给大家一些改动源码来实现自己想要的一些功能的思路。

  3. 总结及展望:目前的 batch lookup join 实现其实不符合 sql 的原始语义,后续大家可以按照 sql 标准自己做一些实现

2.来一个实战案例

2.1.预期的输入、输出数据

来看看在具体场景下,对应输入值的输出值应该长啥样。

需求指标:使用曝光用户日志流(show_log)关联用户画像维表(user_profile)关联到用户的画像(性别,年龄段)数据。

来一波输入数据:

曝光用户日志流(show_log)数据(数据存储在 kafka 中):

log_id timestamp user_id
1 2021-11-01 00:01:03 a
2 2021-11-01 00:03:00 b
3 2021-11-01 00:05:00 c
4 2021-11-01 00:06:00 b
5 2021-11-01 00:07:00 c

用户画像维表(user_profile)数据(数据存储在 redis 中):

user_id(主键) age sex
a 12-18
b 18-24
c 18-24

注意:redis 中的数据结构存储是按照 key,value 去存储的。其中 key 为 user_id,value 为 age,sex 的 json。如下图所示:

图片

user_profile redis

预期输出数据如下:

<
log_id timestamp user_id age sex
1 2021-11-01 00:01:03 a 12-18
2 2021-11-01 00:03:00 b 18-24
3 2021-11-01 00:05:00 c 18-24
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值