複製活動中的資料一致性驗證

適用於: Azure Data Factory Azure Synapse Analytics

提示

Data Factory in Microsoft Fabric 是下一代的 Azure Data Factory,擁有更簡單的架構、內建 AI 及新功能。 如果你是資料整合新手,建議先從 Fabric Data Factory 開始。 現有的 ADF 工作負載可升級至 Fabric,以存取資料科學、即時分析與報告等新能力。

當您將資料從來源移至目的地存放區時,複製活動會提供一個選項,讓您執行進一步的資料一致性驗證,以確保資料不只會成功從來源複製到目的地存放區,還會在來源與目的地存放區之間驗證為一致。 在資料移動期間發現不一致的檔案之後,您可以啟用容錯設定來略過不一致的檔案,藉此中止複製活動或繼續複製其餘部分。 您可以在複製活動中啟用工作階段記錄設定,以取得略過的檔案名稱。 如需詳細資料,請參閱複製活動中的工作階段記錄。

支援的資料存放區和情境

  • 除了 FTP、SFTP、HTTP、Snowflake、Office 365 和 Azure Databricks Delta Lake 外,所有連接器都支援資料一致性驗證。
  • 暫存複製案例中不支援資料一致性驗證。
  • 複製二進位檔案時,只有在複製活動中設定 'PreserveHierarchy' 行為時,資料一致性驗證才可供使用。
  • 在已啟用資料一致性驗證的單一複製活動中複製多個二進位檔案時,您可以選擇中止複製活動,或讓容錯設定略過不一致的檔案,繼續複製其餘的檔案。
  • 在已啟用資料一致性驗證的單一複製活動中複製資料表時,如果從來源讀取的資料列數目與複製到目的地的資料列數目加上略過的不相容資料列數目不同,複製活動就會失敗。

組態

下列範例提供 JSON 定義,以啟用複製活動中的資料一致性驗證:

{
  "name":"CopyActivityDataConsistency",
  "type":"Copy",
  "typeProperties": { 
    "source": { 
        "type": "BinarySource", 
        "storeSettings": { 
            "type": "AzureDataLakeStoreReadSettings", 
            "recursive": true 
        } 
    }, 
    "sink": { 
        "type": "BinarySink", 
        "storeSettings": { 
            "type": "AzureDataLakeStoreWriteSettings" 
        } 
    }, 
    "validateDataConsistency": true, 
    "skipErrorFile": { 
        "dataInconsistency": true 
    }, 
    "logSettings": {
        "enableCopyActivityLog": true,
        "copyActivityLogSettings": {
            "logLevel": "Warning",
            "enableReliableLogging": false
        },
        "logLocationSettings": {
            "linkedServiceName": {
               "referenceName": "ADLSGen2",
               "type": "LinkedServiceReference"
            },
            "path": "sessionlog/"
        }
    }
} 
屬性 說明 允許的值 必要
validateDataConsistency(驗證資料一致性) 如果您將此屬性設為 true,在複製二進位檔案時,複製活動會檢查從來源到目的地儲存的每個二進位檔案的大小、最後修改日期和校驗和,以確保來源與目的地儲存之間的資料的一致性。 複製表格式資料時,複製活動會在作業完成之後檢查資料列總數,以確保從來源讀取的資料列總數與複製到目的地的資料列數目加上略過的不相容資料列數目相同。 請注意,啟用此選項會影響複製效能。 True
False (預設值)
No
資料不一致性 skipErrorFile 屬性包中的其中一個索引鍵值組,用來判斷您是否要略過不一致的檔案。
-True:您想略過不一致的檔案,並複製其餘內容。
- False:您想要在發現不一致的檔案時中止複製活動。
請注意,只有當您複製二進位檔案並將 validateDataConsistency 設定為 True 時,此屬性才有效。
True
False (預設值)
No
logSettings 可以指定一組屬性來啟用會話記錄,以記錄被略過的檔案。 No
linkedServiceName 連結服務 Azure Blob 儲存體 或 Azure Data Lake Storage Gen2 用於儲存會話日誌檔案。 AzureBlobStorage 或 AzureBlobFS 類型連結服務的名稱,指您用來儲存記錄檔的執行個體。 No
路徑 記錄檔的路徑。 指定您想要儲存記錄檔的路徑。 如不提供路徑,服務會為您建立容器。 No

注意

  • 當從或向 Azure Blob 或 Azure Data Lake Storage Gen2 複製二進位檔案時,服務會利用 Azure Blob API 和 Azure Data Lake Storage Gen2 API 執行區塊層級的校驗和驗證。 如果檔案上的 ContentMD5 存在於 Azure Blob 或 Azure Data Lake Storage Gen2 作為資料來源,服務在讀取檔案後也會進行檔案層級的校驗和驗證。 在將檔案複製到 Azure Blob 或 Azure Data Lake Storage Gen2 作為資料目的地後,服務會將 ContentMD5 寫入 Azure Blob 或 Azure Data Lake Storage Gen2,這些資料可被下游應用程式進一步用於資料一致性驗證。
  • 服務會在任何儲存體存放區之間複製二進位檔案時執行檔案大小驗證。

監視

複製活動的輸出

複製活動完全執行之後,您可以從每個複製活動執行的輸出查看資料一致性驗證的結果:

"output": {
            "dataRead": 695,
            "dataWritten": 186,
            "filesRead": 3,  
            "filesWritten": 1, 
            "filesSkipped": 2, 
            "throughput": 297,
            "logFilePath": "myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
            "dataConsistencyVerification": 
           { 
                "VerificationResult": "Verified", 
                "InconsistentData": "Skipped" 
           } 
        }

您可以從 [dataConsistencyVerification 屬性] 查看資料一致性驗證的詳細資料。

VerificationResult 的值:

  • 已驗證:已確認您複製的資料在來源與目的地存放區之間是一致的。
  • NotVerified: 您複製的資料尚未驗證為一致,因為您尚未在複製活動中啟用 validateDataConsistency。
  • 不支援: 您複製的資料尚未驗證為一致,因為此特定的複製組不支援資料一致性驗證。

InconsistentData 的值:

  • 發現:複製活動發現不一致的資料。
  • 已略過:複製活動已發現不一致的資料並加以略過。
  • 無:複製活動尚未發現任何不一致的資料。 這可能是因為您在來源與目的地存放區之間的資料已驗證為一致,或因為您已在複製活動中停用 validateDataConsistency。

複製活動的工作階段記錄

如果您設定記錄不一致的檔案,可以在此路徑中找到記錄檔:https://[your-blob-account].blob.core.windows.net/[path-if-configured]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].csv。 記錄檔是 csv 檔案。

記錄檔的結構描述如下所示:

欄位 說明
時間戳記 服務略過不一致檔案時的時間戳記。
層級 此項目的記錄層級。 它在顯示檔案略過的項目中屬於「Warning」層級。
操作名稱 每個檔案的複製操作行為。 'FileSkip' 用於指定要略過的檔案。
操作項目 要略過的檔案名稱。
訊息 更多資訊以說明為何檔案被略過。

記錄檔的範例如下所示:

Timestamp, Level, OperationName, OperationItem, Message
2020-02-26 06:22:56.3190846, Warning, FileSkip, "sample1.csv", "File is skipped after read 548000000 bytes: ErrorCode=DataConsistencySourceDataChanged,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Source file 'sample1.csv' is changed by other clients during the copy activity run.,Source=,'." 

從上述記錄檔中,您可以看到 sample1.csv 已略過,因為無法驗證其在來源與目的地存放區之間是一致的。 您可以深入了解 sample1.csv 為何會出現不一致的情況,是因為在複製活動進行時,其他應用程式同時更改了該檔案。

請參閱其他複製活動文章: