USQL
我有多个存储过程在USQL数据库中定义,具有以下签名 .
-
MyDatabase.dbo.DoThing01(@ticketNumber int)
-
MyDatabase.dbo.DoThing02(@ticketNumber int)
-
MyDatabase.dbo.DoThing03(@ticketNumber int)
当我从门户中的azure分析作业UI手动调用它们时,这些存储过程可以正常工作 .
我有数据工厂v2管道设置,其中一个USQL活动调用位于azure datalake商店的脚本文件,该文件试图将参数值传递为@ticketNumber
我尝试了什么
Datafactory活动
"typeProperties": {
"scriptPath": "Script.txt",
"degreeOfParallelism": 10,
"scriptLinkedService": {
"referenceName": "CampuslabsDatalakeStore",
"type": "LinkedServiceReference"
},
"parameters": {
"ticketNumber": "@item().InstitutionId"
}
}
场景1:USQL脚本
DECLARE @ticketNumber int = -1;
MyDatabase.dbo.DoThing01(@ticketNumber);
MyDatabase.dbo.DoThing02(@ticketNumber);
MyDatabase.dbo.DoThing03(@ticketNumber);
错误:脚本以默认值-1执行 .
场景2:USQL脚本
DECLARE @ticketNumber int;
MyDatabase.dbo.DoThing01(@ticketNumber);
MyDatabase.dbo.DoThing02(@ticketNumber);
MyDatabase.dbo.DoThing03(@ticketNumber);
错误:我收到一个编译错误,声明变量是错误的 .
场景3:USQL脚本
MyDatabase.dbo.DoThing01(@ticketNumber);
MyDatabase.dbo.DoThing02(@ticketNumber);
MyDatabase.dbo.DoThing03(@ticketNumber);
错误:我收到一个未定义变量的编译错误 .
我的问题是:如何从v2 USQL活动将动态值参数传递给USQL脚本
1 回答
将参数从ADF传递到U-SQL脚本时,应使用DECLARE EXTERNAL为脚本中的参数声明默认值 . ADF v2通过在脚本的最顶层写入DECLARE语句将参数传递给U-SQL . 但是,同一个变量的多个DECLARE语句会导致编译错误 - 但是使用DECLARE EXTERNAL和DECLARE语句赢得't cause an error, because DECLARE EXTERNAL'用例将被其上面的DECLARE语句覆盖(对于这个用例) .
U-SQL要求变量在定义时具有值,这是您的Scenario 2错误 .
因为场景1使用脚本中声明的值运行,而场景3不编译意味着您的变量根本没有传入,即使您的JSON脚本看起来正确 . 我的预感是动态参数定义中的错误 . 你从哪里通过InstitutionId?如果它是为整个管道定义的参数,则该值应为“@Pipeline() . parameters.InstitutionId” . 如果可能的话,看看你的整个ADF管道会很有用(或者至少在你获得item()的地方 . )InstituionId from) .