|Flink SQL之維表JOIN
阿新 • • 發佈:2021-01-07
維表是數倉中的一個概念,維表中的維度屬性是觀察資料的角度,在建設離線數倉的時候,通常是將維表與事實表進行關聯構建星型模型。在實時數倉中,同樣也有維表與事實表的概念,其中事實表通常
儲存在kafka中,維表通常儲存在外部裝置中(比如MySQL,HBase)。對於每條流式資料,可以關聯一個外部維表資料來源,為實時計算提供資料關聯查詢。維表可能是會不斷變化的,在維表JOIN時,需指明這
條記錄關聯維錶快照的時刻。需要注意是,目前Flink SQL的維表JOIN僅支援對當前時刻維錶快照的關聯(處理時間語義),而不支援事實表rowtime所對應的的維錶快照(事件時間語義)。
本篇部落格參考:
官方文件地址:
(一)Temporal Table Join語法規則
SELECT column-names FROM table1 [AS <alias1>] [LEFT] JOIN table2 FOR SYSTEM_TIME AS OF table1.proctime [AS <alias2>] ON table1.column-name1 = table2.key-name1
注意:目前,僅支援INNER JOIN與LEFT JOIN。在join的時候需要使用 FOR SYSTEM_TIME AS OF
,其中table1.proctime表示table1的proctime處理時間屬性(計算列)。使用FOR SYSTEM_TIME AS OF table1.proctime
當左邊表的記錄與右邊的維表join時,只匹配當前處理時間維表所對應的的快照資料。
使用說明
- 僅支援Blink planner
- 僅支援SQL,目前不支援Table API
- 目前不支援基於事件時間(event time)的temporal table join
- 維表可能會不斷變化,JOIN行為發生後,維表中的資料發生了變化(新增、更新或刪除),則已關聯的維表資料不會被同步變化
- 維表和維表不能進行JOIN
- 維表必須指定主鍵。維表JOIN時,ON的條件必須包含所有主鍵的等值條件