Отказоустойчивость действия копирования в конвейерах Фабрики данных Azure и Synapse Analytics
ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics
Совет
Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !
При копировании данных из исходного в целевое хранилище действие копирования обеспечивает определенный уровень отказоустойчивости для предотвращения сбоев в ходе перемещения данных. Допустим, вы копируете миллионы строк из исходного в целевое хранилище, при этом в целевой базе данных создан первичный ключ, а в исходной базе данных первичные ключи не определены. При копировании повторяющихся строк произойдет сбой из-за нарушения первичного ключа в целевой базе данных. На данном этапе действие копирования предлагает два способа решения таких проблем:
- Можно прервать действие копирования при возникновении какой-либо ошибки.
- Можно продолжить копирование оставшихся элементов, включив отказоустойчивость, чтобы пропускать несовместимые данные. Например, можно пропустить повторяющуюся строку в этом случае. Кроме того, можно зарегистрировать пропущенные данные в журнале сеанса, включив его в рамках действия копирования. Дополнительные сведения см. в журнале сеансов для действия копирования.
Копирование двоичных файлов
Служба поддерживает следующие сценарии отказоустойчивости при копировании двоичных файлов. Вы можете прервать действие копирования или продолжить копирование остальных элементов в следующих сценариях:
- Файлы, которые копируются службой, в это же время удаляются другими приложениями.
- Некоторые папки или файлы не позволяют службе получить доступ, так как списки ACL для этих файлов или папок требуют более высокого уровня разрешений, чем у настроенного подключения.
- Один или несколько файлов не проверяются на согласованность между исходным и целевым хранилищами, если включена проверка согласованности данных.
Включение отказоустойчивости с помощью пользовательского интерфейса
Чтобы настроить отказоустойчивость для действия копирования в конвейере с помощью пользовательского интерфейса, сделайте следующее:
Если вы еще не создали действие копирования для конвейера, выполните поиск по запросу копирование на панели действий конвейера и перетащите действие копирования данных на холст конвейера.
Выберите новое действие копирования данных на холсте, если оно еще не выбрано, и перейдите на вкладку Параметры, чтобы настроить отказоустойчивость.
Настройка
При копировании двоичных файлов между хранилищами можно включить отказоустойчивость, как показано ниже.
{
"name": "CopyActivityFaultTolerance",
"type": "Copy",
"typeProperties": {
"source": {
"type": "BinarySource",
"storeSettings": {
"type": "AzureDataLakeStoreReadSettings",
"recursive": true
}
},
"sink": {
"type": "BinarySink",
"storeSettings": {
"type": "AzureDataLakeStoreWriteSettings"
}
},
"skipErrorFile": {
"fileMissing": true,
"fileForbidden": true,
"dataInconsistency": true,
"invalidFileName": true
},
"validateDataConsistency": true,
"logSettings": {
"enableCopyActivityLog": true,
"copyActivityLogSettings": {
"logLevel": "Warning",
"enableReliableLogging": false
},
"logLocationSettings": {
"linkedServiceName": {
"referenceName": "ADLSGen2",
"type": "LinkedServiceReference"
},
"path": "sessionlog/"
}
}
}
}
Свойство | Description | Допустимые значения | Обязательное поле |
---|---|---|---|
skipErrorFile | Группа свойств для указания типов сбоев, которые необходимо пропустить во время перемещения данных. | No | |
fileMissing | Одна из пар "ключ-значение" в контейнере свойств skipErrorFile, определяющая необходимость пропуска файлов, которые удаляются другими приложениями, когда служба выполняет операцию копирования. – True: необходимо скопировать остальные файлы, пропуская файлы, удаляемые другими приложениями. – False: необходимо прервать действие копирования в случае удаления каких-либо файлов из исходного хранилища в ходе перемещения данных. Обратите внимание, что по умолчанию это свойство имеет значение True. |
True(default) False |
No |
fileForbidden | Одна из пар "ключ-значение" в контейнере свойств skipErrorFile, определяющая необходимость пропуска определенных файлов, если списки ACL для этих файлов или папок требуют более высокого уровня разрешений, чем у настроенного подключения. – True: необходимо скопировать остальные файлы, пропуская эти. – False: необходимо прервать действие копирования при возникновении проблемы с разрешениями для папок или файлов. |
Истинный False (по умолчанию) |
No |
dataInconsistency | Одна из пар "ключ-значение" в контейнере свойств skipErrorFile, определяющая необходимость пропуска несогласованных данных между исходным и целевым хранилищами. – True: необходимо скопировать остальные данные, пропуская несогласованные. — False: необходимо прервать действие копирования при обнаружении несогласованных данных. Обратите внимание, что это свойство действительно, только если свойство validateDataConsistency имеет значение True. |
Истинный False (по умолчанию) |
No |
invalidFileName | Одна из пар «ключ-значение» в контейнере свойств skipErrorFile для определения необходимости пропуска определенных файлов, если имена файлов недопустимы для целевого хранилища. - True: необходимо скопировать остальные файлы, пропуская файлы с недопустимыми именами. - False: необходимо прервать действие копирования при обнаружении недопустимых имен файлов. Имейте в виду, что это свойство работает только при копировании двоичных файлов из любого хранилища в ADLS 2-го поколения или при копировании двоичных файлов из AWS S3 в любое хранилище. |
Истинный False (по умолчанию) |
No |
logSettings | Группа свойств, которые можно указать, если вы хотите зарегистрировать имена пропущенных объектов в журнале. | No | |
linkedServiceName | Связанная служба хранилища BLOB-объектов Azure или Azure Data Lake Storage 2-го поколения для хранения файлов журнала сеанса. | Имя связанной службы AzureBlobStorage или AzureBlobFS , которая ссылается на экземпляр хранилища, используемый для хранения файла журнала. |
No |
path | Путь к файлам журнала. | Укажите путь, используемый для хранения файлов журнала. Если путь не указан, служба создаст контейнер самостоятельно. | No |
Примечание.
Ниже приведены предварительные требования для включения отказоустойчивости в действии копирования при копировании двоичных файлов. Для пропуска определенных файлов при их удалении из исходного хранилища:
- Исходный набор данных и набор данных приемника должны иметь двоичный формат, а также не нужно указывать тип сжатия.
- Поддерживаемые типы хранилища данных: хранилище BLOB-объектов Azure, Azure Data Lake Storage 1-го поколения, Azure Data Lake Storage 2-го поколения, Файлов Azure, файловая система, FTP, SFTP, Amazon S3, Google Cloud Storage и HDFS.
- Только при указании нескольких файлов в исходном наборе данных, который может быть папкой, подстановочным знаком или списком файлов, действие копирования может пропустить определенные некорректные файлы. Если один файл в исходном наборе данных выбран для копирования в целевое расположение, при возникновении любой ошибки действие копирования завершится ошибкой.
Для пропуска определенных файлов, доступ к которым закрыт из исходного хранилища:
- Исходный набор данных и набор данных приемника должны иметь двоичный формат, а также не нужно указывать тип сжатия.
- Поддерживаемые типы хранилища данных: хранилище BLOB-объектов Azure, Azure Data Lake Storage 1-го поколения, Azure Data Lake Storage 2-го поколения, Файлов Azure, SFTP, Amazon S3 и HDFS.
- Только при указании нескольких файлов в исходном наборе данных, который может быть папкой, подстановочным знаком или списком файлов, действие копирования может пропустить определенные некорректные файлы. Если один файл в исходном наборе данных выбран для копирования в целевое расположение, при возникновении любой ошибки действие копирования завершится ошибкой.
Для пропуска определенных файлов, при проверке которых обнаружена несогласованность данных в исходном и целевом хранилище:
- Дополнительные сведения см. в документе о согласованности данных здесь.
Наблюдение
Выходные данные действия копирования
С помощью выходных данных каждого выполнения действия копирования можно получить количество считанных, записанных и пропущенных файлов.
"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"
}
}
Журнал сеанса действия копирования
Если вы настроили регистрацию имен пропущенных файлов в журнале, файл журнала можно найти по этому пути: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. Ниже приведена схема файла журнала.
Столбец | Description |
---|---|
Метка времени | Метка времени для пропуска файла. |
Уровень | Уровень ведения журнала для этого элемента. Для элемента, обозначающего пропуск файла, будет использоваться уровень Warning. |
OperationName | Рабочее поведение действия копирования для каждого файла. Для пропуска файла будет использоваться значение FileSkip. |
OperationItem | Имена пропускаемых файлов. |
Сообщение | Дополнительные сведения о причине пропуска файла. |
Ниже приведен пример файла журнала.
Timestamp,Level,OperationName,OperationItem,Message
2020-03-24 05:35:41.0209942,Warning,FileSkip,"bigfile.csv","File is skipped after read 322961408 bytes: ErrorCode=UserErrorSourceBlobNotExist,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The required Blob is missing. ContainerName: https://transferserviceonebox.blob.core.windows.net/skipfaultyfile, path: bigfile.csv.,Source=Microsoft.DataTransfer.ClientLibrary,'."
2020-03-24 05:38:41.2595989,Warning,FileSkip,"3_nopermission.txt","File is skipped after read 0 bytes: ErrorCode=AdlsGen2OperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=ADLS Gen2 operation failed for: Operation returned an invalid status code 'Forbidden'. Account: 'adlsgen2perfsource'. FileSystem: 'skipfaultyfilesforbidden'. Path: '3_nopermission.txt'. ErrorCode: 'AuthorizationPermissionMismatch'. Message: 'This request is not authorized to perform this operation using this permission.'. RequestId: '35089f5d-101f-008c-489e-01cce4000000'..,Source=Microsoft.DataTransfer.ClientLibrary,''Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Operation returned an invalid status code 'Forbidden',Source=,''Type=Microsoft.Azure.Storage.Data.Models.ErrorSchemaException,Message='Type=Microsoft.Azure.Storage.Data.Models.ErrorSchemaException,Message=Operation returned an invalid status code 'Forbidden',Source=Microsoft.DataTransfer.ClientLibrary,',Source=Microsoft.DataTransfer.ClientLibrary,'."
Из журнала выше можно узнать, что файл bigfile.csv был пропущен из-за того, что другое приложение удалило его во время копирования службой. А файл 3_nopermission.txt был пропущен, так как службе не удалось получить к нему доступ из-за проблемы с разрешениями.
Копирование табличных данных
Поддерживаемые сценарии
Действие копирования поддерживает три сценария для обработки несовместимых табличных данных: обнаружение, пропуск и запись в журнал.
Несовместимость между типом данных источника и собственным типом приемника.
Пример. Выполняется копирование данных из CSV-файла в хранилище BLOB-объектов в базу данных SQL с использованием определения схемы, которое содержит три столбца типа INT. Строки CSV-файла, которые содержат числовые данные, например 123,456,789, успешно копируются в хранилище приемника. А строки, которые содержат нечисловые значения, например 123,456, abc, определяются как несовместимые и пропускаются.
Несоответствие числа столбцов между источником и приемником.
Пример. Выполняется копирование данных из CSV-файла в хранилище BLOB-объектов в базу данных SQL с использованием определения схемы, которое содержит шесть столбцов. Строки CSV-файла, которые содержат шесть столбцов, успешно копируются в хранилище приемника. Строки CSV-файла, которые содержат больше шести столбцов, определяются как несовместимые и пропускаются.
Нарушение первичного ключа при записи в SQL Server, Базу данных SQL Azure или Azure Cosmos DB.
Пример. Выполняется копирование данных из SQL Server в базу данных SQL. Определен первичный ключ в базе данных SQL приемников, но такой первичный ключ не определен на исходном сервере SQL Server. Повторяющиеся строки, которые существуют в источнике, не удается скопировать в приемник. Действие копирования копирует только первую строку исходных данных в приемник. Последующие строки в источнике, которые содержат повторяющиеся значения первичного ключа, определяются как несовместимые и пропускаются.
Примечание.
- Чтобы загрузить данные в Azure Synapse Analytics с помощью PolyBase, настройте встроенные параметры отказоустойчивости в PolyBase, указав политики отклонения с помощью параметра polyBaseSettings в действии копирования. По-прежнему можно включить перенаправление несовместимых строк PolyBase в BLOB-объект или ADLS в обычном режиме, как показано ниже.
- Эта функция не применяется, когда действие копирования настроено на вызов Amazon Redshift Unload.
- Эта функция не применяется, если действие копирования настроено для вызова хранимой процедуры из приемника SQL или использования Upsert для записи данных в приемник SQL.
Настройка
В следующем примере приводится определение JSON для настройки пропуска несовместимых строк в действии копирования.
"typeProperties": {
"source": {
"type": "AzureSqlSource"
},
"sink": {
"type": "AzureSqlSink"
},
"enableSkipIncompatibleRow": true,
"logSettings": {
"enableCopyActivityLog": true,
"copyActivityLogSettings": {
"logLevel": "Warning",
"enableReliableLogging": false
},
"logLocationSettings": {
"linkedServiceName": {
"referenceName": "ADLSGen2",
"type": "LinkedServiceReference"
},
"path": "sessionlog/"
}
}
},
Свойство | Description | Допустимые значения | Обязательное поле |
---|---|---|---|
enableSkipIncompatibleRow | Указывает, следует ли пропустить несовместимые строки во время копирования или нет. | Истина False (по умолчанию) |
No |
logSettings | Группа свойств, которые можно указать, если вы хотите записать несовместимые строки в журнал. | No | |
linkedServiceName | Связанная служба хранилища BLOB-объектов Azure или Azure Data Lake Storage Gen2 для хранения журнала, содержащего пропущенные строки. | Имя связанной службы AzureBlobStorage или AzureBlobFS , которая ссылается на экземпляр хранилища, используемый для хранения файла журнала. |
No |
path | Путь к файлам журнала, содержащего пропущенные строки. | Укажите путь к журналу, в котором будут храниться несовместимые данные. Если путь не указан, служба создаст контейнер самостоятельно. | No |
Мониторинг пропущенных строк
Когда действие копирования будет завершено, вы увидите число пропущенных строк в выходных данных действия копирования:
"output": {
"dataRead": 95,
"dataWritten": 186,
"rowsCopied": 9,
"rowsSkipped": 2,
"copyDuration": 16,
"throughput": 0.01,
"logFilePath": "myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
"errors": []
},
Если вы настроили регистрацию несовместимых строк в журнале, файл журнала можно найти по этому пути: 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. Ниже приведена схема файла журнала.
Столбец | Description |
---|---|
Метка времени | Метка времени для пропуска несовместимых строк. |
Уровень | Уровень ведения журнала для этого элемента. Для элемента, обозначающего пропуск строк, будет использоваться уровень Warning. |
OperationName | Рабочее поведение действия копирования для каждой строки. Для пропуска несовместимой строки будет использоваться значение TabularRowSkip. |
OperationItem | Пропущенные данные из исходного хранилища данных. |
Сообщение | Дополнительные сведения о причине несовместимости конкретной строки. |
Ниже приведен пример содержимого файла журнала:
Timestamp, Level, OperationName, OperationItem, Message
2020-02-26 06:22:32.2586581, Warning, TabularRowSkip, """data1"", ""data2"", ""data3""," "Column 'Prop_2' contains an invalid value 'data3'. Cannot convert 'data3' to type 'DateTime'."
2020-02-26 06:22:33.2586351, Warning, TabularRowSkip, """data4"", ""data5"", ""data6"",", "Violation of PRIMARY KEY constraint 'PK_tblintstrdatetimewithpk'. Cannot insert duplicate key in object 'dbo.tblintstrdatetimewithpk'. The duplicate key value is (data4)."
Из приведенного выше примера файла журнала можно увидеть, что одна строка, "data1, data2, data3", была пропущена из-за проблемы с преобразованием типов при копировании из исходного в целевое хранилище. Другая строка, "data4, data5, data6", была пропущена из-за проблемы с нарушением первичного ключа в целевом хранилище.
Копирование табличных данных (устаревший способ)
Ниже описан устаревший способ обеспечения отказоустойчивости, который применяется только при копировании табличных данных. При создании нового конвейера или действия вместо него рекомендуется начать с этого.
Настройка
В следующем примере приводится определение JSON для настройки пропуска несовместимых строк в действии копирования.
"typeProperties": {
"source": {
"type": "BlobSource"
},
"sink": {
"type": "SqlSink",
},
"enableSkipIncompatibleRow": true,
"redirectIncompatibleRowSettings": {
"linkedServiceName": {
"referenceName": "<Azure Storage or Data Lake Store linked service>",
"type": "LinkedServiceReference"
},
"path": "redirectcontainer/erroroutput"
}
}
Свойство | Description | Допустимые значения | Обязательное поле |
---|---|---|---|
enableSkipIncompatibleRow | Указывает, следует ли пропустить несовместимые строки во время копирования или нет. | Истина False (по умолчанию) |
No |
redirectIncompatibleRowSettings | Группа свойств, которые можно указать, если вы хотите записать несовместимые строки в журнал. | No | |
linkedServiceName | Связанная служба хранилища Azure или Azure Data Lake Store, в которой будет храниться журнал, содержащий пропущенные строки. | Имя связанной службы AzureStorage или AzureDataLakeStore , которая ссылается на экземпляр хранилища, используемый для хранения файла журнала. |
No |
path | Путь к файлу журнала, который содержит пропущенные строки. | Укажите путь к журналу, в котором будут храниться несовместимые данные. Если путь не указан, служба создаст контейнер самостоятельно. | No |
Мониторинг пропущенных строк
Когда действие копирования будет завершено, вы увидите число пропущенных строк в выходных данных действия копирования:
"output": {
"dataRead": 95,
"dataWritten": 186,
"rowsCopied": 9,
"rowsSkipped": 2,
"copyDuration": 16,
"throughput": 0.01,
"redirectRowPath": "https://myblobstorage.blob.core.windows.net//myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
"errors": []
},
При настройке записи несовместимых строк файл журнала можно найти по этому пути: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/[copy-activity-run-id]/[auto-generated-GUID].csv
.
Файлы журнала должны быть представлены только в формате CSV. Пропущенные исходные данные при необходимости регистрируются с использованием запятой в качестве разделителя столбцов. Добавим к исходным данным источника в файле журнала два дополнительных столбца — ErrorCode и ErrorMessage. В них содержатся сведения о первопричине несовместимости. ErrorCode и ErrorMessage указываются в двойных кавычках.
Ниже приведен пример содержимого файла журнала:
data1, data2, data3, "UserErrorInvalidDataValue", "Column 'Prop_2' contains an invalid value 'data3'. Cannot convert 'data3' to type 'DateTime'."
data4, data5, data6, "2627", "Violation of PRIMARY KEY constraint 'PK_tblintstrdatetimewithpk'. Cannot insert duplicate key in object 'dbo.tblintstrdatetimewithpk'. The duplicate key value is (data4)."
Связанный контент
См. другие статьи о действии копирования: