Flink:Temporal Table Function(時態表函數)和 Temporal Join

《大數據平臺架構與原型實現:數據中臺建設實戰》博主歷時三年精心創作的《大數據平臺架構與原型實現:數據中臺建設實戰》一書現已由知名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.pswp.cn/news/717794.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717794.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717794.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AR時間序列模型

AR時間序列模型(AutoRegressive Time Series Model)是一種用于分析和預測時間序列數據的統計模型。該模型假設未來的觀測值與過去的觀測值相關,且該相關性可以通過線性回歸來描述。 AR模型的基本思想是將當前時刻的觀測值表示為過去幾個時刻…

設計模式(十五)狀態模式

請直接看原文:設計模式系列 ------------------------------------------------------------------------------------------------------------------------------- 前言 建議在閱讀本文前先閱讀設計模式(十一)策略模式這篇文章,雖說狀態…

java.sqlrecoverableexception: io error: the network adapter could not establ

數據庫相關學習資料下載地址: 數據庫相關資料合集 Java SQLRecoverableException: IO Error: The Network Adapter Could Not Establish Connection 在進行Java開發中,經常會遇到與數據庫進行交互的情況。然而,有時候我們可能會遇到java.sq…

Redis過期刪除策略

1、定時刪除: 一旦鍵過期就立即從內存中刪除,節省內存空間,但刪除過程會占用大量CPU時間,可能影響服務器的響應時間和吞吐量。 2、惰性刪除: 并不會立即從內存中刪除過期鍵,而是在需要訪問時才會檢查是否…

【MATLAB】MVMD_ MFE_SVM_LSTM 神經網絡時序預測算法

有意向獲取代碼,請轉文末觀看代碼獲取方式~也可轉原文鏈接獲取~ 1 基本定義 MVMD_MFE_SVM_LSTM神經網絡時序預測算法結合了多變量多尺度分解(MVMD)、多尺度特征提取(MFE)、支持向量機(SVM)和長…

Python爬蟲之爬取并下載嗶哩嗶哩視頻

親自使用過,太好用了 # 導入requests模塊,模擬發送請求 import requests # 導入json import json # 導入re import re# 定義請求頭 headers {Accept: */*,Accept-Language: en-US,en;q0.5,User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6…

小米消息隊列的選型與實踐

之前寫了一篇關于消息隊列的文章:《消息隊列介紹與對比》,本文主要介紹消息隊列在實際工作中的使用情況(截止到2023年,因為我2023年離職了,后續的情況不了解了,哈哈)。 市面上的多種消息隊列都有…

node問題: command not found: nodemon

如何安裝并使用 nodemon npm i -g nodemon 問題與解決方案: 問題:zsh: command not found: nodemon 解決方案: 在你的 package.json 中加入: "scripts": {"auto": "npx nodemon server.js" }…

單例模式及應用場景

如果希望自己的代碼更優雅、可維護性更高以及更簡潔,往往離不開設計模式這一解決方案。 在JS設計模式中,最核心的思想:封裝變化(將變與不變分離,確保變化的部分靈活,不變的部分穩定)。 那么來…

[嵌入式系統-36]:龍芯1B 開發學習套件 -5- PMON常見命令

目錄 0. 開機時按c鍵進入pmon模式 (自啟動模式時) 1、幫助命令 h 2、顯示設備信息 devls 3.重啟:reboot 4、設置環境變量 set/unset 5.查詢環境變量:env 6.網絡設置相關命令: ①設置IP:ifconfig&am…

Linux 基礎IO(1)內存文件

文章目錄 鋪墊文件的系統調用接口文件描述符緩沖區 鋪墊 文件文件內容 文件屬性訪問文件之前,都要先打開文件,而要訪問,修改,編輯文件,文件就必須加載到內存中程序運行起來變成進程,被CPU調度,…

詳解Win 7重置電腦操作步驟

文章目錄 介紹Win 7 重置系統的方法:1.按下鍵盤上的Windows鍵和R鍵,打開運行窗口,輸入sysprep 點擊回車確定。2.之后就會出現如下界面,在這個新打開的窗口中雙擊 sysprep 程序3.選擇【進入系統全新體驗(00BE) 】&#…

基于SpringBoot的在線拍賣系統(附項目源碼+論文)

摘要 在線拍賣系統,主要的模塊包括管理員;首頁、個人中心、用戶管理、商品類型管理、拍賣商品管理、歷史競拍管理、競拍訂單管理、留言板管理、系統管理,用戶;首頁、個人中心、歷史競拍管理、競拍訂單管理、留言板管理&#xff0…

Linux重新獲取IP地址

你可以通過重啟客戶端來獲取新的IP地址。可以使用以下命令來重啟DHCP客戶端: sudo dhclient -r # 釋放當前IP sudo dhclient # 獲取新的IP 這將釋放當前的IP地址,并請求新的IP地址。 使用ifdown和ifup命令:另一種方法是使用ifdown和i…

STM32學習和實踐筆記(1): 裝好了的keil μVision 5

2019年3月在淘寶上買了這塊STM32的開發板,學了一段時間后就丟下了,今天重新撿起來,決定好好學習、天天向上。 對照教程,今天先把keil5裝上了。 裝的過程有以下幾點值得記錄下: 1)用注冊機時,…

【應用多元統計分析】--多元數據的直觀表示(R語言作圖)

例1.2 為了研究全國31個省、市、自治區2018年城鎮居民生活消費的分布規律,根據調查資料做區域消費類型劃分。 指標: 食品x1:人均食品支出(元/人) 衣著x2:人均衣著商品支出(元/人) 居住x3:人均居住支出(元/人) 生活x4…

歐拉回路(Eulerian Path)

1.定義 如果圖 G G G(有向圖或者無向圖)中所有邊一次僅且一次行遍所有頂點的通路稱作歐拉通路。 如果圖 G G G中所有邊一次僅且一次行遍所有頂點的回路稱作歐拉回路。 具有歐拉回路的圖成為歐拉圖(簡稱 E E E圖)。具有歐拉通路但不具有歐拉回路的圖成為半歐拉圖。 頂點可以經…

【Linux】Linux常用指令介紹

目錄 1、whoami命令 2、pwd命令 3、ls命令 4、cd命令 5、touch命令 6、mkdir命令 7、rm命令 8、man命令 9、cp命令 10、mv命令 11、cat命令 12、more命令 13、less命令 14、head命令 15、tail命令 16、find命令 1、whoami命令 語法:whoani 功能&a…

SpringMVC--03--前端傳數組給后臺

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 案例1乘客個人信息方法1:表單提交,以字段數組接收方法2:表單提交,以BeanListModel接收方法3:將Json對象序…

leetcode移除元素

注意,在本題中,是對原數組進行操作,需要原地刪除指定元素,所以我們可以采用快慢指針來操作。 顧名思義,快慢指針是有兩個指針,一直快指針,一個慢指針。在本題中,快慢指針起點都是0&a…