Проверка согласованности данных в действии копирования

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

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

Поддерживаемые хранилища данных и сценарии

  • Проверка согласованности данных поддерживается всеми соединителями, за исключением соединителей FTP, SFTP, HTTP, Snowflake, Office 365 и Azure Databricks Delta Lake.
  • Проверка согласованности данных не поддерживается в сценарии промежуточного копирования.
  • При копировании двоичных файлов проверка согласованности доступна только в том случае, если в действии копирования задано поведение "PreserveHierarchy".
  • При копировании нескольких двоичных файлов в одном действии копирования с включенной проверкой согласованности можно либо прервать действие копирования, либо продолжить копирование остальных элементов, включив параметр отказоустойчивости для пропуска несогласованных файлов.
  • При копировании таблицы в одном действии копирования с включенной проверкой согласованности действие копирования завершается ошибкой, если число строк, считанных из источника, отличается от суммы числа строк, скопированных в целевое хранилище, и числа пропущенных несогласованных строк.

Конфигурация

В следующем примере представлено определение JSON для включения проверки согласованности данных в действие копирования.

"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 (по умолчанию)
Нет
dataInconsistency Одна из пар "ключ-значение" в контейнере свойств skipErrorFile, определяющая необходимость пропуска несогласованных файлов.
— True: необходимо скопировать остальные файлы, пропуская несогласованные.
— False: необходимо прервать действие копирования при обнаружении несогласованных файлов.
Обратите внимание, что это свойство действительно только при копировании двоичных файлов и в том случае, если свойство validateDataConsistency имеет значение True.
True
False (по умолчанию)
Нет
logSettings Группа свойств, которые можно указать, если необходимо включить ведение журнала пропущенных файлов. Нет
linkedServiceName Связанная служба хранилища BLOB-объектов Azure или Azure Data Lake Storage 2-го поколения для хранения файлов журнала сеанса. Имя связанной службы AzureBlobStorage или AzureBlobFS, которая ссылается на экземпляр хранилища, используемый для хранения файла журнала. Нет
path Путь к файлам журнала. Укажите путь, по которому следует хранить файлы журнала. Если путь не указан, служба создаст контейнер самостоятельно. Нет

Примечание

  • При копировании двоичных файлов из BLOB-объекта Azure или Azure Data Lake Storage 2-го поколения либо в них служба выполняет проверку контрольной суммы MD5 на уровне блоков, используя API BLOB-объектов Azure и API Azure Data Lake Storage 2-го поколения. Если ContentMD5 для файлов существует в хранилище BLOB-объектов Azure или Azure Data Lake Storage 2-го поколения в качестве источников данных, служба проверяет контрольную сумму MD5 на уровне файлов после их считывания. После копирования файлов в BLOB-объект Azure или Azure Data Lake Storage 2-го поколения в качестве места назначения служба записывает ContentMD5 в BLOB-объект Azure или Azure Data Lake Storage 2-го поколения, после чего эти значения могут быть использованы последующими приложениями для дополнительной проверки согласованности данных.
  • Служба проверяет размер файлов при копировании двоичных файлов между хранилищами.

Наблюдение

Выходные данные действия копирования

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

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

  • Verified. Для скопированных данных выполнена проверка согласованности между исходным и конечным хранилищами.
  • NotVerified. Для скопированных данных не выполнена проверка согласованности, поскольку вы не включили параметр validateDataConsistency в действии копирования.
  • Unsupported. Скопированные данные не были проверены на согласованность, поскольку проверка согласованности данных не поддерживается для этой конкретной пары копирования.

Значение параметра InconsistentData:

  • Found. Действие копирования обнаружило несогласованные данные.
  • Skipped. Действие копирования обнаружило и пропустило несогласованные данные.
  • None. Действие копирования не обнаружило несогласованных данных. Причиной может быть либо то, что уже была выполнена проверка согласованности данных между исходным и конечным хранилищами, либо то, что отключили параметр 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.

Ниже приведена схема файла журнала.

Столбец Описание
Отметка времени Метка времени пропуска службой несогласованных файлов.
Level Уровень ведения журнала для этого элемента. Для элемента, обозначающего пропуск файла, будет использоваться уровень Warning.
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 стал несогласованным, указывают на то, что он был изменен другими приложениями при выполнении действия копирования службы.

Дальнейшие действия

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