Я следую этому учебнику для загрузки данных в Azure SQL из плоского файла в BLOB-объекте.
Для этого метода требуется C#. NET Framework консольное приложение для создания / управления набором данных Blob, Azure SQL и фабрикой данных.
Единственная проблема заключается в том, что с большими, грязными файлами данных я неизбежно сталкиваюсь с некоторыми строками, которые содержат дополнительный разделитель или которые как-то иначе искажены. Данные слишком велики, чтобы их можно было локально очистить перед загрузкой в BLOB-объект.
Обычным решением является игнорирование плохих строк, т. Е. разрешение отказоустойчивости .
пример того, как сделать это с 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"
}
}
Однако я не смог определить, есть ли какой-нибудь эквивалент для этого в C#. Я попытался изменить исходную строку подключения для приемника Azure SQL из этого:
// Specify the sink Azure SQL Database information
string azureSqlConnString =
"Server=tcp:mydb.database.windows.net,1433;" +
"Database=mydb;" +
"User ID=myuser;" +
"Password=mypassword;" +
"Trusted_Connection=False;Encrypt=True;Connection Timeout=30";
string azureSqlTableName = "dbo.mytable";
string storageLinkedServiceName = "AzureStorageLinkedService";
string sqlDbLinkedServiceName = "AzureSqlDbLinkedService";
string blobDatasetName = "BlobDataset";
string sqlDatasetName = "SqlDataset";
string pipelineName = "Adfv2TutorialBlobToSqlCopy";
до этого:
// Specify the sink Azure SQL Database information
string azureSqlConnString =
"Server=tcp:mydb.database.windows.net,1433;" +
"Database=mydb;" +
"User ID=myuser;" +
"Password=mypassword;" +
"enableSkipIncompatibleRow= true;" +
"Trusted_Connection=False;Encrypt=True;Connection Timeout=30";
string azureSqlTableName = "dbo.mytable";
string storageLinkedServiceName = "AzureStorageLinkedService";
string sqlDbLinkedServiceName = "AzureSqlDbLinkedService";
string blobDatasetName = "BlobDataset";
string sqlDatasetName = "SqlDataset";
string pipelineName = "Adfv2TutorialBlobToSqlCopy";
в качестве предположения, но это не сработало :
"message": "ErrorCode = UserErrorInvalidDbConnectionString, 'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException, Message = Предоставлена неверная строка подключения к базе данных. Проверьте строку подключения на стороне' Sink '. , Source = Microsoft.DataTransfer.ClientLibrary, '' Type = System.ArgumentException, Message = Keyword не поддерживается: 'enableskipincompatiblerow'., Source = System.Data, '",
Есть ли способ сделать это?
Свойство SkipErrorFile
класса CopyActivity
говорит, что оно получает или устанавливает отказоустойчивость. Я получил реализацию CopyActivity
, чтобы принять свойство с SkipErrorFile = new SkipErrorFile { }
, но, похоже, оно не изменило поведение желаемым образом.