Snowflake: отдельные compute и storage
В 2012 году три инженера (Benoît Dageville, Thierry Cruanes, Marcin Żukowski) — все с прошлым в Oracle/VectorWise — основали компанию Snowflake. Их идея была революционной: полностью разделить storage и compute в облачном DWH. Не “разделить логически”, а физически: данные лежат в S3, а compute — это отдельные виртуальные машины, которые можно запускать и тушить независимо.
К 2026 году Snowflake — один из трёх главных cloud DWH в мире (Snowflake, BigQuery, Redshift), используется десятками тысяч компаний. Поняв общую модель Snowflake, ты поймёшь концепции, которые потом увидишь и у конкурентов.
Главная архитектурная идея
В традиционных DWH (Teradata, Oracle) storage и compute жили на одной машине. Хочешь больше данных — покупаешь машину с большим диском. Хочешь больше пользователей — добавляешь машину. Но эти потребности не растут одинаково: данные растут постоянно, а compute — рывками.
Snowflake разорвал эту связь:
Три слоя независимы:
- Storage растёт по мере данных. Цена — около 23-40 USD за TB в месяц.
- Compute запускается под нагрузку. Платишь только за время работы warehouses (по секундам).
- Cloud Services — управляющий слой, считается “бесплатным” (включён в стоимость).
Virtual Warehouses
Virtual warehouse — это compute-кластер для запросов. Размер обозначается t-shirt sizes: XS, S, M, L, XL, и далее до 6XL. Каждый размер удваивает количество нод и стоимость в credits/hour. 1 credit стоит примерно 2-4 USD в зависимости от региона и edition.
Ключевые свойства:
- Можно запускать много warehouses одновременно. Маркетинг-команда и финансовая команда работают с одной DB через свои warehouses — друг другу не мешают.
- Биллинг по секундам (после первой минуты).
- Auto-suspend — warehouse выключится через N минут без запросов (типично 1-5 минут).
- Auto-resume — при следующем запросе включится автоматически за пару секунд.
-- Создание warehouse
CREATE WAREHOUSE etl_wh WITH
WAREHOUSE_SIZE = 'LARGE'
AUTO_SUSPEND = 60 -- засыпает через 60 сек idle
AUTO_RESUME = TRUE
INITIALLY_SUSPENDED = TRUE;
-- Использование
USE WAREHOUSE etl_wh;
SELECT count(*) FROM huge_table;
Главная техника экономии в Snowflake: настраивай AUTO_SUSPEND = 60 seconds для warehouses, которые используются редко. Если warehouse работает 1 час в день — это 1 credit (для XS) против 24 credits, если не выключать.
Micro-partitions и pruning
Snowflake хранит данные в micro-partitions — внутреннем колоночном формате (похожий на Parquet, но проприетарный).
Что такое micro-partition:
- Сжатый файл размером 16 MB (несжатый около 50-500 MB).
- Колоночный: каждая колонка хранится отдельно с её типом сжатия.
- Содержит metadata: min/max каждой колонки, кардинальность, количество NULL.
При запросе Snowflake читает metadata всех micro-partitions, отсеивает те, которые не подходят по WHERE-условию (partition pruning), и читает только нужные колонки (columnar pruning).
Parquet row groups vs Snowflake micro-partitions: как устроено columnar pruningClustering keys — можно явно указать, по каким колонкам кластеризовать данные. Snowflake будет стараться держать одинаковые значения этих колонок в одних micro-partitions, что улучшает pruning:
CREATE TABLE orders (
order_id BIGINT,
customer_id BIGINT,
created_at TIMESTAMP,
amount DECIMAL(10,2)
)
CLUSTER BY (created_at, customer_id);
Snowflake периодически перекластеризует таблицу автоматически (auto-clustering). Это дорого — расходует credits, но улучшает запросы.
Time travel
Snowflake хранит все версии таблицы за retention period (по умолчанию 1 день, в Enterprise — до 90 дней). Можно прочитать таблицу на момент в прошлом:
-- 10 минут назад
SELECT * FROM orders AT(OFFSET => -60 * 10);
-- Конкретный timestamp
SELECT * FROM orders AT(TIMESTAMP => '2026-05-15 10:00:00');
-- Восстановить случайно дропнутую таблицу
UNDROP TABLE orders;
Это спасает в большинстве инцидентов: случайный TRUNCATE, ошибочный UPDATE, миграция сломалась — UNDROP и time travel вытаскивают.
Zero-copy clones
Самая удивительная фича Snowflake: CLONE создаёт копию таблицы или базы за секунды и не дублирует данные.
Технически это указатель на те же micro-partitions. Если оригинал и клон не меняются — они физически одни и те же данные. Если клон начнёт меняться — Snowflake создаст новые micro-partitions только для изменённых частей (copy-on-write).
-- Создать клон production DB за секунды для тестов
CREATE DATABASE prod_clone CLONE prod;
-- Использовать в dev: 30 TB данных, 0 TB затрат
USE DATABASE prod_clone;
-- Дроп клона — бесплатная операция
DROP DATABASE prod_clone;
Раньше для testing надо было копировать prod-данные физически, что занимало часы и стоило storage. С zero-copy clones — секунды и копейки.
Zero-copy clones — главная фича Snowflake для DataOps. Каждый разработчик может иметь свою копию prod-базы. Меняем данные — это видно только в моём клоне.
Snowpark и встроенный ML
В 2021 году Snowflake добавил Snowpark — API для написания трансформаций на Python, Scala, Java. Под капотом компилирует код в SQL и выполняет на warehouses. Можно также запускать UDF на Python внутри warehouse без выгрузки данных.
В 2023+ году Snowpark расширили до ML-возможностей: тренировка моделей прямо в Snowflake (Snowpark ML, Cortex AI с LLM-функциями).
Pricing model
Snowflake берёт деньги за две вещи:
- Storage — фиксированная цена за TB в месяц (около 23-40 USD/TB).
- Credits — за compute. 1 credit примерно 2-4 USD в зависимости от региона и edition.
Editions влияют на цену credit и фичи:
- Standard — базовый, около 2 USD/credit.
- Enterprise — multi-cluster warehouses, materialized views, longer time travel. Около 3 USD/credit.
- Business Critical — HIPAA, дополнительная безопасность. Около 4 USD/credit.
Реальный пример счёта для небольшой команды:
- 50 TB storage = 50 × 30 USD = 1500 USD/мес
- ETL-warehouse 8 часов в день, M-size = 4 credits/hr × 8hr × 30 = 960 credits = около 2000 USD
- BI-warehouse 4 часа в день, L-size = 8 × 4 × 30 = 960 credits = около 2000 USD
- Итого: около 5500 USD/мес
Когда выбирать Snowflake
Плюсы:
- Простота, fully managed (меньше DevOps).
- Изолированные warehouses не конкурируют за ресурсы (multi-tenant без конфликтов).
- Zero-copy clones, UNDROP — лучшие в индустрии для dev workflow.
- Multi-cloud (AWS, Azure, GCP).
Минусы:
- Сложное прогнозирование cost (credit-billing).
- Vendor lock-in (но Iceberg ослабляет).
- Cold start warehouses — 1-3 секунды на первый запрос.
- Дорого при низкой утилизации.
Выбирай Snowflake если:
- Команда любит SQL и не хочет управлять инфрой.
- Workloads — смесь ETL и интерактивной аналитики.
- Бюджет позволяет — Snowflake не самый дешёвый.
- Нужна простота dev/staging через zero-copy clones.
Попробуй сам
Зарегистрируй бесплатный trial Snowflake (30 дней, 400 USD кредитов). Создай первый warehouse XS-размера. Загрузи sample dataset (есть встроенные snowflake_sample_data). Поэкспериментируй с warehouse sizes: запусти один и тот же запрос на XS и L — увидишь разницу в скорости и cost. Попробуй CLONE: CREATE DATABASE my_clone CLONE snowflake_sample_data; — копия за секунды. Сделай UNDROP таблицы после DROP. Это даст ощущение, чем Snowflake отличается от обычной PostgreSQL.
Этот урок — обзорный. Глубокий разбор внутренностей Snowflake (query optimizer, search optimization service, dynamic tables, продвинутый Snowpark, dataops-практики, продакшен tuning) будет в отдельном будущем курсе snowflake-fundamentals платформы.