Regular Join
- 支持INNER JOIN, FULL JOIN, LEFT JOIN, RIGHT JOIN
- 雙流 Join,任意一側流都會觸發結果的更新
- 通過 state 來存儲雙流已經到達的數據,state 默認永久保留,所以 Regular join 的一個問題是默認情況下 state 會持續增長,一般我們會結合 state TTL 使用。
Interval Join
- 支持INNER JOIN, FULL JOIN, LEFT JOIN, RIGHT JOIN
- 區間 Join,任意一側流都會觸發結果的更新
- state 不用存儲全量的曝光數據,state 可以自動清理
- 需要明確時間區間,輸出流也保持時間屬性
Temporal join(時態表打寬)
SELECT * FROM FACT [LEFT] JOIN DIM FOR SYSTEM_TIME AS OF FACT.{PEOCTIME|ROWTIME} ON FACT.ID = DIM.ID,即用FACT.{PEOCTIME|ROWTIME}時間去取DIM維表中的某一個版本與FACT事實表join ,只有左流才會觸發結果更新
1. lookup DB
- 維度數據的變化不會觸發結果更新
- 維度數據存儲在數據庫中
- 適用于實時性要求較高的數據
- 一般會開啟Async IO 和內存cache提升查詢效率
- 吞吐較差
2. changelog版本表
- 維表watermark等待
- 維表數據存在temporal join state中
- 實時性高,精準版本關聯
- FOR SYSTEM_TIME AS OF 跟一個event time,event time會等待另一個流中的watermark水位對齊,保證關聯上精確版本結果。
- 吞吐較好
3. hive分區表
Hive最新分區 | Hive最新表 |
---|---|
stream讀,每次讀一個分區 | 按batch讀,每次讀全部分區 |
streaming-source.partition-include取latest | streaming-source.partition-include取all |
通過streaming-source.monitor-interval發現分區 | lookup.join.cache.ttl控制reload時間 |
- 自動關聯hive維表最新分區
- 適用于維表更新慢場景
- 吞吐非常好
UTDF
-自定義打寬