Flink 1.7 新特性:Temporal Tables和MATCH_RECOGNIZE

  • Post author:
  • Post category:其他




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 版权协议,转载请附上原文出处链接和本声明。