首页 文章

使用数据工厂v2 USQL活动将动态参数传递给USQL脚本

提问于
浏览
2

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 回答

  • 2

    将参数从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) .

相关问题