在 SnowFlake DB 中并行执行存储过程中的 SQL 语句

Vin*_*ick 5 snowflake-cloud-data-platform snowflake-task

在 SnowFlake 中,是否有任何选项可以在存储过程中并行执行 sql 语句。我有一个存储过程(如下所示),其中有 35 个 sql 语句,它们按顺序运行。我们计划减少时间,考虑并行执行所有这些。

实现这一目标的最佳方法是什么?(我能想到的就是创建 35 个存储过程并同时从调度程序中调用它们)。想检查一下 SnowFlake 功能是否有更好的方法来实现这一目标?

create or replace procedure SP_TEST()
  returns string
  language javascript
  execute as CALLER
  as
  $$
    try {
      var step_num = 0
    step_num = 0
    step_num++ //--#1
       var sql_statement1   = snowflake.createStatement( {sqlText: `INSERT INTO TGT_TBL select * from TBL_A`} )
       var sql_statement1_execute = sql_statement1.execute() 
        step_num++ //--#1
      var sql_statement2   = snowflake.createStatement( {sqlText: `INSERT INTO TGT_TBL select * from TBL_B`} )
      var sql_statement2_execute = sql_statement2.execute() 
      return  "Completed "+step_num+" steps to load into TGT_TBL"
     }
   catch (err) {
        throw(err)
    }
  $$
;
Run Code Online (Sandbox Code Playgroud)

Mar*_*cel 4

实际上它是连续的,因为您正在为每个语句运行execute()方法。

直接回答你的问题:在单个过程中实现并行化是不可能的,据我所知,没有任何功能或具体方法。

但总的来说:增加仓库大小是节省时间的好方法,因为查询可能运行得更快。它不是并行的,但速度更快。

在我看来,当您使用单个过程时,横向扩展(即使用多集群仓库)不会带来任何好处。