適用場景:
貼源層主表歷史數據過大,ETL不涉及歷史數據對比或聚合
處理流程:
1.確定一個業務主鍵字段或物理主鍵字段
2.確定一個可以判斷增量數據范圍的字段,這取決於具體的業務場景,一般選用記錄的創建時間或最后修改時間
3.確定一個分區字段,要求一段增量數據盡可能落在較少的分區,這里選用創建時間或最后修改時間的年月值
4.根據增量字段過濾主表,創建增量臨時表
5.使用增量臨時表完成要做ETL過程,得到一個增量結果表
6.獲取增量結果表的分區字段Distinct值,存入一張表,下面把這些值簡稱為pt值,即partition值
7.將全量結果表(全量初始化過的)根據pt值過濾分區,再與增量結果表用業務主鍵full join,使用增量NVL字段優先取增量結果表上的,數據重新覆蓋正式結果表分區。
8.代碼案例后面會補充
不足點:不適用於源表經常修改歷史數據的情況下,因為pt會跨越多個分區。如果同一記錄修改不會反復多次修改,用最后修改時間可以優化這個問題
關於如何使用pt值過濾全量結果表:
pt值肯定要存入表
1.通過shell調用sql查詢pt值,並解析返回內容,預處理好,然后作為執行參數傳入到要執行的sql
2.或者使用where 分區字段 IN (子查詢pt值),未驗證,過濾性能可能有問題。
PS:貼源層一般會做ISU分區,增量表生成可以直接用I、S分區的,ISU分區會有補充貼