当通过C#.NET Framework管理的数据工厂将数据从Blob复制到Azure SQL时,忽略错误的行

问题描述 投票:0回答:1

我正在按照this tutorial从Blob中的平面文件加载Azure SQL中的数据。

此方法需要C#.NET Framework控制台应用程序来创建/管理Blob数据集,Azure SQL接收器和数据工厂。

唯一的问题是,对于大而凌乱的数据文件,我不可避免地会遇到一些行,这些行包含一个额外的定界符或以其他方式畸形。数据太大,无法在上载到Blob之前在本地清除。

通常的解决方案是忽略不良行,即忽略allow fault tolerance

有一个使用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";

作为猜测,但是没有用:

“消息”:“ ErrorCode = UserErrorInvalidDbConnectionString,'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message =无效提供的数据库连接字符串。检查连接字符串在'下沉'侧面。,Source = Microsoft.DataTransfer.ClientLibrary,''Type = System.ArgumentException,Message =关键字不支持:'enableskipincompatiblerow'。,Source = System.Data,'“,

有没有办法做到这一点?

c# azure azure-sql-database azure-data-factory-2
1个回答
0
投票

事实证明,用于管理启用容错的needed property被称为SkipErrorFile,需要将其添加到CopyActivity的代码中。

经过一段时间的迭代,我发现当我进行更改时:

new CopyActivity
{
    Name = "CopyFromBlobToSQL",
    Inputs = new List<DatasetReference>
    {
        new DatasetReference() { ReferenceName = blobDatasetName }
    },
    Outputs = new List<DatasetReference>
    {
        new DatasetReference { ReferenceName = sqlDatasetName }
    },
    Source = new BlobSource { },
    Sink = new SqlSink { }
}
}

至此:

    new CopyActivity
    {
        Name = "CopyFromBlobToSQL",
        Inputs = new List<DatasetReference>
        {
            new DatasetReference() { ReferenceName = blobDatasetName }
        },
        Outputs = new List<DatasetReference>
        {
            new DatasetReference { ReferenceName = sqlDatasetName }
        },
        Source = new BlobSource { },
        Sink = new SqlSink { }
        ,SkipErrorFile = new SkipErrorFile { } // added this
    }

它能够在相同(以前有问题的)文件上生成并运行而没有错误。

© www.soinside.com 2019 - 2024. All rights reserved.