sql - Azure 数据工厂 V2:如何将文件名传递给存储过程变量
问题描述
我有一个重要的 Azure SQL 表,其结构如下:
Company Revenue
-------------------
A 100
B 200
C 100
. .
. .
. .
我现在正在 Azure 数据工厂 V2 上构建一个存储过程,它将每月从上面的 Azure SQL 事实表中删除一家特殊公司的所有记录。对于本练习,该特殊公司应由变量@company 标识。存储过程的结构创建为:
@company NVARCHAR(5)
DELETE FROM table
WHERE [company] = @company
由于我将拥有来自每个公司的不同 Excel 文件,这些文件将每月将数据插入到此表中(使用复制活动),我想使用上面的存储过程删除该公司的旧数据,然后再添加最新的数据一。
然后我想将该 Excel 文件的名称(存储在 blob 容器中)传递给变量“@company”,以便存储过程知道要从事实表中删除的相关数据是什么。例如:如果 Excel 文件为“A”,则存储过程应为“delete from table where company = A”。
关于如何将 Excel 文件名传递给变量“@company”并在 Azure 数据工厂 V2 上进行设置的任何想法?
解决方案
我使用存储过程活动,您可以从管道参数中填充参数:https ://docs.microsoft.com/en-us/azure/data-factory/transform-data-using-stored-procedure
您可以在选择存储过程后点击“导入”自动添加参数或手动添加。然后,您可以使用管道表达式动态填充它们,例如 Jay Gong 建议使用触发器参数 @triggerBody().folderPath
和@triggerBody().fileName
。
或者,您可以将预复制脚本添加到您的复制活动中,而不是使用存储过程:
这仅针对适当的接收器显示,例如数据库表。您也可以动态填充此脚本。在您的情况下,这可能如下所示:
@{concat('DELETE FROM table
WHERE [company] = ''',triggerBody().fileName,'''')}
@triggerBody().fileName
如果您多次使用它,将参数添加到包含文件名的管道并将其设置为或更复杂的表达式也可能是有意义的。
推荐阅读
- javascript - 使用 javascript 和 php 循环 Div
- python - Pandas:根据索引列中的条件填充和合并两个不同的数据框
- java - Integer.toBinaryString() 未正确转换为二进制
- google-cloud-platform - 如何在 Cloud Composer 环境中安装 jq
- python - 获取函数或源代码中调用的所有函数
- reactjs - 尽管使用了 withRouter,为什么 this.props.history 未定义?
- spring-boot - 分布式系统中不同类型的事件——拆分或合并
- reactjs - React Hook React.useEffect 错误
- spring-data-jpa - Spring JPA global_quoted_identifiers 错误地引用列类型 TEXT
- python - 将 torch.cuda.IntTensor 设置为 Long 用于嵌入层