Regular Join
- 支持INNER JOIN, FULL JOIN, LEFT JOIN, RIGHT JOIN
- 雙流 Join唱蒸,任意一側流都會觸發(fā)結果的更新
- 通過 state 來存儲雙流已經(jīng)到達的數(shù)據(jù)祷肯,state 默認永久保留,所以 Regular join 的一個問題是默認情況下 state 會持續(xù)增長陌知,一般我們會結合 state TTL 使用。
Interval Join
- 支持INNER JOIN, FULL JOIN, LEFT JOIN, RIGHT JOIN
- 區(qū)間 Join梗醇,任意一側流都會觸發(fā)結果的更新
- state 不用存儲全量的曝光數(shù)據(jù)捉捅,state 可以自動清理
- 需要明確時間區(qū)間,輸出流也保持時間屬性
Temporal join(時態(tài)表打?qū)挘?/h2>
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 习劫,只有左流才會觸發(fā)結果更新
1. lookup DB
- 維度數(shù)據(jù)的變化不會觸發(fā)結果更新
- 維度數(shù)據(jù)存儲在數(shù)據(jù)庫中
- 適用于實時性要求較高的數(shù)據(jù)
- 一般會開啟Async IO 和內(nèi)存cache提升查詢效率
- 吞吐較差
2. changelog版本表
- 維表watermark等待
- 維表數(shù)據(jù)存在temporal join state中
- 實時性高咆瘟,精準版本關聯(lián)
- FOR SYSTEM_TIME AS OF 跟一個event time,event time會等待另一個流中的watermark水位對齊诽里,保證關聯(lián)上精確版本結果袒餐。
- 吞吐較好
3. hive分區(qū)表
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 习劫,只有左流才會觸發(fā)結果更新
Hive最新分區(qū) | Hive最新表 |
---|---|
stream讀,每次讀一個分區(qū) | 按batch讀,每次讀全部分區(qū) |
streaming-source.partition-include取latest | streaming-source.partition-include取all |
通過streaming-source.monitor-interval發(fā)現(xiàn)分區(qū) | lookup.join.cache.ttl控制reload時間 |
- 自動關聯(lián)hive維表最新分區(qū)
- 適用于維表更新慢場景
- 吞吐非常好
UTDF
-自定義打?qū)?/p>