我有一些配置可以用于Flink作业。
现在,我使用BroadcastedStream
和KeyedBroadcastProcessFunction
来做到这一点。
KeyedBroadcastProcessFunction
将数据流(SingleOutputStreamOperator
)和配置更新流(BroadcastedStream
)作为输入。
有
MapState
对象open()
processElement()
,用于融合来自具有当前配置的数据流中的消息,并将其发送到输出流中processBroadcastElement()
,该函数使用配置更新流中的消息来更新存储的MapState
现在,我想使用Flink SQL API实现一些不同的东西。
我有多个不同的SQL查询,每个查询都取决于配置的当前状态。理想情况下,我想做这样的事情:
public void process(
StreamTableEnvironment tableEnv,
BroadcastStream<ConfUpdateObject> broadcastedConfigs // The broadcasted stream of configuration Update
){
Table configurationTable = ???; // TODO : A Table that should store the configurations and be updated by broadcastedConfigs
tableEnv.registerTable("Configuration", configurationTable);
Table dataTable1 = ...; // For example table created from a Kafka source
tableEnv.registerTable("Data1", dataTable1);
String query1 = "SELECT * from Data1 JOIN Configuration ON ..."
Table dataTable2 = ...; // For example table created from a Kafka source
tableEnv.registerTable("Data2", dataTable2);
String query2 = "SELECT * from Data2 JOIN Configuration ON ..."
Table result1 = tableEnv.sqlQuery(query1);
Table result2 = tableEnv.sqlQuery(query2);
... // Insert result1 and result2 in some sinks
}
是否可以通过任何方式做到这一点?
注意:
rowtime
字段BroadcastStream
以外的其他对象