Раздел 26 · Data Engineering

Cloud DWH: Snowflake, BigQuery, Redshift

middle-senior~60 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Перед этим уроком

Cloud DWH: Snowflake, BigQuery, Redshift

В уроках 01 и 02 мы разобрали ClickHouse, который ты обычно поднимаешь сам и сам же эксплуатируешь. Этот урок про другую категорию аналитических систем, где compute и storage разнесены по архитектуре, биллинг идёт за реальное использование, а команда платформенных DBA, это сам облачный провайдер.

Аудитория: ты прошёл уроки 01-02 и понимаешь, что такое колоночное хранилище и distributed query. На работе встречаются датасеты, которые ты не хочешь хранить у себя, и нагрузки, которые не хочешь администрировать. Сам не выберешь между Snowflake, BigQuery и Redshift, надо понимать модели биллинга, архитектурные ограничения и где каждая система проигрывает.

Не цель урока: научить писать SQL под BigQuery с нуля или администрировать Snowflake. Цель, дать карту, чтобы выбрать систему под задачу и не попасть в ловушку счёта в конце месяца.

0. Что такое DWH и почему cloud

DWH (data warehouse), это аналитическое хранилище, рассчитанное на сложные запросы по большому объёму исторических данных. Корни уходят в 1980-е (Teradata, 1979 год), потом MPP-системы 2000-х (Vertica, Netezza, Greenplum), потом облачная волна 2010-х: Redshift (2012), BigQuery (2010, GA 2012), Snowflake (2014).

В 2026 году “DWH” в продуктовом разговоре обычно означает один из трёх облачных гигантов плюс reborn-альтернативы (Databricks SQL, Firebolt, MotherDuck). Сравнения “DWH против data lake” уходят в прошлое: lakehouse (см. урок 04) стирает границу.

Главная разница cloud DWH с self-hosted CH:

  • Compute и storage разнесены. Можно держать петабайты в S3/GCS дёшево и поднимать compute только под запрос. У ClickHouse self-hosted compute и storage обычно на одних и тех же узлах (хотя ClickHouse Cloud этот шаблон догнал).
  • Биллинг за реальное использование. Платишь либо за время работающего compute (Snowflake, Redshift RA3), либо за объём отсканированных байтов (BigQuery on-demand). Это даёт эластичность, но требует тщательного контроля стоимости.
  • DBA, это провайдер. Не надо думать о tuning vacuum, replication, backups, version upgrade. Цена, меньше контроля и непрозрачные баги.
  • SQL более стандартный. Snowflake и BigQuery близки к ANSI SQL, в отличие от ClickHouse, у которого сильный диалект.

Дальше разбираем три системы по очереди, потом сравниваем, потом смотрим, когда DWH вообще плох.

1. Архитектурный сдвиг: shared storage, ephemeral compute

Старые MPP-системы (Vertica, Netezza, Greenplum, ранний Redshift) клали данные на диски тех же узлов, которые их считали. Это classical shared-nothing: масштабирование происходило добавлением узла, но добавление узла требовало ребалансировки данных, болезненной операции с downtime.

Cloud DWH ввёл другую модель: shared storage с ephemeral compute. Storage-слой это общий object store, compute поднимается и гасится по требованию.

Snowflake пошёл первым (whitepaper 2014, GA 2015): они описали это как “service of services”, три слоя:

┌──────────────────────────────────────────────────────────┐
│  Cloud Services Layer (metadata, optimizer, transactions)│
└──────────────────────────────────────────────────────────┘
                          ↓ ↑
┌──────────────────────────────────────────────────────────┐
│  Compute Layer: Virtual Warehouses (XS, S, M, L, XL, ...)│
│  ┌──────┐  ┌──────┐  ┌──────┐                            │
│  │ WH-A │  │ WH-B │  │ WH-C │   независимые, изолированные│
│  └──────┘  └──────┘  └──────┘                            │
└──────────────────────────────────────────────────────────┘
                          ↓ ↑
┌──────────────────────────────────────────────────────────┐
│  Storage Layer: micro-partitions в S3 / GCS / Azure Blob │
└──────────────────────────────────────────────────────────┘

Plus или minus детали, эта схема повторилась везде. BigQuery идёт ещё дальше, делая compute полностью невидимым (serverless): пользователь не выбирает узлы, выбирает только размер reservation в slots. Redshift начинал классическим shared-nothing (DC1/DS2-инстансы), но в 2019 году выпустил RA3-инстансы с managed storage в S3, догнав модель Snowflake.

1.1 Что это даёт

  • Эластичность. Большой ETL-job: подними XL warehouse, прогоняй 30 минут, погаси. Заплатишь за 30 минут, не за пожизненную инфраструктуру.
  • Изоляция нагрузок. ETL и ad-hoc-аналитика, на разных warehouses. ETL не убивает дашборд.
  • Zero-copy clone. Snapshot таблицы, это указатель на те же micro-partitions. Можно “клонировать” 10 ТБ за миллисекунды и без storage cost (пока не начнёшь модифицировать).
  • Time travel. Запрос к “вчерашней” версии таблицы (Snowflake, до 90 дней; BigQuery, 7 дней).

1.2 Что это стоит

  • Network latency между compute и storage. Каждое чтение, это сетевой round-trip. Решается агрессивным кешированием на compute (warm warehouse держит горячие данные локально).
  • Cold-start. Поднять warehouse занимает секунды (Snowflake, 1-3 секунды; BigQuery, доли секунды через slot pool; Redshift Serverless, 10-30 секунд).
  • Биллинг при ошибке запроса. SELECT * без LIMIT на 10 ТБ датасете в BigQuery on-demand стоит реальные деньги, даже если ты потом нажал Cancel.

2. Snowflake: virtual warehouses

Snowflake продаёт compute как T-shirt-размеры warehouse-ов: XS (2 vCPU), S, M, L, XL, …, 6X-Large. Каждый шаг в 2 раза больше и в 2 раза дороже. Биллинг идёт по секундам активной работы.

2.1 Размер warehouse

РазмерСерверыКредиты в часКогда
XS11dev / lookups
S22small ETL, аналитика на сотни GB
M44средний ETL, дашборды
L88продовый ETL, десятки TB
XL1616sub-минутные SLA на TB-данных
4XL+128+128+петабайтные jobs

Один кредит, это ~3-4 USD в зависимости от региона и edition (Standard, Enterprise, Business Critical). Это значит, час L warehouse, ~24-32 USD; день, ~600 USD. Цена растёт линейно с размером.

Главная фишка Snowflake: multi-cluster warehouse. Если на одном WH стоят 50 одновременных запросов и они начинают друг друга подпирать, Snowflake поднимает второй кластер того же размера и распределяет нагрузку. Когда нагрузка падает, лишние кластеры гасятся. Это автоскейл compute.

-- многокластерный warehouse, который автоматически масштабируется 1-4 кластеров
CREATE WAREHOUSE analytics
  WITH WAREHOUSE_SIZE = 'LARGE'
       MIN_CLUSTER_COUNT = 1
       MAX_CLUSTER_COUNT = 4
       SCALING_POLICY = 'STANDARD'   -- или 'ECONOMY' для медленного скейла
       AUTO_SUSPEND = 60             -- через 60 секунд idle, гасим
       AUTO_RESUME = TRUE;           -- запрос автоматически разбудит

AUTO_SUSPEND = 60 критически важен. Без него warehouse тикает 24/7 даже когда никто не запрашивает. С 60-секундной паузой, гасится за минуту, цена за idle, пара кредитов в день.

2.2 Storage и micro-partitions

Snowflake режет таблицы на micro-partitions по 50-500 MB, immutable, со статистиками на каждой. UPDATE и DELETE, это новые micro-partitions с измененными версиями записей; старые остаются для time travel.

Clustering key можно задать вручную, и Snowflake фоном будет реорганизовать micro-partitions, чтобы фильтрация по этому ключу пропускала больше партиций. По дефолту таблица “natural-cluster”, сортируется по порядку вставки.

2.3 Биллинг compute раздельно по WH

-- ETL пишет в L
USE WAREHOUSE etl_l;
COPY INTO orders FROM @stage/orders.parquet;

-- BI читает с M
USE WAREHOUSE bi_m;
SELECT * FROM orders_summary;

Это даёт изоляцию: тяжёлый ETL не отжимает CPU у дашборда. Стандартная схема в Snowflake: 3-4 named warehouses (etl, bi, ad_hoc, dev), каждый со своим размером и auto_suspend.

2.4 Когда выбрать Snowflake

  • Предсказуемая нагрузка по времени (ETL-окно ночью, BI днём). Хорошо ложится на T-shirt billing.
  • Несколько команд, надо изолировать compute. Multi-warehouse решает.
  • Multi-cloud. Snowflake работает в AWS, GCP, Azure одинаково.
  • Data sharing между организациями (Data Marketplace, Secure Data Sharing). Тут Snowflake уникален.

Минусы:

  • Дорого при 24/7 высокой нагрузке. Если warehouse работает 24 часа, проще self-hosted.
  • Storage layer закрыт. Нельзя положить туда свой формат, читать ChickHouse-ом или Spark-ом без unload.
  • Нет внешних engines. Нельзя дать Trino читать Snowflake-таблицы напрямую.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

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