Инженерия данных

Analytical SQL

Аналитический SQL

актуальноТекущий рабочий стандарт

Оконные функции, агрегации и CTE — основной инструмент подготовки признаков на больших данных.

Ключевые тезисы

  • Оконные функции считают лаги, скользящие суммы и ранги без выгрузки данных в память.
  • Признаки лучше считать в хранилище: это быстрее и воспроизводимо в проде.
  • QUALIFY, GROUPING SETS и семплирование экономят часы при работе с большими таблицами.

Подробный разбор

2 подтем — раскройте любую, чтобы увидеть объяснение, формулы, примеры и интерактивные графики.

1

Оконные функции для признаков

Лаги и скользящие агрегаты прямо в SQL.

SELECT user_id, ts, amount,
  LAG(amount, 1) OVER w                                   AS prev_amount,
  AVG(amount) OVER (w ROWS BETWEEN 6 PRECEDING AND 1 PRECEDING) AS avg_7,
  COUNT(*)    OVER (w RANGE BETWEEN INTERVAL '30' DAY PRECEDING AND CURRENT ROW) AS cnt_30d
FROM transactions
WINDOW w AS (PARTITION BY user_id ORDER BY ts)
Обратите внимание на `1 PRECEDING`: текущая строка исключена, иначе это утечка
На практике

Считать признаки в хранилище выгоднее, чем в pandas: не нужно выгружать данные, и тот же запрос переиспользуется в проде.

2

Производительность запросов

Что чаще всего убивает время.

  • SELECT * на широкой таблице — читаются все столбцы; перечисляйте нужные явно.
  • Джойн больших таблиц без фильтра по партиции.
  • DISTINCT и COUNT(DISTINCT ...) на миллиардах строк — используйте приближённые (HLL) варианты.
  • Перекос ключей в джойне: одна задача обрабатывает 90% данных.

Связанные темы

Платформа данных

Warehouse, Lake, Lakehouse80%

Хранилище, озеро, lakehouse · Инженерия данных

Три способа хранить аналитические данные: строгая схема, сырые файлы или гибрид с транзакциями поверх объектного хранилища.

File Formats80%

Форматы хранения · Инженерия данных

Колоночные форматы против строковых: почему Parquet почти всегда лучше CSV для аналитики.

Partitioning80%

Партиционирование · Инженерия данных

Разделение данных по ключу (обычно по дате), чтобы запрос читал минимум файлов.

ETL vs ELT80%

ETL и ELT · Инженерия данных

Преобразовывать данные до загрузки или уже внутри хранилища — и почему индустрия сместилась ко второму.

Batch and Streaming80%

Батч и стриминг · Инженерия данных

Обработка по расписанию против непрерывной обработки событий. Разные задержки, разные гарантии, разная стоимость.

Orchestration80%

Оркестрация пайплайнов · Инженерия данных

Планировщик, который знает зависимости между задачами, повторяет упавшие и не даёт запускать одно и то же дважды.

Spark80%

Spark · Инженерия данных

Распределённая обработка больших объёмов данных: тот случай, когда данные не помещаются на одну машину.

Kafka80%

Kafka · Инженерия данных

Распределённый журнал событий: основа потоковой архитектуры и источник данных для онлайн-признаков.

ML Pipelines80%

ML-пайплайны · MLOps

Оформление обучения как воспроизводимой последовательности шагов вместо разрозненных ноутбуков.

Data Versioning80%

Версионирование данных · MLOps

Данные меняются чаще кода — без их версий эксперимент не воспроизвести.