METABYTE
К списку статей

Snowflake: Микро-партиции, кластеризация и типы таблиц — разбор для тех, кто устал от кнопок «запустить» в UI

Разбираемся с микро-партициями Snowflake, кластеризацией и типами таблиц — без магии, но с лёгким прищуром.

15 мая 20262 мин чтения
Snowflake: Микро-партиции, кластеризация и типы таблиц — разбор для тех, кто устал от кнопок «запустить» в UI

Если вы хоть раз тыкали в Snowflake и надеялись, что «оно само оптимизируется» — добро пожаловать в клуб. На самом деле, за красивой кнопкой «Run» скрывается целая вселенная микро-партиций, кластеризации и типов таблиц. И если вы не знаете, как они работают, ваш кошелёк может заплакать быстрее, чем вы скажете «SELECT *».

Микро-партиции: как нарезать данные, чтобы не переплачивать Snowflake автоматически делит таблицы на микро-партиции размером 16–512 МБ. Это не те партиции, которые вы создаёте вручную с помощью PARTITION BY — здесь всё хитрее. Микро-партиции хранятся в колоночном формате, и каждая хранит метаданные: диапазоны значений, количество строк и т.д. Благодаря этому Snowflake может отсекать ненужные партиции ещё до чтения — это называется data pruning. Если вы не используете кластеризацию, pruning работает по принципу «повезёт — не повезёт».

Кластеризация: когда порядок имеет значение Кластеризация в Snowflake — это не магия, а просто сортировка данных в микро-партициях. Если у вас большая таблица с фильтрацией по дате, но данные разбросаны как попало, каждая партиция будет содержать «всякое». Это убивает pruning. Кластеризация (автоматическая или ручная) группирует похожие значения вместе. Но будьте осторожны: автоматическая кластеризация стоит денег. Иногда дешевле смириться с тем, что WHERE date = '2024-01-01' сканирует всю таблицу.

Типы таблиц: transient, temporary и permanent Snowflake предлагает три типа таблиц: permanent (живут вечно, имеют Fail-safe), transient (живут вечно, но без Fail-safe — дешевле) и temporary (живут только в рамках сессии). Выбор между ними — это баланс между безопасностью и ценой. Если вы храните промежуточные данные ETL, transient — ваш друг. Permanent — для всего, что жалко потерять. Temporary — для экспериментов, которые вы забудете через час.

Views: стандартные, материализованные и secure Представления в Snowflake бывают трёх видов. Обычные — это просто сохранённый SQL-запрос, который выполняется каждый раз. Материализованные — это предрассчитанные данные, которые обновляются автоматически (но стоят денег за обслуживание). Secure — это как обычный view, но с защитой от просмотра исходного SQL (полезно, если вы даёте доступ сторонним командам).

Комментарий студии METABYTE Понимание микро-партиций и кластеризации в Snowflake — это как знать, где лежат ключи от машины: без этого можно ездить, но каждый раз искать дольше. Если хотите, чтобы ваши запросы летали, а счёт за облако не пугал — приходите, мы поможем настроить кластеризацию так, чтобы она работала на вас, а не на обогащение Snowflake.

СЛЕДУЮЩИЙ ШАГ

Понравилось как мыслим?

Применяем те же принципы в клиентских проектах: AI, автоматизации, продукты, которые не умирают после релиза.