Журнал сеанса в действии Copy

ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics

Совет

Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !

Вы можете регистрировать имена скопированных файлов в действии Copy. Это может помочь обеспечить не только успешное копирование данных из источника в место назначения, но также проверить согласованность между источником и местом назначения.

Когда вы включаете параметр отказоустойчивости в действии Copy для пропуска ошибочных данных, пропущенные файлы и пропущенные строки также могут быть зарегистрированы. В действии копирования можно получить дополнительные сведения об отказоустойчивости.

Учитывая, что у вас есть возможность получить все имена файлов через действие Copy Фабрики данных Azure (ADF) посредством включения журнала сеансов, это будет полезно для вас в следующих сценариях:

  • После использования действий Copy ADF для копирования файлов из одного хранилища в другое в целевом хранилище вы обнаружите некоторые неожиданные файлы. Вы можете просмотреть журналы сеансов действия Copy, чтобы увидеть, какие действия фактически скопировали эти файлы и когда это произошло. При таком подходе вы можете легко найти первопричину и исправить свои конфигурации в ADF.
  • После использования действий Copy ADF для копирования файлов из одного хранилища в другое вы обнаружите, что файлы, скопированные в место назначения, не являются файлами, ожидаемыми из исходного хранилища. Вы можете сканировать журналы сеансов действия Copy, чтобы получить метку времени заданий копирования, а также метаданные файлов, когда действия Copy ADF считали их из исходного хранилища. При таком подходе можно подтвердить, были ли файлы обновлены другими приложениями в исходном хранилище после копирования с помощью ADF.

Настройка с помощью Studio Фабрики данных Azure

Чтобы настроить ведение журнала действий Copy, сначала добавьте действие Copy в конвейер, а затем используйте его вкладку параметров, чтобы настроить ведение журнала и различные параметры ведения журнала. Показывает, как настроить ведение журнала для действие Copy на вкладке параметров.

Чтобы впоследствии отслеживать журнал, вы можете проверить выходные данные запуска конвейера на вкладке мониторинга в Studio ADF в разделе выполнений конвейера. Там выберите выполнение конвейера, который вы хотите отслеживать, а затем наведите указатель мыши на область рядом с именем действия, где вы найдете значки со ссылками, показывающими входные и выходные данные конвейера (после завершения), а также другие сведения.

Показывает, как найти выходные данные действие Copy в ADF Studio.

Щелкните значок вывода , чтобы просмотреть сведения о ведении журнала для задания, и обратите внимание на расположение журнала в выбранной учетной записи хранения, где можно просмотреть сведения обо всех зарегистрированных действиях.

Отображает выходные данные действие Copy с включенным ведением журнала.

Дополнительные сведения о формате вывода журнала см. ниже.

Настройка с помощью 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/"
      }
    }
  }
}
Свойство Description Допустимые значения Обязательное поле
enableCopyActivityLog Если установлено значение true, у вас будет возможность регистрировать скопированные файлы, пропущенные файлы или пропущенные строки. Истина
False (по умолчанию)
No
LogLevel "Информация" будет записывать в журнал все скопированные файлы, пропущенные файлы и пропущенные строки. "Предупреждение" будет записывать только пропущенные файлы и пропущенные строки. Сведения
Предупреждение (по умолчанию)
No
enableReliableLogging Если значение — true, действие Copy в надежном режиме будет очищать журналы непосредственно после копирования каждого файла в место назначения. При копировании большого количества файлов с включенным режимом надежного ведения журнала в действии Copy следует ожидать снижения пропускной способности, так как для каждого скопированного файла требуются двойные операции записи. Один запрос следует в конечное хранилище, а другой — в хранилище журналов. Действие Copy в оптимальном режиме освободит журналы с пакетом записей в течение определенного периода времени, а пропускная способность копирования будет затронута гораздо меньше. Полнота и своевременность ведения журнала в этом режиме не гарантируется, так как есть несколько возможностей того, что последний пакет событий журнала не был освобожден в файл журнала при сбое действия Copy. В этом сценарии вы увидите, что несколько файлов, скопированных в место назначения, не регистрируются. Истина
False (по умолчанию)
No
logLocationSettings Группа свойств, которые можно использовать для указания расположения для хранения журналов сеанса. No
linkedServiceName Связанная служба хранилища BLOB-объектов Azure или Azure Data Lake Storage 2-го поколения для хранения файлов журнала сеанса. Имя связанной службы AzureBlobStorage или AzureBlobFS, которая ссылается на экземпляр хранилища, используемый для хранения файла журнала. No
path Путь к файлам журнала. Укажите путь, по которому следует хранить файлы журнала. Если путь не указан, служба создаст контейнер самостоятельно. No

Наблюдение

Выходные данные действия Copy

После полного выполнения действия копирования можно увидеть путь файлов журналов из выходных данных каждого запуска действия Copy. Файлы журнала можно найти по пути: 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, имена файлов журнала генерируются системой.

Схема файла журнала

В следующей таблице приведена схема файла журнала.

Столбец Description
Метка времени Метка времени на момент чтения, записи или пропуска объекта ADF.
Уровень Уровень ведения журнала для этого элемента. Может быть "Предупреждение" или "Информация".
OperationName Рабочее поведение действия Copy 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 становится несогласованным, а это потому, что он был изменен другими приложениями при выполнении действия Copy ADF. Можно увидеть, что файл sample2.csv успешно скопирован из источника в конечное хранилище.

Для дальнейшего анализа файлов журнала можно использовать несколько обработчиков анализа. Ниже приведено несколько примеров использования SQL-запроса для анализа файла журнала путем импорта файла журнала CSV в базу данных SQL, где имя таблицы может быть SessionLogDemo.

  • Отправьте мне список скопированных файлов.
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

См. другие статьи о действиях копирования: