我真的很难用Azure数据工厂脚本活动的参数调用snowflake过程。
CALL data_validation_procedure('google_table');
但是,当我在Snowflake工作表中运行此查询而不是在ADF脚本Activity中运行此查询时,此调用过程的脚本运行良好
https://i.stack.imgur.com/wA8Q8.pnghttps://i.stack.imgur.com/1UvWl.png
我遇到这个问题有什么原因吗?对此有什么解决方案或替代方案吗?
我真的很难用Azure数据工厂脚本活动的参数调用snowflake过程。
CALL data_validation_procedure('google_table');
但是,当我在Snowflake工作表中运行此查询而不是在ADF脚本Activity中运行此查询时,此调用过程的脚本运行良好
https://i.stack.imgur.com/wA8Q8.pnghttps://i.stack.imgur.com/1UvWl.png
我遇到这个问题有什么原因吗?对此有什么解决方案或替代方案吗?
1条答案
按热度按时间nhaq1z211#
经过大量的讨论和咨询了几个同事,最后,我可以找出这个问题的原因和解决方案。
实际上,ADF代码的过程和脚本活动没有错误。
此原因的主要问题是由于在我们的过程中使用的
into
关键字和ADF SCRIPT ACTIVITY
引起的冲突,其中我们在过程SQL脚本中使用这些into
关键字,同时在声明的值中分配值,而ADF脚本活动实际上不支持该值。例如在这种情况下,当将最大dep_id分配给max_valueADF脚本活动时,会像上面那样崩溃。
到目前为止,这是完全抽象的,为什么这个ADF活动不支持Snowflake中的
into
关键字。解决方案
要解决这个问题,一个简单的解决方案是不要在要从ADF活动调用的过程中使用INTO关键字。
以上SQL可以重写如下:
但是如果你的需求是强制使用
INTO
关键字,那么最好使用下面这样的嵌套过程;1.创建一个名为
A
的驱动程序过程,该过程将从ADF调用,并且该过程不应包含任何INTO
关键字。1.在脚本中使用
into
关键字创建另一个过程B
。1.从过程
A
调用过程B