azure - 从查找文件中读取参数化 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
}
}
}
解决方案
通过在活动源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"
},
推荐阅读
- java - 如何使用先决条件创建 macOS 应用安装程序
- asp.net-core - 如何配置 .NET Core 日志记录 json 文件以忽略某些事件?
- javascript - 根据每行列的内容将一个大表拆分为多个表
- here-api - Android中导航管理器监听器和位置管理器监听器的问题[here-api]
- java - 创建 Windows 自动重启 + 每次重启时递增的计数器
- google-sheets - util_valuesheets(A1notation) 不会自动更新(Google 表格,杰出贡献者的公式添加)
- rust - 如何通过减少生锈来获得向量的乘积?
- c# - c# wpf 只有1个文件被选中
- python - .find_element_by_css_selector 没有 soenium/webdriver
- typescript - 使用计算属性时如何设置类型?