Добавленный в: v1.1.0Интерпретирует число UInt64 как MAC-адрес в формате big-endian.
Возвращает соответствующий MAC-адрес в формате AA:BB:CC:DD:EE:FF (шестнадцатеричные числа, разделённые двоеточиями) в виде строки.Синтаксис
Добавленный в: v1.1.0Для MAC-адреса в формате AA:BB:CC:DD:EE:FF (шестнадцатеричные числа, разделённые двоеточиями) возвращает первые три октета в виде числа UInt64. Если MAC-адрес имеет неверный формат, возвращает 0.Синтаксис
Добавленный в: v25.11.0Если пользователь сеанса был переключён с помощью команды EXECUTE AS, эта функция возвращает имя исходного пользователя, использованного для аутентификации и создания сеанса.
Псевдоним: authUser()Синтаксис
authenticatedUser()
Псевдонимы: authUserАргументы
Нет.
Возвращаемое значениеИмя прошедшего аутентификацию пользователя. StringПримерыПример использования
Query
EXECUTE as u1; SELECT currentUser(), authenticatedUser();
Добавленный в: v1.1.0Строит столбчатую диаграмму.
Рисует полосу, ширина которой пропорциональна (x - min) и составляет width символов при x = max.
Полоса рисуется с точностью до одной восьмой символа.Синтаксис
Добавленный в: v1.1.0Возвращает монотонно возрастающий порядковый номер блока, содержащего строку.
Возвращаемый номер блока обновляется по мере возможности, поэтому он может быть не совсем точным.Синтаксис
blockNumber()
Аргументы
Отсутствуют.
Возвращаемое значениеПорядковый номер блока данных, в котором находится строка. UInt64ПримерыБазовое использование
Добавленный в: v1.1.0В ClickHouse запросы обрабатываются блоками (фрагментами).
Эта функция возвращает размер блока (количество строк), в котором она вызвана.Синтаксис
blockSize()
Аргументы
Отсутствуют.
Возвращаемое значениеВозвращает количество строк в текущем блоке. UInt64ПримерыПример использования
Добавленный в: v20.5.0Возвращает идентификатор сборки, сгенерированный компилятором для бинарного файла запущенного сервера ClickHouse.
Если функция выполняется в контексте distributed таблицы, она возвращает обычный столбец со значениями, относящимися к каждому сегменту.
В противном случае она возвращает постоянное значение.Синтаксис
buildId()
Аргументы
Отсутствуют.
Возвращаемое значениеВозвращает идентификатор сборки. StringПримерыПример использования
Добавленный в: v21.1.0Возвращает оценку несжатого размера своих аргументов в памяти в байтах.
Для аргументов String функция возвращает длину строки + 8 (длина).
Если у функции несколько аргументов, она суммирует их размеры в байтах.Синтаксис
byteSize(arg1[, arg2, ...])
Аргументы
arg1[, arg2, ...] — Значения любого типа данных, для которых требуется оценить размер в байтах в несжатом виде. Any
Возвращаемое значениеВозвращает оценку размера аргументов в памяти в байтах. UInt64ПримерыПример использования
Добавленный в: v22.9.0Оценивает внешнюю модель CatBoost. CatBoost — библиотека градиентного бустинга с открытым исходным кодом, разработанная в Yandex для машинного обучения.
Принимает путь к модели CatBoost и аргументы модели (признаки).Предварительные требования
Соберите библиотеку для оценки CatBoost
Перед оценкой моделей CatBoost необходимо, чтобы библиотека libcatboostmodel.<so|dylib> была доступна. См. документацию CatBoost, чтобы узнать, как ее скомпилировать.Затем укажите путь к libcatboostmodel.<so|dylib> в конфигурации ClickHouse:
По соображениям безопасности и изоляции оценка модели выполняется не в серверном процессе, а в процессе clickhouse-library-bridge.
При первом вызове catboostEvaluate() сервер запускает процесс clickhouse-library-bridge, если он ещё не запущен. Оба процесса
взаимодействуют через HTTP-интерфейс. По умолчанию используется порт 9012. Другой порт можно указать следующим образом — это полезно, если порт
9012 уже занят другим сервисом.
Добавленный в: v26.2.0Преобразует цвет из перцептивного цветового пространства OKLab в цветовое пространство sRGB.Входной цвет задается в цветовом пространстве OKLab. Если входные значения выходят за пределы
типичных диапазонов OKLab, результат определяется реализацией.OKLab использует три компонента:
L: перцептивная светлота (обычно в диапазоне [0..1])
a: зелено-красная оппонентная ось
b: сине-желтая оппонентная ось
Компоненты a и b теоретически не ограничены, но на практике обычно находятся в пределах от -0.4 до 0.4.
OKLab разработано так, чтобы быть перцептивно равномерным
и при этом не требовать больших вычислительных затрат.Преобразование задумано как обратное к colorSRGBToOKLAB и состоит из
следующих этапов:
Преобразование из OKLab в линейный sRGB.
2) Преобразование из линейного sRGB в sRGB с гамма-кодированием.
Необязательный аргумент gamma задает показатель степени, используемый при преобразовании из линейного
sRGB в значения RGB с гамма-кодированием. Если он не указан, используется значение gamma по умолчанию
для согласованности с colorSRGBToOKLAB.Дополнительные сведения о цветовом пространстве OKLab и его связи с sRGB см. по адресу https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value/oklab
.Синтаксис
gamma — Необязательный параметр. Показатель степени, используемый для преобразования линейного sRGB обратно в sRGB путём применения (x ^ (1 / gamma)) * 255 к каждому каналу x. Значение по умолчанию — 2.2. Float64
Возвращаемое значениеВозвращает кортеж (R, G, B), представляющий значения цвета в sRGB. Tuple(Float64, Float64, Float64)ПримерыПреобразование OKLAB в sRGB (Float)
Query
SELECT colorOKLABToSRGB((0.4466, 0.0991, 0.44)) AS rgb;
Добавленный в: v25.7.0Преобразует цвет из перцептуально однородного цветового пространства OKLCH в привычное цветовое пространство sRGB.Если L выходит за пределы диапазона [0...1], C отрицательно или H выходит за пределы диапазона [0...360], результат зависит от реализации.
OKLCH — это цилиндрическая версия цветового пространства OKLab.
Его три координаты — L (светлота в диапазоне [0...1]), C (цветность >= 0) и H (цветовой тон в градусах из диапазона [0...360]).
OKLab/OKLCH спроектировано так, чтобы быть перцептуально однородным и при этом оставаться вычислительно недорогим.
Из OKLCH в OKLab.
2) Из OKLab в линейный sRGB
3) Из линейного sRGB в sRGB
Второй аргумент gamma используется на последнем этапе.Справочную информацию о цветах в пространстве OKLCH и о том, как они соответствуют цветам sRGB, см. на https://oklch.com/.Синтаксис
colorOKLCHToSRGB(tuple [, gamma])
Аргументы
tuple — Кортеж из трёх числовых значений L, C, H, где L находится в диапазоне [0...1], C >= 0, а H — в диапазоне [0...360]. Tuple(Float64, Float64, Float64)
gamma — Необязательный параметр. Показатель степени, используемый для преобразования линейного sRGB обратно в sRGB по формуле (x ^ (1 / gamma)) * 255 для каждого канала x. Значение по умолчанию — 2.2. Float64
Возвращаемое значениеВозвращает кортеж (R, G, B), представляющий значения цвета в sRGB. Tuple(Float64, Float64, Float64)ПримерыПреобразование OKLCH в sRGB
Добавленный в: v26.2.0Преобразует цвет, закодированный в цветовом пространстве sRGB, в перцептуально равномерное цветовое пространство OKLAB.Если какой-либо входной канал выходит за пределы [0...255] или значение гаммы не является положительным, поведение зависит от реализации.
OKLAB — это перцептуально равномерное цветовое пространство.
Его три координаты: L (светлота в диапазоне [0...1]), a (Green-Red axis) и b (Blue-Yellow axis).
OKLab спроектировано так, чтобы оставаться перцептуально равномерным и при этом требовать минимум вычислений.
Преобразование состоит из двух этапов:
из sRGB в линейный sRGB
2) из линейного sRGB в OKLab
gamma — Необязательно. Показатель степени, используемый для линеаризации sRGB путём применения (x / 255)^gamma к каждому каналу x. Значение по умолчанию — 2.2. Float64
Возвращаемое значениеВозвращает кортеж (L, a, b), представляющий значения в цветовом пространстве OKLAB. Tuple(Float64, Float64, Float64)ПримерыПреобразование sRGB в OKLAB
Query
SELECT colorSRGBToOKLAB((128, 64, 32), 2.2) AS lab;
Добавленный в: v25.7.0Преобразует цвет, закодированный в цветовом пространстве sRGB, в перцептуально равномерное цветовое пространство OKLCH.Если какой-либо входной канал выходит за пределы [0...255] или значение гаммы не является положительным, поведение зависит от реализации.
OKLCH — это цилиндрическая версия цветового пространства OKLab.
Его три координаты — L (светлота в диапазоне [0...1]), C (цветность >= 0) и H (цветовой тон в градусах в диапазоне [0...360]).
OKLab/OKLCH спроектировано так, чтобы быть перцептуально равномерным и при этом оставаться вычислительно недорогим.
Преобразование состоит из трёх этапов:
из sRGB в линейный sRGB
2) из линейного sRGB в OKLab
3) из OKLab в OKLCH.
Справочную информацию о цветах в пространстве OKLCH и о том, как они соотносятся с цветами sRGB, см. на https://OKLCH.com/.Синтаксис
gamma — Необязательный параметр. Показатель степени, используемый для линеаризации sRGB: к каждому каналу x применяется (x / 255)^gamma. Значение по умолчанию — 2.2. Float64
Возвращаемое значениеВозвращает кортеж (L, C, H), содержащий значения в цветовом пространстве OKLCH. Tuple(Float64, Float64, Float64)ПримерыПреобразование sRGB в OKLCH
Query
SELECT colorSRGBToOKLCH((128, 64, 32), 2.2) AS lch;
Добавленный в: v21.3.0Возвращает идентификатор соединения клиента, отправившего текущий запрос.
Эта функция особенно полезна при отладке.
Она была создана для совместимости с функцией MySQL CONNECTION_ID.
Обычно она не используется в запросах для продакшна.Синтаксис
connectionId()
Аргументы
Отсутствуют.
Возвращаемое значениеВозвращает идентификатор соединения текущего клиента. UInt64ПримерыПример использования
Добавленный в: v1.1.0Возвращает имя текущей базы данных.
Полезно в параметрах движка таблицы в запросах CREATE TABLE, где требуется указать базу данных.См. также оператор SET.Синтаксис
Добавленный в: v20.1.0Возвращает имя текущего пользователя.
При распределённом запросе возвращается имя пользователя, который инициировал запрос.Синтаксис
currentUser()
Псевдонимы: current_user, userАргументы
None.
Возвращаемое значениеВозвращает имя текущего пользователя или логин пользователя, который инициировал запрос. StringПримерыПример использования
Добавленный в: v21.9.0Возвращает массив имён профилей настроек по умолчанию для текущего пользователя.Синтаксис
defaultProfiles()
Аргументы
Отсутствуют.
Возвращаемое значениеВозвращает массив имён профилей настроек, используемых по умолчанию для текущего пользователя. Array(String)ПримерыПример использования
Добавленный в: v1.1.0Возвращает значение по умолчанию для указанного типа данных.
Не включает значения по умолчанию для пользовательских столбцов, заданных пользователем.Синтаксис
defaultValueOfArgumentType(expression)
Аргументы
expression — значение произвольного типа или выражение, результатом которого является значение произвольного типа. Any
Возвращаемое значениеВозвращает 0 для чисел, пустую строку для строк или NULL для типа Nullable. UInt8 или String или NULLПримерыПример использования
Query
SELECT defaultValueOfArgumentType(CAST(1 AS Int8));
Возвращаемое значениеВозвращает значение по умолчанию для указанного имени типа: 0 для чисел, пустую строку для строк или NULL для Nullable UInt8 или String или NULLПримерыПример использования
Добавленный в: v20.12.0Возвращает текстовое название числового кода ошибки ClickHouse.
Соответствие между числовыми кодами ошибок и их названиями доступно здесь.Синтаксис
Добавленный в: v21.3.0Читает файл как строку и загружает данные в указанный столбец.
Содержимое файла не интерпретируется.См. также табличную функцию file.Синтаксис
file(path[, default])
Аргументы
path — Путь к файлу относительно user_files_path. Поддерживаются подстановочные шаблоны *, **, ?, {abc,def} и {N..M}, где N и M — числа, а 'abc' и 'def' — строки. String
default — Значение, которое возвращается, если файл не существует или к нему нет доступа. String или NULL
Возвращаемое значениеВозвращает содержимое файла в виде строки. StringПримерыВставка файлов в таблицу
Query
INSERT INTO table SELECT file('a.txt'), file('b.txt');
Добавленный в: v20.1.0Возвращает объём свободного места в файловой системе, где хранится постоянное хранилище базы данных.
Возвращаемое значение всегда меньше общего объёма свободного места (filesystemUnreserved), поскольку часть пространства зарезервирована для операционной системы.Синтаксис
filesystemAvailable([disk_name])
Аргументы
disk_name — Необязательный параметр. Имя диска, для которого нужно определить объём свободного места. Если не указано, используется диск по умолчанию. String или FixedString
Возвращаемое значениеВозвращает объём оставшегося свободного места в байтах. UInt64ПримерыПример использования
Query
SELECT formatReadableSize(filesystemAvailable()) AS "Available space";
Добавленный в: v22.12.0Возвращает общий объём свободного места в файловой системе, где размещено постоянное хранилище базы данных (ранее filesystemFree).
См. также filesystemAvailable.Синтаксис
filesystemUnreserved([disk_name])
Аргументы
disk_name — Необязательный. Имя диска, для которого нужно определить общий объём свободного места. Если не указано, используется диск по умолчанию. String или FixedString
Возвращаемое значениеВозвращает объём свободного места в байтах. UInt64ПримерыПример использования
Query
SELECT formatReadableSize(filesystemUnreserved()) AS "Free space";
Добавленный в: v1.1.0Для состояния агрегации эта функция возвращает результат агрегации (или финализированное состояние при использовании комбинатора -State).Синтаксис
WITH initializeAggregation('sumState', number) AS one_row_sum_stateSELECT number, finalizeAggregation(one_row_sum_state) AS one_row_sum, runningAccumulate(one_row_sum_state) AS cumulative_sumFROM numbers(5);
Добавленный в: v25.11.0Меняет местами координаты x и y геометрических объектов. Эта операция меняет широту и долготу местами, что полезно при преобразовании между различными системами координат или при исправлении порядка координат.Для Point функция меняет местами координаты x и y. Для сложных геометрий (LineString, Polygon, MultiPolygon, Ring, MultiLineString) преобразование рекурсивно применяется к каждой паре координат.Функция поддерживает как отдельные геометрические типы (Point, Ring, Polygon, MultiPolygon, LineString, MultiLineString), так и тип варианта Geometry.Синтаксис
flipCoordinates(geometry)
Аргументы
geometry — геометрия, которую нужно преобразовать. Поддерживаемые типы: Point (Tuple(Float64, Float64)), Ring (Array(Point)), Polygon (Array(Ring)), MultiPolygon (Array(Polygon)), LineString (Array(Point)), MultiLineString (Array(LineString)) или Geometry (вариант, содержащий любой из этих типов).
Добавленный в: v23.10.0Возвращает отформатированную, возможно, многострочную версию указанного SQL-запроса. Генерирует исключение в случае ошибки разбора.
[example:multiline]Синтаксис
formatQuery(query)
Аргументы
query — SQL-запрос, который требуется отформатировать. String
Добавленный в: v23.11.0Возвращает отформатированную, возможно, многострочную версию заданного SQL-запроса. В случае ошибки разбора возвращает NULL.
[example:multiline]Синтаксис
Добавленный в: v23.10.0Как formatQuery(), но возвращаемая форматированная строка не содержит переводов строки. Генерирует исключение в случае ошибки разбора.
[example:multiline]Синтаксис
formatQuerySingleLine(query)
Аргументы
query — SQL-запрос, который нужно отформатировать. String
Добавленный в: v23.11.0Аналогично formatQuery(), но возвращаемая форматированная строка не содержит разрывов строк. В случае ошибки разбора возвращает NULL.
[example:multiline]Синтаксис
formatQuerySingleLineOrNull(query)
Аргументы
query — SQL-запрос, который нужно отформатировать. String
Добавленный в: v22.11.0Для заданного размера (количества байт) эта функция возвращает удобочитаемое округлённое значение с суффиксом (KB, MB и т. д.) в виде строки.Обратной операцией для этой функции является parseReadableSize.Синтаксис
Добавленный в: v20.10.0Для заданного числа эта функция возвращает строку с округлённым числом и суффиксом (тысяча, миллион, миллиард и т. д.).Эта функция принимает на вход любой числовой тип, но внутри приводит его к Float64.
При больших значениях результат может быть неоптимальным.Синтаксис
Добавленный в: v1.1.0Для заданного размера (числа байтов) эта функция возвращает удобочитаемый округлённый размер с суффиксом (KiB, MiB и т. д.) в виде строки.Обратными операциями для этой функции являются parseReadableSize, parseReadableSizeOrZero и parseReadableSizeOrNull.
Эта функция принимает на вход любой числовой тип, но внутри приводит его к Float64. При больших значениях результаты могут быть не самыми точными.Синтаксис
Добавленный в: v20.12.0Для временного интервала (delta) в секундах эта функция возвращает строковое представление временной дельты в year/month/day/hour/minute/second/millisecond/microsecond/nanosecond.Эта функция принимает на вход любой числовой тип, но внутри приводит его к Float64. При больших значениях результаты могут быть неточными.Синтаксис
column — Столбец с числовой дельтой времени. Float64
maximum_unit — Необязательный параметр. Максимальная единица, которую нужно отображать. Допустимые значения: nanoseconds, microseconds, milliseconds, seconds, minutes, hours, days, months, years. Значение по умолчанию: years. const String
minimum_unit — Необязательный параметр. Минимальная единица, которую нужно отображать. Все меньшие единицы отбрасываются. Допустимые значения: nanoseconds, microseconds, milliseconds, seconds, minutes, hours, days, months, years. Если явно указанное значение больше maximum_unit, будет сгенерировано исключение. Значение по умолчанию: seconds, если maximum_unit равен seconds или больше, в противном случае — nanoseconds. const String
Возвращаемое значениеВозвращает дельту времени в виде строки. StringПримерыПример использования
Query
SELECT arrayJoin([100, 12345, 432546534]) AS elapsed, formatReadableTimeDelta(elapsed) AS time_delta
Response
┌────elapsed─┬─time_delta─────────────────────────────────────────────────────┐│ 100 │ 1 minute and 40 seconds ││ 12345 │ 3 hours, 25 minutes and 45 seconds ││ 432546534 │ 13 years, 8 months, 17 days, 7 hours, 48 minutes and 54 seconds│└────────────┴────────────────────────────────────────────────────────────────┘
С максимальной единицей измерения
Query
SELECT arrayJoin([100, 12345, 432546534]) AS elapsed, formatReadableTimeDelta(elapsed, 'minutes') AS time_delta
Response
┌────elapsed─┬─time_delta─────────────────────────────────────────────────────┐│ 100 │ 1 minute and 40 seconds ││ 12345 │ 205 minutes and 45 seconds ││ 432546534 │ 7209108 minutes and 54 seconds │└────────────┴─────────────────────────────────────────────────────────────────┘
Добавленный в: v26.2.0Разбирает указанную строку запроса и применяет к ней случайные мутации AST (фаззинг). Возвращает полученный в результате фаззинга запрос в виде строки. Недетерминирована: каждый вызов может возвращать разный результат. Требует allow_fuzz_query_functions = 1.Синтаксис
number_of_columns — Требуемое количество столбцов в итоговой структуре таблицы. Если задано значение 0 или Null, число столбцов будет случайным — от 1 до 128. Значение по умолчанию: Null. UInt64
seed — Начальное значение генератора случайных чисел для получения стабильных результатов. Если seed не указан или задан как Null, он генерируется случайным образом. UInt64
Возвращаемое значениеСлучайно сгенерированная структура таблицы. StringПримерыПример использования
Добавленный в: v25.1.0Генерирует и возвращает последовательные числа, начиная с предыдущего значения счетчика.
Эта функция принимает строковый аргумент — идентификатор серии, а также необязательное начальное значение.
Сервер должен быть настроен для работы с Keeper.
Серии хранятся в узлах Keeper по пути, который можно настроить в series_keeper_path в конфигурации сервера.Синтаксис
series_identifier — Идентификатор серии const String
start_value — Необязательный. Начальное значение счётчика. По умолчанию — 0. Примечание: это значение используется только при создании новой серии и игнорируется, если серия уже существует UInt*
Возвращаемое значениеВозвращает последовательные числа, начиная с предыдущего значения счётчика. UInt64Примерыпервый вызов
Добавленный в: v24.5.0Возвращает значение HTTP-заголовка.
Если такого заголовка нет или текущий запрос выполняется не через HTTP-интерфейс, функция возвращает пустую строку.
Доступ к некоторым HTTP-заголовкам (например, Authentication и X-ClickHouse-*) ограничен.
Требуется включить настройку allow_get_client_http_headerДля использования функции должна быть включена настройка allow_get_client_http_header.
По умолчанию эта настройка отключена из соображений безопасности, поскольку некоторые заголовки, например Cookie, могут содержать конфиденциальную информацию.
В этой функции HTTP-заголовки чувствительны к регистру.
Если функция используется в контексте распределенного запроса, она возвращает непустой результат только на узле-инициаторе.Синтаксис
Добавленный в: v20.1.0Возвращает значение макроса из файла конфигурации сервера.
Макросы определяются в разделе <macros> файла конфигурации и могут использоваться, чтобы различать серверы по удобным именам, даже если у них сложные имена узлов.
Если функция выполняется в контексте distributed таблицы, она создаёт обычный столбец со значениями для каждого сегмента.Синтаксис
getMacro(name)
Аргументы
name — Имя макроса, который нужно получить. const String
Возвращаемое значениеВозвращает значение указанного макроса. StringПримерыБазовое использование
Добавленный в: v24.10.0Возвращает текущее значение настройки или, если в текущем профиле она не задана, значение по умолчанию, указанное во втором аргументе.Синтаксис
Добавленный в: v23.3.0Принимает выражение или идентификатор, а также константную строку с именем подстолбца.Возвращает запрошенный подстолбец, извлечённый из выражения.Синтаксис
Добавленный в: v20.5.0Принимает константный строковый аргумент и возвращает значение глобальной переменной с этим именем. Эта функция предназначена для совместимости с MySQL и не нужна и не полезна при обычной работе ClickHouse. Определено лишь несколько фиктивных глобальных переменных.Синтаксис
Добавленный в: v1.1.0Проверяет, существует ли указанный столбец в таблице базы данных.
Для элементов во вложенной структуре данных функция проверяет наличие столбца.
Для самой вложенной структуры данных функция возвращает 0.Синтаксис
Добавленный в: v26.5.0Разбирает строку запроса ClickHouse SQL и возвращает массив диапазонов для подсветки синтаксиса.
Каждый диапазон представляет собой именованный кортеж с начальной позицией (в байтах), конечной позицией и типом подсветки.
Типы подсветки описывают синтаксическую роль фрагмента (ключевое слово, идентификатор, функция и т. д.)
и могут использоваться для назначения цветов в интерфейсе. Внутри строковых шаблонов LIKE и REGEXP метасимволы
и символы экранирования подсвечиваются отдельно.Синтаксис
Добавленный в: v20.5.0Возвращает имя хоста, на котором выполняется эта функция.
Если функция выполняется на удалённом сервере (распределённая обработка), возвращается имя удалённого сервера.
Если функция выполняется в контексте distributed таблицы, она формирует обычный столбец со значениями для каждого сегмента.
В противном случае возвращается константное значение.Синтаксис
hostName()
Псевдонимы: hostnameАргументы
Нет.
Возвращаемое значениеВозвращает имя хоста. StringПримерыПример использования
Добавленный в: v1.1.0Эта функция возвращает переданный ей аргумент, что полезно при отладке и тестировании. Она позволяет обойти использование индексов и вместо этого оценить производительность полного сканирования. Анализатор запросов игнорирует всё внутри функций identity при поиске подходящих индексов, а также отключает свёртку констант.Синтаксис
Добавленный в: v1.1.0Эта функция предназначена для отладки и интроспекции.
Она игнорирует свой аргумент и всегда возвращает 1.
Аргументы не вычисляются.При анализе индекса предполагается, что аргумент этой функции не заключён в indexHint.
Это позволяет выбирать данные в диапазонах индекса по соответствующему условию, но без последующей фильтрации по этому условию.
Индекс в ClickHouse разреженный, поэтому использование indexHint вернёт больше данных, чем прямое указание того же условия.
Объяснение
Когда вы выполняете:
SELECT * FROM test WHERE key = 123;
ClickHouse делает две вещи:
Использует индекс, чтобы определить, какие гранулы (блоки примерно по 8192 строк) могут содержать key = 123
Читает эти гранулы и построчно фильтрует их, чтобы вернуть только строки, где key = 123
Поэтому, даже если с диска считываются 8 192 строки, возвращается только 1 строка, которая действительно соответствует условию.С indexHint, когда вы выполняете:
SELECT * FROM test WHERE indexHint(key = 123);
ClickHouse делает только одно:
Использует индекс, чтобы определить, какие гранулы могут содержать key = 123, и возвращает все строки из этих гранул без фильтрации.
Возвращаются все 8 192 строки, включая строки, где key = 456, key = 789 и т. д. (То есть всё, что оказалось сохранено в той же грануле.)
indexHint() предназначен не для повышения производительности. Он нужен для отладки и понимания того, как работает индекс ClickHouse:
Какие гранулы выбирает моё условие?
Сколько строк находится в этих гранулах?
Эффективно ли используется мой индекс?
Примечание: Оптимизировать запрос с помощью функции indexHint невозможно. Функция indexHint не оптимизирует запрос, поскольку не предоставляет никакой дополнительной информации для анализа запроса. Наличие выражения внутри функции indexHint ничем не лучше, чем его отсутствие. Функцию indexHint можно использовать только для интроспекции и отладки, и она не повышает производительность. Если вы видите, что indexHint использует кто-либо, кроме участников ClickHouse, скорее всего, это ошибка, и его следует удалить.Синтаксис
indexHint(expression)
Аргументы
expression — Любое выражение для выбора диапазона индекса. Expression
Возвращаемое значениеВо всех случаях возвращает 1. UInt8ПримерыПример использования с фильтрацией по дате
Query
SELECT FlightDate AS k, count() FROM ontime WHERE indexHint(k = '2025-09-15') GROUP BY k ORDER BY k ASC;
Добавленный в: v1.1.0Возвращает ID исходного запроса.
Другие параметры запроса можно извлечь из поля initial_query_id в system.query_log.В отличие от функции queryID, initialQueryID возвращает одинаковые результаты на разных сегментах.Синтаксис
initialQueryID()
Псевдонимы: initial_query_idАргументы
Нет.
Возвращаемое значениеВозвращает идентификатор исходного запроса. StringПримерыПример использования
Query
CREATE TABLE tmp (str String) ENGINE = Log;INSERT INTO tmp (*) VALUES ('a');SELECT count(DISTINCT t) FROM (SELECT initialQueryID() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID());
Добавленный в: v25.4.0Возвращает время начала текущего исходного запроса.
initialQueryStartTime возвращает одинаковый результат на разных сегментах.Синтаксис
initialQueryStartTime()
Псевдонимы: initial_query_start_timeАргументы
Нет.
Возвращаемое значениеВозвращает время начала исходного запроса для текущего запроса. DateTimeПримерыПример использования
Query
CREATE TABLE tmp (str String) ENGINE = Log;INSERT INTO tmp (*) VALUES ('a');SELECT count(DISTINCT t) FROM (SELECT initialQueryStartTime() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID());
Добавленный в: v20.6.0Вычисляет результат агрегатной функции по одному значению.
Эту функцию можно использовать для инициализации агрегатных функций с комбинатором -State.
Вы можете создавать состояния агрегатных функций и вставлять их в столбцы типа AggregateFunction или использовать инициализированные агрегаты в качестве значений по умолчанию.Синтаксис
aggregate_function — Имя агрегатной функции, которую нужно инициализировать. String
arg1[, arg2, ...] — Аргументы агрегатной функции. Any
Возвращаемое значениеВозвращает результат агрегации для каждой строки, переданной в функцию. Возвращаемый тип совпадает с возвращаемым типом функции, переданной в initializeAggregation первым аргументом. AnyПримерыБазовое использование с uniqState
Query
SELECT uniqMerge(state) FROM (SELECT initializeAggregation('uniqState', number % 3) AS state FROM numbers(10000));
Response
┌─uniqMerge(state)─┐│ 3 │└──────────────────┘
Использование функций sumState и finalizeAggregation
Query
SELECT finalizeAggregation(state), toTypeName(state) FROM (SELECT initializeAggregation('sumState', number % 3) AS state FROM numbers(5));
Добавленный в: v20.3.0Возвращает, является ли аргумент константным выражением.
Константное выражение — это выражение, результат которого известен на этапе анализа запроса, то есть до выполнения.
Например, выражения над литералами являются константными выражениями.
Эта функция предназначена главным образом для разработки, отладки и демонстрации.Синтаксис
Добавленный в: v20.8.0Проверяет, не содержит ли десятичное число слишком много цифр, чтобы поместиться в тип Decimal с заданной точностью.Синтаксис
isDecimalOverflow(value[, precision])
Аргументы
value — Проверяемое значение типа Decimal. Decimal
precision — Необязательно. Точность типа Decimal. Если не указано, используется исходная точность первого аргумента. UInt8
Возвращаемое значениеВозвращает 1, если десятичное значение содержит больше цифр, чем допускает его точность, и 0, если десятичное значение соответствует указанной точности. UInt8ПримерыПример использования
join_storage_table_name — Идентификатор, указывающий, где выполнять поиск. Идентификатор ищется в базе данных по умолчанию (см. параметр default_database в файле конфигурации). Чтобы переопределить базу данных по умолчанию, используйте запрос USE database_name или укажите базу данных и таблицу через точку, например database_name.table_name. String
value_column — Имя столбца таблицы, содержащего необходимые данные. const String
Добавленный в: v20.4.0Позволяет извлекать данные из таблицы так же, как из словаря.
Извлекает данные из таблиц Join по указанному ключу JOIN.
В отличие от joinGet возвращает NULL, если ключ отсутствует.
Поддерживает только таблицы, созданные с помощью оператора ENGINE = Join(ANY, LEFT, <join_keys>)оператор.
join_storage_table_name — Идентификатор, указывающий, где выполнять поиск. Поиск по идентификатору выполняется в базе данных по умолчанию (см. параметр default_database в файле конфигурации). Чтобы переопределить базу данных по умолчанию, используйте запрос USE database_name или укажите базу данных и таблицу через точку, например database_name.table_name. String
value_column — Имя столбца таблицы, содержащего необходимые данные. const String
Добавленный в: v18.12.0Возвращает позицию значения в словаре столбца LowCardinality. Нумерация позиций начинается с 1. Поскольку у LowCardinality словари создаются отдельно для каждой части, эта функция может возвращать разные позиции для одного и того же значения в разных частях.Синтаксис
Возвращаемое значениеПозиция значения в словаре текущей части. UInt64ПримерыПримеры использования
Query
DROP TABLE IF EXISTS test;CREATE TABLE test (s LowCardinality(String)) ENGINE = Memory;-- создать две части:INSERT INTO test VALUES ('ab'), ('cd'), ('ab'), ('ab'), ('df');INSERT INTO test VALUES ('ef'), ('cd'), ('ab'), ('cd'), ('ef');SELECT s, lowCardinalityIndices(s) FROM test;
Response
┌─s──┬─lowCardinalityIndices(s)─┐│ ab │ 1 ││ cd │ 2 ││ ab │ 1 ││ ab │ 1 ││ df │ 3 │└────┴──────────────────────────┘┌─s──┬─lowCardinalityIndices(s)─┐│ ef │ 1 ││ cd │ 2 ││ ab │ 3 ││ cd │ 2 ││ ef │ 1 │└────┴──────────────────────────┘
Добавленный в: v18.12.0Возвращает значения словаря столбца LowCardinality.
Если размер блока меньше или больше размера словаря, результат будет усечён или дополнен значениями по умолчанию.
Поскольку LowCardinality использует словари на уровне частей, эта функция может возвращать разные значения словаря в разных частях.Синтаксис
DROP TABLE IF EXISTS test;CREATE TABLE test (s LowCardinality(String)) ENGINE = Memory;-- создать две части:INSERT INTO test VALUES ('ab'), ('cd'), ('ab'), ('ab'), ('df');INSERT INTO test VALUES ('ef'), ('cd'), ('ab'), ('cd'), ('ef');SELECT s, lowCardinalityKeys(s) FROM test;
Response
┌─s──┬─lowCardinalityKeys(s)─┐│ ef │ ││ cd │ ef ││ ab │ cd ││ cd │ ab ││ ef │ │└────┴───────────────────────┘┌─s──┬─lowCardinalityKeys(s)─┐│ ab │ ││ cd │ ab ││ ab │ cd ││ ab │ df ││ df │ │└────┴───────────────────────┘
Добавленный в: v1.1.0Преобразует константу в полный столбец, содержащий одно значение.
Полные столбцы и константы по-разному представлены в памяти.
Функции обычно выполняют разный код для обычных и константных аргументов, хотя результат, как правило, должен быть одинаковым.
Эту функцию можно использовать для отладки такого поведения.Синтаксис
Возвращаемое значениеВозвращает полный столбец, содержащий константное значение. AnyПримерыПример использования
Query
-- В приведённом ниже примере функция `countMatches` ожидает константный второй аргумент.-- Это поведение можно отладить с помощью функции `materialize`, которая преобразует константу в полный столбец,-- тем самым проверяя, что функция генерирует исключение для неконстантного аргумента.SELECT countMatches('foobarfoo', 'foo');SELECT countMatches('foobarfoo', materialize('foo'));
Response
2Code: 44. DB::Exception: Received from localhost:9000. DB::Exception: Illegal type of argument #2 'pattern' of function countMatches, expected constant String, got String
Добавленный в: v23.10.0Вычисляет минимально необходимый размер выборки для A/B-теста, сравнивающего средние значения непрерывной метрики в двух выборках.Использует формулу, описанную в этой статье.
Предполагаются одинаковые размеры экспериментальной и контрольной групп.
Возвращает требуемый размер выборки для одной группы (то есть для всего эксперимента нужен размер выборки вдвое больше возвращаемого значения).
Также предполагается одинаковая дисперсия тестовой метрики в экспериментальной и контрольной группах.Синтаксис
baseline — Базовое значение метрики. (U)Int* или Float*
sigma — Базовое стандартное отклонение метрики. (U)Int* или Float*
mde — Минимальный обнаруживаемый эффект (MDE) в процентах от базового значения (например, для базового значения 112.25 MDE 0.03 означает ожидаемое изменение до 112.25 ± 112.25*0.03). (U)Int* или Float*
power — Требуемая статистическая мощность теста (1 - вероятность ошибки II рода). (U)Int* или Float*
alpha — Требуемый уровень значимости теста (вероятность ошибки I рода). (U)Int* или Float*
Возвращаемое значениеВозвращает именованный Tuple с 3 элементами: minimum_sample_size, detect_range_lower и detect_range_upper. Это соответственно: требуемый размер выборки, нижняя граница диапазона значений, которые нельзя обнаружить при вычисленном требуемом размере выборки, рассчитываемая как baseline * (1 - mde), и верхняя граница диапазона значений, которые нельзя обнаружить при вычисленном требуемом размере выборки, рассчитываемая как baseline * (1 + mde) (Float64). Tuple(Float64, Float64, Float64)ПримерыminSampleSizeContinuous
Query
SELECT minSampleSizeContinuous(112.25, 21.1, 0.03, 0.80, 0.05) AS sample_size
Добавленный в: v22.6.0Вычисляет минимально необходимый размер выборки для A/B-теста, сравнивающего конверсии (доли) в двух выборках.Использует формулу, описанную в этой статье. Предполагается, что размеры экспериментальной и контрольной групп одинаковы. Возвращает размер выборки, необходимый для одной группы (то есть для всего эксперимента требуется выборка вдвое больше возвращаемого значения).Синтаксис
mde — Минимальный обнаруживаемый эффект (MDE) в процентных пунктах (например, при базовой конверсии 0.25 значение MDE 0.03 означает ожидаемое изменение до 0.25 ± 0.03). Float*
power — Требуемая статистическая мощность теста (1 - вероятность ошибки II рода). Float*
alpha — Требуемый уровень значимости теста (вероятность ошибки I рода). Float*
Возвращаемое значениеВозвращает именованный Tuple из 3 элементов: minimum_sample_size, detect_range_lower, detect_range_upper. Это, соответственно: требуемый размер выборки, нижняя граница диапазона значений, которые невозможно обнаружить при вычисленном требуемом размере выборки, рассчитываемая как baseline - mde, и верхняя граница диапазона значений, которые невозможно обнаружить при вычисленном требуемом размере выборки, рассчитываемая как baseline + mde. Tuple(Float64, Float64, Float64)ПримерыminSampleSizeConversion
Query
SELECT minSampleSizeConversion(0.25, 0.03, 0.80, 0.05) AS sample_size
Добавленный в: v20.1.0Возвращает значение из столбца с указанным смещением относительно текущей строки.
Эта функция устарела и подвержена ошибкам, поскольку работает с физическим порядком блоков данных, который может не совпадать с логическим порядком, ожидаемым пользователями.
Вместо неё рекомендуется использовать корректные оконные функции.Функцию можно включить, установив allow_deprecated_error_prone_window_functions = 1.Синтаксис
offset — Смещение относительно текущей строки. Положительные значения указывают вперёд, отрицательные — назад. Integer
default_value — Необязательно. Значение, которое возвращается, если смещение выходит за пределы данных. Если не указано, используется значение по умолчанию для типа столбца. Any
Возвращаемое значениеВозвращает значение по указанному смещению или значение по умолчанию, если смещение выходит за пределы данных. AnyПримерыПример использования
Query
SELECT number, neighbor(number, 2) FROM system.numbers LIMIT 10;
Добавленный в: v20.8.0Заменяет литералы, последовательности литералов и сложные псевдонимы (с пробельными символами, более чем двумя цифрами или длиной не менее 36 байт, например UUID) плейсхолдером ?.Синтаксис
Добавленный в: v21.2.0Заменяет литералы и последовательности литералов плейсхолдером ?, но не заменяет сложные псевдонимы (содержащие пробельные символы, более двух цифр или имеющие длину не менее 36 байт, например UUID).
Это помогает лучше анализировать журналы сложных запросов.Синтаксис
Возвращаемое значениеВозвращает указанную последовательность символов с плейсхолдерами. StringПримерыПример использования
Query
SELECT normalizeQuery('SELECT 1 AS aComplexName123'), normalizeQueryKeepNames('SELECT 1 AS aComplexName123')
Response
┌─normalizeQuery('SELECT 1 AS aComplexName123')─┬─normalizeQueryKeepNames('SELECT 1 AS aComplexName123')─┐│ SELECT ? AS `?` │ SELECT ? AS aComplexName123 │└───────────────────────────────────────────────┴────────────────────────────────────────────────────────┘
Добавленный в: v20.8.0Возвращает одинаковые 64-битные хеш-значения для похожих запросов без учёта значений литералов.
Может быть полезно при анализе журнала запросов.Синтаксис
Добавленный в: v21.2.0Как и normalizedQueryHash, возвращает одинаковые 64-битные хеш-значения для похожих запросов без учёта значений литералов, но не заменяет сложные псевдонимы (содержащие пробелы, более двух цифр или имеющие длину не менее 36 байт, например UUID) на плейсхолдер перед хешированием.
Может быть полезна при анализе журнала запросов.Синтаксис
Возвращаемое значениеВозвращает 64-битное хеш-значение. UInt64ПримерыПример использования
Query
SELECT normalizedQueryHash('SELECT 1 AS `xyz123`') != normalizedQueryHash('SELECT 1 AS `abc123`') AS normalizedQueryHash;SELECT normalizedQueryHashKeepNames('SELECT 1 AS `xyz123`') != normalizedQueryHashKeepNames('SELECT 1 AS `abc123`') AS normalizedQueryHashKeepNames;
Добавленный в: v26.4.0Маскирует SQL-запрос, заменяя идентификаторы случайными словами, а литералы — случайными значениями, при этом сохраняя структуру запроса.Эта функция полезна для анонимизации запросов перед логированием или предоставлением в общий доступ в целях отладки.
Даже для одного и того же исходного запроса разные строки будут давать разные обфусцированные результаты, что помогает
сохранять конфиденциальность при работе с несколькими запросами.Необязательный параметр tag предотвращает устранение общих подвыражений, когда один и тот же вызов функции
используется в запросе несколько раз. Это гарантирует, что каждый вызов даст свой обфусцированный результат.Возможности:
Заменяет имена таблиц, имена столбцов и псевдонимы случайными словами
Заменяет числовые и строковые литералы случайными значениями
Сохраняет общую структуру запроса и синтаксис SQL
Выдаёт разные результаты для разных строк
Синтаксис
obfuscateQuery(query[, tag])
Аргументы
query — SQL-запрос, который нужно обфусцировать. String
tag — Необязательно. Значение, которое позволяет предотвратить устранение общих подвыражений, если один и тот же вызов функции используется несколько раз.
Возвращаемое значениеОбфусцированный запрос, в котором идентификаторы и литералы заменены, а исходная структура запроса сохранена. StringПримерыБазовое использование
Query
SELECT obfuscateQuery('SELECT name, age FROM users WHERE age > 30')
Response
SELECT fruit, number FROM table WHERE number > 12
С тегом для предотвращения устранения общих подвыражений
Query
SELECT obfuscateQuery('SELECT * FROM t', 1), obfuscateQuery('SELECT * FROM t', 2)
Response
SELECT a FROM b, SELECT c FROM d
Для разных строк результаты различаются
Query
SELECT obfuscateQuery('SELECT 1') AS a, obfuscateQuery('SELECT 1') AS b
Добавленный в: v26.4.0Обфусцирует SQL-запрос с использованием указанного seed, обеспечивая детерминированные результаты.В отличие от obfuscateQuery(), эта функция выдает детерминированные результаты при использовании одного и того же seed.
Это полезно, когда требуется согласованная обфускация в нескольких запусках или когда нужно
воспроизвести один и тот же обфусцированный запрос для тестирования или отладки.Возможности:
Детерминированная обфускация на основе указанного seed
Один и тот же seed всегда дает один и тот же обфусцированный результат
Разные seed дают разные результаты
Сохраняет структуру запроса, как и obfuscateQuery()
seed — seed для обфускации. Один и тот же seed даёт детерминированные результаты. Integer или String
Возвращаемое значениеОбфусцированный запрос, детерминированно сгенерированный на основе указанного seed. StringПримерыДетерминированная обфускация с целочисленным seed
Query
SELECT obfuscateQueryWithSeed('SELECT name FROM users', 42)
Response
SELECT fruit FROM table
Детерминированная обфускация со строковым значением seed
Query
SELECT obfuscateQueryWithSeed('SELECT id, value FROM data', 'myseed')
Добавленный в: v24.6.0Эта функция принимает строку, содержащую размер в байтах и единицу измерения B, KiB, KB, MiB, MB и т. д. (то есть ISO/IEC 80000-13 или десятичную байтовую единицу), и возвращает соответствующее количество байт.
Если функция не может разобрать входное значение, она генерирует исключение.Обратными операциями этой функции являются formatReadableSize и formatReadableDecimalSize.Синтаксис
parseReadableSize(x)
Аргументы
x — Размер в удобочитаемом формате с единицами ISO/IEC 80000-13 или десятичными байтовыми единицами. String
Возвращаемое значениеВозвращает количество байтов, округлённое вверх до ближайшего целого числа. UInt64ПримерыПример использования
Query
SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB']) AS readable_sizes, parseReadableSize(readable_sizes) AS sizes;
Добавленный в: v24.6.0Если строка содержит размер в байтах и единицу измерения B, KiB, KB, MiB, MB и т. д. (то есть ISO/IEC 80000-13 или десятичную единицу измерения байтов), эта функция возвращает соответствующее количество байтов.
Если функция не может разобрать входное значение, она возвращает NULL.Обратными операциями для этой функции являются formatReadableSize и formatReadableDecimalSize.Синтаксис
parseReadableSizeOrNull(x)
Аргументы
x — Размер в удобочитаемом формате с единицами ISO/IEC 80000-13 или десятичными байтовыми единицами. String
Возвращаемое значениеВозвращает количество байтов, округлённое вверх до ближайшего целого, или NULL, если входное значение не удаётся разобрать Nullable(UInt64)ПримерыПример использования
Query
SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB', 'invalid']) AS readable_sizes, parseReadableSizeOrNull(readable_sizes) AS sizes;
Добавленный в: v24.6.0Для строки, содержащей размер в байтах и единицу измерения B, KiB, KB, MiB, MB и т. д. (то есть ISO/IEC 80000-13 или десятичную байтовую единицу), эта функция возвращает соответствующее количество байтов.
Если функция не может разобрать входное значение, она возвращает 0.Обратными операциями для этой функции являются formatReadableSize и formatReadableDecimalSize.Синтаксис
parseReadableSizeOrZero(x)
Аргументы
x — Размер в удобочитаемом формате по ISO/IEC 80000-13 или в десятичных единицах измерения байтов. String
Возвращаемое значениеВозвращает количество байтов, округлённое вверх до ближайшего целого, или 0, если не удалось разобрать входное значение. UInt64ПримерыПример использования
Query
SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB', 'invalid']) AS readable_sizes, parseReadableSizeOrZero(readable_sizes) AS sizes;
Добавленный в: v22.7.0Разбирает последовательность чисел, за которой следует обозначение, похожее на единицу времени.Строка с дельтой времени использует следующие обозначения единиц времени:
years, year, yr, y
months, month, mo
weeks, week, w
days, day, d
hours, hour, hr, h
minutes, minute, min, m
seconds, second, sec, s
milliseconds, millisecond, millisec, ms
microseconds, microsecond, microsec, μs, µs, us
nanoseconds, nanosecond, nanosec, ns
Можно комбинировать несколько единиц времени, используя разделители (пробел, ;, -, +, ,, :).Длительность года и месяца приблизительна: год принимается равным 365 дням, месяц — 30,5 дня.Синтаксис
parseTimeDelta(timestr)
Аргументы
timestr — Последовательность чисел, за которой следует нечто, напоминающее единицу времени. String
Возвращаемое значениеЧисло секунд. Float64ПримерыПример использования
Эта функция работает медленно, поэтому её не следует вызывать для большого числа строк.
Синтаксис
partitionId(column1[, column2, ...])
Псевдонимы: partitionIDАргументы
column1, column2, ... — Столбец, для которого возвращается идентификатор партиции.
Возвращаемое значениеВозвращает идентификатор партиции, к которой принадлежит строка. StringПримерыПример использования
Query
DROP TABLE IF EXISTS tab;CREATE TABLE tab( i int, j int)ENGINE = MergeTreePARTITION BY iORDER BY tuple();INSERT INTO tab VALUES (1, 1), (1, 2), (1, 3), (2, 4), (2, 5), (2, 6);SELECT i, j, partitionId(i), _partition_id FROM tab ORDER BY i, j;
Добавленный в: v21.9.0Возвращает идентификатор текущего запроса.
Другие параметры запроса можно извлечь из поля query_id таблицы system.query_log.В отличие от функции initialQueryID, queryID может возвращать разные результаты на разных сегментах.Синтаксис
queryID()
Псевдонимы: query_idАргументы
Нет.
Возвращаемое значениеВозвращает идентификатор текущего запроса. StringПримерыПример использования
Query
CREATE TABLE tmp (str String) ENGINE = Log;INSERT INTO tmp (*) VALUES ('a');SELECT count(DISTINCT t) FROM (SELECT queryID() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID());
Добавленный в: v1.1.0Для каждого блока, обрабатываемого функцией rowNumberInBlock, возвращает номер текущей строки.Возвращаемый номер начинается с 0 в каждом блоке.Синтаксис
rowNumberInBlock()
Аргументы
Нет.
Возвращаемое значениеВозвращает порядковый номер строки в блоке данных, начиная с 0. UInt64ПримерыПример использования
Добавленный в: v1.1.0Накапливает состояния агрегатной функции для каждой строки блока данных.
УстарелоСостояние сбрасывается с каждым новым блоком данных.
Из-за такого поведения, приводящего к ошибкам, функция объявлена устаревшей, и вместо нее рекомендуется использовать оконные функции.
Чтобы разрешить использование этой функции, можно использовать настройку allow_deprecated_error_prone_window_functions.
grouping — Необязательный. Ключ группировки. Состояние функции сбрасывается при изменении значения grouping. Это может быть любой из поддерживаемых типов данных, для которых определён оператор равенства. Any
Возвращаемое значениеВозвращает накопленный результат для каждой строки. AnyПримерыПример использования с initializeAggregation
Query
WITH initializeAggregation('sumState', number) AS one_row_sum_stateSELECT number, finalizeAggregation(one_row_sum_state) AS one_row_sum, runningAccumulate(one_row_sum_state) AS cumulative_sumFROM numbers(5);
Добавленный в: v21.3.0Вычисляет количество параллельно происходящих событий.
У каждого события есть время начала и время окончания.
Время начала включается в событие, а время окончания — нет.
Столбцы со временем начала и временем окончания должны иметь один и тот же тип данных.
Функция вычисляет общее количество активных (параллельных) событий для каждого времени начала события.
ТребованияСобытия должны быть упорядочены по времени начала в порядке возрастания.
Если это требование нарушено, функция генерирует исключение.
Каждый блок данных обрабатывается отдельно.
Если события из разных блоков данных перекрываются, их нельзя обработать корректно.
Добавленный в: v1.1.0Вычисляет разницу между значениями двух последовательных строк в блоке данных.
Возвращает 0 для первой строки, а для каждой следующей — разницу относительно предыдущей строки.
УстарелоВозвращает разницу только в пределах текущего обрабатываемого блока данных.
Из-за такого поведения, подверженного ошибкам, функция помечена как устаревшая.
Вместо неё рекомендуется использовать оконные функции.Чтобы разрешить использование этой функции, можно включить настройку allow_deprecated_error_prone_window_functions.
Результат функции зависит от того, какие блоки данных были затронуты, и от порядка данных в блоке.
Порядок строк при вычислении runningDifference() может отличаться от порядка строк, возвращаемых пользователю.
Чтобы этого избежать, можно создать подзапрос с ORDER BY и вызвать функцию вне этого подзапроса.
Обратите внимание, что размер блока влияет на результат.
Внутреннее состояние runningDifference сбрасывается для каждого нового блока.Синтаксис
runningDifference(x)
Аргументы
x — столбец, для которого вычисляется разность с предыдущим значением. Any
Возвращаемое значениеВозвращает разность между последовательными значениями; для первой строки возвращается 0.ПримерыПример использования
Query
SELECT EventID, EventTime, runningDifference(EventTime) AS deltaFROM( SELECT EventID, EventTime FROM events WHERE EventDate = '2025-11-24' ORDER BY EventTime ASC LIMIT 5);
Добавленный в: v1.1.0Вычисляет разность между значениями соседних строк в блоке данных, но, в отличие от runningDifference, возвращает фактическое значение первой строки вместо 0.
УстарелоВозвращает разность только в пределах текущего обрабатываемого блока данных.
Из-за такого поведения, подверженного ошибкам, функция помечена как устаревшая.
Вместо неё рекомендуется использовать оконные функции.Чтобы разрешить использование этой функции, можно использовать настройку allow_deprecated_error_prone_window_functions.
Синтаксис
runningDifferenceStartingWithFirstValue(x)
Аргументы
x — столбец, для которого вычисляется разность с предыдущей строкой. Any
Возвращаемое значениеВозвращает разность между последовательными значениями; для первой строки возвращается значение из первой строки. AnyПримерыПример использования
Query
SELECT number, runningDifferenceStartingWithFirstValue(number) AS diffFROM numbers(5);
Добавленный в: v20.1.0Возвращает случайный уникальный UUID (v4), сгенерированный при первом запуске сервера.
UUID сохраняется, то есть при втором, третьем и последующих запусках сервера возвращается тот же UUID.Синтаксис
serverUUID()
Аргументы
Отсутствуют.
Возвращаемое значениеВозвращает случайный UUID сервера. UUIDПримерыПример использования
Добавленный в: v21.9.0Возвращает общее количество сегментов в распределённом запросе.
Если запрос не является распределённым, возвращается константное значение 0.Синтаксис
shardCount()
Аргументы
None.
Возвращаемое значениеВозвращает общее число сегментов или 0. UInt32ПримерыПример использования
Query
-- См. пример shardNum() выше, который также демонстрирует shardCount()CREATE TABLE shard_count_example (dummy UInt8)ENGINE=Distributed(test_cluster_two_shards_localhost, system, one, dummy);SELECT shardCount() FROM shard_count_example;
Добавленный в: v21.9.0Возвращает индекс сегмента, который обрабатывает часть данных в распределённом запросе.
Нумерация индексов начинается с 1.
Если запрос не является распределённым, возвращается постоянное значение 0.Синтаксис
shardNum()
Аргументы
Нет.
Возвращаемое значениеВозвращает индекс сегмента или константу 0. UInt32ПримерыПример использования
Добавленный в: v22.6.0Показывает информацию о текущем SSL-сертификате сервера, если он настроен.
Подробнее о том, как настроить ClickHouse для использования сертификатов OpenSSL для проверки подключений, см. в разделе Настройка TLS.Синтаксис
showCertificate()
Аргументы
Отсутствуют.
Возвращаемое значениеВозвращает Map с парами ключ-значение, относящимися к настроенному SSL-сертификату. Map(String, String)ПримерыПример использования
Добавленный в: v1.1.0Приостанавливает выполнение запроса на указанное число секунд.
Функция в основном используется для тестирования и отладки.Как правило, функцию sleep() не следует использовать в продакшн-средах, так как она может отрицательно влиять на производительность запросов и отзывчивость системы.
Однако она может быть полезна в следующих сценариях:
Тестирование: При тестировании или бенчмаркинге ClickHouse может потребоваться имитировать задержки или добавлять паузы, чтобы наблюдать, как система ведет себя в определенных условиях.
Отладка: Если вам нужно проверить состояние системы или выполнение запроса в определенный момент времени, можно использовать sleep() для добавления паузы, чтобы просмотреть или собрать нужную информацию.
Моделирование: В некоторых случаях может потребоваться смоделировать реальные сценарии, в которых возникают задержки или паузы, например сетевую задержку или зависимости от внешних систем.
Важно использовать функцию sleep() осмотрительно и только при необходимости, так как она может повлиять на общую производительность и отзывчивость системы ClickHouse.
Из соображений безопасности функцию можно выполнять только в профиле пользователя default (с включенным allow_sleep).Синтаксис
sleep(seconds)
Аргументы
seconds — Количество секунд, на которое приостанавливается выполнение запроса; не более 3 секунд. Для указания долей секунды можно использовать число с плавающей точкой. const UInt* или const Float*
Возвращаемое значениеВозвращает 0. UInt8ПримерыПример использования
Query
-- Этот запрос приостановится на 2 секунды перед завершением.-- В течение этого времени результаты возвращаться не будут, и запрос будет выглядеть зависшим или не отвечающим.SELECT sleep(2);
Response
┌─sleep(2)─┐│ 0 │└──────────┘1 row in set. Elapsed: 2.012 sec.
Добавленный в: v1.1.0Приостанавливает выполнение запроса на указанное число секунд для каждой строки в результирующем наборе.Функция sleepEachRow() в основном используется для тестирования и отладки, аналогично функции sleep().
Она позволяет имитировать задержки или делать паузы при обработке каждой строки, что может быть полезно в таких сценариях, как:
Тестирование: При тестировании или бенчмаркинге производительности ClickHouse в определенных условиях можно использовать sleepEachRow(), чтобы имитировать задержки или делать паузы при обработке каждой строки.
Отладка: Если вам нужно проверить состояние системы или выполнение запроса для каждой обрабатываемой строки, можно использовать sleepEachRow(), чтобы делать паузы и получать возможность просматривать или собирать нужную информацию.
Моделирование: В некоторых случаях может потребоваться смоделировать реальные сценарии, в которых при обработке каждой строки возникают задержки или паузы, например при взаимодействии с внешними системами или из-за сетевых задержек.
Как и в случае с функцией sleep(), sleepEachRow() следует использовать осмотрительно и только при необходимости, поскольку она может значительно снизить общую производительность и отзывчивость системы ClickHouse, особенно при работе с большими результирующими наборами.
Синтаксис
sleepEachRow(seconds)
Аргументы
seconds — Количество секунд, на которое приостанавливается выполнение запроса для каждой строки результирующего набора, не более 3 секунд. Для указания долей секунды можно использовать значение с плавающей точкой. const UInt* или const Float*
Возвращаемое значениеВозвращает 0 для каждой строки. UInt8ПримерыПример использования
Query
-- Вывод будет задержан: между каждой строкой будет пауза 0,5 секунды.SELECT number, sleepEachRow(0.5) FROM system.numbers LIMIT 5;
Добавленный в: v23.8.0Преобразует структуру таблицы ClickHouse в схему в формате Protobuf.Эта функция принимает описание структуры таблицы ClickHouse и преобразует его в определение схемы
Protocol Buffers (Protobuf) в синтаксисе proto3. Это полезно для генерации схем Protobuf,
соответствующих структурам таблиц ClickHouse, для обмена данными.Синтаксис
structure — определение структуры таблицы ClickHouse в виде строки (например, ‘column1 Type1, column2 Type2’). String
message_name — имя типа сообщения Protobuf в сгенерированной схеме. String
Возвращаемое значениеВозвращает определение схемы Protobuf в синтаксисе proto3, соответствующее входной структуре таблицы ClickHouse. StringПримерыПреобразование структуры ClickHouse в схему Protobuf
Query
SELECT structureToProtobufSchema('s String, x UInt32', 'MessageName') FORMAT TSVRaw;
Response
syntax = "proto3";message MessageName{ bytes s = 1; uint32 x = 2;}
Добавленный в: v20.12.0Возвращает номер TCP-порта нативного интерфейса, на котором сервер прослушивает подключения.
Если функция выполняется в контексте distributed таблицы, она создает обычный столбец со значениями, относящимися к каждому сегменту.
В противном случае возвращает константное значение.Синтаксис
tcpPort()
Аргументы
Отсутствуют.
Возвращаемое значениеВозвращает номер TCP-порта. UInt16ПримерыПример использования
Добавленный в: v1.1.0Генерирует исключение, если аргумент x равен true.
Чтобы использовать аргумент error_code, должен быть включен параметр конфигурации allow_custom_error_code_in_throw.Синтаксис
message — Необязательно. Произвольное сообщение об ошибке. const String
error_code — Необязательно. Произвольный код ошибки. const Int8/16/32
Возвращаемое значениеВозвращает 0, если условие ложно, и генерирует исключение, если условие истинно. UInt8ПримерыПример использования
Query
SELECT throwIf(number = 3, 'Too many') FROM numbers(10);
Response
↙ Progress: 0.00 rows, 0.00 B (0.00 rows/s., 0.00 B/s.) Received exception from server (version 19.14.1):Code: 395. DB::Exception: Received from localhost:9000. DB::Exception: Too many.
Добавленный в: v1.1.0Возвращает внутреннее имя типа данных указанного значения.
В отличие от функции toTypeName, возвращаемый тип данных может включать внутренние столбцы-обёртки, такие как Const и LowCardinality.Синтаксис
toColumnTypeName(value)
Аргументы
value — Значение, для которого требуется вернуть внутренний тип данных. Any
Возвращаемое значениеВозвращает внутренний тип данных, используемый для представления значения. StringПримерыПример использования
Query
SELECT toColumnTypeName(CAST('2025-01-01 01:02:03' AS DateTime));
Добавленный в: v1.1.0Возвращает имя типа переданного аргумента.
Если передан NULL, функция возвращает тип Nullable(Nothing), который соответствует внутреннему представлению NULL в ClickHouse.Синтаксис
Добавленный в: v26.5.0Разбивает строку запроса ClickHouse SQL на токены и возвращает массив токенов.
Каждый токен представляет собой именованный кортеж с начальной позицией (в байтах), конечной позицией и типом токена.Синтаксис
Эта функция входит в набор экспериментальных возможностей.
Чтобы включить экспериментальную поддержку транзакций, добавьте этот параметр в конфигурацию:
Добавленный в: v22.6.0Возвращает самый новый снимок (Commit Sequence Number) транзакции, доступный для чтения.
Эта функция входит в набор экспериментальных возможностей. Чтобы включить экспериментальную поддержку транзакций, добавьте этот параметр в конфигурацию:
Добавленный в: v1.1.0Преобразует значение в соответствии с явно заданным сопоставлением одних элементов с другими.У этой функции есть два варианта:
transform(x, array_from, array_to, default) - преобразует x с помощью массивов сопоставления, используя значение по умолчанию для элементов без совпадений
transform(x, array_from, array_to) - выполняет то же преобразование, но возвращает исходное x, если совпадение не найдено
Функция ищет x в array_from и возвращает соответствующий элемент из array_to с тем же индексом.
Если x не найден в array_from, она возвращает либо значение default (версия с 4 параметрами), либо исходное x (версия с 3 параметрами).
Если в array_from есть несколько совпадающих элементов, возвращается элемент, соответствующий первому совпадению.Требования:
array_from и array_to должны содержать одинаковое количество элементов
Для версии с 4 параметрами: transform(T, Array(T), Array(U), U) -> U, где T и U могут быть разными совместимыми типами
Для версии с 3 параметрами: transform(T, Array(T), Array(T)) -> T, где все типы должны быть одинаковыми
default — Необязательно. Значение, возвращаемое, если x не найден в array_from. Если не указано, возвращается x без изменений. (U)Int* или Decimal или Float* или String или Date или DateTime
Возвращаемое значениеВозвращает соответствующее значение из array_to, если x совпадает с элементом в array_from; в противном случае возвращает default (если указан) или x (если default не указан). AnyПримерыtransform(T, Array(T), Array(U), U) -> U
Query
SELECTtransform(SearchEngineID, [2, 3], ['Yandex', 'Google'], 'Other') AS title,count() AS cFROM test.hitsWHERE SearchEngineID != 0GROUP BY titleORDER BY c DESC
Response
┌─title─────┬──────c─┐│ Yandex │ 498635 ││ Google │ 229872 ││ Other │ 104472 │└───────────┴────────┘
transform(T, Array(T), Array(T)) -> T
Query
SELECTtransform(domain(Referer), ['yandex.ru', 'google.ru', 'vkontakte.ru'], ['www.yandex', 'example.com', 'vk.com']) AS s, count() AS cFROM test.hitsGROUP BY domain(Referer)ORDER BY count() DESCLIMIT 10
Добавленный в: v22.9.0Два объекта типа uniqThetaSketch используются для вычисления пересечения (операция над множествами ∩); результатом является новый объект типа uniqThetaSketch.Синтаксис
Возвращаемое значениеНовый uniqThetaSketch, содержащий результат пересечения. UInt64ПримерыПример использования
Query
SELECT finalizeAggregation(uniqThetaIntersect(a, b)) AS a_intersect_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinalityFROM(SELECT arrayReduce('uniqThetaState', [1, 2]) AS a, arrayReduce('uniqThetaState', [2, 3, 4]) AS b);
Добавленный в: v22.9.0Выполняет вычисление a_not_b над двумя объектами типа uniqThetaSketch (операция над множествами ×); результатом является новый объект типа uniqThetaSketch.Синтаксис
Возвращаемое значениеВозвращает новый uniqThetaSketch, содержащий результат a_not_b. UInt64ПримерыПример использования
Query
SELECT finalizeAggregation(uniqThetaNot(a, b)) AS a_not_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinalityFROM(SELECT arrayReduce('uniqThetaState', [2, 3, 4]) AS a, arrayReduce('uniqThetaState', [1, 2]) AS b);
Добавленный в: v22.9.0Два объекта типа uniqThetaSketch для вычисления объединения (операция над множествами ∪); результатом является новый объект типа uniqThetaSketch.Синтаксис
Возвращаемое значениеВозвращает новый uniqThetaSketch, содержащий результат объединения. UInt64ПримерыПример использования
Query
SELECT finalizeAggregation(uniqThetaUnion(a, b)) AS a_union_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinalityFROM(SELECT arrayReduce('uniqThetaState', [1, 2]) AS a, arrayReduce('uniqThetaState', [2, 3, 4]) AS b);
Добавленный в: v1.1.0Возвращает время непрерывной работы сервера в секундах.
Если функция выполняется в контексте distributed таблицы, она создаёт обычный столбец со значениями для каждого сегмента.
В противном случае возвращается постоянное значение.Синтаксис
uptime()
Аргументы
Отсутствуют.
Возвращаемое значениеВозвращает время непрерывной работы сервера в секундах. UInt32ПримерыПример использования
type_name — имя типа варианта, который нужно извлечь. String
default_value — значение по умолчанию, которое будет использоваться, если variant не содержит варианта указанного типа. Может быть любого типа. Необязательный параметр. Any
Возвращаемое значениеВозвращает столбец со значениями указанного типа варианта, извлечёнными из столбца Variant. AnyПримерыПример использования
Query
CREATE TABLE test (v Variant(UInt64, String, Array(UInt64))) ENGINE = Memory;INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);SELECT v, variantElement(v, 'String'), variantElement(v, 'UInt64'), variantElement(v, 'Array(UInt64)') FROM test;
Добавленный в: v24.2.0Возвращает имя типа варианта для каждой строки столбца Variant. Если строка содержит NULL, для неё возвращается значение ‘None’.Синтаксис
Возвращаемое значениеВозвращает столбец Enum, содержащий имя типа варианта для каждой строки. EnumПримерыПример использования
Query
CREATE TABLE test (v Variant(UInt64, String, Array(UInt64))) ENGINE = Memory;INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);SELECT variantType(v) FROM test;
Добавленный в: v1.1.0Возвращает текущую версию ClickHouse в виде строки в формате: major_version.minor_version.patch_version.number_of_commits_since_the_previous_stable_release.
Если функция выполняется в контексте distributed таблицы, она формирует обычный столбец со значениями для каждого сегмента.
В противном случае возвращается константное значение.Синтаксис
version()
Аргументы
Отсутствуют.
Возвращаемое значениеВозвращает текущую версию ClickHouse. StringПримерыПример использования
Добавленный в: v1.1.0Вычисляет приблизительную ширину значений при их выводе в консоль в текстовом формате (с разделением табуляцией).
Эта функция используется системой для реализации форматов Pretty.
NULL представляется строкой, соответствующей NULL в форматах Pretty.Синтаксис