增量載入的幾種方案

2021-07-03 16:00:03 字數 2568 閱讀 3933

如:s_etl_run記錄上次抽取日期,s_etl_curr_run記錄當前抽取日期,抽取sql如下:

where update_date〉s_etl_run.prev_load_dt and update_date<=s_etl_curr_run.load_dt

2,資料來源的時間列update_date > '$$increment_ts' ,increment_ts儲存在target db或者infa repository db中:

setvariable($$increment_ts,sessstarttime)

3,增量表記錄抽取資料(dac增量抽取siebel資料來源的方法)

像s_evt_act此類活動表,siebel中有時間欄位來記錄新更新的資料,dac在資料來源建立img表可以每天捕捉到增量資料,使用檢視v_etv_act進行增量抽取,

使用表s_evt_act進行全量抽取。

1)第一次抽取後,在prune days引數期間的行就被抽取到相應的s_etl_r_img_ 表中,

2)之後的change capture過程:

先將不在s_etl_r_img_ 表中的行並且源表的last_upd列比last_refresh_date減去prune days新的行插入s_etl_i_img_ 表中(之前先truncate),再將s_etl_d_img_中的資料加入s_etl_i_img_中,然後s_etl_i_img_ 表與base table  join在一起只抽取增量的行(即建立檢視v_etv_act用於增量抽取)。

3)etl過程完成後,將s_etl_i_img_ 的行push到然後s_etl_r_img_ 表中,並刪除s_etl_r_img_ 表中早於last_refresh_date減去prune days的行。

4)s_etl_d_img_表是siebel delete trigger寫入的表,該錶的資料插入s_etl_i_img_表中(operation='d')然後抽取到dw中,可以實現軟刪除或者硬刪除(delete_***='d') 

具體sql過程:

change capture(img_build)

# of prune days: 14   

dbms_stats.gather_table_stats(ownname => 'siebel', tabname => 's_etl_r_img_20', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all indexed columns size auto',cascade => false, degree => dbms_stats.default_degree)   

dbms_stats.gather_table_stats(ownname => 'siebel', tabname => 's_etl_d_img_20', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all indexed columns size auto',cascade => false, degree => dbms_stats.default_degree)   

truncate table s_etl_i_img_20  

create view v_evt_act as   

select   

*  from   

s_evt_act,  

s_etl_i_img_20  

where   

s_evt_act.row_id = s_etl_i_img_20.row_id 

change capture sync(img_sync)

# of prune days: 14  

delete   

from s_etl_d_img_20   

where   

exists  

(select  

'x'

from  

s_etl_i_img_20

where 

s_etl_d_img_20 .row_id = s_etl_i_img_20.row_id

and s_etl_i_img_20.operation = 'd'

) 2015-04-02 11:33:37.73 - executing :   

delete   

from s_etl_i_img_20  

where last_upd < to_date('2015-03-19 09:59:59', 'yyyy-mm-dd hh24:mi:ss')  

delete   

from s_etl_i_img_20  

where last_upd > to_date('2015-04-02 09:59:59', 'yyyy-mm-dd hh24:mi:ss')  

delete from s_etl_r_img_20 where last_upd < to_date('2015-03-19 09:59:59', 'yyyy-mm-dd hh24:mi:ss') 

mysql增量備份幾種 mysql的增量備份

一 啟用 binary log 修改 mysql server 的系統設定檔案 eg.etc my.cnf 在 mysqld 區塊中加上 log bin mysql bin 選項,然後重新啟動 mysql server,例如 mysqld log bin 啟用後你應該可以在 mysql 的 data...

ETL增量抽取方案

一 etl體系結構 資料庫 抽取 轉換 載入 目的資料來源 二 etl抽取方案 1 全量抽取 全量抽取類似於資料遷移或資料複製,它將資料來源中的表或檢視的資料原封不動的從資料庫中抽取出來,並轉換成自己的etl工具可以識別的格式,全量抽取比較簡單。全量抽取一般只在系統初始化時使用,全量一次後,就要每天...

Hive增量更新方案

hive增量更新方案 方案一 總結出來業界可行方案 1 hive原始表提前規劃好以時間分割槽,初始化裝載源庫記錄為base table 最新資料 2 每個相關表都會有乙個timestamp列,對每一行操作做了修改,都會重置這列timestamp為當前時間戳 3 新增資料通過sqoop 支援當天抽取 ...