關系型數據庫的三種離線同步方式


本文主要介紹關系型數據庫的三種同步方式,並提供相關代碼。這三種方案在我的實際工作中都有用到,歡迎在評論區交流!

增量同步

表設計

表名:ods_{數據源縮寫}_{原始表名},以訂單為例:ods_ord_order
表性質:每日全量分區表
生命周期:保留近30天的歷史數據

抽取增量

常規情況下,我們按照更新時間或者創建時間來抽取增量,如果是第一次初始化抽取,則應該是抽取全量。

日志表和更新表的第一次初始化抽取

select *
       , now() etl_time
from   t_ord_order -- 原始表

更新表常規抽取

若數據源是更新表,則按照數據的更新時間來抽取。

select *
       , now() as etl_time
from   t_ord_order -- 原始表
where  更新時間 >= DATE_SUB(curdate(),INTERVAL -1 DAY)
;

日志表常規抽取

若數據源是日志表,則按照數據的創建時間來抽取。

select *
       , now() as etl_time
from   t_ord_order -- 原始表
where  創建時間 >= DATE_SUB(curdate(),INTERVAL -1 DAY)
;

合並

insert overwrite  ods_ord_order partition(ds = replace(days_sub(now(),1),'-',''))
select id 
       , order_id
	   ...
       , elt_time
from (
      select *
             , row_number() over(partition by id order by 更新時間/創建時間 desc, etl_time desc) as level
      from (
             select *
             from   ods_ord_order -- 數據倉庫表
             where  ds = replace(days_sub(now(),1),'-','') -- t-1的增量
             union 
             select *
             from    ods_ord_order -- 數據倉庫表
             where  ds = replace(days_sub(now(),2),'-','') -- t-2的全量
      ) tmp
) tmp 
where level = 1 -- 取最新的記錄
;

流程圖

增量同步方案

全量同步

增量合並全量


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM