Skip to main content
Skip to main content
Edit this page

Параметрические агрегатные функции

Некоторые агрегатные функции могут принимать не только столбцы-аргументы (по которым производится свёртка), но и набор параметров - констант для инициализации. Синтаксис - две пары круглых скобок вместо одной. Первая - для параметров, вторая - для аргументов.

histogram​

Рассчитывает адаптивную гистограмму. Не гарантирует точного результата.

Функция использует A Streaming Parallel Decision Tree Algorithm. Границы столбцов устанавливаются по мере поступления новых данных в функцию. В общем случае столбцы имею разную ширину.

Аргументы

values — выражение, предоставляющее входные значения.

Параметры

number_of_bins — максимальное количество корзин в гистограмме. Функция автоматически вычисляет количество корзин. Она пытается получить указанное количество корзин, но если не получилось, то в результате корзин будет меньше.

Возвращаемые значения

  • lower — нижняя граница корзины.
  • upper — верхняя граница корзины.
  • height — количество значений в корзине.

Пример

С помощью функции bar можно визуализировать гистограмму, например:

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

sequenceMatch(pattern)(timestamp, cond1, cond2, ...)​

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

Предупреждение

События, произошедшие в одну и ту же секунду, располагаются в последовательности в неопределенном порядке, что может повлиять на результат работы функции.

Аргументы

  • 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(pattern)(time, cond1, cond2, ...)​

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

Предупреждение

События, произошедшие в одну и ту же секунду, располагаются в последовательности в неопределенном порядке, что может повлиять на результат работы функции.

Аргументы

  • timestamp — столбец, содержащий метки времени. Типичный тип данных столбца — Date или DateTime. Также можно использовать любой из поддержанных типов данных UInt.

  • cond1, cond2 — условия, описывающие цепочку событий. Тип данных — UInt8. Можно использовать до 32 условий. Функция учитывает только те события, которые указаны в условиях. Функция пропускает данные из последовательности, если они не описаны ни в одном из условий.

Параметры

Возвращаемое значение

  • Число непересекающихся цепочек событий, соответствущих шаблону.

Тип: UInt64.

Пример

Пусть таблица t содержит следующие данные:

Вычислим сколько раз число 2 стоит после числа 1, причем между 1 и 2 могут быть любые числа:

Смотрите также

sequenceMatchEvents(pattern)(time, cond1, cond2, ...)​

Возвращает значения меток времени для условий самой длинной цепочки удвлетворяющей шаблону.

Предупреждение

События, произошедшие в одну и ту же секунду, располагаются в последовательности в неопределенном порядке, что может повлиять на результат работы функции.

Аргументы

  • timestamp — столбец, содержащий метки времени. Типичный тип данных столбца — Date или DateTime. Также можно использовать любой из поддержанных типов данных UInt.

  • cond1, cond2 — условия, описывающие цепочку событий. Тип данных — UInt8. Можно использовать до 32 условий. Функция учитывает только те события, которые указаны в условиях. Функция пропускает данные из последовательности, если они не описаны ни в одном из условий.

Параметры

Возвращаемое значение

  • Массив меток времени условий (?N) для самой длинной цепочки. Позиция метки времени в массиве совпадает с позицией условия в шаблоне.

Тип: Array.

Пример

Пусть таблица t содержит следующие данные:

Смотрите также

windowFunnel​

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

Функция работает по алгоритму:

  • Функция отыскивает данные, на которых срабатывает первое условие из цепочки, и присваивает счетчику событий значение 1. С этого же момента начинается отсчет времени скользящего окна.

  • Если в пределах окна последовательно попадаются события из цепочки, то счетчик увеличивается. Если последовательность событий нарушается, то счетчик не растет.

  • Если в данных оказалось несколько цепочек разной степени завершенности, то функция выдаст только размер самой длинной цепочки.

Синтаксис

Аргументы

  • timestamp — имя столбца, содержащего временные отметки. Date, DateTime и другие параметры с типом Integer. В случае хранения меток времени в столбцах с типом UInt64, максимально допустимое значение соответствует ограничению для типа Int64, т.е. равно 2^63-1.
  • cond — условия или данные, описывающие цепочку событий. UInt8.

Параметры

  • window — ширина скользящего окна по времени. Это время между первым и последним условием. Единица измерения зависит от timestamp и может варьироваться. Должно соблюдаться условие timestamp события cond1 <= timestamp события cond2 <= ... <= timestamp события condN <= timestamp события cond1 + window.
  • mode — необязательный параметр. Может быть установленно несколько значений одновременно.
    • 'strict' — не учитывать подряд идущие повторяющиеся события.
    • 'strict_order' — запрещает посторонние события в искомой последовательности. Например, при поиске цепочки A->B->C в A->B->D->C поиск будет остановлен на D и функция вернет 2.
    • 'strict_increase' — условия прменяются только для событий со строго возрастающими временными метками.

Возвращаемое значение

Максимальное количество последовательно сработавших условий из цепочки в пределах скользящего окна по времени. Исследуются все цепочки в выборке.

Тип: Integer.

Пример

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

Зададим следующую цепочку событий:

  1. Пользователь вошел в личный кабинет (eventID = 1001).
  2. Пользователь ищет телефон (eventID = 1003, product = 'phone').
  3. Пользователь сделал заказ (eventID = 1009)
  4. Пользователь сделал повторный заказ (eventID = 1010).

Входная таблица:

Сделаем запрос и узнаем, как далеко пользователь user_id смог пройти по цепочке за период в январе-феврале 2019-го года.

Запрос:

retention​

Аналитическая функция, которая показывает, насколько выдерживаются те или иные условия, например, удержание динамики/уровня посещаемости сайта.

Функция принимает набор (от 1 до 32) логических условий, как в WHERE, и применяет их к заданному набору данных.

Условия, кроме первого, применяются попарно: результат второго будет истинным, если истинно первое и второе, третьего - если истинно первое и третье и т.д.

Синтаксис

Аргументы

  • cond — вычисляемое условие или выражение, которое возвращает UInt8 результат (1/0).

Возвращаемое значение

Массив из 1 или 0.

  • 1 — условие выполнено.
  • 0 — условие не выполнено.

Тип: UInt8.

Пример

Рассмотрим пример расчета функции retention для определения посещаемости сайта.

1. Создадим таблицу для илюстрации примера.

Входная таблица:

Запрос:

Ответ:

2. Сгруппируем пользователей по уникальному идентификатору uid с помощью функции retention.

Запрос:

Результат:

3. Рассчитаем количество посещений сайта за день.

Запрос:

Результат:

Где:

  • 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 байт. То есть, для строк вычисление приближённое.

Функция также работает для нескольких аргументов.

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

Пример применения:

sequenceNextNode​

Возвращает значение следующего события, соответствующего цепочке событий.

Экспериментальная функция, чтобы включить ее, выполните: SET allow_experimental_funnel_functions = 1.

Синтаксис

Параметры

  • direction — используется для навигации по направлениям.

    • forward — двигаться вперед.
    • backward — двигаться назад.
  • base — используется для задания начальной точки.

    • head — установить начальную точку на первое событие цепочки.
    • tail — установить начальную точку на последнее событие цепочки.
    • first_match — установить начальную точку на первое соответствующее событие event1.
    • last_match — установить начальную точку на последнее соответствующее событие event1.

Аргументы

  • timestamp — название столбца, содержащего 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:

Результат:

Поведение для forward и head

Поведение для backward и tail

Поведение для forward и first_match

Поведение для backward и last_match

Поведение для base_condition