数据工厂将csv复制到SQL无法转换空数据

时间:2020-10-19 00:28:43

标签: azure azure-data-factory

在构建从文件共享到Azure SQL的非常基本的复制数据任务时,遇到空数据导致的各种错误:

ErrorCode = TypeConversionFailure,转换时发生异常 类型'String'的列名'EndDate'的值''(精度:, scale :)键入“ DateTime”(精度:255,比例尺:255)。额外 info:无法将字符串识别为有效的DateTime。

我相信这是由相同原因引起的另一种情况:

ErrorCode = TypeConversionFailure,转换时发生异常 类型“字符串”中的列名“合同ID”的值“”(精度:, scale :)来输入“ Guid”(精度:255,比例尺:255)。附加信息: 无法识别的Guid格式。

我需要做的就是在复制到SQL表时将空数据视为NULL。我发现的唯一选项是CSV数据集中的“空值”;并且默认设置为空。

下面是CSV数据集的代码:

{
    "name": "CSV",
    "properties": {
        "linkedServiceName": {
            "referenceName": "CSV",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "FileName": {
                "type": "string"
            }
        },
        "annotations": [],
        "type": "DelimitedText",
        "typeProperties": {
            "location": {
                "type": "AzureFileStorageLocation",
                "fileName": {
                    "value": "@dataset().FileName",
                    "type": "Expression"
                },
                "folderPath": "output"
            },
            "columnDelimiter": ",",
            "escapeChar": "\\",
            "firstRowAsHeader": true,
            "quoteChar": "\""
        },
        "schema": []
    }
}

csv文件确实使用双引号作为限定符。源文件中的那些空数据如下所示:

"b139fe4d-f48a-4158-8196-a43500b3bf02","19601","Bar","2015/02/02","","","","","","","","","","",""

1 个答案:

答案 0 :(得分:2)

由于“复制活动”无法处理空值,因此我们需要使用“数据流”将字段转换为NULL值。

这是我使用您的示例进行的测试:

  1. 我在Azure SQL中创建了一个表
Create table TestNull(
    Column1 UNIQUEIDENTIFIER null,
    Column2 varchar(50) null,
    Column3 varchar(60) null,
    Column4 DateTime null,
    Column5 varchar(50) null,
    Column6 varchar(50) null
)
  1. 在ADF中,我们可以使用DerivedColumn将空值转换为NULL值。因此,我们可以使用表达式iifNull(Column_1,toString(null()))来判断该字段是否为空,如果为空,则将其替换为NULL值。

enter image description here

  1. 在接收器中,我们应该设置映射。

enter image description here

  1. 它将在表中插入NULL值。

enter image description here