2017-12-11 12:07:26 +00:00
# Прочие функции
2017-03-12 17:58:51 +00:00
2017-12-11 12:07:26 +00:00
## hostName()
2017-03-12 17:58:51 +00:00
Возвращает строку - имя хоста, на котором эта функция была выполнена. При распределённой обработке запроса, это будет имя хоста удалённого сервера, если функция выполняется на удалённом сервере.
2017-12-11 12:07:26 +00:00
## visibleWidth(x)
2017-03-12 17:58:51 +00:00
Вычисляет приблизительную ширину при выводе значения в текстовом (tab-separated) виде на консоль.
Функция используется системой для реализации Pretty форматов.
2017-12-11 12:07:26 +00:00
## toTypeName(x)
2017-03-12 17:58:51 +00:00
Возвращает строку, содержащую имя типа переданного аргумента.
2017-12-11 12:07:26 +00:00
## blockSize()
2017-03-12 17:58:51 +00:00
Получить размер блока.
В ClickHouse выполнение запроса всегда идёт по блокам (наборам кусочков столбцов). Функция позволяет получить размер блока, для которого её вызвали.
2017-12-11 12:07:26 +00:00
## materialize(x)
2017-03-12 17:58:51 +00:00
Превращает константу в полноценный столбец, содержащий только одно значение.
В ClickHouse полноценные столбцы и константы представлены в памяти по-разному. Функции по-разному работают для аргументов-констант и обычных аргументов (выполняется разный код), хотя результат почти всегда должен быть одинаковым. Эта функция предназначена для отладки такого поведения.
2017-12-11 12:07:26 +00:00
## ignore(...)
2017-03-12 17:58:51 +00:00
Принимает любые аргументы, всегда возвращает 0.
При этом, аргумент всё равно вычисляется. Это может использоваться для бенчмарков.
2017-12-11 12:07:26 +00:00
## sleep(seconds)
2017-03-12 17:58:51 +00:00
Спит seconds секунд на каждый блок данных. Можно указать как целое число, так и число с плавающей запятой.
2017-12-11 12:07:26 +00:00
## currentDatabase()
2017-03-12 17:58:51 +00:00
Возвращает имя текущей базы данных.
Эта функция может использоваться в параметрах движка таблицы в запросе CREATE TABLE там, где нужно указать базу данных.
2017-12-11 12:07:26 +00:00
## isFinite(x)
2017-03-12 17:58:51 +00:00
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент не бесконечный и не NaN, иначе 0.
2017-12-11 12:07:26 +00:00
## isInfinite(x)
2017-03-12 17:58:51 +00:00
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент бесконечный, иначе 0. Отметим, что в случае NaN возвращается 0.
2017-12-11 12:07:26 +00:00
## isNaN(x)
2017-03-12 17:58:51 +00:00
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент является NaN, иначе 0.
2017-12-11 12:07:26 +00:00
## hasColumnInTable(\['hostname'\[, 'username'\[, 'password'\]\],\] 'database', 'table', 'column')
2017-03-12 17:58:51 +00:00
Принимает константные строки - имя базы данных, имя таблицы и название столбца. Возвращает константное выражение типа UInt8, равное 1,
2017-07-19 21:01:57 +00:00
если есть столбец, иначе 0. Если задан параметр hostname, проверка будет выполнена на удалённом сервере.
2017-03-12 17:58:51 +00:00
Функция кидает исключение, если таблица не существует.
Для элементов вложенной структуры данных функция проверяет существование столбца. Для самой же вложенной структуры данных функция возвращает 0.
2017-12-11 12:07:26 +00:00
## bar
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Позволяет построить unicode-art диаграмму.
2017-10-25 05:27:09 +00:00
`bar(x, min, max, width)` - рисует полосу ширины пропорциональной (x - min) и равной width символов при x == max.
`min, max` - целочисленные константы, значение должно помещаться в Int64.
`width` - константа, положительное число, может быть дробным.
2017-03-12 17:58:51 +00:00
Полоса рисуется с точностью до одной восьмой символа.
Пример:
2017-10-25 05:27:09 +00:00
```sql
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
```
```text
┌──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 │ █████████████▎ │
└────┴────────┴────────────────────┘
```
< a name = "other_functions-transform" > < / a >
2017-12-11 12:07:26 +00:00
## transform
2017-03-12 17:58:51 +00:00
Преобразовать значение согласно явно указанному отображению одних элементов на другие.
Имеется два варианта функции:
2017-10-25 05:27:09 +00:00
1. `transform(x, array_from, array_to, default)`
2017-03-12 17:58:51 +00:00
2017-10-25 05:27:09 +00:00
`x` - что преобразовывать.
2017-03-12 17:58:51 +00:00
2017-10-25 05:27:09 +00:00
`array_from` - константный массив значений для преобразования.
2017-03-12 17:58:51 +00:00
2017-10-25 05:27:09 +00:00
`array_to` - константный массив значений, в которые должны быть преобразованы значения из from.
2017-03-12 17:58:51 +00:00
2017-10-25 05:27:09 +00:00
`default` - какое значение использовать, если x не равен ни одному из значений во from.
2017-03-12 17:58:51 +00:00
2017-10-25 05:27:09 +00:00
`array_from` и `array_to` - массивы одинаковых размеров.
2017-03-12 17:58:51 +00:00
Типы:
2017-10-25 05:27:09 +00:00
`transform(T, Array(T), Array(U), U) -> U`
2017-03-12 17:58:51 +00:00
2017-10-25 05:27:09 +00:00
`T` и `U` - могут быть числовыми, строковыми, или Date или DateTime типами.
2017-03-12 17:58:51 +00:00
При этом, где обозначена одна и та же буква (T или U), могут быть, в случае числовых типов, не совпадающие типы, а типы, для которых есть общий тип.
Например, первый аргумент может иметь тип Int64, а второй - Array(UInt16).
Если значение x равно одному из элементов массива array_from, то возвращает соответствующий (такой же по номеру) элемент массива array_to; иначе возвращает default. Если имеется несколько совпадающих элементов в array_from, то возвращает какой-нибудь из соответствующих.
Пример:
2017-10-25 05:27:09 +00:00
```sql
SELECT
transform(SearchEngineID, [2, 3], ['Яндекс', 'Google'], 'Остальные') AS title,
count() AS c
FROM test.hits
WHERE SearchEngineID != 0
GROUP BY title
ORDER BY c DESC
```
```text
┌─title─────┬──────c─┐
│ Яндекс │ 498635 │
│ Google │ 229872 │
│ Остальные │ 104472 │
└───────────┴────────┘
```
2. `transform(x, array_from, array_to)`
2017-03-12 17:58:51 +00:00
Отличается от первого варианта отсутствующим аргументом default.
Если значение x равно одному из элементов массива array_from, то возвращает соответствующий (такой же по номеру) элемент массива array_to; иначе возвращает x.
Типы:
2017-10-25 05:27:09 +00:00
`transform(T, Array(T), Array(T)) -> T`
2017-03-12 17:58:51 +00:00
Пример:
2017-10-25 05:27:09 +00:00
```sql
SELECT
2018-01-19 14:36:40 +00:00
transform(domain(Referer), ['yandex.ru', 'google.ru', 'vk.com'], ['www.yandex', 'example.com']) AS s,
2017-10-25 05:27:09 +00:00
count() AS c
FROM test.hits
GROUP BY domain(Referer)
ORDER BY count() DESC
LIMIT 10
```
```text
┌─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 │
└────────────────┴─────────┘
```
2017-12-11 12:07:26 +00:00
## formatReadableSize(x)
2017-03-12 17:58:51 +00:00
Принимает размер (число байт). Возвращает округленный размер с суффиксом (KiB, MiB и т.д.) в виде строки.
Пример:
2017-10-25 05:27:09 +00:00
```sql
SELECT
arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes,
formatReadableSize(filesize_bytes) AS filesize
```
```text
┌─filesize_bytes─┬─filesize───┐
│ 1 │ 1.00 B │
│ 1024 │ 1.00 KiB │
│ 1048576 │ 1.00 MiB │
│ 192851925 │ 183.92 MiB │
└────────────────┴────────────┘
```
2017-12-11 12:07:26 +00:00
## least(a, b)
2017-03-12 17:58:51 +00:00
Возвращает наименьшее значение из a и b.
2017-12-11 12:07:26 +00:00
## greatest(a, b)
2017-03-12 17:58:51 +00:00
Возвращает наибольшее значение из a и b.
2017-12-11 12:07:26 +00:00
## uptime()
2017-03-12 17:58:51 +00:00
Возвращает аптайм сервера в секундах.
2017-12-11 12:07:26 +00:00
## version()
2017-03-12 17:58:51 +00:00
Возвращает версию сервера в виде строки.
2017-12-11 12:07:26 +00:00
## rowNumberInAllBlocks()
2017-03-12 17:58:51 +00:00
Возвращает порядковый номер строки в блоке данных. Функция учитывает только задействованные блоки данных.
2017-12-11 12:07:26 +00:00
## runningDifference(x)
2017-03-12 17:58:51 +00:00
Считает разницу между последовательными значениями строк в блоке данных.
Возвращает 0 для первой строки и разницу с предыдущей строкой для каждой последующей строки.
Результат функции зависит от затронутых блоков данных и порядка данных в блоке.
Если сделать подзапрос с ORDER BY и вызывать функцию извне подзапроса, можно будет получить ожидаемый результат.
Пример:
2017-10-25 05:27:09 +00:00
```sql
SELECT
EventID,
EventTime,
runningDifference(EventTime) AS delta
FROM
(
SELECT
EventID,
EventTime
FROM events
WHERE EventDate = '2016-11-24'
ORDER BY EventTime ASC
LIMIT 5
)
```
```text
┌─EventID─┬───────────EventTime─┬─delta─┐
│ 1106 │ 2016-11-24 00:00:04 │ 0 │
│ 1107 │ 2016-11-24 00:00:05 │ 1 │
│ 1108 │ 2016-11-24 00:00:05 │ 0 │
│ 1109 │ 2016-11-24 00:00:09 │ 4 │
│ 1110 │ 2016-11-24 00:00:10 │ 1 │
└─────────┴─────────────────────┴───────┘
```
2017-12-11 12:07:26 +00:00
## MACNumToString(num)
2017-05-10 15:33:41 +00:00
Принимает число типа UInt64. Интерпретирует е г о , как MAC-адрес в big endian. Возвращает строку, содержащую соответствующий MAC-адрес в формате AA:BB:CC:DD:EE:FF (числа в шестнадцатеричной форме через двоеточие).
2017-12-11 12:07:26 +00:00
## MACStringToNum(s)
2017-05-10 15:33:41 +00:00
Функция, обратная к MACNumToString. Если MAC адрес в неправильном формате, то возвращает 0.
2017-05-15 14:52:47 +00:00
2017-12-11 12:07:26 +00:00
## MACStringToOUI(s)
2017-05-15 14:52:47 +00:00
Принимает MAC адрес в формате AA:BB:CC:DD:EE:FF (числа в шестнадцатеричной форме через двоеточие). Возвращает первые три октета как число в формате UInt64. Если MAC адрес в неправильном формате, то возвращает 0.