FLINK SQL JOIN型別
阿新 • • 發佈:2022-03-01
一、REGULAR JOIN
- INNER JOIN:在流處理任務中只用兩條流JOIN到才輸出,+[L, R]
- LEFT JOIN:在流處理任務中,左流資料到達之後,不管有沒有JOIN到右流資料都會輸出(JOIN到:+[L, R],沒有JOIN:+[L, NULL]),如果右流資料到達之後,發現左流有輸出+[L, NULL],則會發起回撤,先輸出-[L, NULL],再輸出+[L, R]
- RIGHT JOIN:左右流的執行邏輯和LEFT JOIN一樣
- FULL JOIN:在流處理任務中,左流或者右流的資料到達之後,無論有沒有 Join 到另外一條流的資料,都會輸出(對右流來說:Join 到輸出 +[L, R],沒 Join 到輸出 +[NULL, R];對左流來說:JOIN到輸出,沒JOIN到輸出+[L, NULL])。如果一條流的資料到達之後,發現之前另一條流之前輸出過沒有 Join 到的資料,則會發起回撤流(左流資料到達為例:回撤-[NULL, R],輸出+[L, R],右流資料到達為例:回撤-[L, NULL],輸出+[L, R])
- 測試用例
CREATE TABLE show_log_table( log_id BIGINT, show_params STRING ) WITH ( 'connector' = 'datagen', 'rows-per-second' = '5', 'fields.show_params.length' = '1', 'fields.log_id.min' = '1', 'fields.log_id.max' = '100' ); CREATE TABLE click_log_table( log_id BIGINT, click_params STRING )
- 注意:
1)實時REGULAR JOIN支援等值JOIN和不等值JOIN,等值JOIN SHUFFLE策略是HASH,非等值JOIN策略是GLOBAL,所有資料發往一個併發,按照非等值條件進行關聯
2)REGULAR JOIN會將兩條流的所有資料都儲存在 State 中,所以 Flink 任務的 State 會無限增大,因此需要為 State 配置合適的 TTL,以防止 State 過大
二、INTERVAL JOIN
三、TEMPORARY JOIN
四、LOOKUP JOIN
五、列轉行