锦州网站开发苏州电商网站建设
news/
2025/10/9 0:54:31/
文章来源:
锦州网站开发,苏州电商网站建设,百度推广怎么添加关键词,wap网页程序博主历时三年精心创作的《大数据平台架构与原型实现#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行#xff0c;点击《重磅推荐#xff1a;建大数据平台太难了#xff01;给我发个工程原型吧#xff01;》了解图书详情#xff0c;…博主历时三年精心创作的《大数据平台架构与原型实现数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行点击《重磅推荐建大数据平台太难了给我发个工程原型吧》了解图书详情京东购书链接https://item.jd.com/12677623.html扫描左侧二维码进入京东手机购书页面。
我们知道时态表确切地说应该是版本表提供了回溯历史的能力也就是能读取一条记录过去某个时刻所对应的值。要想查询版本表在过去某个时刻对应的值我们得在查询时把这个时间作为参数传递给版本表但这个时间参数绝不会是一个 where 条件它是另一个维度时间维度上的参数那么用怎样的形式才能把这个时间参数合理地表达到查询中呢 Flink 使用了 UDF 的形式主要思路就是注册一个 UDF 来指代一张版本表表名不能有参数但函数可以有这时把想访问版本表的目标时间点作为参数传给这个UDF返回的就是当时表中的数据了这个 UDF 就被称作Temporal Table Function
例如以下代码将汇率表 currency_rates 注册成了时态表函数 rates。注意目前在 Flink SQL 中是不支持定义 Temporal Table Function 的只能以代码方式定义但是 SQL 中可以定义 Temporal Table DDL
rates tEnv.from(currency_rates).createTemporalTableFunction(update_time, currency)tEnv.createTemporarySystemFunction(rates, rates); 然后使用下面的 SQL 就能查询出在 11:05 时的汇率信息了
SELECT * FROM rates(11:05);可以说是时态表函数是访问时态表的“入口”是时态表的“正确打开方式”
但是像上面那样直接查询某一时刻版本表上的数据的情形其实并不多真正常见是其他表主动 Join 一张时态表期望获得表中记录所代表的事件在发生时刻时态表中的当时的数据就是我们曾经解释的“当时对当时”的需求场景典型案例Join 汇率表计算订单当时的总价
-- 基于时态表函数实现的Join由于指定的 order_time 是一个事件时间
-- 所以该SQL实现的是基于事件时间的 Temporal Join也就是 Join 事件发生时刻关联表当时的值
SELECTSUM(amount * rate) AS amount
FROMorders,LATERAL TABLE (rates(order_time))
WHERErates.currency orders.currency上面的 SQL 就是标准的 Temporal Table Function Join 语法SQL 中使用了关键字 LATERAL TABLE填入一个 Temporal Table Function / 时态表函数 rates设定传给时态表的时间属性基于什么时间查找时态表上的版本order_time。
这里官方文档其实隐去了一个背景信息order_time 其实是 orders 表的事件时间属性所以上述使用 Temporal Table Function Join 语法实现的是基于事件时间的 Temporal Join这种 Join 还可以通过 FOR SYSTEM_TIME AS OF 关键字实现 Temporal Table Function Join 语法除了能实现基于事件时间的 Temporal Join 外还能实现基于处理时间的 Temporal Join 了语法不变只要将传给 rates 函数的时间属性从一个事件时间改为一个处理时间就可以了就像 [ 官方文档 ] 给出的示例中那样使用了一个 o_proctime 字段这个字段是 orders 表的处理时间属性:
-- 基于时态表函数实现的Join由于指定的 o_proctime 是一个处理时间
-- 所以该SQL实现的是基于处理时间的 Temporal Join也就是总是 Join 关联表当前最新状态的数据
SELECTo_amount, r_rate
FROMOrders,LATERAL TABLE (rates(o_proctime))
WHEREr_currency o_currency
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932101.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!