複製活動中的資料一致性驗證
適用於:Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft 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,複製二進位檔案時,複製活動會針對從來源複製到目的地存放區的每個二進位檔案,檢查檔案大小、lastModifiedDate 和 MD5 總和檢查碼,以確保來源與目的地存放區之間的資料一致性。 複製表格式資料時,複製活動會在作業完成之後檢查資料列總數,以確保從來源讀取的資料列總數與複製到目的地的資料列數目加上略過的不相容資料列數目相同。 請注意,啟用此選項會影響複製效能。 | True False (預設值) |
No |
dataInconsistency | skipErrorFile 屬性包中的其中一個機碼值組,用來決定您是否想要略過不一致的檔案。 -True:您想要略過不一致的檔案以複製其餘部分。 - False:您想要在發現不一致的檔案時中止複製活動。 請注意,只有當您複製二進位檔案並將 validateDataConsistency 設定為 True 時,此屬性才有效。 |
True False (預設值) |
No |
logSettings | 要啟用工作階段記錄以記錄略過的檔案時,可指定的一組屬性。 | No | |
linkedServiceName | 可儲存工作階段記錄檔的 Azure Blob 儲存體連結服務或 Azure Data Lake Storage Gen2。 | AzureBlobStorage 或 AzureBlobFS 類型連結服務的名稱,其代表您要用來儲存記錄檔的執行個體。 |
No |
path | 記錄檔的路徑。 | 指定您想要儲存記錄檔的路徑。 如不提供路徑,服務會為您建立容器。 | No |
注意
- 往返 Azure Blob 或 Azure Data Lake Storage Gen2 複製二進位檔案時,服務會利用 Azure Blob API 和 Azure Data Lake Storage Gen2 API 來執行區塊層級 MD5 總和檢查碼驗證。 如果 Azure Blob 或 Azure Data Lake Storage Gen2 上的檔案存在 ContentMD5 作為資料來源,則服務也會在讀取檔案之後執行檔案層級 MD5 總和檢查碼驗證。 將檔案複製到 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 檔案。
記錄檔的結構描述如下所示:
資料行 | 描述 |
---|---|
時間戳記 | 服務略過不一致檔案時的時間戳記。 |
層級 | 此項目的記錄層級。 在顯示檔案略過的項目中,其會處於 [警告] 層級。 |
OperationName | 每個檔案上的複製活動作業行為。 其將為 'FileSkip',可指定要略過的檔案。 |
OperationItem | 要略過的檔案名稱。 |
訊息 | 說明為何略過檔案的詳細資訊。 |
記錄檔的範例如下所示:
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 會不一致是因為當複製活動同時複製時,其他應用程式會變更此檔案。
相關內容
請參閱其他複製活動文章: