deшка
Урок 2.1

Как устроен модуль и учебная база

Для кого этот модуль, из чего он состоит, учебная база и самопроверка из трёх запросов.

Этот модуль не учит SQL с нуля. Он про те места, где инженер данных ошибается, даже если давно пишет запросы: задвоенные суммы после JOIN, NULL в условиях, потерянные строки, повторная загрузка с дублями, запрос, который на проде работает час. Синтаксис SELECT, WHERE и GROUP BY здесь считается известным.

Если базовый синтаксис пока не знаком, сначала пройдите вводный курс, например симулятор SQL от karpov.courses или SQL Academy, и возвращайтесь. Понять, нужно ли это вам, поможет самопроверка в конце урока.

Что внутри

  1. Как запрос выполняется на самом деле: логический порядок обработки, NULL и трёхзначная логика, типы и неявные приведения.
  2. JOIN: потерянные строки, semi и anti join, JOIN по диапазону, физические алгоритмы соединения.
  3. Оконные функции: ранжирование, рамки окна, дедупликация и последняя версия записи.
  4. Изменение данных: виды команд SQL, DDL и права доступа, upsert и MERGE, повторный запуск загрузки без дублей, транзакции.
  5. Качество данных и сверки: проверки уникальности и полноты, сверка источника с витриной.
  6. Производительность: чтение EXPLAIN, индексы, партиции, типичные антипаттерны.

Учебная база

Все примеры и задачи модуля используют одну базу данных интернет-магазина. В ней хранятся клиенты, товары, заказы, платежи и события сайта, а также служебные таблицы, через которые данные загружаются в хранилище. СУБД — PostgreSQL. Время в базе хранится в UTC, текущая дата в ней — 1 июля 2026 года.

ТаблицаЧто в ней
customersклиенты: email, город, сегмент, дата регистрации
customers_historyистория города и сегмента клиента с периодами действия
citiesгорода, регионы и часовые пояса
productsтовары и категории
ordersзаказы: статус, даты, город доставки, промокод, сумма
order_itemsпозиции заказов: количество, цена на момент заказа, скидка
paymentsплатежи, частичные оплаты, неудачные попытки и возвраты
stg_ordersпромежуточная таблица загрузки: все версии заказов в том виде, в каком они приходят из источника
eventsсобытия сайта: просмотры, поиск, корзина, покупки
load_logжурнал загрузок: даты, попытки, статусы, число строк

В данных встречаются пропуски, дубли, заказы без клиента, события, пришедшие с опозданием, и одинаковые статусы в разном регистре. Так выглядят данные в рабочих хранилищах, и задачи модуля построены на этих особенностях.

Внешних ключей в базе нет: в аналитических хранилищах их обычно не создают. Поэтому заказ может ссылаться на клиента, которого нет в таблице клиентов, и целостность данных проверяется запросами.

Самопроверка

Ниже три запроса на то, что модуль считает известным. Ориентир такой: если все три решаются без подсказок, идите дальше. Если буксуют JOIN, GROUP BY или оконные функции, сначала закройте базу вводным курсом, иначе следующие уроки будут читаться тяжело.

postgresql · песочницарешено 0 / 3

Сколько заказов создано в июне 2026 года? Верните одну строку с колонкой orders.

Время в базе хранится в UTC, границы месяца считайте по нему.

Ctrl+Enter
Войти, чтобы отмечатьдальше →
2.2 →Логический порядок выполнения запроса