Автоматизация конвейеров данных в Snowflake
Emily Melhuish
Technical Curriculum Developer, Snowflake

Snowflake кэширует результаты на трёх уровнях — каждый имеет свой охват и время жизни

| Условие | Промах кэша, если… |
|---|---|
| Текст запроса совпадает точно | Различается регистр, пробелы или псевдонимы |
| Нет нерезервируемых функций | Функции, изменяющиеся между запусками: RANDOM |
| Базовые таблицы не изменены | DML, рекластеризация или консолидация после последнего запуска |
| Сохранённый результат доступен | Истёк TTL 24 часа без повторного использования или 31 день |
| Роль имеет необходимые привилегии | SELECT: роль без привилегий; SHOW: другая роль |

Кэш хранилища
Кэш метаданных
Без прунинга:
SELECT *
FROM logistics.shipments
WHERE MONTH(dispatch_date) = 3;
С прунингом:
SELECT *
FROM logistics.shipments
WHERE dispatch_date >= '2024-03-01'
AND dispatch_date < '2024-04-01';
Избегайте SELECT *
-- Reads every column
SELECT *
FROM logistics.shipments
WHERE region = 'EMEA';
-- Reads only what's needed
SELECT shipment_id
, delivery_days
FROM logistics.shipments
WHERE region = 'EMEA';
Избегайте неявных перекрёстных соединений
-- Missing join condition = Cartesian
SELECT s.shipment_id
, c.name
FROM shipments s, carriers c;
-- Explicit JOIN with ON condition
SELECT s.shipment_id
, c.name
FROM shipments s
JOIN carriers c ON s.carrier_id = c.id;
Автоматизация конвейеров данных в Snowflake