Параллельное выполнение операторов вставки в Snowflake - PullRequest
0 голосов
/ 04 августа 2020

У меня есть хранимая процедура, которая выполняет 3 инструкции insert / select в 3 разных таблицах в Snowflake: ScheduleUnion, ScheduleUnion1, ScheduleUnion2. Теперь из-за времени, которое требуется для выполнения каждого оператора, я хотел бы выполнять их параллельно, чтобы сократить общее время выполнения. Для этого я пытаюсь использовать Promise.all в Javascript. Я не собираюсь публиковать здесь все операторы вставки, но этот пример хорошо показывает, как я это делаю:

CREATE OR REPLACE procedure etl."JimTest" ()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT 
AS
$$

   async function runSQL(sqlarray) {

   snowflake.execute({ sqlText: sqlarray.sqltask } );
  }

   async function executeQuery() {

    sql1 = `INSERT into ScheduleUnion Select.....`
    sql2 = `INSERT into ScheduleUnion1 Select.....`
    sql3 = `INSERT into ScheduleUnion2 Select.....`

     const queries = [
        {sqltask: sql1},
        {sqltask: sql2},
        {sqltask: sql3}
    ];

    const sqlTasks = queries.map(runSQL);

    await Promise.all(sqlTasks); 
 }

  executeQuery();

  return 'done';
$$

Однако; Я все еще вижу, что мои операторы вставки выполняются последовательно, один за другим:

enter image description here

Is there a параметр Я пропущен, или что-то не так с моим Javascript?

1 Ответ

0 голосов
/ 05 августа 2020

Склад Snowflake - это система MPP, которая будет планировать и выполнять команды в своей очереди на основе имеющейся у нее доступной вычислительной мощности - вы не можете заставить ее запускать что-либо параллельно, и она будет работать / может отличаться в зависимости от доступных ресурсов во время выполнения (т.е. что еще выполняется).

Если запросы выполняются недостаточно быстро, то вам доступны как минимум 2 функции Snowflake:

  1. Увеличьте размер хранилище, которое вы используете
  2. Запускать каждый запрос с другим хранилищем

Учитывая, что Snowflake позволяет все это записывать в сценарии SQL, в начале вашего сценария вы можете увеличить размер вашего склада (или создать / запустить другие склады), и в конце вашего скрипта вы можете уменьшить размер вашего склада (или удалить / остановить другие склады)

...