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