【问题标题】:Read a parameterized SQL query from a lookup file从查找文件中读取参数化 SQL 查询
【发布时间】:2021-09-03 17:53:31
【问题描述】:

我有一个要求,其中我有一堆包含 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
        }
    }
}

【问题讨论】:

  • 错误信息是什么?一些屏幕截图也会有所帮助
  • 这是复制活动中的错误消息:“源”端发生故障。 ErrorCode=SqlOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=数据库操作失败并出现以下错误:'lkp'附近的语法不正确。',Source=,''Type=System.Data.SqlClient .SqlException,Message='lkp' 附近的语法不正确。,Source=.Net SqlClient 数据提供程序,SqlErrorNumber=102,Class=15,ErrorCode=-2146232060,State=1,Errors=[{Class=15,Number=102, State=1,Message='lkp'.,},],' 附近的语法不正确

标签: azure azure-data-factory azure-data-factory-2


【解决方案1】:

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

使用 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"
                },

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2011-08-13
    相关资源
    最近更新 更多