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方法。