我真的很难用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
关键字,那么最好使用下面这样的嵌套过程;
- 创建一个名为
A
的驱动程序过程,该过程将从ADF调用,并且该过程不应包含任何INTO
关键字 - 在脚本中使用
into
关键字创建另一个过程B
- 从过程
A
调用过程B