首页 > 解决方案 > 从查找文件中读取参数化 SQL 查询

问题描述

我有一个要求,其中我有一堆包含 sql 查询的文件,如下所示。我正在读取文件的内容,即 for 循环中查找活动中的 sql 查询。然后我将查询传递给复制活动并加载目标表。此外,我正在从另一个查找中获取 PreviousFiscalYear,该活动在同一管道中名为“lkp-get-param-list”。

select * from rpt.SomeTable where SubFiscalYear = '@{activity('lkp-get-param-list').output.firstRow.PreviousFiscalYear}'

如果我将以下查询按原样传递给复制活动,则作业完成而没有任何问题。但是一旦我尝试通过查找活动传递它就会失败。如果我在文件中硬编码如下参数并通过查找活动读取它并将其传递给复制活动,则作业也可以顺利完成。

select * from rpt.SomeTable where SubFiscalYear = 2019

我是否需要在 .sql 配置文件中以其他方式对参数进行编码。任何指针都会有所帮助。

Edit1:这是从查找活动传递示例查询到复制活动的方式(实际查询要复杂得多,有一堆连接和过滤条件):

{
    "source": {
        "type": "AzureSqlSource",
        "sqlReaderQuery": "select \r\n    D_OrganizationID,\r\n    OrgName,\r\nFROM\r\n    rpt.D_Organization b b.SubFiscalYear = '@{activity('lkp-get-param-list').output.firstRow.PreviousFiscalYear}'\r\n",
        "queryTimeout": "00:10:00",
        "isolationLevel": "ReadCommitted",
        "partitionOption": "None"
    },
    "sink": {
        "type": "AzureSqlSink"
    },
    "enableStaging": false,
    "translator": {
        "type": "TabularTranslator",
        "typeConversion": true,
        "typeConversionSettings": {
            "allowDataTruncation": true,
            "treatBooleanAsNumber": false
        }
    }
}

标签: azureazure-data-factoryazure-data-factory-2

解决方案


通过在活动源Lookup中动态添加 SQL 查询来传递活动输出。Copy Data

使用CONCAT函数在查询中包含查找活动输出。

查询

@concat('select * from sampletable where subfiscalyear = ', string(activity('Lookup1').output.firstRow.fiscalyear))

在此处输入图像描述

代码:

 "source": {
                    "type": "AzureSqlSource",
                    "sqlReaderQuery": {
                        "value": "@concat('select * from sampletable where subfiscalyear = ', string(activity('Lookup1').output.firstRow.fiscalyear))",
                        "type": "Expression"
                    },
                    "queryTimeout": "02:00:00",
                    "partitionOption": "None"
                },

推荐阅读