Перейти к основному содержанию
Некоторые агрегатные функции могут принимать не только столбцы-аргументы (используемые для сжатия), но и набор параметров — констант для инициализации. В синтаксисе используются две пары скобок вместо одной: первая — для параметров, вторая — для аргументов.

histogram

Вычисляет адаптивную гистограмму. Не гарантирует точные результаты.
Функция использует алгоритм A Streaming Parallel Decision Tree Algorithm. Границы интервалов гистограммы корректируются по мере поступления в функцию новых данных. В общем случае ширина интервалов неодинакова. Аргументы valuesвыражение, которое возвращает входные значения. Параметры number_of_bins — Верхний предел количества интервалов в гистограмме. Функция автоматически вычисляет количество интервалов. Она пытается достичь указанного количества интервалов, но, если это не удается, использует меньшее количество. Возвращаемые значения
  • Array из Tuple следующего формата:
    • lower — Нижняя граница интервала.
    • upper — Верхняя граница интервала.
    • height — Вычисленная высота интервала.
Пример
Гистограмму можно визуализировать с помощью функции bar, например:
В этом случае следует помнить, что границы интервалов гистограммы неизвестны.

sequenceMatch

Проверяет, есть ли в последовательности цепочка событий, соответствующая шаблону регулярного выражения. Синтаксис
События, происходящие в одну и ту же секунду, могут располагаться в последовательности в неопределённом порядке, что может повлиять на результат.
Аргументы
  • timestamp — Столбец, содержащий временные данные. Обычно используются типы данных Date и DateTime. Также можно использовать любой из поддерживаемых типов данных UInt.
  • cond1, cond2 — Условия, описывающие цепочку событий. Тип данных: UInt8. Можно передать до 32 аргументов-условий. Функция учитывает только события, описанные этими условиями. Если последовательность содержит данные, не описанные ни одним условием, функция их пропускает.
Параметры Возвращаемые значения
  • 1, если шаблон регулярного выражения совпал.
  • 0, если шаблон регулярного выражения не совпал.
Тип: UInt8.

Синтаксис шаблона

  • (?N) — Соответствует аргументу условия с номером N. Условия нумеруются в диапазоне [1, 32]. Например, (?1) соответствует аргументу, переданному в параметр cond1.
  • .* — Соответствует любому количеству событий. Для сопоставления с этим элементом шаблона условные аргументы не требуются.
  • (?t operator value) — Задаёт интервал в секундах, который должен разделять два события. Например, шаблон (?1)(?t>1800)(?2) соответствует событиям, между которыми проходит более 1800 секунд. Между этими событиями может находиться произвольное количество любых событий. Можно использовать операторы >=, >, <, <=, ==.
Примеры Рассмотрим данные в таблице t:
Выполните запрос:
Функция нашла цепочку событий, в которой число 2 следует за числом 1. Число 3 между ними она пропустила, поскольку оно не описано как событие. Если мы хотим учитывать это число при поиске цепочки событий, приведенной в примере, следует задать для него условие.
В этом случае функция не смогла найти цепочку событий, соответствующую шаблону регулярного выражения, потому что событие с номером 3 произошло между 1 и 2. Если бы в том же случае мы проверили условие для числа 4, последовательность соответствовала бы шаблону регулярного выражения.
См. также

sequenceCount

Подсчитывает количество цепочек событий, соответствующих шаблону регулярного выражения. Функция ищет неперекрывающиеся цепочки событий. Поиск следующей цепочки начинается после обнаружения текущей.
События, происходящие в одну и ту же секунду, могут располагаться в последовательности в неопределённом порядке, что влияет на результат.
Синтаксис
Аргументы
  • timestamp — Столбец, содержащий временные данные. Обычно используются типы данных Date и DateTime. Также можно использовать любой из поддерживаемых типов данных UInt.
  • cond1, cond2 — Условия, описывающие цепочку событий. Тип данных: UInt8. Можно передать до 32 аргументов-условий. Функция учитывает только события, описанные в этих условиях. Если последовательность содержит данные, не описанные ни одним условием, функция их пропускает.
Параметры Возвращаемые значения
  • Количество неперекрывающихся цепочек событий, соответствующих шаблону регулярного выражения.
Тип: UInt64. Пример Рассмотрим данные в таблице t:
Подсчитайте, сколько раз число 2 появляется после числа 1 независимо от количества других чисел между ними:

sequenceMatchEvents

Возвращает временные метки событий для самых длинных цепочек событий, соответствующих шаблону регулярного выражения.
События, происходящие в одну и ту же секунду, могут располагаться в последовательности в неопределённом порядке, что влияет на результат.
Синтаксис
Аргументы
  • timestamp — Столбец, содержащий временные данные. Обычно используются типы данных Date и DateTime. Также можно использовать любой из поддерживаемых типов данных UInt.
  • cond1, cond2 — Условия, описывающие цепочку событий. Тип данных: UInt8. Можно передать до 32 аргументов-условий. Функция учитывает только события, описанные этими условиями. Если последовательность содержит данные, не описанные ни одним условием, функция их пропускает.
Параметры Возвращаемые значения
  • Массив временных меток для совпавших аргументов-условий (?N) из цепочки событий. Позиция в массиве соответствует позиции аргумента-условия в шаблоне регулярного выражения.
Тип: Array. Пример Рассмотрим данные в таблице t:
Возвращает временные метки событий самой длинной последовательности
См. также

windowFunnel

Ищет цепочки событий в скользящем временном окне и вычисляет максимальное число событий из цепочки, которые произошли в его пределах. Функция работает по следующему алгоритму:
  • Функция ищет данные, которые удовлетворяют первому условию в цепочке, и устанавливает счётчик событий в 1. В этот момент начинается скользящее окно.
  • Если события из цепочки происходят последовательно в пределах окна, счётчик увеличивается. Если последовательность событий нарушается, счётчик не увеличивается.
  • Если данные содержат несколько цепочек событий с разной степенью завершённости, функция выводит только длину самой длинной цепочки.
Синтаксис
Аргументы
  • timestamp — Имя столбца, содержащего временную метку. Поддерживаемые типы данных: Date, DateTime и другие беззнаковые целочисленные типы (обратите внимание: хотя timestamp поддерживает тип UInt64, его значение не может превышать максимальное значение Int64, то есть 2^63 - 1).
  • cond — Условия или данные, описывающие цепочку событий. UInt8.
Параметры
  • window — Длина скользящего окна, то есть временной интервал между первым и последним условием. Единица измерения window зависит от самого timestamp и может различаться. Определяется с помощью выражения timestamp of cond1 <= timestamp of cond2 <= ... <= timestamp of condN <= timestamp of cond1 + window.
  • mode — Необязательный аргумент. Можно задать один или несколько режимов.
    • 'strict_deduplication' — Если для последовательности событий выполняется одно и то же условие, такое повторяющееся событие прерывает дальнейшую обработку. Примечание: режим может работать неожиданным образом, если для одного и того же события выполняются несколько условий.
    • 'strict_order' — Не допускает появления других событий между нужными. Например, в случае A->B->D->C поиск A->B->C прекращается на D, и максимальный уровень события равен 2.
    • 'strict_increase' — Применяет условия только к событиям со строго возрастающими временными метками.
    • 'strict_once' — Учитывает каждое событие в цепочке только один раз, даже если оно удовлетворяет условию несколько раз.
    • 'allow_reentry' — Игнорирует события, нарушающие строгий порядок. Например, в случае A->A->B->C функция найдёт A->B->C, проигнорировав лишнее A, и максимальный уровень события будет равен 3.
Возвращаемое значение Максимальное число последовательно сработавших условий из цепочки в пределах скользящего временного окна. Анализируются все цепочки в выборке. Тип: Integer. Пример Определите, достаточно ли заданного периода времени, чтобы пользователь выбрал телефон и дважды купил его в интернет-магазине. Задайте следующую цепочку событий:
  1. Пользователь вошёл в свою учётную запись в магазине (eventID = 1003).
  2. Пользователь ищет телефон (eventID = 1007, product = 'phone').
  3. Пользователь оформил заказ (eventID = 1009).
  4. Пользователь повторно оформил заказ (eventID = 1010).
Входная таблица:
Узнайте, как далеко пользователь user_id смог продвинуться по цепочке за период с января по февраль 2019 года.
Query
Response
Пример с режимом allow_reentry В этом примере показано, как режим allow_reentry работает с шаблонами повторного входа пользователей:

retention

Функция принимает набор условий в качестве аргументов: от 1 до 32 аргументов типа UInt8, указывающих, было ли выполнено определённое условие для события. В качестве аргумента можно указать любое условие (как в WHERE). Условия, кроме первого, применяются попарно: результат для второго будет true, если первое и второе условия равны true, для третьего — если первое и третье условия равны true, и т. д. Синтаксис
Аргументы
  • cond — Выражение, возвращающее результат типа UInt8 (1 или 0).
Возвращаемое значение Массив из 1 и 0.
  • 1 — Условие для события выполнено.
  • 0 — Условие для события не выполнено.
Тип: UInt8. Пример Рассмотрим пример вычисления функции retention для определения посещаемости сайта. 1. Создайте таблицу для иллюстрации примера.
Query
Исходная таблица:
Query
Response
2. Сгруппируйте пользователей по уникальному идентификатору uid с помощью функции retention.
Query
Response
3. Вычислите общее число посещений сайта за каждый день.
Query
Response
Где:
  • r1- количество уникальных посетителей, посетивших сайт 2020-01-01 (условие cond1).
  • r2- количество уникальных посетителей, посетивших сайт в определённый период времени между 2020-01-01 и 2020-01-02 (условия cond1 и cond2).
  • r3- количество уникальных посетителей, посетивших сайт в определённый период времени 2020-01-01 и 2020-01-03 (условия cond1 и cond3).

uniqUpTo(N)(x)

Вычисляет количество различных значений аргумента до заданного предела N. Если число различных значений аргумента превышает N, функция возвращает N + 1, в противном случае вычисляется точное значение. Рекомендуется использовать при небольших значениях N, до 10. Максимальное значение N — 100. Для состояния агрегатной функции эта функция использует объём памяти, равный 1 + N * размер одного значения в байтах. При работе со строками функция хранит некриптографический хеш размером 8 байт; для строк вычисление является приближённым. Например, у вас может быть таблица, в которой регистрируется каждый поисковый запрос, выполненный пользователями на вашем сайте. Каждая строка в таблице представляет собой один поисковый запрос, со столбцами для ID пользователя, поискового запроса и временной метки запроса. Вы можете использовать uniqUpTo для создания отчёта, который показывает только те ключевые слова, по которым было не менее 5 уникальных пользователей.
uniqUpTo(4)(UserID) вычисляет число уникальных значений UserID для каждого SearchPhrase, но считает только до 4 уникальных значений. Если для какого-либо SearchPhrase уникальных значений UserID больше 4, функция возвращает 5 (4 + 1). Затем условие HAVING отфильтровывает значения SearchPhrase, для которых число уникальных значений UserID меньше 5. В результате вы получите список поисковых ключевых слов, которые использовали как минимум 5 уникальных пользователей.

sumMapFiltered

Эта функция работает так же, как sumMap, но дополнительно принимает в качестве параметра массив ключей, по которому выполняется фильтрация. Это может быть особенно полезно при работе с высокой мощностью ключей. Синтаксис sumMapFiltered(keys_to_keep)(keys, values) Параметры
  • keys_to_keep: Array ключей, используемый для фильтрации.
  • keys: Array ключей.
  • values: Array значений.
Возвращаемое значение
  • Возвращает кортеж из двух массивов: ключи в отсортированном порядке и значения, просуммированные для соответствующих ключей.
Пример
Query
Query
Response

sumMapFilteredWithOverflow

Эта функция работает так же, как sumMap, но дополнительно принимает в качестве параметра массив ключей для фильтрации. Это может быть особенно полезно при работе с ключами высокой мощности. От функции sumMapFiltered она отличается тем, что выполняет суммирование с переполнением, то есть возвращает для результата суммирования тот же тип данных, что и у аргумента. Синтаксис sumMapFilteredWithOverflow(keys_to_keep)(keys, values) Параметры
  • keys_to_keep: Array ключей для фильтрации.
  • keys: Array ключей.
  • values: Array значений.
Возвращаемое значение
  • Возвращает кортеж из двух массивов: ключи в отсортированном порядке и значения, просуммированные для соответствующих ключей.
Пример В этом примере мы создаем таблицу sum_map, вставляем в нее несколько строк данных, а затем используем sumMapFilteredWithOverflow, sumMapFiltered и функцию toTypeName, чтобы сравнить результат. Поскольку в созданной таблице requests имел тип UInt8, функция sumMapFiltered повысила тип суммируемых значений до UInt64, чтобы избежать переполнения, тогда как sumMapFilteredWithOverflow сохранила тип UInt8, которого недостаточно для хранения результата, — то есть произошло переполнение.
Query
Query
Query
Response
Response

sequenceNextNode

Возвращает значение следующего события, совпавшего с цепочкой событий. Экспериментальная функция. Чтобы включить её, задайте SET allow_experimental_funnel_functions = 1. Синтаксис
Параметры
  • direction — Используется для выбора направления.
    • forward — Вперед.
    • backward — Назад.
  • base — Используется для задания базовой точки.
    • head — Установить базовую точку на первое событие.
    • tail — Установить базовую точку на последнее событие.
    • first_match — Установить базовую точку на первое совпадение event1.
    • last_match — Установить базовую точку на последнее совпадение event1.
Аргументы
  • timestamp — Имя столбца, содержащего временную метку. Поддерживаемые типы данных: Date, DateTime и другие беззнаковые целочисленные типы.
  • event_column — Имя столбца, содержащего значение следующего возвращаемого события. Поддерживаемые типы данных: String и Nullable(String).
  • base_condition — Условие, которому должна удовлетворять базовая точка.
  • event1, event2, … — Условия, описывающие цепочку событий. UInt8.
Возвращаемые значения
  • event_column[next_index] — Если шаблон совпал и следующее значение существует.
  • NULL - Если шаблон не совпал или следующего значения не существует.
Тип: Nullable(String). Пример Это можно использовать, когда события имеют вид A->B->C->D->E и нужно определить событие, следующее за B->C, то есть D. Запрос для поиска события, следующего за A->B:
Query
Response
Поведение forward и head
Поведение backward и tail
Поведение параметров forward и first_match
Поведение параметров backward и last_match
Поведение base_condition
Последнее изменение 2 июля 2026 г.