提问人:Hack-R 提问时间:4/5/2020 最后编辑:Hack-R 更新时间:4/8/2020 访问量:294
通过 C# .NET Framework 托管数据工厂将数据从 Blob 复制到 Azure SQL 时忽略错误行
Ignore bad rows when copying data from Blob to Azure SQL via C# .NET Framework managed Data Factory
问:
我将按照本教程从 Blob 中的平面文件加载 Azure SQL 中的数据。
此方法需要 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";
作为猜测,但它没有用:
“留言”: “错误代码=用户错误无效DbConnectionString,'类型=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=无效 提供的数据库连接字符串。检查连接字符串 “下沉” side.,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.ArgumentException,Message=关键字 不支持: 'enableskipincompatiblerow'.,Source=System.Data,'“,
有没有办法做到这一点?
class 的属性表示它获取或设置容错。我得到了接受属性的实现,但它似乎没有以所需的方式改变行为。SkipErrorFile
CopyActivity
CopyActivity
SkipErrorFile = new SkipErrorFile { }
答:
我有一个解决方法,但不是真正的解决方案,所以我将自我回答,但不选择我的答案作为解决方案。
解决方法是创建一个假分隔符(数据中不存在的分隔符,例如 )和一个只有 1 列的 Azure SQL 接收器表。\t\t
从那里,我可以将数据加载到单个列中,并在数据进入 Azure SQL 后,使用 SQL 或 Databricks 中的任何语言(Python、R、Scala 或 SQL)对其进行分析,以便我可以使用 HPC 云环境大规模清理和分析数据。
评论
enableSkipIncompatibleRow
SkipErrorFile