複製活動中的工作階段記錄

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費啟動新的試用版

您可以在複製活動中記錄複製的檔案名稱。 這有助於確保資料不僅能從來源成功複製到目的地,還能驗證來源與目的地之間的一致性。

當您在複製活動中啟用容錯設定來略過錯誤資料時,也可以記錄略過的檔案和略過的資料列。 您可以從複製活動容錯取得更多詳細資料。

由於您有機會透過啟用工作階段記錄來取得Azure Data Factory (ADF) 複製活動所複製的所有檔案名稱,因此在下列案例中很有幫助:

  • 使用 ADF 複製活動將檔案從一個儲存體複製到另一個儲存體之後,您會在目的地存放區中找到一些非預期的檔案。 您可以掃描複製活動工作階段記錄,以查看哪些活動在何時實際複製了檔案。 使用這種方法,您可以輕鬆地找到根本原因,並修正 ADF 中的設定。
  • 使用 ADF 複製活動將檔案從一個儲存體複製到另一個儲存體之後,您會發現複製到目的地的檔案不是來源存放區預期的檔案。 當 ADF 複製活動從來源存放區讀取這些記錄時,您可以掃描複製活動工作階段記錄,以取得複製作業的時間戳記,以及檔案的中繼資料。 使用這種方法,您可以確認 ADF 複製之後,來源存放區上的其他應用程式是否已更新檔案。

使用 Azure Data Factory Studio 進行設定

若要設定複製活動記錄,請先將複製活動新增至管線,然後使用其 [設定] 索引標籤來設定記錄和各種記錄選項。 Shows how to configure logging for a Copy activity in the settings tab.

若要後續監視記錄,您可以在管線執行下 ADF Studio 的 [監視] 索引標籤上檢查管線執行的輸出。 在該處選取您想要監視的管線執行,然後將滑鼠停留在 [活動名稱] 旁的區域,您可以在其中找到顯示管線輸入、輸出 (完成之後) 以及其他詳細資料的連結圖示。

Shows how to find the output of a Copy activity in ADF Studio.

選取輸出圖示 以查看作業記錄的詳細資料,並記下所選取儲存體帳戶中的記錄位置,您可以在其中查看所有記錄活動的詳細資料。

Shows the output of a Copy activity with logging enabled.

如需記錄輸出格式的詳細資訊,請參閱下方。

使用 JSON 進行設定

下列範例提供 JSON 定義,以啟用複製活動中的工作階段記錄:

{
  "name": "CopyActivityLog",
  "type": "Copy",
  "typeProperties": {
    "source": {
      "type": "BinarySource",
      "storeSettings": {
        "type": "AzureDataLakeStoreReadSettings",
        "recursive": true
      },
      "formatSettings": {
        "type": "BinaryReadSettings"
      }
    },
    "sink": {
      "type": "BinarySink",
      "storeSettings": {
        "type": "AzureBlobFSWriteSettings"
      }
    },
    "skipErrorFile": {
      "fileForbidden": true,
      "dataInconsistency": true
    },
    "validateDataConsistency": true,
    "logSettings": {
      "enableCopyActivityLog": true,
      "copyActivityLogSettings": {
        "logLevel": "Warning",
        "enableReliableLogging": false
      },
      "logLocationSettings": {
        "linkedServiceName": {
          "referenceName": "ADLSGen2",
          "type": "LinkedServiceReference"
        },
        "path": "sessionlog/"
      }
    }
  }
}
屬性 說明 允許的值 必要
enableCopyActivityLog 將其設定為 true 時,您有機會記錄複製的檔案、略過的檔案或略過的資料列。 True
False (預設)
No
logLevel 「資訊」會記錄所有複製的檔案、略過的檔案和略過的資料列。 「警告」只會記錄略過的檔案和略過的資料列。 資訊
警告 (預設)
No
enableReliableLogging 若為 true,可靠模式中的複製活動會在每個檔案複製到目的地之後立即排清記錄。 在複製活動中啟用可靠記錄模式來複製許多檔案時,您應該預期會影響輸送量,因為每個複製的檔案都需要雙重寫入作業。 一個要求會移至目的地存放區,另一個要求則會移至記錄儲存體存放區。 盡力而為模式的複製活動會在一段時間內使用一批記錄來排清記錄,而複製輸送量會降低影響。 此模式無法保證記錄的完整性和時間表,因為當複製活動失敗時,最後一批記錄事件有可能並未排清到記錄檔。 在此案例中,您會看到一些複製到目的地的檔案未記錄。 True
False (預設)
No
logLocationSettings 一組屬性,可用來指定儲存工作階段記錄的位置。 No
linkedServiceName 可儲存工作階段記錄檔的 Azure Blob 儲存體連結服務或 Azure Data Lake Storage Gen2 AzureBlobStorageAzureBlobFS 類型連結服務的名稱,其代表您要用來儲存記錄檔的執行個體。 No
path 記錄檔的路徑。 指定您想要儲存記錄檔的路徑。 如果不提供路徑,服務會為您建立容器。 No

監視

複製活動的輸出

複製活動完全執行之後,您可以從每個複製活動執行的輸出查看記錄檔的路徑。 您可以從以下路徑找到記錄檔:https://[your-blob-account].blob.core.windows.net/[logFilePath]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].txt。 產生的記錄檔具有 .txt 副檔名,且其資料是 CSV 格式。

"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" 
           } 
        }

注意

enableCopyActivityLog 屬性設定為 Enabled 時,記錄檔名稱是由系統產生。

記錄檔的結構描述

下表顯示記錄檔的結構描述。

資料行 描述
時間戳記 ADF 讀取、寫入或略過物件的時間戳記。
層級 此項目的記錄層級。 可以是「警告」或「資訊」。
OperationName 每個物件上的 ADF 複製活動作業行為。 可以是 'FileRead'、'FileWrite'、'FileSkip' 或 'TabularRowSkip'。
OperationItem 檔案名或略過的資料列。
訊息 詳細資訊,顯示檔案是否已從來源存放區讀取,或寫入目的地存放區。 也可能是檔案或資料列被略過的原因。

以下是記錄檔的範例:

Timestamp, Level, OperationName, OperationItem, Message
2020-10-19 08:39:13.6688152,Info,FileRead,"sample1.csv","Start to read file: {""Path"":""sample1.csv"",""ItemType"":""File"",""Size"":104857620,""LastModified"":""2020-10-19T08:22:31Z"",""ETag"":""\""0x8D874081F80C01A\"""",""ContentMD5"":""dGKVP8BVIy6AoTtKnt+aYQ=="",""ObjectName"":null}"
2020-10-19 08:39: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=,'." 
2020-10-19 08:40:13.6688152,Info,FileRead,"sample2.csv","Start to read file: {""Path"":""sample2.csv"",""ItemType"":""File"",""Size"":104857620,""LastModified"":""2020-10-19T08:22:31Z"",""ETag"":""\""0x8D874081F80C01A\"""",""ContentMD5"":""dGKVP8BVIy6AoTtKnt+aYQ=="",""ObjectName"":null}"
2020-10-19 08:40:13.9003981,Info,FileWrite,"sample2.csv","Start to write file from source file: sample2.csv."
2020-10-19 08:45:17.6508407,Info,FileRead,"sample2.csv","Complete reading file successfully. "
2020-10-19 08:45:28.7390083,Info,FileWrite,"sample2.csv","Complete writing file from source file: sample2.csv. File is successfully copied."

從上述記錄檔中,您可以看到 sample1.csv 已略過,因為無法驗證其在來源與目的地存放區之間是一致的。 您可以深入了解 sample1.csv 會不一致是因為當 ADF 複製活動同時複製時,其他應用程式會變更此檔案。 您也可以看到已成功從來源將 sample2.csv 複製到目的地存放區。

您可以使用多個分析引擎來進一步分析記錄檔。 以下有一些範例可以藉由將 csv 記錄檔匯入到 SQL 資料庫 (其中資料表名稱可以是 SessionLogDemo),使用 SQL 查詢來分析記錄檔。

  • 提供複製的檔案清單。
select OperationItem from SessionLogDemo where Message like '%File is successfully copied%'
  • 提供在特定時間範圍內複製的檔案清單。
select OperationItem from SessionLogDemo where TIMESTAMP >= '<start time>' and TIMESTAMP <= '<end time>' and Message like '%File is successfully copied%'
  • 提供特定檔案及其複製的時間和中繼資料。
select * from SessionLogDemo where OperationItem='<file name>'
  • 提供檔案清單及其在時間範圍內複製的中繼資料。
select * from SessionLogDemo where OperationName='FileRead' and Message like 'Start to read%' and OperationItem in (select OperationItem from SessionLogDemo where TIMESTAMP >= '<start time>' and TIMESTAMP <= '<end time>' and Message like '%File is successfully copied%')
  • 提供略過的檔案清單。
select OperationItem from SessionLogDemo where OperationName='FileSkip'
  • 提供為何略過特定檔案的原因。
select TIMESTAMP, OperationItem, Message from SessionLogDemo where OperationName='FileSkip'
  • 提供因為相同原因而略過的檔案清單:「Blob 檔案不存在」。
select TIMESTAMP, OperationItem, Message from SessionLogDemo where OperationName='FileSkip' and Message like '%UserErrorSourceBlobNotExist%'
  • 提供需要最長複製時間的檔案名稱。
select top 1 OperationItem, CopyDuration=DATEDIFF(SECOND, min(TIMESTAMP), max(TIMESTAMP)) from SessionLogDemo group by OperationItem order by CopyDuration desc

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