Flink Table & SQL LookableTableSource
在DataStream中,要实现流维Join,可以用Function,如MapFunction
、FlatMapFunction
、ProcessFunction
等等; 或通过Async I/O实现。
从Flink 1.9.0开始,提供了LookableTableSource
,只需将Lookup数据源(如Mysql、HBase表)注册成LookableTableSource
,即可用SQL的方式,实现流维Join。
注意:
LookableTableSource
只支持Blink Planner。- Lookup数据源要注册成
LookableTableSource
,需要实现LookableTableSource
接口。
LookableTableSource接口
1 | public interface LookupableTableSource<T> extends TableSource<T> { |
可看到,LookupableTableSource
主要有三个方法:getLookupFunction
、getAsyncLookupFunction
、isAsyncEnabled
。
getLookupFunction
: 返回一个TableFunction。该Function可和LATERAL TABLE关键字结合使用,根据指定的key同步查找匹配的行。getAsyncLookupFunction
: 返回一个TableFunction。该Function可和LATERAL TABLE
关键字结合使用,根据指定的key异步(Async I/O的方式)查找匹配的行。isAsyncEnabled
: 如果启用了异步Lookup,则此方法应返回true。当返回true时,必须实现getAsyncLookupFunction(String[] lookupKeys)
方法。
用LookableTableSource实现Kafka Join HBase/Mysql维度数据
示例
1 | package com.bigdata.flink.tableSqlLookableTableSource; |
结果
1 | //向Kafka Topic中输入测试数据 |
注意: 默认提供的HBaseTableSource
、JDBCTableSource
都只实现了同步查找方法,即getLookupFunction
方法,如有需要,可自行实现getAsyncLookupFunction
方法。