Flink SQL:使用changelog流更新动态表中的行

时间:2019-12-16 16:06:26

标签: java apache-flink flink-sql

我有一个流,其中包含如下所示的JSON消息:

{"operation":"CREATE","data":{"id":"id-1", "value":"value-1"}}
{"operation":"CREATE","data":{"id":"id-2", "value":"value-2"}}
{"operation":"DELETE","data":{"id":"id-1"}}
{"operation":"UPDATE","data":{"id":"id-2", "value":"value-3"}}

此流在注册为DataStream<Row>的{​​{1}}中进行处理。

我想将此流用作变更日志流来更新Flink表的内容,但是我找不到解决方法。

我将TableSource定义为:

StreamTableSource

public class MyTableSource implements StreamTableSource<Row>, ... { @Override public DataStream<Row> getDataStream(final StreamExecutionEnvironment env) { DataStream<Row> stream = getDataStream(env) // Retrieve changelog stream .keyBy([SOME KEY]) // Aggregate by key .map(new MyMapFunction()); // Map the update message with the correct encoding ? return stream; } ... } 用于

TableSource

执行此操作的好方法是什么? (更具体地说,如何使用流从表中删除行?)

1 个答案:

答案 0 :(得分:1)

当前,内部变更日志处理功能未通过API公开。因此,没有可用的源允许您将传入的更改日志解释为表。计划用于Flink 1.11

在此之前,您可以考虑使用用户定义的聚合函数,该函数将按此处建议的那样应用更新:

Apache Flink: How to enable "upsert mode" for dynamic tables?