Прочие функции
hostName()
Возвращает строку - имя хоста, на котором эта функция была выполнена. При распределённой обработке запроса, это будет имя хоста удалённого сервера, если функция выполняется на удалённом сервере. Если функция вызывается в контексте распределенной таблицы, то она генерирует обычный столбец со значениями, актуальными для каждого шарда. Иначе возвращается константа.
getMacro
Возвращает именованное значение из секции macros конфигурации сервера.
Синтаксис
getMacro(name)
Аргументы
name
— имя, которое необходимо получить из секцииmacros
. String.
Возвращаемое значение
- Значение по указанному имени.
Тип: String.
Пример
Пример секции macros
в конфигурационном файле сервера:
<macros>
<test>Value</test>
</macros>
Запрос:
SELECT getMacro('test');
Результат:
┌─getMacro('test')─┐
│ Value │
└──────────────────┘
Альтернативный способ получения значения:
SELECT * FROM system.macros
WHERE macro = 'test'
┌─macro─┬─substitution─┐
│ test │ Value │
└───────┴──────────────┘
FQDN
Возвращает полное имя домена.
Синтаксис
fqdn()
Эта функция регистронезависимая.
Возвращаемое значение
- Полное имя домена.
Тип: String
.
Пример
Запрос:
SELECT FQDN();
Результат:
┌─FQDN()──────────────────────────┐
│ clickhouse.ru-central1.internal │
└─────────────────────────────────┘
basename
Извлекает конечную часть строки после последнего слэша или бэкслэша. Функция часто используется для извлечения имени файла из пути.
basename( expr )
Аргументы
expr
— выражение, возвращающее значение типа String. В результирующем значении все бэкслэши должны быть экранированы.
Возвращаемое значение
Строка, содержащая:
-
Конечную часть строки после последнего слэша или бэкслэша.
Если входная строка содержит путь, заканчивающийся слэшем или бэкслэшем, например,
/
илис:\
, функция возвращает пустую строку. -
Исходная строка, если нет слэша или бэкслэша.
Пример
SELECT 'some/long/path/to/file' AS a, basename(a);
┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file │
└────────────────────────┴────────────────────────────────────────┘
SELECT 'some\\long\\path\\to\\file' AS a, basename(a);
┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file │
└────────────────────────┴────────────────────────────────────────┘
SELECT 'some-file-name' AS a, basename(a);
┌─a──────────────┬─basename('some-file-name')─┐
│ some-file-name │ some-file-name │
└────────────────┴────────────────────────────┘
visibleWidth(x)
Вычисляет приблизительную ширину при выводе значения в текстовом (tab-separated) виде на консоль. Функция используется системой для реализации Pretty форматов.
NULL
представляется как строка, соответствующая отображению NULL
в форматах Pretty
.
SELECT visibleWidth(NULL)
┌─visibleWidth(NULL)─┐
│ 4 │
└────────────────────┘
toTypeName(x)
Возвращает строку, содержащую имя типа переданного аргумента.
Если на вход функции передать NULL
, то она вернёт тип Nullable(Nothing)
, что соответствует внутреннему представлению NULL
в ClickHouse.
blockSize()
Получить размер блока. В ClickHouse выполнение запроса всегда идёт по блокам (наборам кусочков столбцов). Функция позволяет получить размер блока, для которого её вызвали.
byteSize
Возвращает оценку в байтах размера аргументов в памяти в несжатом виде.
Синтаксис
byteSize(argument [, ...])
Аргументы
argument
— значение.
Возвращаемое значение
- Оценка размера аргументов в памяти в байтах.
Тип: UInt64.
Прим еры
Для аргументов типа String функция возвращает длину строки + 9 (нуль-терминатор + длина)
Запрос:
SELECT byteSize('string');
Результат:
┌─byteSize('string')─┐
│ 15 │
└────────────────────┘
Запрос:
CREATE TABLE test
(
`key` Int32,
`u8` UInt8,
`u16` UInt16,
`u32` UInt32,
`u64` UInt64,
`i8` Int8,
`i16` Int16,
`i32` Int32,
`i64` Int64,
`f32` Float32,
`f64` Float64
)
ENGINE = MergeTree
ORDER BY key;
INSERT INTO test VALUES(1, 8, 16, 32, 64, -8, -16, -32, -64, 32.32, 64.64);
SELECT key, byteSize(u8) AS `byteSize(UInt8)`, byteSize(u16) AS `byteSize(UInt16)`, byteSize(u32) AS `byteSize(UInt32)`, byteSize(u64) AS `byteSize(UInt64)`, byteSize(i8) AS `byteSize(Int8)`, byteSize(i16) AS `byteSize(Int16)`, byteSize(i32) AS `byteSize(Int32)`, byteSize(i64) AS `byteSize(Int64)`, byteSize(f32) AS `byteSize(Float32)`, byteSize(f64) AS `byteSize(Float64)` FROM test ORDER BY key ASC FORMAT Vertical;
Результат:
Row 1:
──────
key: 1
byteSize(UInt8): 1
byteSize(UInt16): 2
byteSize(UInt32): 4
byteSize(UInt64): 8
byteSize(Int8): 1
byteSize(Int16): 2
byteSize(Int32): 4
byteSize(Int64): 8
byteSize(Float32): 4
byteSize(Float64): 8
Если функция принимает несколько аргументов, то она возвращает их совокупный размер в байтах.
Запрос:
SELECT byteSize(NULL, 1, 0.3, '');
Результат:
┌─byteSize(NULL, 1, 0.3, '')─┐
│ 19 │
└────────────────────────────┘
materialize(x)
Превращает константу в полноценный столбец, содержащий только одно значение. В ClickHouse полноценные столбцы и константы представлены в памяти по-разному. Функции по-разному работают для аргументов-констант и обычных аргументов (выполняется разный код), хотя результат почти всегда должен быть одинаковым. Эта функция предназначена для отладки такого поведения.
ignore(...)
Принимает любые аргументы, в т.ч. NULL
, всегда возвращает 0.
При этом, аргумент всё равно вычисляется. Это может использоваться для бенчмарков.
sleep(seconds)
Спит seconds секунд на каждый блок данных. Можно указать как целое число, так и число с плавающей запятой.
sleepEachRow(seconds)
Спит seconds секунд на каждую строку. Можно указать как целое число, так и число с плавающей запятой.
currentDatabase()
Возвращает имя текущей базы данных. Эта функция может использоваться в параметрах движка таблицы в запросе CREATE TABLE там, где нужно указать базу данных.
currentUser()
Возвращает логин текущего пользователя. При распределенном запросе, возвращается имя пользователя, инициировавшего запрос.
SELECT currentUser();
Алиас: user()
, USER()
.
Возвращаемые значения
- Логин текущего пользователя.
- При распределенном запросе — логин пользователя, инициировавшего запрос.
Тип: String
.
Пример
Запрос:
SELECT currentUser();
Результат:
┌─currentUser()─┐
│ default │
└───────────────┘
isConstant
Проверяет, является ли аргумент константным выражением.
Константное выражение — это выражение, результат которого известен на момент анализа запроса (до его выполнения). Например, выражения над литералами являются константными.
Используется в целях разработки, отладки или демонстрирования.
Синтаксис
isConstant(x)
Аргументы
x
— выражение для проверки.
Возвращаемые значения
1
— выражениеx
является константным.0
— выражениеx
не является константным.
Тип: UInt8.
Примеры
Запрос:
SELECT isConstant(x + 1) FROM (SELECT 43 AS x);
Результат:
┌─isConstant(plus(x, 1))─┐
│ 1 │
└────────────────────────┘
Запрос:
WITH 3.14 AS pi SELECT isConstant(cos(pi));
Результат:
┌─isConstant(cos(pi))─┐
│ 1 │
└─────────────────────┘
Запрос:
SELECT isConstant(number) FROM numbers(1)
Результат:
┌─isConstant(number)─┐
│ 0 │
└────────────────────┘
isFinite(x)
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент не бесконечный и не NaN, иначе 0.
ifNotFinite
Проверяет, является ли значение дробного числа с плавающей точкой конечным.
Синтаксис
ifNotFinite(x,y)
Аргументы
x
— значение, которое нужно проверить на бесконечность. Тип: Float*.y
— запасное значение. Тип: Float*.
Возвращаемые значения
x
, еслиx
принимает конечное значение.y
, еслиx
принимает не конечное значение.
Пример
Запрос:
SELECT 1/0 as infimum, ifNotFinite(infimum,42)
Результат:
┌─infimum─┬─ifNotFinite(divide(1, 0), 42)─┐ │ inf │ 42 │ └─────────┴───────────────────────────────┘
Аналогичный результат можно получить с помощью тернарного оператора isFinite(x) ? x : y
.
isInfinite(x)
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент бесконечный, иначе 0. Отметим, что в случае NaN возвращается 0.
isNaN(x)
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент является NaN, иначе 0.
hasColumnInTable([‘hostname’[, ‘username’[, ‘password’]],] ‘database’, ‘table’, ‘column’)
Принимает константные строки - имя базы данных, имя таблицы и название столбца. Возвращает константное выражение типа UInt8, равное 1, если есть столбец, иначе 0. Если задан параметр hostname, проверка будет выполнена на удалённом сервере. Функция кидает исключение, если таблица не существует. Для элементов вложенной структуры данных функция проверяет существование столбца. Для самой же вложенной структуры данных функция возвращает 0.
bar
Позволяет построить unicode-art диаграмму.
bar(x, min, max, width)
рисует полосу ширины пропорциональной (x - min)
и равной width
символов при x = max
.
Аргументы:
x
— Величина для отображения.min, max
— Целочисленные константы, значение должно помещаться вInt64
.width
— Константа, положительное число, может быть дробным.
Полоса рисуется с точностью до одной восьмой символа.
Пример:
SELECT
toHour(EventTime) AS h,
count() AS c,
bar(c, 0, 600000, 20) AS bar
FROM test.hits
GROUP BY h
ORDER BY h ASC
┌──h─┬──────c─┬─bar────────────────┐
│ 0 │ 292907 │ █████████▋ │
│ 1 │ 180563 │ ██████ │
│ 2 │ 114861 │ ███▋ │
│ 3 │ 85069 │ ██▋ │
│ 4 │ 68543 │ ██▎ │
│ 5 │ 78116 │ ██▌ │
│ 6 │ 113474 │ ███▋ │
│ 7 │ 170678 │ █████▋ │
│ 8 │ 278380 │ █████████▎ │
│ 9 │ 391053 │ █████████████ │
│ 10 │ 457681 │ ███████████████▎ │
│ 11 │ 493667 │ ████████████████▍ │
│ 12 │ 509641 │ ████████████████▊ │
│ 13 │ 522947 │ █████████████████▍ │
│ 14 │ 539954 │ █████████████████▊ │
│ 15 │ 528460 │ █████████████████▌ │
│ 16 │ 539201 │ █████████████████▊ │
│ 17 │ 523539 │ █████████████████▍ │
│ 18 │ 506467 │ ████████████████▊ │
│ 19 │ 520915 │ █████████████████▎ │
│ 20 │ 521665 │ █████████████████▍ │
│ 21 │ 542078 │ ██████████████████ │
│ 22 │ 493642 │ ████████████████▍ │
│ 23 │ 400397 │ █████████████▎ │
└────┴────────┴────────────────────┘
transform
Преобразовать значение согласно явно указанному отображению одних элементов на другие. Имеется два варианта функции:
transform(x, array_from, array_to, default)
x
- что преобразовывать.
array_from
- константный массив значений для преобразования.
array_to
- константный массив значений, в которые должны быть преобразованы значения из from.
default
- какое значение использовать, если x не равен ни одному из значений во from.
array_from
и array_to
- массивы одинаковых размеров.
Типы:
transform(T, Array(T), Array(U), U) -> U
T
и U
- могут быть числовыми, строковыми, или Date или DateTime типами.
При этом, где обозначена одна и та же буква (T или U), могут быть, в случае числовых типов, не совпадающие типы, а типы, для которых есть общий тип.
Например, первый аргумент может иметь тип Int64, а второй - Array(UInt16).
Если значение x равно одному из элементов массива array_from, то возвращает соответствующий (такой же по номеру) элемент массива array_to; иначе возвращает default. Если имеется несколько совпадающих элементов в array_from, то возвращает какой-нибудь из соответствующих.
Пример:
SELECT
transform(SearchEngineID, [2, 3], ['Yandex', 'Google'], 'Other') AS title,
count() AS c
FROM test.hits
WHERE SearchEngineID != 0
GROUP BY title
ORDER BY c DESC
┌─title─────┬──────c─┐
│ Yandex │ 498635 │
│ Google │ 229872 │
│ Other │ 104472 │
└───────────┴────────┘
transform(x, array_from, array_to)
Отличается от первого варианта отсутствующим аргументом default. Если значение x равно одному из элементов массива array_from, то возвращает соответствующий (такой же по номеру) элемент массива array_to; иначе возвращает x.
Типы:
transform(T, Array(T), Array(T)) -> T
Пример:
SELECT
transform(domain(Referer), ['yandex.ru', 'google.ru', 'vkontakte.ru'], ['www.yandex', 'example.com', 'vk.com']) AS s,
count() AS c
FROM test.hits
GROUP BY domain(Referer)
ORDER BY count() DESC
LIMIT 10
┌─s──────────────┬───────c─┐
│ │ 2906259 │
│ www.yandex │ 867767 │
│ ███████.ru │ 313599 │
│ mail.yandex.ru │ 107147 │
│ ██████.ru │ 100355 │
│ █████████.ru │ 65040 │
│ news.yandex.ru │ 64515 │
│ ██████.net │ 59141 │
│ example.com │ 57316 │
└────────────────┴─────────┘
formatReadableDecimalSize(x)
Принимает размер (число байт). Возвращает округленный размер с суффиксом (KiB, MiB и т.д.) в виде строки.
Пример:
SELECT
arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes,
formatReadableDecimalSize(filesize_bytes) AS filesize
┌─filesize_bytes─┬─filesize───┐
│ 1 │ 1.00 B │
│ 1024 │ 1.02 KB │
│ 1048576 │ 1.05 MB │
│ 192851925 │ 192.85 MB │
└────────────────┴────────────┘
formatReadableSize(x)
Принимает размер (число байт). Возвращает округленный размер с суффиксом (KiB, MiB и т.д.) в виде строки.
Пример:
SELECT
arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes,
formatReadableSize(filesize_bytes) AS filesize
┌─filesize_bytes─┬─filesize───┐
│ 1 │ 1.00 B │
│ 1024 │ 1.00 KiB │
│ 1048576 │ 1.00 MiB │
│ 192851925 │ 183.92 MiB │
└────────────────┴────────────┘
formatReadableQuantity(x)
Принимает число. Возвращает округленное число с суффиксом (thousand, million, billion и т.д.) в виде строки.
Облегчает визуальное восприятие больших чисел живым человеком.
Пример:
SELECT
arrayJoin([1024, 1234 * 1000, (4567 * 1000) * 1000, 98765432101234]) AS number,
formatReadableQuantity(number) AS number_for_humans
┌─────────number─┬─number_for_humans─┐
│ 1024 │ 1.02 thousand │
│ 1234000 │ 1.23 million │
│ 4567000000 │ 4.57 billion │
│ 98765432101234 │ 98.77 trillion │
└────────────────┴───────────────────┘
formatReadableTimeDelta
Принимает дельту времени в секундах. Возвращает дельту времени в виде строки. Есть возможность указать наиболее крупную единицу измерения для вывода (год, месяц, день, час, минута, секунда, милли/микро/наносекунда).
Синтаксис
formatReadableTimeDelta(column[, maximum_unit])
Аргументы
column
— Столбец с числовой дельтой времени.maximum_unit
— Опциональный параметр. Максимальная единица измерения для отображения.- Допустимые значения:
nanoseconds
,microseconds
,milliseconds
,seconds
,minutes
,hours
,days
,months
,years
. - Значение по умолчанию:
years
.
- Допустимые значения:
minimum_unit
— Опциональный параметр. Минимальная единица измерения для отображения. Более мелкие единицы будут отброшены.- Допустимые значения:
nanoseconds
,microseconds
,milliseconds
,seconds
,minutes
,hours
,days
,months
,years
. - Если минимальная единица задана явно и превышает максимальную единицу, будет выкинуто исключение.
- Значение по умолчанию:
seconds
если максимальная единица -- секунда или более крупный интервал, в противном случае --nanoseconds
.
- Допустимые значения:
Пример
SELECT
arrayJoin([100, 12345, 432546534]) AS elapsed,
formatReadableTimeDelta(elapsed) AS time_delta
┌────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 │
└────────────┴─────────────────────────────────────────────────────────────────┘
SELECT
arrayJoin([100, 12345, 432546534]) AS elapsed,
formatReadableTimeDelta(elapsed, 'minutes') AS time_delta
┌────elapsed─┬─time_delta ─────────────────────────────────────────────────────┐
│ 100 │ 1 minute and 40 seconds │
│ 12345 │ 205 minutes and 45 seconds │
│ 432546534 │ 7209108 minutes and 54 seconds │
└────────────┴─────────────────────────────────────────────────────────────────┘
parseTimeDelta
Преобразует последовательность символов, которая напоминает нечто похо жее на единицу времени.
Синтаксис
parseTimeDelta(timestr)
Аргументы
timestr
— Последовательность символов, которая напоминает нечто похожее на единицу времени.
Возвращаемое значение
- Число с плавающей точкой, содержащее количество секунд.
Пример
SELECT parseTimeDelta('11s+22min')
┌─parseTimeDelta('11s+22min')─┐
│ 1331 │
└─────────────────────────────┘
SELECT parseTimeDelta('1yr2mo')
┌─parseTimeDelta('1yr2mo')─┐
│ 36806400 │
└──────────────────────────┘
least(a, b)
Возвращает наименьшее значение из a и b.
greatest(a, b)
Возвращает наибольшее значение из a и b.
uptime()
Возвращает аптайм сервера в секундах. Если функция вызывается в контексте распределенной таблицы, то она генерирует обычный столбец со значениями, актуальными для каждого шарда. Иначе возвращается константа.