背景
在流式计算中,维表是一个很常见的概念,一般用于sql的join中,对流式数据进行数据补全,比如我们的source stream是来自日志的订单数据,但是日志中我们只是记录了订单商品的id,并没有其他的信息,但是我们把数据存入数仓进行数据分析的时候,却需要商品名称、价格等等其他的信息,这种问题我们可以在进行流处理的时候通过查询维表的方式对数据进行数据补全。
维表一般存储在外部存储中,比如mysql、hbase、redis等等,今天我们以mysql为例,讲讲flink中维表的使用。
LookupableTableSource
在flink中提供了一个LookupableTableSource,可以用于实现维表,也就是我们可以通过某几个key列去查询外部存储来获取相关的信息用于补全stream的数据。
public interface LookupableTableSource<T> extends TableSource<T> {
TableFunction<T> getLookupFunction(String[] lookupKeys);
AsyncTableFunction<T> getAsyncLookupFunction(String[] lookupKeys);
boolean isAsyncEnabled();
}
我们看到,LookupableTableSource有三个方法
- getLookupFunction:用于同步查询维表的数据,返回一个TableFunction,所以本质上还是通过用户自定义 UDTF来实现的。
- getAsyncLookupFunction:用于异步查询维表的数据,该方法返回一个对象
- isAsyncEnabled:默认情况下是同步查询,如果要开启异步查询,这个方法需要返回true
在flink里,我们看

本文深入探讨Flink中维表查询的实现原理,重点讲解JdbcTableSource的使用,包括其背景、实例演示及源码解析,帮助读者理解如何在流处理中利用外部存储进行数据补全。
最低0.47元/天 解锁文章
1707





