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()
2019-06-14 11:26:46 +00:00
2017-03-12 17:58:51 +00:00
Возвращает строку - имя хоста, на котором эта функция была выполнена. При распределённой обработке запроса, это будет имя хоста удалённого сервера, если функция выполняется на удалённом сервере.
2019-06-14 11:26:46 +00:00
## basename
Извлекает конечную часть строки после последнего слэша или бэкслэша. Функция часто используется для извлечения имени файла из пути.
2019-09-23 15:31:46 +00:00
```sql
2019-06-14 11:26:46 +00:00
basename( expr )
```
**Параметры**
- `expr` — Выражение, возвращающее значение типа [String ](../../data_types/string.md ). В результирующем значении все бэкслэши должны быть экранированы.
**Возвращаемое значение**
Строка, содержащая:
- Конечную часть строки после последнего слэша или бэкслэша.
Если входная строка содержит путь, заканчивающийся слэшем или бэкслэшем, например, `/` или `с :\` , функция возвращает пустую строку.
- Исходная строка, если нет слэша или бэкслэша.
**Пример**
```sql
SELECT 'some/long/path/to/file' AS a, basename(a)
```
```text
┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file │
└────────────────────────┴────────────────────────────────────────┘
```
```sql
SELECT 'some\\long\\path\\to\\file' AS a, basename(a)
```
```text
┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file │
└────────────────────────┴────────────────────────────────────────┘
```
```sql
SELECT 'some-file-name' AS a, basename(a)
```
```text
┌─a──────────────┬─basename('some-file-name')─┐
│ some-file-name │ some-file-name │
└────────────────┴────────────────────────────┘
```
2017-12-11 12:07:26 +00:00
## visibleWidth(x)
2019-06-14 11:26:46 +00:00
2017-03-12 17:58:51 +00:00
Вычисляет приблизительную ширину при выводе значения в текстовом (tab-separated) виде на консоль.
Функция используется системой для реализации Pretty форматов.
2018-07-26 14:41:59 +00:00
`NULL` представляется как строка, соответствующая отображению `NULL` в форматах `Pretty` .
2019-09-23 15:31:46 +00:00
```sql
2018-07-26 14:41:59 +00:00
SELECT visibleWidth(NULL)
2019-09-23 15:31:46 +00:00
```
2018-07-26 14:41:59 +00:00
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌─visibleWidth(NULL)─┐
│ 4 │
└────────────────────┘
```
2017-12-11 12:07:26 +00:00
## toTypeName(x)
2017-03-12 17:58:51 +00:00
Возвращает строку, содержащую имя типа переданного аргумента.
2018-07-26 14:41:59 +00:00
Если на вход функции передать `NULL` , то она вернёт тип `Nullable(Nothing)` , что соответствует внутреннему представлению `NULL` в ClickHouse.
2019-06-13 09:04:49 +00:00
## blockSize() {#function-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(...)
2018-07-26 14:41:59 +00:00
Принимает любые аргументы, в т.ч. `NULL` , всегда возвращает 0.
2017-03-12 17:58:51 +00:00
При этом, аргумент всё равно вычисляется. Это может использоваться для бенчмарков.
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 там, где нужно указать базу данных.
2019-09-29 11:15:26 +00:00
## currentUser() {#other_function-currentuser}
Возвращает логин текущего пользователя. При распределенном запросе, возвращается имя пользователя, инициировавшего запрос.
```sql
2019-10-04 07:24:41 +00:00
SELECT currentUser();
2019-09-29 11:15:26 +00:00
```
Алиас: `user()` , `USER()` .
**Возвращаемые значения**
- Логин текущего пользователя.
- При распределенном запросе — логин пользователя, инициировавшего запрос.
Тип: `String` .
**Пример**
Запрос:
```sql
2019-10-04 07:24:41 +00:00
SELECT currentUser();
2019-09-29 11:15:26 +00:00
```
Ответ:
2019-10-04 07:24:41 +00:00
```text
2019-09-29 11:15:26 +00:00
┌─currentUser()─┐
│ default │
└───────────────┘
```
2019-08-13 16:08:12 +00:00
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.
2019-09-25 16:43:10 +00:00
## bar {#function-bar}
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Позволяет построить unicode-art диаграмму.
2018-04-28 11:45:37 +00:00
`bar(x, min, max, width)` рисует полосу ширины пропорциональной `(x - min)` и равной `width` символов при `x = max` .
Параметры:
- `x` — Величина для отображения.
- `min, max` — Целочисленные константы, значение должно помещаться в `Int64` .
- `width` — Константа, положительное число, может быть дробным.
2017-03-12 17:58:51 +00:00
Полоса рисуется с точностью до одной восьмой символа.
Пример:
2019-09-23 15:31:46 +00:00
```sql
2017-10-25 05:27:09 +00:00
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
```
2019-09-23 15:31:46 +00:00
```text
2017-10-25 05:27:09 +00:00
┌──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 │ █████████████▎ │
└────┴────────┴────────────────────┘
```
2017-12-11 12:07:26 +00:00
## transform
2017-03-12 17:58:51 +00:00
Преобразовать значение согласно явно указанному отображению одних элементов на другие.
Имеется два варианта функции:
2018-12-25 15:25:43 +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, то возвращает какой-нибудь из соответствующих.
Пример:
2019-09-23 15:31:46 +00:00
```sql
2017-10-25 05:27:09 +00:00
SELECT
2018-04-23 06:20:21 +00:00
transform(SearchEngineID, [2, 3], ['Yandex', 'Google'], 'Other') AS title,
2017-10-25 05:27:09 +00:00
count() AS c
FROM test.hits
WHERE SearchEngineID != 0
GROUP BY title
ORDER BY c DESC
```
2019-09-23 15:31:46 +00:00
```text
2017-10-25 05:27:09 +00:00
┌─title─────┬──────c─┐
2018-04-23 06:20:21 +00:00
│ Yandex │ 498635 │
2017-10-25 05:27:09 +00:00
│ Google │ 229872 │
2018-04-23 06:20:21 +00:00
│ Other │ 104472 │
2017-10-25 05:27:09 +00:00
└───────────┴────────┘
```
2018-12-25 15:25:43 +00:00
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
Пример:
2019-09-23 15:31:46 +00:00
```sql
2017-10-25 05:27:09 +00:00
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
```
2019-09-23 15:31:46 +00:00
```text
2017-10-25 05:27:09 +00:00
┌─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 и т.д.) в виде строки.
Пример:
2019-09-23 15:31:46 +00:00
```sql
2017-10-25 05:27:09 +00:00
SELECT
arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes,
formatReadableSize(filesize_bytes) AS filesize
```
2019-09-23 15:31:46 +00:00
```text
2017-10-25 05:27:09 +00:00
┌─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
Возвращает версию сервера в виде строки.
2019-06-13 09:04:49 +00:00
## rowNumberInBlock {#function-rownumberinblock}
Возвращает порядковый номер строки в блоке данных. Для каждого блока данных нумерация начинается с 0.
2017-12-11 12:07:26 +00:00
## rowNumberInAllBlocks()
2017-03-12 17:58:51 +00:00
Возвращает порядковый номер строки в блоке данных. Функция учитывает только задействованные блоки данных.
2019-08-23 01:31:04 +00:00
## neighbor(column, offset\[, default_value\])
2019-08-13 13:11:24 +00:00
Функция позволяет получить доступ к значению в колонке `column` , находящемуся на смещении `offset` относительно текущей строки.
Является частичной реализацией [оконных функций ](https://en.wikipedia.org/wiki/SQL_window_function ) LEAD() и LAG().
Результат функции зависит от затронутых блоков данных и порядка данных в блоке.
Если сделать подзапрос с ORDER BY и вызывать функцию извне подзапроса, можно будет получить ожидаемый результат.
Если значение `offset` выходит за пределы блока данных, то берётся значение по-умолчанию для колонки `column` . Если передан параметр `default_value` , то значение берётся из него.
Например, эта функция может использоваться чтобы оценить year-over-year значение показателя:
2019-09-23 15:31:46 +00:00
```sql
2019-08-13 13:11:24 +00:00
WITH toDate('2018-01-01') AS start_date
SELECT
toStartOfMonth(start_date + (number * 32)) AS month,
toInt32(month) % 100 AS money,
2019-08-23 01:31:04 +00:00
neighbor(money, -12) AS prev_year,
2019-08-13 13:11:24 +00:00
round(prev_year / money, 2) AS year_over_year
FROM numbers(16)
```
2019-09-23 15:31:46 +00:00
```text
2019-08-13 13:11:24 +00:00
┌──────month─┬─money─┬─prev_year─┬─year_over_year─┐
│ 2018-01-01 │ 32 │ 0 │ 0 │
│ 2018-02-01 │ 63 │ 0 │ 0 │
│ 2018-03-01 │ 91 │ 0 │ 0 │
│ 2018-04-01 │ 22 │ 0 │ 0 │
│ 2018-05-01 │ 52 │ 0 │ 0 │
│ 2018-06-01 │ 83 │ 0 │ 0 │
│ 2018-07-01 │ 13 │ 0 │ 0 │
│ 2018-08-01 │ 44 │ 0 │ 0 │
│ 2018-09-01 │ 75 │ 0 │ 0 │
│ 2018-10-01 │ 5 │ 0 │ 0 │
│ 2018-11-01 │ 36 │ 0 │ 0 │
│ 2018-12-01 │ 66 │ 0 │ 0 │
│ 2019-01-01 │ 97 │ 32 │ 0.33 │
│ 2019-02-01 │ 28 │ 63 │ 2.25 │
│ 2019-03-01 │ 56 │ 91 │ 1.62 │
│ 2019-04-01 │ 87 │ 22 │ 0.25 │
└────────────┴───────┴───────────┴────────────────┘
```
2017-12-11 12:07:26 +00:00
## runningDifference(x)
2017-03-12 17:58:51 +00:00
Считает разницу между последовательными значениями строк в блоке данных.
Возвращает 0 для первой строки и разницу с предыдущей строкой для каждой последующей строки.
Результат функции зависит от затронутых блоков данных и порядка данных в блоке.
Если сделать подзапрос с ORDER BY и вызывать функцию извне подзапроса, можно будет получить ожидаемый результат.
Пример:
2019-09-23 15:31:46 +00:00
```sql
2017-10-25 05:27:09 +00:00
SELECT
EventID,
EventTime,
runningDifference(EventTime) AS delta
FROM
(
SELECT
EventID,
EventTime
FROM events
WHERE EventDate = '2016-11-24'
ORDER BY EventTime ASC
LIMIT 5
)
```
2019-09-23 15:31:46 +00:00
```text
2017-10-25 05:27:09 +00:00
┌─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 │
└─────────┴─────────────────────┴───────┘
```
2019-09-02 20:10:20 +00:00
Обратите внимание — размер блока влияет на результат. С каждым новым блоком состояние `runningDifference` сбрасывается.
2019-09-23 15:31:46 +00:00
```sql
2019-09-02 20:10:20 +00:00
SELECT
number,
runningDifference(number + 1) AS diff
FROM numbers(100000)
WHERE diff != 1
2019-09-23 15:31:46 +00:00
```
```text
2019-09-02 20:10:20 +00:00
┌─number─┬─diff─┐
│ 0 │ 0 │
└────────┴──────┘
┌─number─┬─diff─┐
│ 65536 │ 0 │
└────────┴──────┘
2019-09-23 15:31:46 +00:00
```
```
2019-09-02 23:59:17 +00:00
set max_block_size=100000 -- по умолчанию 65536!
2019-09-02 20:10:20 +00:00
SELECT
number,
runningDifference(number + 1) AS diff
FROM numbers(100000)
WHERE diff != 1
2019-09-23 15:31:46 +00:00
```
```text
2019-09-02 20:10:20 +00:00
┌─number─┬─diff─┐
│ 0 │ 0 │
└────────┴──────┘
```
## runningDifferenceStartingWithFirstValue
Т о же, что и [runningDifference] (./other_functions.md # other_functions-runningdifference), но в первой строке возвращается значение первой строки, а не ноль.
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.
2018-07-26 14:41:59 +00:00
## getSizeOfEnumType
2018-12-12 17:28:00 +00:00
Возвращает количество полей в [Enum ](../../data_types/enum.md ).
2018-07-26 14:41:59 +00:00
2019-09-23 15:31:46 +00:00
```sql
2018-07-26 14:41:59 +00:00
getSizeOfEnumType(value)
```
**Параметры**
- `value` — Значение типа `Enum` .
**Возвращаемые значения**
- Количество полей входного значения типа `Enum` .
- Исключение, если тип не `Enum` .
**Пример**
2019-09-23 15:31:46 +00:00
```sql
2018-07-26 14:41:59 +00:00
SELECT getSizeOfEnumType( CAST('a' AS Enum8('a' = 1, 'b' = 2) ) ) AS x
2019-09-23 15:31:46 +00:00
```
2018-07-26 14:41:59 +00:00
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌─x─┐
│ 2 │
└───┘
```
## toColumnTypeName
Возвращает имя класса, которым представлен тип данных столбца в оперативной памяти.
2019-09-23 15:31:46 +00:00
```sql
2018-07-26 14:41:59 +00:00
toColumnTypeName(value)
```
**Параметры**
- `value` — Значение произвольного типа.
**Возвращаемые значения**
- Строка с именем класса, который используется для представления типа данных `value` в оперативной памяти.
**Пример разницы между `toTypeName` и `toColumnTypeName` **
2019-09-23 15:31:46 +00:00
```sql
SELECT toTypeName(CAST('2018-01-01 01:02:03' AS DateTime))
2018-07-26 14:41:59 +00:00
```
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌─toTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
│ DateTime │
└─────────────────────────────────────────────────────┘
2019-09-23 15:31:46 +00:00
```
```sql
SELECT toColumnTypeName(CAST('2018-01-01 01:02:03' AS DateTime))
```
2018-07-26 14:41:59 +00:00
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌─toColumnTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
│ Const(UInt32) │
└───────────────────────────────────────────────────────────┘
```
2018-07-27 13:00:01 +00:00
В примере видно, что тип данных `DateTime` хранится в памяти как `Const(UInt32)` .
2018-07-26 14:41:59 +00:00
## dumpColumnStructure
Выводит развернутое описание структур данных в оперативной памяти
2019-09-23 15:31:46 +00:00
```sql
2018-07-26 14:41:59 +00:00
dumpColumnStructure(value)
```
**Параметры**
- `value` — Значение произвольного типа.
**Возвращаемые значения**
- Строка с описанием структуры, которая используется для представления типа данных `value` в оперативной памяти.
**Пример**
2019-09-23 15:31:46 +00:00
```sql
2018-07-26 14:41:59 +00:00
SELECT dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))
2019-09-23 15:31:46 +00:00
```
2018-07-26 14:41:59 +00:00
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌─dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
│ DateTime, Const(size = 1, UInt32(size = 1)) │
└──────────────────────────────────────────────────────────────┘
```
## defaultValueOfArgumentType
Выводит значение по умолчанию для типа данных.
Н е учитывает значения по умолчанию для столбцов, заданные пользователем.
2019-09-23 15:31:46 +00:00
```sql
2018-07-26 14:41:59 +00:00
defaultValueOfArgumentType(expression)
```
**Параметры**
- `expression` — Значение произвольного типа или выражение, результатом которого является значение произвольного типа.
**Возвращаемые значения**
- `0` для чисел;
- Пустая строка для строк;
2018-12-12 17:28:00 +00:00
- `ᴺᵁᴸᴸ` для [Nullable ](../../data_types/nullable.md ).
2018-07-26 14:41:59 +00:00
**Пример**
2019-09-23 15:31:46 +00:00
```sql
SELECT defaultValueOfArgumentType( CAST(1 AS Int8) )
2018-07-26 14:41:59 +00:00
```
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌─defaultValueOfArgumentType(CAST(1, 'Int8'))─┐
│ 0 │
└─────────────────────────────────────────────┘
2019-09-23 15:31:46 +00:00
```
```sql
SELECT defaultValueOfArgumentType( CAST(1 AS Nullable(Int8) ) )
```
2018-07-26 14:41:59 +00:00
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌─defaultValueOfArgumentType(CAST(1, 'Nullable(Int8)'))─┐
│ ᴺᵁᴸᴸ │
└───────────────────────────────────────────────────────┘
```
## indexHint
Выводит данные, попавшие в диапазон, выбранный по индексу без фильтрации по указанному в качестве аргумента выражению.
Переданное в функцию выражение не вычисляется, но при этом ClickHouse применяет к этому выражению индекс таким же образом, как если бы выражение участвовало в запросе без `indexHint` .
**Возвращаемое значение**
- 1.
**Пример**
2018-12-12 17:28:00 +00:00
Рассмотрим таблицу с тестовыми данными [ontime ](../../getting_started/example_datasets/ontime.md ).
2018-07-26 14:41:59 +00:00
2019-09-23 15:31:46 +00:00
```sql
2018-07-26 14:41:59 +00:00
SELECT count() FROM ontime
2019-09-23 15:31:46 +00:00
```
2018-07-26 14:41:59 +00:00
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌─count()─┐
│ 4276457 │
└─────────┘
```
В таблице есть индексы по полям `(FlightDate, (Year, FlightDate))` .
Выполним выборку по дате следующим образом:
2019-09-23 15:31:46 +00:00
```sql
SELECT FlightDate AS k, count() FROM ontime GROUP BY k ORDER BY k
2018-07-26 14:41:59 +00:00
```
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌──────────k─┬─count()─┐
│ 2017-01-01 │ 13970 │
│ 2017-01-02 │ 15882 │
........................
│ 2017-09-28 │ 16411 │
│ 2017-09-29 │ 16384 │
│ 2017-09-30 │ 12520 │
└────────────┴─────────┘
```
В этой выборке индекс не используется и ClickHouse обработал всю таблицу (`Processed 4.28 million rows`). Для подключения индекса выберем конкретную дату и выполним следующий запрос:
2019-09-23 15:31:46 +00:00
```sql
SELECT FlightDate AS k, count() FROM ontime WHERE k = '2017-09-15' GROUP BY k ORDER BY k
2018-07-26 14:41:59 +00:00
```
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌──────────k─┬─count()─┐
│ 2017-09-15 │ 16428 │
└────────────┴─────────┘
```
В последней строке выдачи видно, что благодаря использованию индекса, ClickHouse обработал значительно меньшее количество строк (`Processed 32.74 thousand rows`).
Теперь передадим выражение `k = '2017-09-15'` в функцию `indexHint` :
2019-09-23 15:31:46 +00:00
```sql
2018-07-26 14:41:59 +00:00
SELECT
FlightDate AS k,
count()
FROM ontime
WHERE indexHint(k = '2017-09-15')
GROUP BY k
ORDER BY k ASC
2019-09-23 15:31:46 +00:00
```
2018-07-26 14:41:59 +00:00
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌──────────k─┬─count()─┐
│ 2017-09-14 │ 7071 │
│ 2017-09-15 │ 16428 │
│ 2017-09-16 │ 1077 │
│ 2017-09-30 │ 8167 │
└────────────┴─────────┘
```
В ответе на запрос видно, что ClickHouse применил индекс таким же образом, что и в предыдущий раз (`Processed 32.74 thousand rows`). Однако по результирующему набору строк видно, что выражение `k = '2017-09-15'` не использовалось при формировании результата.
Поскольку индекс в ClickHouse разреженный, то при чтении диапазона в ответ попадают "лишние" данные, в данном случае соседние даты. Функция `indexHint` позволяет их увидеть.
2019-09-30 09:17:55 +00:00
## replicate {#other_functions-replicate}
2018-07-26 14:41:59 +00:00
Создает массив, заполненный одним значением.
Используется для внутренней реализации [arrayJoin ](array_join.md#functions_arrayjoin ).
2019-09-23 15:31:46 +00:00
```sql
2019-09-30 09:17:55 +00:00
SELECT replicate(x, arr);
2018-07-26 14:41:59 +00:00
```
**Параметры**
- `arr` — Исходный массив. ClickHouse создаёт новый массив такой же длины как исходный и заполняет е г о значением `x` .
- `x` — Значение, которым будет заполнен результирующий массив.
2019-09-30 09:17:55 +00:00
**Возвращаемое значение**
Массив, заполненный значением `x` .
2018-07-26 14:41:59 +00:00
2019-09-30 09:17:55 +00:00
Тип: `Array` .
2018-07-26 14:41:59 +00:00
**Пример**
2019-09-30 09:17:55 +00:00
Запрос:
2019-09-23 15:31:46 +00:00
```sql
2019-09-30 09:17:55 +00:00
SELECT replicate(1, ['a', 'b', 'c']);
2019-09-23 15:31:46 +00:00
```
2018-07-26 14:41:59 +00:00
2019-09-30 09:17:55 +00:00
Ответ:
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌─replicate(1, ['a', 'b', 'c'])─┐
│ [1,1,1] │
└───────────────────────────────┘
```
2018-10-16 10:47:17 +00:00
2019-07-18 11:04:45 +00:00
## filesystemAvailable {#function-filesystemavailable}
Возвращает объем оставшегося места в файловой системе, в которой расположены файлы баз данных. Смотрите описание конфигурационного параметра сервера [path ](../../operations/server_settings/settings.md#server_settings-path ).
2019-09-23 15:31:46 +00:00
```sql
2019-07-18 11:04:45 +00:00
filesystemAvailable()
```
**Возвращаемое значение**
- Объем свободного места.
Тип — [UInt64 ](../../data_types/int_uint.md ).
**Пример**
```sql
SELECT filesystemAvailable() AS "Free space", toTypeName(filesystemAvailable()) AS "Type"
```
```text
┌──Free space─┬─Type───┐
│ 18152624128 │ UInt64 │
└─────────────┴────────┘
```
## filesystemCapacity
Возвращает данные о ёмкости диска.
## finalizeAggregation {#function-finalizeaggregation}
Принимает состояние агрегатной функции. Возвращает результат агрегирования.
2019-06-13 09:04:49 +00:00
## runningAccumulate {#function-runningaccumulate}
Принимает на вход состояния агрегатной функции и возвращает столбец с о значениями, которые представляют собой результат мёржа этих состояний для выборки строк из блока от первой до текущей строки. Например, принимает состояние агрегатной функции (например, `runningAccumulate(uniqState(UserID))` ), и для каждой строки блока возвращает результат агрегатной функции после мёржа состояний функции для всех предыдущих строк и текущей. Таким образом, результат зависит от разбиения данных по блокам и от порядка данных в блоке.
2019-07-31 14:49:16 +00:00
## joinGet('join_storage_table_name', 'get_column', join_key) {#other_functions-joinget}
Получает данные из таблиц [Join ](../../operations/table_engines/join.md ) по ключу.
Поддержаны только таблицы, созданные запросом с `ENGINE = Join(ANY, LEFT, <join_keys>)` .
2019-09-03 00:28:22 +00:00
## modelEvaluate(model_name, ...)
2019-09-03 01:23:07 +00:00
Вычислить модель.
2019-09-03 00:28:22 +00:00
Принимает имя модели и аргументы модели. Возвращает Float64.
2019-09-03 01:23:07 +00:00
## throwIf(x\[, custom_message\])
2019-09-03 00:28:22 +00:00
Бросает исключение, если аргумент не равен нулю.
2019-09-03 01:23:07 +00:00
custom_message - необязательный параметр, константная строка, задает текст сообщения о б ошибке.
```sql
SELECT throwIf(number = 3, 'Too many') FROM numbers(10);
2019-09-23 15:31:46 +00:00
```
```text
2019-09-03 01:23:07 +00:00
↙ 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.
```
2019-09-03 00:28:22 +00:00
2019-09-03 00:12:14 +00:00
## identity()
Возвращает то же значение, которое использовалось в качестве аргумента.
```sql
SELECT identity(42)
2019-09-23 15:31:46 +00:00
```
2019-09-03 00:12:14 +00:00
2019-09-23 15:31:46 +00:00
```text
2019-09-03 00:12:14 +00:00
┌─identity(42)─┐
│ 42 │
└──────────────┘
```
Используется для отладки и тестирования, позволяет "сломать" доступ по индексу, и получить результат и производительность запроса для полного сканирования.
2018-10-16 10:47:17 +00:00
[Оригинальная статья ](https://clickhouse.yandex/docs/ru/query_language/functions/other_functions/ ) <!--hide-->
2019-08-22 15:13:36 +00:00
## modelEvaluate(model_name, ...) {#function-modelevaluate}
Оценивает внешнюю модель.
Принимает на вход имя и аргументы модели. Возвращает Float64.