Azure 数据工厂:在筛选日期列的动态查询中传递数组变量失败,并进行数据类型转换

Azure Data Factory: Passing array variable in dynamic query that filters Date column fails with data type conversion

提问人:SusanD 提问时间:10/25/2023 更新时间:10/25/2023 访问量:55

问:

我是 ADF 的新手,我正在尝试构建一个将记录从源表复制到目标表的管道。 源表:

编号 snapshot_date
2 2023-10-11
3 2023-10-12
4 2023-10-13

目标表:

编号 snapshot_date
1 2023-10-10

我一次只想写一个快照的记录。因此,我添加了一个 Lookup,用于捕获 Target 表中的最新snapshot_date。然后,添加了一个新的 Lookup 活动,以捕获 Source 表中所有 snapshot_date 值的数组,这些值必须复制到 Target 表。将此 Lookup 活动的结果传递给 Variable。 然后,将其连接到 ForEach 活动,以循环访问变量并将每个快照复制到 Target 表。但是我收到此错误“从字符串转换日期和/或时间时转换失败”

下面是变量结果的 JSON 文件:

{
    "variableName": "var_source_array_of_dates",
    "value": [
        {
            "snapshot_date": "2023-10-11T00:00:00Z"
        },
        {
            "snapshot_date": "2023-10-12T00:00:00Z"
        },
        {
            "snapshot_date": "2023-10-13T00:00:00Z"
        }
    ]
}

下面是复制活动的 JSON 文件:

{
    "source": {
        "type": "SqlDWSource",
        "sqlReaderQuery": "\nselect ID, snapshot_date from source_table where snapshot_date = '{\"snapshot_date\":\"2023-10-11T00:00:00\"}'",
        "queryTimeout": "02:00:00",
        "partitionOption": "None"
    },
    "sink": {
        "type": "SqlDWSource",
        "writeBehavior": "Insert",
        "sqlWriterUseTableLock": false
    },
    "enableStaging": false,
    "translator": {
        "type": "TabularTranslator",
        "typeConversion": true,
        "typeConversionSettings": {
            "allowDataTruncation": true,
            "treatBooleanAsNumber": false
        }
    }
}

是因为它将这个变量结果传递给查询吗?'{\"snapshot_date\":\"2023-10-11T00:00:00\"}'"

谁能帮我弄清楚如何将数组变量结果传递给此查询?

变量 azure-data-factory data-conversion

评论


答:

0赞 Rakesh Govindula 10/25/2023 #1

enter image description here

上述错误是由于您使用的查询而产生的。在 ForEach 中,您在查询中使用,这是每次迭代中的 JSON 对象。@{item()}

要克服该错误,您需要在查询中给出每个项目,如下所示。snapshot_date

select ID, snapshot_date from source_table where snapshot_date = '@{item().snapshot_date}';

对于示例,我采用了查找活动而不是复制活动,并且与您的查询类似。您的查询需要如下所示。

enter image description here