Игнорировать неверные строки при копировании данных из Blob в Azure SQL через C#. NET Фабрика управляемых данных Framework Framework - PullRequest
1 голос
/ 04 апреля 2020

Я следую этому учебнику для загрузки данных в 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 { }, но, похоже, оно не изменило поведение желаемым образом.

1 Ответ

0 голосов
/ 05 апреля 2020

У меня есть обходной путь, но не верное решение, поэтому я собираюсь самостоятельно ответить, но не выбираю свой ответ в качестве решения.

Обходной путь должен создать поддельный разделитель (тот, который не существуют в данных, например \t\t) и в таблице приемников Azure SQL только с одним столбцом.

Оттуда я могу загрузить данные в один столбец и, после того, как он находится в Azure SQL, проанализируйте его с помощью SQL или любого языка в Databricks (Python, R, Scala или SQL), чтобы я мог использовать облачную среду HP C для очистки и анализа данных в масштабе.

...