Вызов хранимой процедуры с использованием задачи в Snowflake

#javascript #sql #stored-procedures #snowflake-cloud-data-platform

#javascript #sql #хранимые процедуры #snowflake-cloud-data-platform

Вопрос:

Я написал задачу, которая вызывает процедуру каждые выходные.

Вот моя процедура, которая вставляет значения в таблицу

 CREATE OR REPLACE TABLE TABLE1(DATABASE_ VARCHAR, TABLE_ VARCHAR); // Table to store values

CREATE OR REPLACE PROCEDURE TASK_()   //Procedure to insert values into table
    RETURNS string
    LANGUAGE JAVASCRIPT
    AS
    $$
        var str = '';
        var stmt = snowflake.createStatement({sqlText: "INSERT INTO TABLE1 VALUES ('DB1','TB1')"});
        stmt.execute(); 
        return str;
    $$;
  

Вот моя задача, которая вызывает описанную выше процедуру каждые выходные.

 CREATE TASK mytask_hour
  WAREHOUSE = COMPUTE_WH
  SCHEDULE = 'USING CRON 0 0 * 1-12 SUN America/Los_Angeles'
  TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
as
  call TASK_();
  

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

Итак, я попытался отладить свою задачу и написал задачу, которая вызывает указанную выше процедуру каждую минуту.

 create task mytask_hour
  warehouse = COMPUTE_WH
  schedule = '1 minute'
as
  call TASK_();
  

Даже эта задача не сработала. Не понимаю, где я делаю неправильно

Комментарии:

1. Как вы проверили, выполняется ли задача?

2. @Marcel Я проверил, запросив таблицу, которая выдала мне пустую таблицу

3. @R0bert добавление еще одной ссылки для устранения неполадок задач, проверьте это docs.snowflake.com/en/user-guide/tasks-ts.html

Ответ №1:

Недостаточно создать задачу. Следующий шаг — возобновить ее, поскольку задачи по умолчанию имеют статус «приостановлено».

В вашем случае оператор

 ALTER TASK mytask_hour resume;
  

Следствие: задачи выполняются по вашему расписанию.

Кроме того, вы должны иметь в виду, что

  • возобновление / приостановка задачи требует права СОБСТВЕННОСТИ или привилегии на выполнение задачи
  • роль ВЛАДЕЛЬЦА имеет привилегию EXECUTE TASK, которая может быть назначена АДМИНИСТРАТОРОМ УЧЕТНОЙ ЗАПИСИ

Дополнительную информацию смотрите здесь: https://docs.snowflake.com/en/sql-reference/sql/alter-task.html

Комментарии:

1. Я просто хочу убедиться, что SCHEDULE = 'USING CRON 0 0 * 1-12 SUN America/Los_Angeles' TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24' это правильно, т.Е. Он выполняет задачи каждые выходные

2. Вы можете использовать этот веб-сайт для проверки выражения ur cronmaker.com

Ответ №2:

После создания задачи необходимо выполнить

 ALTER TASK … RESUME
  

https://docs.snowflake.com/en/sql-reference/sql/create-task.html