離線同步任務支援您通過配置類似的資料過濾功能來決定同步全量資料還是增量資料,配置過濾條件時,將只同步滿足過濾條件的資料。同時,過濾條件可以結合調度參數使用,實現過濾條件隨任務調度時間的動態變化,進而實現增量資料的同步。該內容將向您介紹如何配置增量資料同步任務。
使用說明
部分資料來源暫無增量同步處理方案,例如HBase、OTSStream資料來源等。具體資料來源是否支援增量同步處理可以看具體的Reader外掛程式文檔。
每個外掛程式實現增量同步處理的所配置的參數可能不同,具體參數配置可以參考對應的Reader外掛程式文檔,詳情可參考:支援的資料來源與讀寫外掛程式。例如:
資料庫類型
增量同步處理需配置的參數
支援的文法
where
說明嚮導模式配置時,需要配置的介面參數名為:資料過濾。
資料庫文法
說明可與調度參數結合實現每日讀取指定時間區間的資料。
query
說明嚮導模式配置時,需要配置的介面參數名為:檢索查詢條件。
基本與資料庫一致
說明可與調度參數結合實現每日讀取指定時間區間的資料。
Object
指定路徑
說明與調度參數結合實現每日讀取指定檔案資料。
...
...
...
配置增量同步處理
Data Integration離線同步任務中,可以使用調度參數來指定同步源表及目標表的資料路徑以及資料範圍,調度參數的配置方式與其他類型任務一致,沒有特殊限制。
在同步任務運行時,任務中配置的預留位置參數都會被替換為調度參數運算式所表達的實際值,然後再執行資料同步。
以同步MySQL資料為例:
當不配置數據過濾時,預設同步全量資料至目標表中。
當配置數據過濾時,將只同步滿足過濾條件的資料至目標表中。
目標MaxCompute表分區名稱以調度參數的方式指定,$bizdate表示業務日期,定時任務執行時,任務配置的分區運算式會替換為調度參數所表達的業務日期。調度參數運算式的詳細配置說明請參考文檔:配置並使用調度參數。以離線同步任務為例,需在三處配置 bizdate 參數以實現增量同步處理:在資料來源的資料過濾中填寫 STR_TO_DATE('${bizdate}','%Y%m%d') <= gmt_modify_time AND gmt_modify_time < DATE_ADD(STR_TO_DATE('${bizdate}','%Y%m%d'), interval 1 day),按業務日期篩選當天變更資料;在資料去向的分區資訊中填寫 pt=${bizdate},將資料寫入對應日期分區,並將清理規則設為寫入前清理已有資料(Insert Overwrite);在右側調度配置的參數中填寫 bizdate=$bizdate,使調度系統在運行時自動將 ${bizdate} 替換為實際業務日期。配置增量資料同步時:
注意事項
配置增量同步處理任務時,注意以下事項:
寫入前清理已有資料(Insert Overwrite)的安全性:當多個同步任務寫入同一 MaxCompute 表的不同分區時,使用寫入前清理已有資料策略是安全的。該策略僅清理當前任務指定的分區資料,不會影響表中其他分區的資料,不會造成資料衝突或誤刪。
分區範圍批量覆蓋限制:DataWorks 不支援在分區配置中直接設定小時範圍值(如
hh=00-23)進行批量覆蓋寫入。如需實現多小時資料的覆蓋寫入,需配置多個獨立任務分別執行。分區參數目前僅支援單個具體值或萬用字元*。萬用字元文法格式:在源端包含小時分區而目標端僅到天分區的情境下,需在小時分區欄位填寫萬用字元
*以匹配所有小時資料。輸入時直接填寫*即可,禁止添加引號(如"*"),否則會導致語法錯誤。
基於時間戳記的高頻定時增量同步處理
DataWorks 支援通過離線同步任務配合周期調度(如每 5 分鐘、每小時)實現基於時間戳記的定時增量同步處理,適用於 RDS MySQL 到 SelectDB、StarRocks 等目標端的 T+1 或准即時同步情境。此方式通過 SQL 過濾實現增量,無需使用即時 CDC 任務,可避免持續運行產生的費用。配置要點:
在源端數據過濾的 where 條件中,使用時間戳欄位作為變數進行過濾。例如:
gmt_modify_time >= '$[yyyymmddhhmiss-10/mi]' AND gmt_modify_time < '$[yyyymmddhhmiss]'。配置周期調度參數(如
$[yyyymmddhhmiss])動態計算時間範圍,確保每次調度僅同步指定時間區間內的增量資料。關於調度參數的詳細配置,請參見調度參數在Data Integration的應用情境。在目標端欄位對應中手動添加常量參數映射到分區欄位,實現動態分區寫入。
整庫離線同步任務的增量配置
除單表同步任務外,也可以通過建立整庫離線同步任務實現周期性增量。在建立任務時勾選增量同步處理,同時在整庫同步任務的中配置增量條件,即可實現高效的天層級增量分區同步(如按 create_time 欄位過濾)。
此方式適用於希望統一管理多表同步但僅需對特定表做增量處理的情境。關於整庫離線同步任務的完整配置流程,請參見整庫離線同步任務配置。
情境樣本
同步歷史資料:如果您需要將歷史增量資料同步至目標表對應時間分區,您可以使用營運中心補資料功能。補資料功能使用詳情請參見:補資料執行個體營運。在資料同步節點配置中,資料來源選擇 MySQL,資料去向選擇 MaxCompute(ODPS),表名如
czd。資料過濾條件中通過${bizdate}控制增量範圍(例如STR_TO_DATE('${bizdate}','%Y%m%d') <= gmt_modify_time),分區資訊設為ds=${bizdate},清理規則選擇寫入前清理已有資料(Insert Overwrite)。在調度配置的參數地區定義bizdate=$bizdate,該調度參數會在補資料情境下根據業務日期自動替換為具體的日期值。執行補資料時,可設定多段業務日期範圍(例如 2022-05-01 至 2022-05-31 和 2022-04-01 至 2022-04-30),勾選立即運行定時時間大於此刻的補資料執行個體,並選擇業務日期正序執行。
常見問題
MaxCompute Reader 分區過濾使用調度參數後,報分區不存在怎麼辦?
原因:配置的調度參數在運行時未被正確解析為實際分區值,或解析後的值與源表實際分區不匹配。
解決方案:若分區值由上遊節點的outputs參數傳遞,檢查資料開發中的參數配置,確保以下幾點:
配置的參數名稱,是否與輸入參數名稱一致。
傳遞的參數值,是否能完全符合MaxCompute中的實際分區。
DataWorks 離線同步任務預設是全量同步還是增量同步處理?如何配置無分區欄位源表的增量同步處理?
預設行為
DataWorks Data Integration離線同步任務預設為全量同步,即每次運行同步全部資料。只有在配置了數據過濾條件並結合調度參數時,才能實現增量同步處理。
無分區欄位源表處理
若源端 RDS 等資料庫表無時間或分區欄位,無法直接通過 where 條件過濾增量資料。建議:在源表中增加時間欄位(如 dt、gmt_modify_time 等),作為增量過濾依據。完成欄位準備後,參考本文檔"配置增量同步處理"章節配置增量同步處理邏輯。
splitPk 和 splitFactor 參數的作用是什嗎?對源端資料庫有什麼影響?
參數定義
splitPk(切分主鍵):指定一個主鍵列,DataWorks 按該欄位的值範圍將資料切分為多份,實現多線程並發讀取。splitFactor(切分因子):控制切分粒度,數值越大切分越細,讀取線程越多。
效能影響與建議
開啟 splitPk 和 splitFactor 會增加源端資料庫壓力。如需減輕源端負載,建議:
降低並發度,或將整庫離線任務並發度配置為 1。
確保切分列(
splitPk)已建立索引,以提升讀取效率。