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

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

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

身份证 快照_日期
2 2023-10-11
3 2023-10-12
4 2023-10-13

目标表:

身份证 快照_日期
1 2023-10-10

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

这是变量结果的 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 variables azure-data-factory data-conversion
1个回答
0
投票

enter image description here

上述错误是由于您使用的查询而出现的。在 ForEach 内部,您在查询中使用

@{item()}
,它是每次迭代中的 JSON 对象。

要克服该错误,您需要给出查询中每个项目的

snapshot_date
,如下所示。

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

例如,我采取了查找活动而不是复制活动以及与您类似的查询。您的查询需要像这样。

enter image description here

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