Процедуры Snowflake Рекурсивные вызовы выполняются параллельно - PullRequest
0 голосов
/ 16 апреля 2020

Мне нужно найти способ параллельно запускать вызовы процедур Snowflake. Хорошим примером является то, что во время загрузки таблицы три начальных элемента вставляют все go в одну промежуточную таблицу до того, как начнет работать основной блок SQL. Поскольку эти три шага не зависят друг от друга, я смотрю на их параллельное выполнение. В текущей кодовой базе они выполняются последовательно, когда мы переходим на Snowflake, мы создаем Javascript инфраструктуру процедур для выполнения всех перенесенных запросов. Можно ли запустить процедуры Snowflake для рекурсивного выполнения параллельно?

Ниже приведена функция, которая просто запускает две команды, которые не зависят друг от друга и могут выполняться параллельно.

create or replace procedure stackOverflowProcedure (inputArray array) 
returns varchar
language javascript
strict
as
$$
  var demoIterator = 1;
  while (demoIterator <= INPUTARRAY.length) {
    snowflake.createStatement({sqlText: INPUTARRAY[demoIterator - 1]}).execute();
    demoIterator = demoIterator + 1;
  };
$$;

call stackOverflowProcedure(array_construct($$insert into temp_table select * from source_table_1;$$,$$insert into temp_table select * from source_table_2$$));

1 Ответ

2 голосов
/ 16 апреля 2020

Да, я использую это все время для параллельного запуска хранимых процедур.

Шаг 1: Если загрузка имеет большое количество файлов (вы получаете 8 файлов, загружаемых параллельно на каждый узел в хранилище. .. node = кредиты в форме определения размера), создайте столько хранилищ, сколько вы хотите, чтобы ваша хранимая процедура загрузки выполнялась параллельно.

Шаг 2. Создайте одну задачу на каждую хранимую процедуру или экземпляр той же самой, если она безопасно работать параллельно. Если вы запускаете загрузку с большим количеством файлов, настройте каждую задачу на использование отдельного хранилища.

Шаг 3. Запланируйте одновременное выполнение событий. Они могут не начинаться в одно и то же время, но они должны быть близко.

...