Можем ли мы иметь условие запуска задачи в зависимости от условия успеха PIPE в SNOWFLAKE?
У меня есть требование, когда 3 разных файла будут загружены в одну таблицу с 3 разными PIPE. Я хочу, чтобы мой целевой процесс запускался только после того, как все 3 файла были загружены на мою сцену.
Я не хочу запускать целевой процесс несколько раз.
Итак, есть ли способ получить условие запуска задачи при успешном завершении PIPE.
Я просмотрел документацию, но не нашел такой информации или есть способ ее реализовать, которого мне может не хватать.
1 ответ
Общий способ реализации этого шаблона - потоки. Ваши каналы будут загружены в три отдельные таблицы, на каждой из которых есть поток. Затем у вас может быть задача, которая запускается по расписанию, с параметром WHEN, установленным с помощью SYSTEM$STREAM_HAS_DATA, три раза. Это гарантирует, что ваша ЗАДАЧА будет выполняться только после успешного завершения всех трех каналов. Пример:
CREATE TASK mytask1
WAREHOUSE = mywh
SCHEDULE = '5 minute'
WHEN
SYSTEM$STREAM_HAS_DATA('MYSTREAM') AND SYSTEM$STREAM_HAS_DATA('MYSTREAM2')
AND SYSTEM$STREAM_HAS_DATA('MYSTREAM3')
AS
<Do stuff.>;
У вас есть пара вариантов. Вы можете:
- использовать данные в потоках, чтобы делать то, что вы хотите в задаче, или
- вы можете использовать данные в потоках, чтобы заполнить единую таблицу, которую изначально заполняли три канала.
Если вы выберете вариант 1, вы также можете захотеть создать представление, которое заменяет исходную единую таблицу.
Если вы выберете вариант 2, вы можете настроить задачу, которая запускается с использованием предложения AFTER, чтобы делать все, что вы хотите.