无法从ADF脚本活动中调用带有argument的Snowflake过程



我真的很难用Azure数据工厂脚本活动的参数来调用雪花过程。

CALL data_validation_procedure('google_table');

但是当我在Snowflake工作表中运行这个查询时,这个调用过程的脚本运行得很好,但在ADF脚本活动中不运行

https://i.stack.imgur.com/wA8Q8.pnghttps://i.stack.imgur.com/1UvWl.png

我遇到这个问题有什么原因吗?有什么解决方案或替代方案吗?

经过大量的讨论和与一些同事的协商,我终于能够找到这个问题的原因并找到解决方案。

实际上,ADF代码的过程和脚本活动没有错。

此原因的主要问题是由于我们的过程中使用的into关键字ADF SCRIPT ACTIVITY引起的冲突,其中我们在过程SQL Sccript中使用这些into关键字,同时在声明值中分配值,而ADF脚本活动实际上不支持该值。例如

Create or replace procedure ........
..........
DECLARE
max_value int;
BEGIN
SELECT MAX(dep_id) INTO:max_value FROM EMPLOYEE_TABLE
....
END;
....

在这种情况下,当将最大dep_id分配给max_valueADF脚本活动时,会像上面一样崩溃。

到目前为止,我完全不明白为什么这个ADF活动不支持Snowflake中的into关键字。

解决方案

要解决此问题,一个简单的解决方案是不要在要从ADF活动调用的过程中使用INTO关键字。

上述SQL可以重写如下;

Create or replace procedure ........
..........
DECLARE
max_value int;
BEGIN
max_value=: (SELECT MAX(dep_id)  FROM EMPLOYEE_TABLE);
....
END;
....

但是,如果您的要求是必须使用INTO关键字,那么最好使用下面这样的嵌套过程;

  1. 创建一个名为A的驱动程序过程,该过程将从ADF调用,并且该过程不应包含任何INTO关键字
  2. 在脚本中使用into关键字创建另一个过程B
  3. 从过程A调用过程B

最新更新