全部產品
Search
文件中心

DataWorks:離線同步資料品質排查

更新時間:Sep 30, 2025

通過講述Data Integration資料同步的原理機制,理解資料同步的過程,進而對資料同步的執行效果有判斷能力,判斷資料同步效果具體包括:資料同步的資料量、目標端資料實際數量等。本文將為您列舉一些常見資料品質方面的情境,方便您排查是否存在符合的情境,根據對應解決方案解決資料同步品質問題。

同步原理

DataWorksData Integration採用平行處理和外掛程式化架構,以實現高效、穩定的資料同步。

並存執行模型(Job與Task)

為最大化資料輸送量,同步任務採用兩級運行結構:

  1. 作業 (Job):一個執行中的同步任務執行個體。

  2. 任務 (Task):Job的最小執行單元。一個Job會被切分為多個Task,這些Task可在單機或多機上並發執行。

每個Task負責處理一個獨立的資料分區。通過這種平行處理機制,可顯著提升整體資料同步的效率。

外掛程式化資料流(Reader與Writer)

每個Task內部的資料流由讀Reader外掛程式Writer外掛程式通過一個記憶體緩衝區串連而成:

  • Reader外掛程式:負責串連來源資料儲存,讀取資料並將其推送至內部緩衝區。

  • Writer外掛程式:負責從緩衝區消費資料,並將其寫入目標資料存放區。

說明

Reader和Writer外掛程式嚴格遵循各自資料來源的原生讀寫協議與資料約束(如資料類型、主鍵限制等)。因此,最終的同步效果和資料一致性行為,直接取決於源端和目標端的具體實現規則。

寫入端資料一致性排查

Data Integration的Writer外掛程式用來將源端讀取到的資料寫入至資料目標端,每一個目標資料來源類型都會有對應的Writer外掛程式,Writer外掛程式會根據使用者配置的資料寫入模式(包括衝突替換策略),使用JDBC或者對應資料來源SDK最終將資料提交給目標儲存。

說明

資料實際在目標端寫入效果和資料內容,寫入模式、目標資料表條件約束資訊有關。

如果資料同步任務執行完成後,對於資料同步品質(資料條數、資料內容)有相關疑問,在寫入端可以嘗試從下列常見情況對照排查:

原因

問題描述

解決方案

寫入模式配置不當

Writer外掛程式會使用選擇的寫入模式將源頭資料在目標端執行重放,如果源頭資料和目標表結構出現資料約束,會對應導致資料插入失敗(髒資料)、資料插入忽略、資料插入替換等行為。

根據業務需求選擇正確的寫入模式。詳情請參見附表:關係型資料庫寫入模式詳解

髒資料閾值觸發

因資料類型不匹配、內容超長等原因產生的髒資料超出任務配置的閾值,導致任務失敗,部分資料未寫入。

確認髒資料出現的原因,並解決髒資料問題,或者確認可否容忍忽略髒資料。

說明

若您任務不允許產生髒資料,您可以在任務配置 > 通道配置處,修改該閾值。配置任務髒資料閾值,詳情請參見嚮導模式配置,關於髒資料認定,詳情請參見基本概念

資料查詢時機過早

在同步任務完成前進行資料查詢。部分資料來源(如Hive、MaxCompute(可配))的資料在任務結束前可能部分或完全不可見。

始終在確認同步任務執行個體成功運行後,再對目標表進行資料查詢和校正。

節點依賴缺失

下遊分析任務與上遊同步任務未配置明確的DAG依賴,導致下遊任務在資料同步完成前開始執行,讀到不完整的資料。

在DataStudio中為上下遊任務配置明確的父子節點依賴關係。避免使用max_pt等弱依賴方式。

目標表、分區有多個同步任務同時在執行,併產生了幹擾

不合理的同步任務並發執行。

  • 以MaxCompute、Hologres為例,2個任務寫同一個分區資料(同步前清理分區資料 truncate),第一個任務寫入的資料可能會被第2個同步任務清理掉。

  • 關聯式資料庫配置了前置處理preSql、後置處理postSql等,第一個任務寫入的資料可能會被第2個同步任務的前後置SQL幹擾。

  • 如果是同節點多周期執行個體導致的衝突,可配置本節點(自依賴),確保上一周期執行個體完成後再開始下一周期。

  • 避免設計並發寫入同一目標的任務。

任務配置不能等冪執行

任務設計不具備等冪性(即多次運行結果不同),在重跑後導致資料重複插入或錯誤覆蓋。

1. 優先將任務設計為等冪(如使用REPLACE INTO模式)。
2. 若無法實現等冪,則謹慎執行重跑,並配置任務成功警示,避免不必要的重試。

分區運算式錯誤

以MaxCompute為例,大多數情況下資料表都是分區表,分區值是DataWorks調度參數如$bizdate,常見的錯誤:

  • 調度參數沒有合理的替換,即資料寫入到ds=$bizdate這個字面值分區中,而非實際的業務日期(如ds=20230118中)。

  • 或者下遊在查詢使用資料時,分區運算式沒有正確賦值,查詢使用了錯誤的分區資料。

檢查資料同步任務的Variant 運算式,即調度參數配置是否符合預期,同時,查看任務執行個體的執行參數是否符合預期。

資料類型或時區不匹配

源端與目標端的資料類型或時區設定不一致,導致資料在寫入時被截斷、轉換錯誤,或在比對時出現差異。

  • 確認源頭和目標類型、時區的差異。

  • 確認是否保持現狀,或者修改目標資料類型和時區參數。

目標端資料發生變化

目標資料來源若被其他應用並發寫入,將導致其內容與源端資料不一致。

確保在同步視窗內,目標表不被其他進程寫入。若並發寫入是預期行為,則需接受資料差異。

附表:關係型資料庫寫入模式詳解

協議類型

寫入模式

行為描述(當資料衝突時)

行為描述(當資料不衝突時)

主要適用情境

通用/MySQL協議

insert into

寫入失敗,產生髒資料。

正常插入新資料。

全量或增量追加,不希望覆蓋或修改現有資料。

replace into

替換舊行。先刪除舊行,再插入新行。

正常插入新資料。

需要用最新資料完全覆蓋舊記錄的情境。

insert into ... on duplicate key update

更新舊行。保留舊行,僅用新資料更新指定欄位。

正常插入新資料。

需要更新記錄部分欄位,同時保留其他欄位(如建立時間)的情境。

insert ignore into

忽略新行,不寫入也不報錯。

正常插入新資料。

只希望插入不存在的資料,對於已存在的記錄不做任何操作。

PostgreSQL

insert on conflict do nothing

忽略新行,不寫入也不報錯。

正常插入新資料。

只希望插入不存在的資料,對於已存在的記錄不做任何操作。

insert on conflict do update

更新舊行。使用新資料更新衝突行中的指定欄位。

正常插入新資料。

更新記錄的部分欄位,同時保留其他欄位(如建立時間)。

copy on conflict do nothing

丟棄衝突行。使用高效能COPY協議,遇到衝突時忽略新資料,不產生髒資料。

正常批量插入新資料。

大批量資料的高效追加,允許跳過已存在的重複記錄。

copy on conflict do update

更新衝突行。使用COPY協議,遇到衝突時用新資料覆蓋舊資料。

正常批量插入新資料。

大批量資料的高效同步,需要用最新資料完全覆蓋舊記錄。

-

merge into

不支援。

讀取端資料一致性排查

Data Integration的Reader外掛程式用來串連具體的源頭資料存放區,抽取出待同步的資料並投遞給同步寫端。每一個儲存類型都會有對應的Reader外掛程式,Reader外掛程式會根據使用者配置的資料幫浦模式(包括資料過濾條件、表、分區、列等),使用JDBC或者對應資料來源SDK最終將資料幫浦出來。

說明

資料實際讀出效果和資料同步機制、源頭資料是否變化、任務配置等有關。

如果資料同步任務執行完成後,對於資料同步品質(資料條數、資料內容)有相關疑問,在讀取端您可以嘗試從下列常見情況對照排查:

問題

問題描述

解決方案

源端資料並發變更

  • 在資料讀取期間,外部應用可能仍在修改源端資料。因此,同步任務捕獲的是“讀取時刻”的資料快照,而非絕對的最新資料。

  • 為實現並行讀取,一個同步Job會被切分為多個Task(獨立的資料庫查詢)。由於資料庫的事務隔離性,每個Task擷取的是不同時間點的資料快照,導致無法捕獲在所有Task啟動後發生的資料變更。

接受此行為作為高輸送量資料同步的正常預期。多次運行任務,其結果可能因源端資料的即時變化而存在差異。

錯誤的查詢檢查條件

  • 以MySQL為例,可以配置資料幫浦過濾where條件,在where條件中有調度參數變數,具體如gmt_modify >= ${bizdate},常見的錯誤是調度參數沒有合理的替換,比如需要最近兩天的資料卻只過濾讀取1天的資料。

  • 以MaxCompute為例,在讀取分區表時往往會對分區參數組態變數運算式,比如pt=${bizdate},也容易出現分區參數未正確配置和替換的現象。

檢查資料同步任務的調度Variant 運算式,即調度參數配置是否符合預期,調度時參數替換值是否符合預期。

讀端髒資料

讀取源頭資料時發生解析失敗。這在結構化資料庫中很少見,但在半結構化資料來源(如OSS/HDFS中的CSV、JSON檔案)中,可能因格式錯誤導致部分資料無法讀取。

  • 檢查任務作業記錄中的解析錯誤或格式異常資訊,修複源頭資料檔案

  • 調整髒資料容錯配置。

環境資訊排查

問題

解決方案

查詢資料時,資料來源、表、分區選擇錯誤

  • DataWorks標準模式下的工作空間資料源開發生產隔離,單表離線同步在開發環境運行任務使用開發資料來源,在生產環境運行任務使用生產資料來源。在對資料的數量和內容進行比對,需要確認下使用的資料來源環境,避免開發、生產查詢不一致。

  • 在實際生產業務當中,線上資料來源往往有對應的預發或者測試環境,而實際同步任務使用的生產資料庫和預發測試資料庫不一致,需要進行資料檢查對比是否有環境差異。

  • 在半結構化資料同步時往往涉及多個檔案同步,您需要確認資料讀取、寫入的檔案集合是否完整。

依賴產出未完成

如果是周期產出的資料(周期的資料同步任務、周期的全增量資料融合Merge任務等),需要檢查下對應的依賴的資料產出任務是否正常執行並完成。

說明

通用排查在您遇到資料品質方面的疑惑時,您可以嘗試多次運行任務觀察比對資料同步效果,也可以嘗試切換源或者對目標資料來源做對比測試,通過多次對比測試可以協助您縮小問題排查範圍。