我想使用Azure数据工厂将数据从Azure表存储复制到Azure SQL Server,但是我收到了一个奇怪的错误。
在我的Azure表存储中,我有一个包含多种数据类型的列(这就是Table Storage的工作方式)。日期时间和字符串。
在我的Data Factory项目中,我提到整个列都是字符串,但由于某种原因,数据工厂假定数据类型基于它在提取过程中遇到的第一个单元格。
在我的Azure SQL Server数据库中,所有列都是字符串。
实施例
我在Azure表存储中使用此表:航班
RowKey PartitionKey ArrivalTime
--------------------------------------------------
1332-2 2213dcsa-213 04/11/2017 04:53:21.707 PM - this cell is DateTime
1332-2 2213dcsa-214 DateTime.Null - this cell is String
如果我的表格如下所示,则复制过程将起作用,因为第一行是字符串,它会将整个列转换为字符串。
RowKey PartitionKey ArrivalTime
--------------------------------------------------
1332-2 2213dcsa-214 DateTime.Null - this cell is String
1332-2 2213dcsa-213 04/11/2017 04:53:21.707 PM - this cell is DateTime
注意:我不允许更改Azure表存储中的数据类型,移动行或添加新行。
以下是Azure Data Factory的输入和输出数据集:
"datasets": [
{
"name": "InputDataset",
"properties": {
"structure": [
{
"name": "PartitionKey",
"type": "String"
},
{
"name": "RowKey",
"type": "String"
},
{
"name": "ArrivalTime",
"type": "String"
}
],
"published": false,
"type": "AzureTable",
"linkedServiceName": "Source-AzureTable",
"typeProperties": {
"tableName": "flights"
},
"availability": {
"frequency": "Day",
"interval": 1
},
"external": true,
"policy": {}
}
},
{
"name": "OutputDataset",
"properties": {
"structure": [
{
"name": "PartitionKey",
"type": "String"
},
{
"name": "RowKey",
"type": "String"
},
{
"name": "ArrivalTime",
"type": "String"
}
],
"published": false,
"type": "AzureSqlTable",
"linkedServiceName": "Destination-SQLAzure",
"typeProperties": {
"tableName": "[dbo].[flights]"
},
"availability": {
"frequency": "Day",
"interval": 1
},
"external": false,
"policy": {}
}
}
]
有谁知道这个问题的解决方案?
答案 0 :(得分:0)
我一直在玩这个。我认为你有两种方法可以解决这个问题。
选项1
只需从输入数据集中删除数据类型属性即可。在输入JSON表数据集的“结构”块中,您不必指定type属性。删除或评论它。
例如:
{
"name": "InputDataset-ghm",
"properties": {
"structure": [
{
"name": "PartitionKey",
"type": "String"
},
{
"name": "RowKey",
"type": "String"
},
{
"name": "ArrivalTime"
/* "type": "String" --<<<<<< Optional! */
},
这应该意味着数据类型在读取时未经过验证。
选项2
使用SQL DB表加载上游的自定义活动来清理和转换表数据。这将意味着打破C#并需要更多的开发时间。但您可能希望将清洁代码重用于其他数据集。
希望这有帮助。