Динамические таблицы

Автоматизация конвейеров данных в Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Динамические таблицы vs потоки и задачи

Динамические таблицы:

Screenshot 2026-05-11 at 11.14.23 am.png

  • Упрощают преобразование данных в пайплайне с помощью декларативных SQL-запросов
  • Автоматическое обновление
  • Snowflake обнаруживает изменения, планирует и объединяет обновления

Потоки и задачи:

Screenshot 2026-05-11 at 11.14.13 am.png

1 * Snowflake Learning Material
Автоматизация конвейеров данных в Snowflake

Что такое динамические таблицы?

Декларативная автоматизация пайплайнов

  • Содержимое определяется SELECT-запросом — описывается результат, Snowflake управляет обновлением
  • Не требует настройки потоков и задач
CREATE DYNAMIC TABLE logistics.delivery_summary
  TARGET_LAG = '1 hour'
  WAREHOUSE = harbr_wh
AS
  SELECT region, COUNT(*) AS shipments,
         AVG(delivery_days) AS avg_days
  FROM logistics.shipments GROUP BY region;
Автоматизация конвейеров данных в Snowflake

TARGET_LAG: управление актуальностью данных

Договор об актуальности данных между пользователем и Snowflake

Значение TARGET_LAG Эффект
'5 minutes' Таблица отстаёт не более чем на 5 минут — частые обновления
'1 hour' Обновления реже — меньше вычислительных затрат
DOWNSTREAM Задержка определяется зависимыми таблицами — идеально для цепочек
Автоматизация конвейеров данных в Snowflake

Полное и инкрементальное обновление

Инкрементальное обновление

  • Отслеживает только изменившиеся строки источника
  • Обновляет только затронутые строки — быстрее и дешевле при больших объёмах
-- Incremental-friendly: 
SELECT region, COUNT(*) AS shipments
FROM logistics.shipments 
GROUP BY region;

Полное обновление

  • Повторно обрабатывает весь запрос
  • Необходимо для некоторых агрегаций и операций над множествами
Автоматизация конвейеров данных в Snowflake

Цепочки динамических таблиц

Диаграмма пайплайна — delivery_events (источник) → cleaned_events (target_lag = DOWNSTREAM) → delivery_summary (target_lag = 1 HOUR)

  • Каждое преобразование — отдельная динамическая таблица со своим запросом
  • Обновления автоматически распространяются по цепочке
  • DOWNSTREAM откладывает обновление до момента, когда оно нужно следующей таблице
Автоматизация конвейеров данных в Snowflake

Динамические таблицы vs потоки и задачи

Динамические таблицы: декларативный подход

  • Описывается результат; Snowflake управляет обновлением
  • Оптимально для аналитики и отчётности
-- Declare the result for Snowflake 
CREATE DYNAMIC TABLE logistics.summary
  TARGET_LAG = '1 hour' 
  WAREHOUSE = harbr_wh
AS SELECT region, COUNT(*) 
FROM shipments 
GROUP BY 1;

Потоки и задачи: императивный подход

  • Полный контроль над тем, что и когда выполняется
  • Оптимально для разветвлённой логики и операционных пайплайнов
-- You control every step
CREATE TASK process_events 
  SCHEDULE = '5 MINUTE'
  WHEN SYSTEM$STREAM_HAS_DATA
  ('events_stream')
AS CALL logistics.process_new_events();
Автоматизация конвейеров данных в Snowflake

DYNAMIC_TABLE_REFRESH_HISTORY

SELECT name, state, refresh_start_time, refresh_end_time
FROM TABLE (
    INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY (
      NAME_PREFIX => 'HARBR_DB.DELIVERY_SUMMARY.', ERROR_ONLY => TRUE
    )
  )
ORDER BY name, data_timestamp;
NAME TRIGGER STATE START END
DELIVERY_SUMMARY SCHEDULED SUCCEEDED 2026-03-01 05:00:00 2024-03-01 05:00:08
DELIVERY_SUMMARY SCHEDULED FAILED 2026-03-01 04:00:00 2024-03-01 04:00:03
Автоматизация конвейеров данных в Snowflake

Попрактикуемся!

Автоматизация конвейеров данных в Snowflake

Preparing Video For Download...