Flink 1.7 新特性:Temporal Tables和MATCH_RECOGNIZE
Flink 1.7 新特性POC:Temporal Tables和MATCH_RECOGNIZE
本文主要翻译整理了Flink 1.7的新特性,原文见参考文献,还包含了一些Demo验证的小的限制结论。
1 Temporal Tables and Temporal Joins in Streaming SQL
1.1 概念
Temporal Tables(时态表):历史中某个特定时间点上表内容的视图
版本根据主键以类似Map<Key,Value>的形式存储对不同时间更新
对于一个输入的时间,返回最新的版本,即当前时间的Value为该时间最近的值。对于定义的时间属性为event-time时会保存从上一个watermark到当前为止的所有版本。
1.2 前提
1) time attribute
对输入表设置时间属性,根据输入的时间参数决定返回的表版本,根据时间对版本进行跟踪
2) primary keys
对时态表指定更新根据的主键
3) createTemporalTableFunction,registerFunction
对输入表创建时态函数,指定输入的时态表主键和时间,注册
1.3 使用示例
1) 输入
左表(append-only)订单
SELECT * FROM Orders;
o_proctime amount currency
========== ====== =========
10:15 2 Euro
10:30 1 US Dollar
10:32 50 Yen
10:52 3 Euro
11:04 5 US Dollar
右表(temporal table)
SELECT * FROM RatesHistory;
r_proctime currency rate
========== ======== ======
09:00 US Dollar 102
09:00 Euro 114
09:00 Yen 1
10:45 Euro 116
11:15 Euro 119
11:49 Pounds 108
2) 使用
Java:
Table orders = tEnv.fromDataStream(ordersStream, "amount, currency, o_proctime.proctime");
tEnv.registerTable("Orders", orders);
Table ratesHistory = tEnv.fromDataStream(ratesHistoryStream, "currency, rate, r_proctime.proctime");
tEnv.registerTable("RatesHistory", ratesHistory);
TemporalTableFunction rates = ratesHistory.createTemporalTableFunction("r_proctime", "r_currency");
tEnv.registerFunction("Rates", rates
版权声明:本文为u012432850原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。