2020-10-26 10:29:30 +00:00
---
toc_priority: 66
toc_title: "\u041f\u0440\u043e\u0447\u0438\u0435\u0020\u0444\u0443\u043d\u043a\u0446\u0438\u0438"
---
2020-07-01 13:36:41 +00:00
# Прочие функции {#other-functions}
2017-03-12 17:58:51 +00:00
2020-03-20 18:20:59 +00:00
## hostName() {#hostname}
2019-06-14 11:26:46 +00:00
2017-03-12 17:58:51 +00:00
Возвращает строку - имя хоста, на котором эта функция была выполнена. При распределённой обработке запроса, это будет имя хоста удалённого сервера, если функция выполняется на удалённом сервере.
2020-05-02 18:01:13 +00:00
## getMacro {#getmacro}
Возвращает именованное значение из секции [macros ](../../operations/server-configuration-parameters/settings.md#macros ) конфигурации сервера.
**Синтаксис**
```sql
getMacro(name);
```
**Параметры**
- `name` — Имя, которое необходимо получить из секции `macros` . [String ](../../sql-reference/data-types/string.md#string ).
**Возвращаемое значение**
- Значение по указанному имени.
Тип: [String ](../../sql-reference/data-types/string.md ).
**Пример**
Пример секции `macros` в конфигурационном файле сервера:
```xml
< macros >
< test > Value< / test >
< / macros >
```
Запрос:
```sql
SELECT getMacro('test');
```
Результат:
```text
┌─getMacro('test')─┐
│ Value │
└──────────────────┘
```
Альтернативный способ получения значения:
```sql
SELECT * FROM system.macros
WHERE macro = 'test'
```
```text
┌─macro─┬─substitution─┐
│ test │ Value │
└───────┴──────────────┘
```
2019-12-04 09:17:35 +00:00
## FQDN {#fqdn}
2019-12-28 23:11:02 +00:00
Возвращает полное имя домена.
2019-12-04 09:17:35 +00:00
**Синтаксис**
2020-03-20 18:20:59 +00:00
``` sql
2019-12-04 09:17:35 +00:00
fqdn();
```
Эта функция регистронезависимая.
**Возвращаемое значение**
2020-03-21 04:11:51 +00:00
- Полное имя домена.
2019-12-04 09:17:35 +00:00
Тип: `String` .
**Пример**
Запрос:
2020-03-20 18:20:59 +00:00
``` sql
2019-12-04 09:17:35 +00:00
SELECT FQDN();
```
Ответ:
2020-03-20 18:20:59 +00:00
``` text
2019-12-04 09:17:35 +00:00
┌─FQDN()──────────────────────────┐
│ clickhouse.ru-central1.internal │
└─────────────────────────────────┘
```
2020-03-20 18:20:59 +00:00
## basename {#basename}
2019-06-14 11:26:46 +00:00
Извлекает конечную часть строки после последнего слэша или бэкслэша. Функция часто используется для извлечения имени файла из пути.
2020-03-20 18:20:59 +00:00
``` sql
2019-06-14 11:26:46 +00:00
basename( expr )
```
**Параметры**
2020-04-30 18:19:18 +00:00
- `expr` — Выражение, возвращающее значение типа [String ](../../sql-reference/functions/other-functions.md ). В результирующем значении все бэкслэши должны быть экранированы.
2019-06-14 11:26:46 +00:00
**Возвращаемое значение**
Строка, содержащая:
2020-03-21 04:11:51 +00:00
- Конечную часть строки после последнего слэша или бэкслэша.
2019-06-14 11:26:46 +00:00
2020-03-21 04:11:51 +00:00
Если входная строка содержит путь, заканчивающийся слэшем или бэкслэшем, например, `/` или `с :\` , функция возвращает пустую строку.
2019-06-14 11:26:46 +00:00
2020-03-21 04:11:51 +00:00
- Исходная строка, если нет слэша или бэкслэша.
2019-06-14 11:26:46 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2019-06-14 11:26:46 +00:00
SELECT 'some/long/path/to/file' AS a, basename(a)
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-14 11:26:46 +00:00
┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file │
└────────────────────────┴────────────────────────────────────────┘
```
2020-03-20 18:20:59 +00:00
``` sql
2019-06-14 11:26:46 +00:00
SELECT 'some\\long\\path\\to\\file' AS a, basename(a)
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-14 11:26:46 +00:00
┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file │
└────────────────────────┴────────────────────────────────────────┘
```
2020-03-20 18:20:59 +00:00
``` sql
2019-06-14 11:26:46 +00:00
SELECT 'some-file-name' AS a, basename(a)
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-14 11:26:46 +00:00
┌─a──────────────┬─basename('some-file-name')─┐
│ some-file-name │ some-file-name │
└────────────────┴────────────────────────────┘
```
2020-03-20 18:20:59 +00:00
## visibleWidth(x) {#visiblewidthx}
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` .
2020-03-20 18:20:59 +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
2020-03-20 18:20:59 +00:00
``` text
2018-07-26 14:41:59 +00:00
┌─visibleWidth(NULL)─┐
│ 4 │
└────────────────────┘
```
2020-03-20 18:20:59 +00:00
## toTypeName(x) {#totypenamex}
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}
2020-03-20 18:20:59 +00:00
2017-03-12 17:58:51 +00:00
Получить размер блока.
В ClickHouse выполнение запроса всегда идёт по блокам (наборам кусочков столбцов). Функция позволяет получить размер блока, для которого её вызвали.
2020-03-20 18:20:59 +00:00
## materialize(x) {#materializex}
2017-03-12 17:58:51 +00:00
Превращает константу в полноценный столбец, содержащий только одно значение.
В ClickHouse полноценные столбцы и константы представлены в памяти по-разному. Функции по-разному работают для аргументов-констант и обычных аргументов (выполняется разный код), хотя результат почти всегда должен быть одинаковым. Эта функция предназначена для отладки такого поведения.
2020-03-20 18:20:59 +00:00
## ignore(…) {#ignore}
2018-07-26 14:41:59 +00:00
Принимает любые аргументы, в т.ч. `NULL` , всегда возвращает 0.
2017-03-12 17:58:51 +00:00
При этом, аргумент всё равно вычисляется. Это может использоваться для бенчмарков.
2020-03-20 18:20:59 +00:00
## sleep(seconds) {#sleepseconds}
2017-03-12 17:58:51 +00:00
Спит seconds секунд на каждый блок данных. Можно указать как целое число, так и число с плавающей запятой.
2020-03-20 18:20:59 +00:00
## currentDatabase() {#currentdatabase}
2017-03-12 17:58:51 +00:00
Возвращает имя текущей базы данных.
Эта функция может использоваться в параметрах движка таблицы в запросе CREATE TABLE там, где нужно указать базу данных.
2020-03-20 18:20:59 +00:00
## currentUser() {#other-function-currentuser}
2019-09-29 11:15:26 +00:00
Возвращает логин текущего пользователя. При распределенном запросе, возвращается имя пользователя, инициировавшего запрос.
2020-03-20 18:20:59 +00:00
``` sql
2019-10-04 07:24:41 +00:00
SELECT currentUser();
2019-09-29 11:15:26 +00:00
```
Алиас: `user()` , `USER()` .
**Возвращаемые значения**
2020-03-21 04:11:51 +00:00
- Логин текущего пользователя.
- При распределенном запросе — логин пользователя, инициировавшего запрос.
2019-09-29 11:15:26 +00:00
Тип: `String` .
**Пример**
Запрос:
2020-03-20 18:20:59 +00:00
``` sql
2019-10-04 07:24:41 +00:00
SELECT currentUser();
2019-09-29 11:15:26 +00:00
```
Ответ:
2020-03-20 18:20:59 +00:00
``` text
2019-09-29 11:15:26 +00:00
┌─currentUser()─┐
│ default │
└───────────────┘
```
2019-08-13 16:08:12 +00:00
2020-05-08 08:04:09 +00:00
## isConstant {#is-constant}
2020-05-02 15:14:10 +00:00
Проверяет, является ли аргумент константным выражением.
Константное выражение — это выражение, результат которого известен на момент анализа запроса (до е г о выполнения). Например, выражения над [литералами ](../syntax.md#literals ) являются константными.
Используется в целях разработки, отладки или демонстрирования.
**Синтаксис**
``` sql
isConstant(x)
```
**Параметры**
- `x` — Выражение для проверки.
**Возвращаемые значения**
- `1` — Выражение `x` является константным.
- `0` — Выражение `x` не является константным.
Тип: [UInt8 ](../data-types/int-uint.md ).
**Примеры**
Запрос:
```sql
SELECT isConstant(x + 1) FROM (SELECT 43 AS x)
```
Результат:
```text
┌─isConstant(plus(x, 1))─┐
│ 1 │
└────────────────────────┘
```
Запрос:
```sql
WITH 3.14 AS pi SELECT isConstant(cos(pi))
```
Результат:
```text
┌─isConstant(cos(pi))─┐
│ 1 │
└─────────────────────┘
```
Запрос:
```sql
SELECT isConstant(number) FROM numbers(1)
```
Результат:
```text
┌─isConstant(number)─┐
│ 0 │
└────────────────────┘
```
2020-03-20 18:20:59 +00:00
## isFinite(x) {#isfinitex}
2017-03-12 17:58:51 +00:00
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент не бесконечный и не NaN, иначе 0.
2020-03-17 15:24:11 +00:00
## ifNotFinite {#ifnotfinite}
Проверяет, является ли значение дробного числа с плавающей точкой конечным.
2020-03-20 18:20:59 +00:00
**Синтаксис**
2020-03-17 15:24:11 +00:00
2020-03-21 04:11:51 +00:00
ifNotFinite(x,y)
2020-03-17 15:24:11 +00:00
**Параметры**
2020-04-30 18:19:18 +00:00
- `x` — Значение, которое нужно проверить на бесконечность. Тип: [Float\* ](../../sql-reference/functions/other-functions.md ).
- `y` — Запасное значение. Тип: [Float\* ](../../sql-reference/functions/other-functions.md ).
2020-03-17 15:24:11 +00:00
**Возвращаемые значения**
2020-03-21 04:11:51 +00:00
- `x` , если `x` принимает конечное значение.
- `y` , если`x` принимает не конечное значение.
2020-03-17 15:24:11 +00:00
**Пример**
Запрос:
2020-03-21 04:11:51 +00:00
SELECT 1/0 as infimum, ifNotFinite(infimum,42)
2020-03-17 15:24:11 +00:00
Результат:
2020-03-21 04:11:51 +00:00
┌─infimum─┬─ifNotFinite(divide(1, 0), 42)─┐
│ inf │ 42 │
└─────────┴───────────────────────────────┘
2020-03-17 15:24:11 +00:00
2020-04-30 18:19:18 +00:00
Аналогичный результат можно получить с помощью [тернарного оператора ](conditional-functions.md#ternary-operator ) `isFinite(x) ? x : y` .
2020-03-17 15:24:11 +00:00
2020-03-20 18:20:59 +00:00
## isInfinite(x) {#isinfinitex}
2017-03-12 17:58:51 +00:00
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент бесконечный, иначе 0. Отметим, что в случае NaN возвращается 0.
2020-03-20 18:20:59 +00:00
## isNaN(x) {#isnanx}
2017-03-12 17:58:51 +00:00
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент является NaN, иначе 0.
2020-03-20 18:20:59 +00:00
## hasColumnInTable(\[‘ hostname’ \[, ‘ username’ \[, ‘ password’ \]\],\] ‘ database’ , ‘ table’ , ‘ column’ ) {#hascolumnintablehostname-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` .
Параметры:
2020-03-21 04:11:51 +00:00
- `x` — Величина для отображения.
- `min, max` — Целочисленные константы, значение должно помещаться в `Int64` .
- `width` — Константа, положительное число, может быть дробным.
2017-03-12 17:58:51 +00:00
Полоса рисуется с точностью до одной восьмой символа.
Пример:
2020-03-20 18:20:59 +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
```
2020-03-20 18:20:59 +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 │ █████████████▎ │
└────┴────────┴────────────────────┘
```
2020-03-20 18:20:59 +00:00
## transform {#transform}
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Преобразовать значение согласно явно указанному отображению одних элементов на другие.
Имеется два варианта функции:
2020-10-13 17:23:29 +00:00
### transform(x, array_from, array_to, default) {#transformx-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).
2020-10-13 17:23:29 +00:00
Если значение x равно одному из элементов массива array_from, то возвращает соответствующий (такой же по номеру) элемент массива array_to; иначе возвращает default. Если имеется несколько совпадающих элементов в array_from, то возвращает какой-нибудь из соответствующих.
2017-03-12 17:58:51 +00:00
Пример:
2020-03-20 18:20:59 +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
```
2020-03-20 18:20:59 +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
└───────────┴────────┘
```
2020-10-13 17:23:29 +00:00
### transform(x, array_from, array_to) {#transformx-array-from-array-to}
2017-03-12 17:58:51 +00:00
Отличается от первого варианта отсутствующим аргументом default.
2020-10-13 17:23:29 +00:00
Если значение x равно одному из элементов массива array_from, то возвращает соответствующий (такой же по номеру) элемент массива array_to; иначе возвращает x.
2017-03-12 17:58:51 +00:00
Типы:
2017-10-25 05:27:09 +00:00
`transform(T, Array(T), Array(T)) -> T`
2017-03-12 17:58:51 +00:00
Пример:
2020-03-20 18:20:59 +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
```
2020-03-20 18:20:59 +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 │
└────────────────┴─────────┘
```
2020-03-20 18:20:59 +00:00
## formatReadableSize(x) {#formatreadablesizex}
2017-03-12 17:58:51 +00:00
Принимает размер (число байт). Возвращает округленный размер с суффиксом (KiB, MiB и т.д.) в виде строки.
Пример:
2020-03-20 18:20:59 +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
```
2020-03-20 18:20:59 +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 │
└────────────────┴────────────┘
```
2020-09-10 17:27:37 +00:00
## formatReadableQuantity(x) {#formatreadablequantityx}
Принимает число. Возвращает округленное число с суффиксом (thousand, million, billion и т.д.) в виде строки.
Облегчает визуальное восприятие больших чисел живым человеком.
Пример:
``` sql
SELECT
arrayJoin([1024, 1234 * 1000, (4567 * 1000) * 1000, 98765432101234]) AS number,
formatReadableQuantity(number) AS number_for_humans
```
``` text
┌─────────number─┬─number_for_humans─┐
│ 1024 │ 1.02 thousand │
│ 1234000 │ 1.23 million │
│ 4567000000 │ 4.57 billion │
│ 98765432101234 │ 98.77 trillion │
└────────────────┴───────────────────┘
```
2020-03-20 18:20:59 +00:00
## least(a, b) {#leasta-b}
2017-03-12 17:58:51 +00:00
Возвращает наименьшее значение из a и b.
2020-03-20 18:20:59 +00:00
## greatest(a, b) {#greatesta-b}
2017-03-12 17:58:51 +00:00
Возвращает наибольшее значение из a и b.
2020-03-20 18:20:59 +00:00
## uptime() {#uptime}
2017-03-12 17:58:51 +00:00
Возвращает аптайм сервера в секундах.
2020-03-20 18:20:59 +00:00
## version() {#version}
2017-03-12 17:58:51 +00:00
Возвращает версию сервера в виде строки.
2019-06-13 09:04:49 +00:00
## rowNumberInBlock {#function-rownumberinblock}
Возвращает порядковый номер строки в блоке данных. Для каждого блока данных нумерация начинается с 0.
2020-03-20 18:20:59 +00:00
## rowNumberInAllBlocks() {#rownumberinallblocks}
2017-03-12 17:58:51 +00:00
Возвращает порядковый номер строки в блоке данных. Функция учитывает только задействованные блоки данных.
2019-11-12 08:01:46 +00:00
## neighbor {#neighbor}
2019-08-13 13:11:24 +00:00
2019-11-12 08:01:46 +00:00
Функция позволяет получить доступ к значению в колонке `column` , находящемуся на смещении `offset` относительно текущей строки. Является частичной реализацией [оконных функций ](https://en.wikipedia.org/wiki/SQL_window_function ) `LEAD()` и `LAG()` .
2019-08-13 13:11:24 +00:00
2019-11-12 08:01:46 +00:00
**Синтаксис**
2020-03-20 18:20:59 +00:00
``` sql
2019-11-12 08:01:46 +00:00
neighbor(column, offset[, default_value])
```
Результат функции зависит от затронутых блоков данных и порядка данных в блоке. Если сделать подзапрос с ORDER BY и вызывать функцию извне подзапроса, можно будет получить ожидаемый результат.
2019-08-13 13:11:24 +00:00
2019-11-12 08:01:46 +00:00
**Параметры**
2020-03-21 04:11:51 +00:00
- `column` — Имя столбца или скалярное выражение.
2020-04-30 18:19:18 +00:00
- `offset` - Смещение от текущей строки `column` . [Int64 ](../../sql-reference/functions/other-functions.md ).
2020-03-21 04:11:51 +00:00
- `default_value` - Опциональный параметр. Значение, которое будет возвращено, если смещение выходит за пределы блока данных.
2019-11-12 08:01:46 +00:00
**Возвращаемое значение**
2020-03-21 04:11:51 +00:00
- Значение `column` в смещении от текущей строки, если значение `offset` не выходит за пределы блока.
- Значение по умолчанию для `column` , если значение `offset` выходит за пределы блока данных. Если передан параметр `default_value` , то значение берется из него.
2019-11-12 08:01:46 +00:00
Тип: зависит от данных в `column` или переданного значения по умолчанию в `default_value` .
**Пример**
Запрос:
2020-03-20 18:20:59 +00:00
``` sql
2019-11-12 08:01:46 +00:00
SELECT number, neighbor(number, 2) FROM system.numbers LIMIT 10;
```
2019-08-13 13:11:24 +00:00
2019-11-12 08:01:46 +00:00
Ответ:
2020-03-20 18:20:59 +00:00
``` text
2019-11-12 08:01:46 +00:00
┌─number─┬─neighbor(number, 2)─┐
│ 0 │ 2 │
│ 1 │ 3 │
│ 2 │ 4 │
│ 3 │ 5 │
│ 4 │ 6 │
│ 5 │ 7 │
│ 6 │ 8 │
│ 7 │ 9 │
│ 8 │ 0 │
│ 9 │ 0 │
└────────┴─────────────────────┘
```
Запрос:
2020-03-20 18:20:59 +00:00
``` sql
2019-11-12 08:01:46 +00:00
SELECT number, neighbor(number, 2, 999) FROM system.numbers LIMIT 10;
```
Ответ:
2020-03-20 18:20:59 +00:00
``` text
2019-11-12 08:01:46 +00:00
┌─number─┬─neighbor(number, 2, 999)─┐
│ 0 │ 2 │
│ 1 │ 3 │
│ 2 │ 4 │
│ 3 │ 5 │
│ 4 │ 6 │
│ 5 │ 7 │
│ 6 │ 8 │
│ 7 │ 9 │
│ 8 │ 999 │
│ 9 │ 999 │
└────────┴──────────────────────────┘
```
Эта функция может использоваться для оценки year-over-year значение показателя:
Запрос:
2019-08-13 13:11:24 +00:00
2020-03-20 18:20:59 +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-11-12 08:01:46 +00:00
Ответ:
2020-03-20 18:20:59 +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 │
└────────────┴───────┴───────────┴────────────────┘
```
2020-03-20 18:20:59 +00:00
## runningDifference(x) {#runningdifferencex}
2017-03-12 17:58:51 +00:00
Считает разницу между последовательными значениями строк в блоке данных.
Возвращает 0 для первой строки и разницу с предыдущей строкой для каждой последующей строки.
Результат функции зависит от затронутых блоков данных и порядка данных в блоке.
Если сделать подзапрос с ORDER BY и вызывать функцию извне подзапроса, можно будет получить ожидаемый результат.
Пример:
2020-03-20 18:20:59 +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
)
```
2020-03-20 18:20:59 +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` сбрасывается.
2020-03-20 18:20:59 +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
```
2020-03-20 18:20:59 +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 20:10:20 +00:00
2020-03-21 04:11:51 +00:00
set max_block_size=100000 -- по умолчанию 65536!
2020-03-20 18:20:59 +00:00
2020-03-21 04:11:51 +00:00
SELECT
number,
runningDifference(number + 1) AS diff
FROM numbers(100000)
WHERE diff != 1
2020-03-20 18:20:59 +00:00
``` text
2019-09-02 20:10:20 +00:00
┌─number─┬─diff─┐
│ 0 │ 0 │
└────────┴──────┘
```
2020-03-20 18:20:59 +00:00
## runningDifferenceStartingWithFirstValue {#runningdifferencestartingwithfirstvalue}
2020-10-13 17:23:29 +00:00
Т о же, что и \[runningDifference\] (./other_functions.md # other_functions-runningdifference), но в первой строке возвращается значение первой строки, а не ноль.
2020-03-20 18:20:59 +00:00
## MACNumToString(num) {#macnumtostringnum}
2019-09-02 20:10:20 +00:00
2017-05-10 15:33:41 +00:00
Принимает число типа UInt64. Интерпретирует е г о , как MAC-адрес в big endian. Возвращает строку, содержащую соответствующий MAC-адрес в формате AA:BB:CC:DD:EE:FF (числа в шестнадцатеричной форме через двоеточие).
2020-03-20 18:20:59 +00:00
## MACStringToNum(s) {#macstringtonums}
2017-05-10 15:33:41 +00:00
Функция, обратная к MACNumToString. Если MAC адрес в неправильном формате, то возвращает 0.
2017-05-15 14:52:47 +00:00
2020-03-20 18:20:59 +00:00
## MACStringToOUI(s) {#macstringtoouis}
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
2020-03-20 18:20:59 +00:00
## getSizeOfEnumType {#getsizeofenumtype}
2018-07-26 14:41:59 +00:00
2020-04-30 18:19:18 +00:00
Возвращает количество полей в [Enum ](../../sql-reference/functions/other-functions.md ).
2018-07-26 14:41:59 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2018-07-26 14:41:59 +00:00
getSizeOfEnumType(value)
```
**Параметры**
2020-03-21 04:11:51 +00:00
- `value` — Значение типа `Enum` .
2018-07-26 14:41:59 +00:00
**Возвращаемые значения**
2020-03-21 04:11:51 +00:00
- Количество полей входного значения типа `Enum` .
- Исключение, если тип не `Enum` .
2018-07-26 14:41:59 +00:00
**Пример**
2020-03-20 18:20:59 +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
2020-03-20 18:20:59 +00:00
``` text
2018-07-26 14:41:59 +00:00
┌─x─┐
│ 2 │
└───┘
```
2020-06-29 09:48:18 +00:00
## blockSerializedSize {#blockserializedsize}
Возвращает размер на диске (без учета сжатия).
``` sql
blockSerializedSize(value[, value[, ...]])
```
**Параметры**
- `value` — Значение произвольного типа.
**Возвращаемые значения**
- Количество байтов, которые будут записаны на диск для блока значений (без сжатия).
**Пример**
Запрос:
``` sql
SELECT blockSerializedSize(maxState(1)) as x
```
Ответ:
``` text
┌─x─┐
│ 2 │
└───┘
```
2020-03-20 18:20:59 +00:00
## toColumnTypeName {#tocolumntypename}
2018-07-26 14:41:59 +00:00
Возвращает имя класса, которым представлен тип данных столбца в оперативной памяти.
2020-03-20 18:20:59 +00:00
``` sql
2018-07-26 14:41:59 +00:00
toColumnTypeName(value)
```
**Параметры**
2020-03-21 04:11:51 +00:00
- `value` — Значение произвольного типа.
2018-07-26 14:41:59 +00:00
**Возвращаемые значения**
2020-03-21 04:11:51 +00:00
- Строка с именем класса, который используется для представления типа данных `value` в оперативной памяти.
2018-07-26 14:41:59 +00:00
**Пример разницы между `toTypeName` и `toColumnTypeName` **
2020-03-20 18:20:59 +00:00
``` sql
2019-09-23 15:31:46 +00:00
SELECT toTypeName(CAST('2018-01-01 01:02:03' AS DateTime))
2018-07-26 14:41:59 +00:00
```
2020-03-20 18:20:59 +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
```
2020-03-20 18:20:59 +00:00
``` sql
2019-09-23 15:31:46 +00:00
SELECT toColumnTypeName(CAST('2018-01-01 01:02:03' AS DateTime))
```
2018-07-26 14:41:59 +00:00
2020-03-20 18:20:59 +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
2020-03-20 18:20:59 +00:00
## dumpColumnStructure {#dumpcolumnstructure}
2018-07-26 14:41:59 +00:00
Выводит развернутое описание структур данных в оперативной памяти
2020-03-20 18:20:59 +00:00
``` sql
2018-07-26 14:41:59 +00:00
dumpColumnStructure(value)
```
**Параметры**
2020-03-21 04:11:51 +00:00
- `value` — Значение произвольного типа.
2018-07-26 14:41:59 +00:00
**Возвращаемые значения**
2020-03-21 04:11:51 +00:00
- Строка с описанием структуры, которая используется для представления типа данных `value` в оперативной памяти.
2018-07-26 14:41:59 +00:00
**Пример**
2020-03-20 18:20:59 +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
2020-03-20 18:20:59 +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)) │
└──────────────────────────────────────────────────────────────┘
```
2020-03-20 18:20:59 +00:00
## defaultValueOfArgumentType {#defaultvalueofargumenttype}
2018-07-26 14:41:59 +00:00
Выводит значение по умолчанию для типа данных.
Н е учитывает значения по умолчанию для столбцов, заданные пользователем.
2020-03-20 18:20:59 +00:00
``` sql
2018-07-26 14:41:59 +00:00
defaultValueOfArgumentType(expression)
```
**Параметры**
2020-03-21 04:11:51 +00:00
- `expression` — Значение произвольного типа или выражение, результатом которого является значение произвольного типа.
2018-07-26 14:41:59 +00:00
**Возвращаемые значения**
2020-03-21 04:11:51 +00:00
- `0` для чисел;
- Пустая строка для строк;
2020-04-30 18:19:18 +00:00
- `ᴺᵁᴸᴸ` для [Nullable ](../../sql-reference/functions/other-functions.md ).
2018-07-26 14:41:59 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2019-09-23 15:31:46 +00:00
SELECT defaultValueOfArgumentType( CAST(1 AS Int8) )
2018-07-26 14:41:59 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2018-07-26 14:41:59 +00:00
┌─defaultValueOfArgumentType(CAST(1, 'Int8'))─┐
│ 0 │
└─────────────────────────────────────────────┘
2019-09-23 15:31:46 +00:00
```
2020-03-20 18:20:59 +00:00
``` sql
2019-09-23 15:31:46 +00:00
SELECT defaultValueOfArgumentType( CAST(1 AS Nullable(Int8) ) )
```
2018-07-26 14:41:59 +00:00
2020-03-20 18:20:59 +00:00
``` text
2018-07-26 14:41:59 +00:00
┌─defaultValueOfArgumentType(CAST(1, 'Nullable(Int8)'))─┐
│ ᴺᵁᴸᴸ │
└───────────────────────────────────────────────────────┘
2020-11-04 19:17:02 +00:00
```
## defaultValueOfTypeName {#defaultvalueoftypename}
Выводит значение по умолчанию для указанного типа данных.
Н е включает значения по умолчанию для настраиваемых столбцов, установленных пользователем.
``` sql
defaultValueOfTypeName(type)
```
**Параметры:**
- `type` — тип данных.
**Возвращаемое значение**
- `0` для чисел;
- Пустая строка для строк;
- `ᴺᵁᴸᴸ` для [Nullable ](../../sql-reference/data-types/nullable.md ).
**Пример**
``` sql
SELECT defaultValueOfTypeName('Int8')
```
``` text
┌─defaultValueOfTypeName('Int8')─┐
│ 0 │
└────────────────────────────────┘
```
``` sql
SELECT defaultValueOfTypeName('Nullable(Int8)')
```
``` text
┌─defaultValueOfTypeName('Nullable(Int8)')─┐
│ ᴺᵁᴸᴸ │
└──────────────────────────────────────────┘
2018-07-26 14:41:59 +00:00
```
2020-03-20 18:20:59 +00:00
## replicate {#other-functions-replicate}
2018-07-26 14:41:59 +00:00
Создает массив, заполненный одним значением.
2020-04-30 18:19:18 +00:00
Используется для внутренней реализации [arrayJoin ](array-join.md#functions_arrayjoin ).
2018-07-26 14:41:59 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-09-30 09:17:55 +00:00
SELECT replicate(x, arr);
2018-07-26 14:41:59 +00:00
```
**Параметры**
2020-03-21 04:11:51 +00:00
- `arr` — Исходный массив. ClickHouse создаёт новый массив такой же длины как исходный и заполняет е г о значением `x` .
- `x` — Значение, которым будет заполнен результирующий массив.
2018-07-26 14:41:59 +00:00
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
Запрос:
2020-03-20 18:20:59 +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
Ответ:
2020-03-20 18:20:59 +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-10-07 19:32:18 +00:00
## filesystemAvailable {#filesystemavailable}
2019-07-18 11:04:45 +00:00
2020-02-02 21:43:39 +00:00
Возвращает объём доступного для записи данных места на файловой системе. Он всегда меньше общего свободного места ([filesystemFree](#filesystemfree)), потому что некоторое пространство зарезервировано для нужд операционной системы.
2019-10-07 19:32:18 +00:00
**Синтаксис**
2019-07-18 11:04:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-07-18 11:04:45 +00:00
filesystemAvailable()
```
**Возвращаемое значение**
2020-03-21 04:11:51 +00:00
- Объём доступного для записи данных места в байтах.
2019-07-18 11:04:45 +00:00
2020-04-30 18:19:18 +00:00
Тип: [UInt64 ](../../sql-reference/functions/other-functions.md ).
2019-07-18 11:04:45 +00:00
**Пример**
2019-10-07 19:32:18 +00:00
Запрос:
2020-03-20 18:20:59 +00:00
``` sql
2019-11-11 11:41:33 +00:00
SELECT formatReadableSize(filesystemAvailable()) AS "Available space", toTypeName(filesystemAvailable()) AS "Type";
2019-07-18 11:04:45 +00:00
```
2019-10-07 19:32:18 +00:00
Ответ:
2020-03-20 18:20:59 +00:00
``` text
2019-10-07 19:32:18 +00:00
┌─Available space─┬─Type───┐
2019-11-11 11:41:33 +00:00
│ 30.75 GiB │ UInt64 │
2019-10-07 19:32:18 +00:00
└─────────────────┴────────┘
```
## filesystemFree {#filesystemfree}
2020-02-02 21:43:39 +00:00
Возвращает объём свободного места на файловой системе. Смотрите также `filesystemAvailable` .
2019-10-07 19:32:18 +00:00
**Синтаксис**
2020-03-20 18:20:59 +00:00
``` sql
2019-11-11 11:41:33 +00:00
filesystemFree()
2019-10-07 19:32:18 +00:00
```
**Возвращаемое значение**
2020-03-21 04:11:51 +00:00
- Объем свободного места в байтах.
2019-07-18 11:04:45 +00:00
2020-04-30 18:19:18 +00:00
Тип: [UInt64 ](../../sql-reference/functions/other-functions.md ).
2019-07-18 11:04:45 +00:00
**Пример**
2019-10-07 19:32:18 +00:00
Запрос:
2020-03-20 18:20:59 +00:00
``` sql
2019-11-11 11:41:33 +00:00
SELECT formatReadableSize(filesystemFree()) AS "Free space", toTypeName(filesystemFree()) AS "Type";
2019-07-18 11:04:45 +00:00
```
2019-10-07 19:32:18 +00:00
Ответ:
2020-03-20 18:20:59 +00:00
``` text
2019-11-11 11:41:33 +00:00
┌─Free space─┬─Type───┐
│ 32.39 GiB │ UInt64 │
└────────────┴────────┘
2019-07-18 11:04:45 +00:00
```
2019-10-07 19:32:18 +00:00
## filesystemCapacity {#filesystemcapacity}
2020-04-30 18:19:18 +00:00
Возвращает информацию о ёмкости файловой системы в байтах. Для оценки должен быть настроен [путь ](../../sql-reference/functions/other-functions.md#server_configuration_parameters-path ) к каталогу с данными.
2019-10-07 19:32:18 +00:00
**Синтаксис**
2020-03-20 18:20:59 +00:00
``` sql
2019-11-11 11:42:53 +00:00
filesystemCapacity()
2019-07-18 11:04:45 +00:00
```
2019-10-07 19:32:18 +00:00
**Возвращаемое значение**
2019-07-18 11:04:45 +00:00
2020-03-21 04:11:51 +00:00
- Информация о ёмкости файловой системы в байтах.
2019-10-07 19:32:18 +00:00
2020-04-30 18:19:18 +00:00
Тип: [UInt64 ](../../sql-reference/functions/other-functions.md ).
2019-10-07 19:32:18 +00:00
**Пример**
Запрос:
2020-03-20 18:20:59 +00:00
``` sql
2019-11-11 11:41:33 +00:00
SELECT formatReadableSize(filesystemCapacity()) AS "Capacity", toTypeName(filesystemCapacity()) AS "Type"
2019-07-18 11:04:45 +00:00
```
2019-10-07 19:32:18 +00:00
Ответ:
2019-07-18 11:04:45 +00:00
2020-03-20 18:20:59 +00:00
``` text
2019-11-11 11:41:33 +00:00
┌─Capacity──┬─Type───┐
│ 39.32 GiB │ UInt64 │
└───────────┴────────┘
2019-10-07 19:32:18 +00:00
```
2019-07-18 11:04:45 +00:00
## finalizeAggregation {#function-finalizeaggregation}
2020-12-25 15:50:38 +00:00
Принимает состояние агрегатной функции. Возвращает результат агрегирования (или завершенное состояние при использовании комбинатора [-State ](../../sql-reference/aggregate-functions/combinators.md#state )).
2020-12-24 08:25:47 +00:00
**Синтаксис**
``` sql
finalizeAggregation(state)
```
**Параметры**
2020-12-25 10:35:16 +00:00
- `state` — состояние агрегатной функции. [AggregateFunction ](../../sql-reference/data-types/aggregatefunction.md#data-type-aggregatefunction ).
2020-12-24 08:25:47 +00:00
**Возвращаемые значения**
- Значения, которые были агрегированы.
2020-12-25 10:35:16 +00:00
Тип: соответствует типу агрегируемых значений.
2020-12-24 08:25:47 +00:00
**Примеры**
Запрос:
```sql
SELECT finalizeAggregation(( SELECT countState(number) FROM numbers(10)));
```
Результат:
```text
┌─finalizeAggregation(_subquery16)─┐
│ 10 │
└──────────────────────────────────┘
```
Запрос:
```sql
SELECT finalizeAggregation(( SELECT sumState(number) FROM numbers(10)));
```
Результат:
```text
┌─finalizeAggregation(_subquery20)─┐
│ 45 │
└──────────────────────────────────┘
```
2020-12-25 10:35:16 +00:00
Обратите внимание, что значения `NULL` игнорируются.
2020-12-24 08:25:47 +00:00
Запрос:
```sql
SELECT finalizeAggregation(arrayReduce('anyState', [NULL, 2, 3]));
```
Результат:
```text
┌─finalizeAggregation(arrayReduce('anyState', [NULL, 2, 3]))─┐
│ 2 │
└────────────────────────────────────────────────────────────┘
```
Комбинированный пример:
Запрос:
```sql
WITH initializeAggregation('sumState', number) AS one_row_sum_state
SELECT
number,
finalizeAggregation(one_row_sum_state) AS one_row_sum,
runningAccumulate(one_row_sum_state) AS cumulative_sum
FROM numbers(10);
```
Результат:
```text
┌─number─┬─one_row_sum─┬─cumulative_sum─┐
│ 0 │ 0 │ 0 │
│ 1 │ 1 │ 1 │
│ 2 │ 2 │ 3 │
│ 3 │ 3 │ 6 │
│ 4 │ 4 │ 10 │
│ 5 │ 5 │ 15 │
│ 6 │ 6 │ 21 │
│ 7 │ 7 │ 28 │
│ 8 │ 8 │ 36 │
│ 9 │ 9 │ 45 │
└────────┴─────────────┴────────────────┘
```
**Смотрите также**
- [arrayReduce ](../../sql-reference/functions/array-functions.md#arrayreduce )
- [initializeAggregation ](../../sql-reference/aggregate-functions/reference/initializeAggregation.md )
2019-07-18 11:04:45 +00:00
2020-07-01 13:36:41 +00:00
## runningAccumulate {#runningaccumulate}
2019-06-13 09:04:49 +00:00
2020-07-01 13:36:41 +00:00
Накапливает состояния агрегатной функции для каждой строки блока данных.
!!! warning "Warning"
Функция обнуляет состояние для каждого нового блока.
**Синтаксис**
```sql
runningAccumulate(agg_state[, grouping]);
```
**Параметры**
- `agg_state` — Состояние агрегатной функции. [AggregateFunction ](../../sql-reference/data-types/aggregatefunction.md#data-type-aggregatefunction ).
- `grouping` — Ключ группировки. Опциональный параметр. Состояние функции обнуляется, если значение `grouping` меняется. Параметр может быть любого [поддерживаемого типа данных ](../../sql-reference/data-types/index.md ), для которого определен оператор равенства.
2019-06-13 09:04:49 +00:00
2020-07-01 13:36:41 +00:00
**Возвращаемое значение**
- Каждая результирующая строка содержит результат агрегатной функции, накопленный для всех входных строк от 0 до текущей позиции. `runningAccumulate` обнуляет состояния для каждого нового блока данных или при изменении значения `grouping` .
Тип зависит от используемой агрегатной функции.
**Примеры**
Рассмотрим примеры использования `runningAccumulate` для нахождения кумулятивной суммы чисел без и с группировкой.
Запрос:
```sql
SELECT k, runningAccumulate(sum_k) AS res FROM (SELECT number as k, sumState(k) AS sum_k FROM numbers(10) GROUP BY k ORDER BY k);
```
Результат:
```text
┌─k─┬─res─┐
│ 0 │ 0 │
│ 1 │ 1 │
│ 2 │ 3 │
│ 3 │ 6 │
│ 4 │ 10 │
│ 5 │ 15 │
│ 6 │ 21 │
│ 7 │ 28 │
│ 8 │ 36 │
│ 9 │ 45 │
└───┴─────┘
```
2020-07-29 06:49:57 +00:00
Подзапрос формирует `sumState` для каждого числа от `0` до `9` . `sumState` возвращает состояние функции [sum ](../../sql-reference/aggregate-functions/reference/sum.md#agg_function-sum ), содержащее сумму одного числа.
2020-07-01 13:36:41 +00:00
Весь запрос делает следующее:
1. Для первой строки `runningAccumulate` берет `sumState(0)` и возвращает `0` .
2. Для второй строки функция объединяет `sumState (0)` и `sumState (1)` , что приводит к `sumState (0 + 1)` , и возвращает в результате `1` .
3. Для третьей строки функция объединяет `sumState (0 + 1)` и `sumState (2)` , что приводит к `sumState (0 + 1 + 2)` , и в результате возвращает `3` .
4. Действия повторяются до тех пор, пока не закончится блок.
В следующем примере показано использование параметра `grouping` :
Запрос:
```sql
SELECT
grouping,
item,
runningAccumulate(state, grouping) AS res
FROM
(
SELECT
toInt8(number / 4) AS grouping,
number AS item,
sumState(number) AS state
FROM numbers(15)
GROUP BY item
ORDER BY item ASC
);
```
Результат:
```text
┌─grouping─┬─item─┬─res─┐
│ 0 │ 0 │ 0 │
│ 0 │ 1 │ 1 │
│ 0 │ 2 │ 3 │
│ 0 │ 3 │ 6 │
│ 1 │ 4 │ 4 │
│ 1 │ 5 │ 9 │
│ 1 │ 6 │ 15 │
│ 1 │ 7 │ 22 │
│ 2 │ 8 │ 8 │
│ 2 │ 9 │ 17 │
│ 2 │ 10 │ 27 │
│ 2 │ 11 │ 38 │
│ 3 │ 12 │ 12 │
│ 3 │ 13 │ 25 │
│ 3 │ 14 │ 39 │
└──────────┴──────┴─────┘
```
Как вы можете видеть, `runningAccumulate` объединяет состояния для каждой группы строк отдельно.
2019-06-13 09:04:49 +00:00
2019-10-27 16:33:47 +00:00
## joinGet {#joinget}
2019-07-31 14:49:16 +00:00
2020-04-30 18:19:18 +00:00
Функция позволяет извлекать данные из таблицы таким же образом как из [словаря ](../../sql-reference/functions/other-functions.md ).
2019-07-31 14:49:16 +00:00
2020-04-30 18:19:18 +00:00
Получает данные из таблиц [Join ](../../sql-reference/functions/other-functions.md#creating-a-table ) по ключу.
2019-07-31 14:49:16 +00:00
2020-02-02 21:48:18 +00:00
Поддерживаются только таблицы, созданные с `ENGINE = Join(ANY, LEFT, <join_keys>)` .
2019-10-27 16:33:47 +00:00
2020-02-02 21:48:18 +00:00
**Синтаксис**
2019-10-27 16:33:47 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-10-27 16:33:47 +00:00
joinGet(join_storage_table_name, `value_column` , join_keys)
```
2020-02-02 21:48:18 +00:00
**Параметры**
2019-10-27 16:33:47 +00:00
2020-03-21 04:11:51 +00:00
- `join_storage_table_name` — [идентификатор ](../syntax.md#syntax-identifiers ), который указывает, откуда производится выборка данных. Поиск по идентификатору осуществляется в базе данных по умолчанию (см. конфигурацию `default_database` ). Чтобы переопределить базу данных по умолчанию, используйте команду `USE db_name` , или укажите базу данных и таблицу через разделитель `db_name.db_table` , см. пример.
- `value_column` — столбец, из которого нужно произвести выборку данных.
- `join_keys` — список ключей, по которым производится выборка данных.
2019-10-27 16:33:47 +00:00
**Возвращаемое значение**
Возвращает значение по списку ключей.
2020-10-13 17:23:29 +00:00
Если значения не существует в исходной таблице, вернется `0` или `null` в соответствии с настройками [join_use_nulls ](../../operations/settings/settings.md#join_use_nulls ).
2019-10-27 16:33:47 +00:00
2020-04-30 18:19:18 +00:00
Подробнее о настройке `join_use_nulls` в [операциях Join ](../../sql-reference/functions/other-functions.md ).
2020-01-24 10:52:26 +00:00
2019-10-27 16:33:47 +00:00
**Пример**
Входная таблица:
2020-03-20 18:20:59 +00:00
``` sql
2020-01-20 09:48:34 +00:00
CREATE DATABASE db_test
2020-01-24 11:38:29 +00:00
CREATE TABLE db_test.id_val(`id` UInt32, `val` UInt32) ENGINE = Join(ANY, LEFT, id) SETTINGS join_use_nulls = 1
2020-01-20 09:48:34 +00:00
INSERT INTO db_test.id_val VALUES (1,11)(2,12)(4,13)
2019-10-27 16:33:47 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-10-27 16:33:47 +00:00
┌─id─┬─val─┐
│ 4 │ 13 │
│ 2 │ 12 │
│ 1 │ 11 │
└────┴─────┘
```
Запрос:
2020-03-20 18:20:59 +00:00
``` sql
2020-01-24 10:52:26 +00:00
SELECT joinGet(db_test.id_val,'val',toUInt32(number)) from numbers(4) SETTINGS join_use_nulls = 1
2019-10-27 16:33:47 +00:00
```
Результат:
2020-03-20 18:20:59 +00:00
``` text
2020-01-20 09:48:34 +00:00
┌─joinGet(db_test.id_val, 'val', toUInt32(number))─┐
│ 0 │
│ 11 │
│ 12 │
│ 0 │
└──────────────────────────────────────────────────┘
2019-10-27 16:33:47 +00:00
```
2019-07-31 14:49:16 +00:00
2020-10-13 17:23:29 +00:00
## modelEvaluate(model_name, …) {#function-modelevaluate}
2019-07-31 14:49:16 +00:00
2019-12-25 17:26:40 +00:00
Оценивает внешнюю модель.
2019-07-31 14:49:16 +00:00
2019-12-25 17:26:40 +00:00
Принимает на вход имя и аргументы модели. Возвращает Float64.
2019-09-03 00:28:22 +00:00
2020-10-13 17:23:29 +00:00
## throwIf(x\[, custom_message\]) {#throwifx-custom-message}
2019-09-03 00:28:22 +00:00
Бросает исключение, если аргумент не равен нулю.
2020-10-13 17:23:29 +00:00
custom_message - необязательный параметр, константная строка, задает текст сообщения о б ошибке.
2019-09-03 01:23:07 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-09-03 01:23:07 +00:00
SELECT throwIf(number = 3, 'Too many') FROM numbers(10);
2019-09-23 15:31:46 +00:00
```
2020-03-20 18:20:59 +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-10-23 09:31:27 +00:00
## identity {#identity}
2020-03-20 18:20:59 +00:00
Возвращает свой аргумент. Используется для отладки и тестирования, позволяет отменить использование индекса, и получить результат и производительность полного сканирования таблицы. Это работает, потому что оптимизатор запросов не может «заглянуть» внутрь функции `identity` .
2019-09-03 00:12:14 +00:00
2020-02-14 01:03:43 +00:00
**Синтаксис**
2019-10-23 09:31:27 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2020-02-02 21:26:42 +00:00
identity(x)
2019-10-23 09:31:27 +00:00
```
2020-02-14 01:03:43 +00:00
**Пример**
2019-10-23 09:31:27 +00:00
2020-02-02 21:26:42 +00:00
Query:
2019-09-03 00:12:14 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-09-03 00:12:14 +00:00
SELECT identity(42)
2019-09-23 15:31:46 +00:00
```
2019-09-03 00:12:14 +00:00
2020-02-14 01:03:43 +00:00
Результат:
2019-10-23 09:31:27 +00:00
2020-03-20 18:20:59 +00:00
``` text
2019-09-03 00:12:14 +00:00
┌─identity(42)─┐
│ 42 │
└──────────────┘
```
2019-12-28 23:11:02 +00:00
## randomPrintableASCII {#randomascii}
2019-08-22 15:13:36 +00:00
2019-12-25 17:26:40 +00:00
Генерирует строку с о случайным набором печатных символов [ASCII ](https://en.wikipedia.org/wiki/ASCII#Printable_characters ).
2019-08-22 15:13:36 +00:00
2019-12-25 17:26:40 +00:00
**Синтаксис**
2019-08-22 15:13:36 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-12-28 23:11:02 +00:00
randomPrintableASCII(length)
2019-12-25 17:26:40 +00:00
```
**Параметры**
2020-03-21 04:11:51 +00:00
- `length` — Длина результирующей строки. Положительное целое число.
2019-12-25 17:26:40 +00:00
2020-03-21 04:11:51 +00:00
Если передать `length < 0` , то поведение функции не определено.
2019-12-25 17:26:40 +00:00
**Возвращаемое значение**
2020-03-21 04:11:51 +00:00
- Строка с о случайным набором печатных символов [ASCII ](https://en.wikipedia.org/wiki/ASCII#Printable_characters ).
2019-12-25 17:26:40 +00:00
2020-04-30 18:19:18 +00:00
Тип: [String ](../../sql-reference/functions/other-functions.md )
2019-12-25 17:26:40 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2019-12-28 23:11:02 +00:00
SELECT number, randomPrintableASCII(30) as str, length(str) FROM system.numbers LIMIT 3
2019-12-25 17:26:40 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-12-28 23:11:02 +00:00
┌─number─┬─str────────────────────────────┬─length(randomPrintableASCII(30))─┐
│ 0 │ SuiCOSTvC0csfABSw=UcSzp2.`rv8x │ 30 │
│ 1 │ 1Ag NlJ &RCN:*>HVPG; PE-nO"SUFD │ 30 │
│ 2 │ /"+< "wUTh:=LjJ Vm!c& hI*m#XTfzz │ 30 │
└────────┴────────────────────────────────┴──────────────────────────────────┘
2019-12-25 17:26:40 +00:00
```
2020-06-15 18:44:05 +00:00
## randomString {#randomstring}
Генерирует бинарную строку заданной длины, заполненную случайными байтами (в том числе нулевыми).
**Синтаксис**
``` sql
randomString(length)
```
**Параметры**
- `length` — длина строки. Положительное целое число.
**Возвращаемое значение**
- Строка, заполненная случайными байтами.
Type: [String ](../../sql-reference/data-types/string.md ).
**Пример**
Запрос:
``` sql
SELECT randomString(30) AS str, length(str) AS len FROM numbers(2) FORMAT Vertical;
```
Ответ:
``` text
Row 1:
──────
str: 3 G : pT ?w тi k aV f6
len: 30
Row 2:
──────
str: 9 ,] ^ ) ]?? 8
len: 30
```
**Смотрите также**
- [generateRandom ](../../sql-reference/table-functions/generate.md#generaterandom )
- [randomPrintableASCII ](../../sql-reference/functions/other-functions.md#randomascii )
2020-07-23 12:19:14 +00:00
## randomFixedString {#randomfixedstring}
Генерирует бинарную строку заданной длины, заполненную случайными байтами, включая нулевые.
**Синтаксис**
``` sql
randomFixedString(length);
```
**Параметры**
- `length` — Длина строки в байтах. [UInt64 ](../../sql-reference/data-types/int-uint.md ).
**Returned value(s)**
- Строка, заполненная случайными байтами.
Тип: [FixedString ](../../sql-reference/data-types/fixedstring.md ).
**Пример**
Запрос:
```sql
SELECT randomFixedString(13) as rnd, toTypeName(rnd)
```
Результат:
```text
┌─rnd──────┬─toTypeName(randomFixedString(13))─┐
│ j▒h㋖HɨZ'▒ │ FixedString(13) │
└──────────┴───────────────────────────────────┘
```
2020-07-21 10:08:11 +00:00
## randomStringUTF8 {#randomstringutf8}
2020-07-23 12:19:14 +00:00
Генерирует строку заданной длины с о случайными символами в кодировке UTF-8.
2020-07-21 10:08:11 +00:00
**Синтаксис**
``` sql
randomStringUTF8(length);
```
**Параметры**
2020-07-21 10:17:50 +00:00
- `length` — Длина итоговой строки в кодовых точках. [UInt64 ](../../sql-reference/data-types/int-uint.md ).
2020-07-21 10:08:11 +00:00
**Возвращаемое значение**
2020-07-21 11:30:41 +00:00
- Случайная строка в кодировке UTF-8.
2020-07-21 10:08:11 +00:00
Тип: [String ](../../sql-reference/data-types/string.md ).
**Пример**
Запрос:
```sql
SELECT randomStringUTF8(13)
```
Результат:
```text
┌─randomStringUTF8(13)─┐
│ 𘤗д兠庇 │
└──────────────────────┘
```
2020-10-15 17:27:17 +00:00
## getSetting {#getSetting}
Возвращает текущее значение [пользовательской настройки ](../../operations/settings/index.md#custom_settings ).
**Синтаксис**
```sql
getSetting('custom_setting');
```
**Параметр**
- `custom_setting` — название настройки. [String ](../../sql-reference/data-types/string.md ).
**Возвращаемое значение**
- Текущее значение пользовательской настройки.
**Пример**
```sql
SET custom_a = 123;
SELECT getSetting('custom_a');
```
**Результат**
```
123
```
**См. также**
- [Пользовательские настройки ](../../operations/settings/index.md#custom_settings )
2020-10-07 18:13:01 +00:00
## isDecimalOverflow {#is-decimal-overflow}
2020-10-26 10:29:30 +00:00
Проверяет, находится ли число [Decimal ](../../sql-reference/data-types/decimal.md ) вне собственной (или заданной) области значений.
2020-10-07 18:13:01 +00:00
**Синтаксис**
``` sql
isDecimalOverflow(d, [p])
```
**Параметры**
2020-10-26 10:29:30 +00:00
- `d` — число. [Decimal ](../../sql-reference/data-types/decimal.md ).
2020-10-07 18:13:01 +00:00
- `p` — точность. Необязательный параметр. Если опущен, используется исходная точность первого аргумента. Использование этого параметра может быть полезно для извлечения данных в другую СУБД или файл. [UInt8 ](../../sql-reference/data-types/int-uint.md#uint-ranges ).
**Возвращаемое значение**
- `1` — число имеет больше цифр, чем позволяет точность.
- `0` — число удовлетворяет заданной точности.
**Пример**
Запрос:
``` sql
SELECT isDecimalOverflow(toDecimal32(1000000000, 0), 9),
isDecimalOverflow(toDecimal32(1000000000, 0)),
isDecimalOverflow(toDecimal32(-1000000000, 0), 9),
isDecimalOverflow(toDecimal32(-1000000000, 0));
```
Результат:
``` text
1 1 1 1
```
## countDigits {#count-digits}
Возвращает количество десятичных цифр, необходимых для представления значения.
**Синтаксис**
``` sql
countDigits(x)
```
**Параметры**
2020-10-26 10:29:30 +00:00
- `x` — [целое ](../../sql-reference/data-types/int-uint.md#uint8-uint16-uint32-uint64-int8-int16-int32-int64 ) или [дробное ](../../sql-reference/data-types/decimal.md ) число.
2020-10-07 18:13:01 +00:00
**Возвращаемое значение**
Количество цифр.
Тип: [UInt8 ](../../sql-reference/data-types/int-uint.md#uint-ranges ).
!!! note "Примечание"
Для `Decimal` значений учитывается их масштаб: вычисляется результат по базовому целочисленному типу, полученному как `(value * scale)` . Например: `countDigits(42) = 2` , `countDigits(42.000) = 5` , `countDigits(0.04200) = 4` . Т о есть вы можете проверить десятичное переполнение для `Decimal64` с помощью `countDecimal(x) > 18` . Это медленный вариант [isDecimalOverflow ](#is-decimal-overflow ).
**Пример**
Запрос:
``` sql
SELECT countDigits(toDecimal32(1, 9)), countDigits(toDecimal32(-1, 9)),
countDigits(toDecimal64(1, 18)), countDigits(toDecimal64(-1, 18)),
countDigits(toDecimal128(1, 38)), countDigits(toDecimal128(-1, 38));
```
Результат:
``` text
10 10 19 19 39 39
```
2020-07-21 10:14:34 +00:00
2020-01-30 10:34:55 +00:00
[Оригинальная статья ](https://clickhouse.tech/docs/ru/query_language/functions/other_functions/ ) <!--hide-->