1. 程式人生 > 資料庫 >|Flink SQL之維表JOIN

|Flink SQL之維表JOIN

       維表是數倉中的一個概念,維表中的維度屬性是觀察資料的角度,在建設離線數倉的時候,通常是將維表與事實表進行關聯構建星型模型。在實時數倉中,同樣也有維表與事實表的概念,其中事實表通常

儲存在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的條件必須包含所有主鍵的等值條件