BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс по ClickHouse » Энциклопедия ClickHouse » clickhouse argmax

clickhouse argmax

 

Краткое введение

Аргументационная агрегация argMax в ClickHouse служит ключевым инструментом для определения значений, связанных с максимальной величиной другого поля. В контексте чеерезвычайно больших массивов данных и многокластерной архитектуры она позволяет за одну агрегацию получить и сам максимальный показатель, и связанный с ним аргумент. Правильное применение этого паттерна существенно упрощает построение дашбордов «последних состояний» (latest state), детекцию аномалий на основе времени события и реализацию паттернов дедупликации. В рамках курса Clickhouse данная глава ориентирована на аналитиков, архитекторов и ИТ-директоров: от базовых концепций до практических архитектурных решений, включая сценарии внедрения на практике с учетом ограничений и рисков.

Введение
ArgMax - это агрегатная функция, которая возвращает значение первого аргумента при максимальном значении второго аргумента. В простейшем виде:

  • argMax(x, y) возвращает x, где y достигает максимума.
    Таким образом, argMax позволяет за одну агрегацию получить «последнее известное» значение набора по заданному критерию. В реальных сценариях это часто применимо к задаче: «какой user_id соответствует самой поздней событию» или «какая ценность продукта была связана с максимальным временем обновления».

     

Основные понятия и термины

  • Агрегатная функция: функция, применяемая к группе строк и возвращающая скаляр.
  • Аргумент максимума: значение первого аргумента, связанное с максимальным значением второго аргумента.
  • Векторные/композиционные выражения: первый аргумент argMax может быть любым выражением, включая сложные типы, например кортежи (Tuple), что позволяет реализовать детерминированный разбор по нескольким критериям.
  • Точность и детерминизм: поведение при равенстве максимальных значений зависит от порядка обработки строк (агрегационный порядок может быть не детерминированным без явного механизма для разрыва ties).

     

Теоретические основы и терминология

  • Смысл argMax: получение аргумента максимального значения по второму аргументу. В простых примерах это поиск «последнего» обновления по времени: argMax(user_id, event_time) даст пользователя, чье последнее событие случилось позже.
  • Преимущества по сравнению с альтернативами: в ClickHouse argMax выполняется за одну проходную агрегацию и не требует полного сортирования входа, что критично для больших наборов данных.
  • Типы данных: второй аргумент должен быть сравнимым (orderable). Первый аргумент может быть скалярным типом или композитным (например, Tuple). Null значения обычно обрабатываются как отсутствующие; для детерминизма рекомендуется приводить данные к не-null перед агрегацией или использовать coalesce/задание значения по умолчанию.
  • Комбинации с другими агрегациями: argMax часто комбинируется с группировкой по ключу (GROUP BY) и может применяться внутри Materialized View или сложных моделей ETL.

     

Методологии и подходы

  • Классический паттерн «последнее значение по группе»: group by по ключу (например, region, device_id) и argMax по времени события.
  • Детализация через детерминированный разрыв ties: если в группе существуют несколько записей с одинаковым максимальным y, следует использовать дополнительный критерий для разрыва. Это можно сделать, передав в первый аргумент не просто одно поле, а кортеж, например(argMax((user_id, event_id), event_time)) - тогда в случае равных event_time будет применяться лексикографический порядок аргументов.
  • Тонкости производительности: argMax не требует сортировки по группам, что особенно важно в высоконагруженных кластерах и в обзоре больших телеков данных. Однако размерность первого аргумента и размерность группы влияют на задержку и потребление памяти во время агрегации.
  • Выбор подхода в распределённых окружениях: в ClickHouse, работающих в распределённой конфигурации, аргМакс пересчитывается на каждом узле и затем объединяется. Важно обеспечить совместимость типов и корректность функций в MergeTree и Distributed.

     

Архитектура и технологическая реализация

  • Внутренний механизм: argMax реализуется как агрегатная функция с состоянием, содержающим текущий максимум второго аргумента и соответствующий ему первый аргумент. На момент финализации (Finalize) возвращается сохранённый первый аргумент.
  • Типовая схема выполнения:
    • Чтение входа
    • Обновление состояния: если текущий y больше сохранённого максимума, обновляем arg и maxValue соответственно
    • В случае группировки: хранение состояния на уровне каждой группы
    • Merge (в distributed/merge-подсистемах): локальные состояния объединяются в глобальный результат
  • Пример архитектурной схеме:
    • Таблица исходных данных (MergeTree): events(region, user_id, event_time, status)
    • Запрос агрегации: SELECT region, argMax(user_id, event_time) AS last_user FROM events GROUP BY region
    • В распределённой среде: запрос отправляется на узлы, локальные результаты объединяются через механизм Distributed
  • Совместимость с Materialized View: можно реализовать предвычисление last_user по регионам и хранить в специально спроектированной MV-таблице. Пример паттерна: MV на основе MergeTree, возвращающая последние значения per region для ускорения дашбордов.

Технические детали реализации (алгоритмы, схемы, протоколы, интеграции)

  • Пример SQL-запроса
    • Базовый сценарий последнего значения per регион:
      SELECT region,
      argMax(user_id, event_time) AS last_user
      FROM events
      GROUP BY region

       

ORDER BY region;

  • Расширенный пример с детерминизмом через кортеж как первый аргумент:
    • SELECT region,
      argMax((user_id, device_id), event_time) AS last_user_tuple
      FROM events

       

GROUP BY region;

В ответ возвращается кортеж (user_id, device_id) для максимального event_time. Это позволяет зафиксировать детерминированный критерий отбора в условиях равной временной метки.

  • Пример с Nullable-значениями:
    • SELECT region,
      argMax(coalesce(user_id, 0), event_time) AS last_user
      FROM events

       

GROUP BY region;

Здесь coalesce снимает проблему NULL и возвращает безопасное значение для первого аргумента.

  • Интеграции с инструментами:
    • Визуализация: Grafana или Яндекс DataLens (российский BI-инструмент) для построения дашбордов, отображающих последнюю ценность per регион.
    • Потоковая интеграция: Kafka + ClickHouse для обработки событий с задержкой и последующим обновлением агрегаций.
    • Архитектурные паттерны: предагрегация через Materialized View для ускорения чтения, минимизации задержек и снижения нагрузки на основную таблицу.

       

Риски, ограничения и типовые ошибки

  • Точность и детерминизм:
    • При наличии равных значений второго аргумента поведение может быть не полностью детерминированным. Решение: добавлять дополнительный критерий в первый аргумент (использовать Tuple) для явного разрыва ties.
  • Неправильная концепция использования:
    • Применение argMax там, где требуется агрегат, возвращающий конкретное значение при максимальном втором аргументе, должно быть явно обосновано в бизнес-логике. Неправильное использование может привести к неверным выводам о трендах.
  • Распределённые настройки:
    • В кластерах с нестабильной задержкой между узлами, агрегация argMax может приводить к кратковременным расхождениям между локальными и глобальными результатами. Рекомендовано использовать мутуальные стратегии построения агрегатов и, при необходимости, Finalize для согласованности.
  • Nullable и типизация:
    • Неправильная обработка NULL может привести к потере информации. Всегда проверяйте поведение NULL в вашем контексте и применяйте coalesce или обертывания в Nullable-aware выражения.
  • Производительность и память:
    • Хотя argMax использует константноеO(1) дополнительной памяти на группу, большое число групп может оказать давление на память. При больших cardinalities следует рассмотреть предагрегацию через MV или фильтрацию для снижения числа групп.

Сравнение с альтернативами и паттерны оптимизации

  • argMax против обычного MAX + JOIN:
    • MAX требует дополнительной джоинизации по ключу, что может быть дорогим для больших наборов. argMax делает это в рамках одной агрегатной операции и избегает явной джойнинговой стадии.
  • Композитные выражения для детерминизма:
    • Можно использовать argMax с Tuple в качестве первого аргумента, чтобы зафиксировать более сложный критерий отбора.
  • Материализованные представления (MV):
    • В рамках архитектуры данных MV позволяют держать предвычисленные значения последнего состояния по группам, что особенно полезно для быстрого чтения в BI-сценариях и уменьшения нагрузки на основную таблицу.

       

Примеры open-source и российских продуктов

  • Open-source:
    • ClickHouse (ядро): высокоэффективная колоночная СУБД для OLAP-аналитики, оригинально создана в Яндексе, ныне активная независимая разработка. АргМакс - стандартный инструмент агрегации.
    • Apache Pinot (open-source): альтернативная OLAP-платформа; позволяет реализовывать аналогичные паттерны анализа больших массивов, включая агрегации по времени и локальные «последние значения».
  • Российские продукты и экосистемы:
    • Яндекс ClickHouse: родоначальник проекта, массово применяемый внутри экосистем Яндекса и за её пределами; поддерживает argMax и интеграцию с Yandex DataSphere, DataLens, и другими продуктами.
    • Яндекс DataLens: BI-инструмент для визуализации и анализа данных, который часто работает поверх ClickHouse и предлагает готовые паттерны агрегации, включая argMax, для dashboards.
    • Яндекс Метрика и другие сервисы: внутреннее использование ClickHouse в больших объемах позволяет демонстрировать реальный опыт эксплуатации паттернов argMax в проде.

       

Практические организации и архитектурные решения

  • Архитектура «центр-распределение»:
    • Исходные данные в MergeTree или AggregateMergeTree, агрегации argMax по региону/устройству, затем суммированные данные передаются в DW-слой или в BI-слой через Materialized View.
  • Резервирование и отказоустойчивость:
    • Распределённая конфигурация с Distributed, репликациями и MergeTree позволяет сохранять критические операции по вычислению последнего значения без потери данных при сбоях узлов.
  • Безопасность и соответствие:
    • Учет прав доступа на уровне таблиц и проектов, строгая версияирование схемы, регламентированные паттерны обновлений и миграций, поддержка retention policy для исторических данных.

Заключение
ArgMax в ClickHouse - мощный инструмент, который позволяет эффективно извлекать «аргумент максимального» по заданному критерию, не прибегая к дорогостоящей сортировке и джойнам. Правильная реализация включает правильное проектирование схем, учитывание детерминизма, продуманное использование в распределённых конфигурациях и возможность интеграции с MV и BI-инструментами. В сочетании с открытыми и российскими продуктами экосистемы это обеспечивает гибкие и масштабируемые решения для анализа больших массивов данных в реальном времени и в течение исторических периодов.

FAQ

  1. Что именно возвращает argMax?
  • ArgMax(x, y) возвращает значение x для той записи, где y достигает максимума. Это позволяет за одну агрегацию получить и максимальный показатель, и связанное с ним значение.
  1. Как работать с несколькими группами?
  • Используйте GROUP BY по необходимому ключу (регион, устройство, пользователь). Например: SELECT region, argMax(user_id, event_time) AS last_user FROM events GROUP BY region.
  1. Что делать при равных максимумах?
  • Равенство значений y может привести к неопределённому выбору. Чтобы сделать поведение детерминированным, используйте второй уровень критерия в первом аргументе (например, argMax((user_id, event_id), event_time)).
  1. Какие типы данных поддерживаются?
  • Любые сравнимые типы для второго аргумента; первый аргумент может быть скалярным или композитным (Tuple). Важно, что второй аргумент должен быть порядокован.
  1. Как argMax работает в распределённых кластерах?
  • Локальные результаты агрегаций вычисляются на каждом узле, затем объединяются. Это обеспечивает масштабируемость, но требует совместимости типов и аккуратной настройки.
  1. Какие сценарии лучше не использовать с argMax?
  • В случаях, когда требуется точное поведение при сильной конкуренции за одну запись в реальном времени и очень частые обновления, может иметь смысл рассмотреть альтернативы с более явной детерминацией, или использовать суеточные механизмы обновления через MV.
  1. Как обеспечить детерминность и повторяемость в BI?
  • Старайтесь использовать детерминированные критерии отбора (например, Tuple) или заранее нормализованную схему данных. Также можно зафиксировать период агрегации (например, per day) и использовать MV для ускорения чтения.
  1. Как протестировать корректность argMax?
  • Создайте тестовую таблицу, заполните её наборами данных с известными максимумами, запустите агрегации и сравните результаты с ожидаемыми значениями. Включите тесты на случаи с пустыми группами и с NULL.
  1. Какие оптимизации применимы на практике?
  • Используйте MV для предвычисленной агрегации, ограничьте количество групп через фильтры, применяйте подходящие индексы в ORDER BY кластера и мониторинг производительности агрегаций.
  1. Где посмотреть реальные примеры и практику?
  • Официальная документация ClickHouse по агрегациям, обучающие материалы по ClickHouse на open-source площадках, статьи о паттернах «последнего значения» в BI и кейсы использования в российских продуктах Яндекс DataLens и Яндекс Метрика, а также примеры на GitHub в репозиториях сокодами компаний, работающих с ClickHouse.

     

Приложение: частые примеры и шаблоны

  • Базовый пример последнего значения per регион:
    SELECT region, argMax(user_id, event_time) AS last_user
    FROM events
    GROUP BY region
    ORDER BY region;

  • Расширенный пример с детерминизацией через Tuple:
    SELECT region, argMax((user_id, device_id), event_time) AS last_user_tuple
    FROM events
    GROUP BY region;

  • Пример с обработкой NULL:
    SELECT region, argMax(coalesce(user_id, 0), event_time) AS last_user
    FROM events
    GROUP BY region;

  • Пример MV для быстрого чтения:
    CREATE MATERIALIZED VIEW mv_last_user_per_region

     

ENGINE = AggregatingMergeTree() AS

SELECT region, argMax(user_id, event_time) AS last_user
FROM events
GROUP BY region;

Эта глава предоставляет целостное представление о концепциях и практических аспектах применения clickhouse argmax, а также шаблоны архитектурных решений в контексте реальных систем анализа данных.

← Предыдущая статья
clickhouse odbc
Следующая статья →
clickhouse python connect

 

Узнать стоимость решенияЗапросить видео презентацию

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • ООО "Интернэшнл Ресторант Брэндс" – это крупнейший франчайзинговый партнер компании Yum! Brands Russia & CIS в России, отвечающий за рост и развитие бренда KFC на территории РФ. На сегодняшний день у компании более 350 ресторанов. Ежедневно в рестораны приходит 200 000+ гостей.

  • Торгово-производственному холдингу ТБМ, специализирующемуся на поставке комплектующих и фурнитуры для производства окон, дверей, стеклопакетов и мебели, был необходим аналитический инструмент для выявления узким мест и поиска зон роста бизнеса и, как результат, оптимизации процессов. Добиться этого можно было, только внедрив data-driven подход.

  • ПАО «Ростелеком» — российский провайдер цифровых услуг и сервисов. Предоставляет услуги широкополосного доступа в Интернет, интерактивного телевидения, сотовой связи, местной и дальней телефонной связи и др. Занимает лидирующие позиции на российском рынке высокоскоростного доступа в интернет, платного ТВ, хранения и обработки данных, а также кибербезопасности

  • «Лента» – первая по величине сеть гипермаркетов и четвертая среди крупнейших розничных сетей страны. Компания была основана в 1993 г. в Санкт-Петербурге.

    «Лента» управляет 249 гипермаркетами в 88 городах России и 131 супермаркетом в Москве, Санкт-Петербурге, Сибири, Уральском и Центральном регионах с общей торговой площадью около 1 494 тыс. кв. м. Средняя торговая площадь одного гипермаркета «Лента» составляет около 5 500 кв.м, средняя площадь супермаркета – 800 кв.м. Компания оперирует двенадцатью распределительными центрами. Штат компании – около 50, 5 тыс. человек.

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.