data-infra
Словарь ↗Оконная функция
Оконная функция вычисляет значение для каждой строки, используя связанный с ней набор строк, но не схлопывая их в одну. Агрегат возвращает одно число на группу; оконная функция возвращает число на строку, продолжая видеть группу. Именно эта разница позволяет выразить нарастающие итоги, ранжирование, порядковые номера событий на клиента, скользящие средние и сравнение с предыдущей строкой одним SQL-выражением вместо самосоединения или кода приложения. В синтаксисе стоит понять три части, потому что большая часть путаницы возникает из их смешения. PARTITION BY задаёт, какие строки относятся друг к другу, — аналог GROUP BY, но без схлопывания. ORDER BY задаёт порядок внутри секции и именно он делает осмысленными нарастающие итоги и обращения к соседним строкам. Указание рамки определяет, какую часть упорядоченной секции функция видит для текущей строки; так выражается скользящее среднее по предшествующему окну. Пропуск рамки оставляет умолчание, которое не всегда совпадает с ожиданиями, и это частый источник результатов, выглядящих почти правильно. В аналитике это стандартный инструмент для вопросов, из которых состоит продуктовая отчётность: первое и последнее событие каждого пользователя, промежуток между последовательными событиями, ранг аккаунтов по выручке внутри региона, скользящее число активных за семь дней. На больших таблицах они дороги, так как требуют упорядочивания внутри каждой секции, поэтому в хранилище стоит проверить, поддерживает ли выбранный столбец секционирования сама раскладка хранения.
Похожие термины