other-functions.md 64.7 KB
Newer Older
1 2
---
toc_priority: 66
3
toc_title: "Прочие функции"
4 5
---

B
BayoNet 已提交
6
# Прочие функции {#other-functions}
7

8
## hostName() {#hostname}
9

10 11
Возвращает строку - имя хоста, на котором эта функция была выполнена. При распределённой обработке запроса, это будет имя хоста удалённого сервера, если функция выполняется на удалённом сервере.

B
BayoNet 已提交
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
## 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        │
└───────┴──────────────┘
```


S
Sergei Bocharov 已提交
70 71
## FQDN {#fqdn}

72
Возвращает полное имя домена.
S
Sergei Bocharov 已提交
73 74 75

**Синтаксис**

76
``` sql
S
Sergei Bocharov 已提交
77 78 79 80 81 82 83
fqdn();
```

Эта функция регистронезависимая.

**Возвращаемое значение**

84
-   Полное имя домена.
S
Sergei Bocharov 已提交
85 86 87 88 89 90 91

Тип: `String`.

**Пример**

Запрос:

92
``` sql
S
Sergei Bocharov 已提交
93 94 95 96 97
SELECT FQDN();
```

Ответ:

98
``` text
S
Sergei Bocharov 已提交
99 100 101 102 103
┌─FQDN()──────────────────────────┐
│ clickhouse.ru-central1.internal │
└─────────────────────────────────┘
```

104
## basename {#basename}
105 106 107

Извлекает конечную часть строки после последнего слэша или бэкслэша. Функция часто используется для извлечения имени файла из пути.

108
``` sql
109 110 111 112 113
basename( expr )
```

**Параметры**

114
-   `expr` — Выражение, возвращающее значение типа [String](../../sql-reference/functions/other-functions.md). В результирующем значении все бэкслэши должны быть экранированы.
115 116 117 118 119

**Возвращаемое значение**

Строка, содержащая:

120
-   Конечную часть строки после последнего слэша или бэкслэша.
121

122
        Если входная строка содержит путь, заканчивающийся слэшем или бэкслэшем, например, `/` или `с:\`, функция возвращает пустую строку.
123

124
-   Исходная строка, если нет слэша или бэкслэша.
125 126 127

**Пример**

128
``` sql
129 130 131
SELECT 'some/long/path/to/file' AS a, basename(a)
```

132
``` text
133 134 135 136 137
┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file                                   │
└────────────────────────┴────────────────────────────────────────┘
```

138
``` sql
139 140 141
SELECT 'some\\long\\path\\to\\file' AS a, basename(a)
```

142
``` text
143 144 145 146 147
┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file                                   │
└────────────────────────┴────────────────────────────────────────┘
```

148
``` sql
149 150 151
SELECT 'some-file-name' AS a, basename(a)
```

152
``` text
153 154 155 156 157
┌─a──────────────┬─basename('some-file-name')─┐
│ some-file-name │ some-file-name             │
└────────────────┴────────────────────────────┘
```

158
## visibleWidth(x) {#visiblewidthx}
159

160 161 162
Вычисляет приблизительную ширину при выводе значения в текстовом (tab-separated) виде на консоль.
Функция используется системой для реализации Pretty форматов.

163 164
`NULL` представляется как строка, соответствующая отображению `NULL` в форматах `Pretty`.

165
``` sql
166
SELECT visibleWidth(NULL)
167
```
168

169
``` text
170 171 172 173 174
┌─visibleWidth(NULL)─┐
│                  4 │
└────────────────────┘
```

175 176
## toTypeName(x) {#totypenamex}

177 178
Возвращает строку, содержащую имя типа переданного аргумента.

179 180
Если на вход функции передать `NULL`, то она вернёт тип `Nullable(Nothing)`, что соответствует внутреннему представлению `NULL` в ClickHouse.

181
## blockSize() {#function-blocksize}
182

183 184 185
Получить размер блока.
В ClickHouse выполнение запроса всегда идёт по блокам (наборам кусочков столбцов). Функция позволяет получить размер блока, для которого её вызвали.

G
George 已提交
186 187
## byteSize {#function-bytesize}

G
George 已提交
188
Возвращает оценку в байтах размера аргументов в памяти в несжатом виде.
G
George 已提交
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245

**Синтаксис**

```sql
byteSize(argument [, ...])
```

**Параметры**

-   `argument` — значение.

**Возвращаемое значение**

-   Оценка размера аргументов в памяти в байтах.

Тип: [UInt64](../../sql-reference/data-types/int-uint.md).

**Примеры**

Для аргументов типа [String](../../sql-reference/data-types/string.md) функция возвращает длину строки + 9 (нуль-терминатор + длина)

Запрос:

```sql
SELECT byteSize('string');
```

Результат:

```text
┌─byteSize('string')─┐
│                 15 │
└────────────────────┘
```

Запрос:

```sql
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);

G
George 已提交
246
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;
G
George 已提交
247 248
```

G
George 已提交
249
Result:
G
George 已提交
250 251 252 253 254

``` text
Row 1:
──────
key:               1
G
George 已提交
255 256 257 258 259 260 261 262
byteSize(UInt8):   1
byteSize(UInt16):  2
byteSize(UInt32):  4
byteSize(UInt64):  8
byteSize(Int8):    1
byteSize(Int16):   2
byteSize(Int32):   4
byteSize(Int64):   8
G
George 已提交
263 264 265 266
byteSize(Float32): 4
byteSize(Float64): 8
```

G
George 已提交
267
Если функция принимает несколько аргументов, то она возвращает их совокупный размер в байтах.
G
George 已提交
268 269 270 271 272 273 274 275 276 277 278 279 280 281 282

Запрос:

```sql
SELECT byteSize(NULL, 1, 0.3, '');
```

Результат:

```text
┌─byteSize(NULL, 1, 0.3, '')─┐
│                         19 │
└────────────────────────────┘
```

283 284
## materialize(x) {#materializex}

285 286 287
Превращает константу в полноценный столбец, содержащий только одно значение.
В ClickHouse полноценные столбцы и константы представлены в памяти по-разному. Функции по-разному работают для аргументов-констант и обычных аргументов (выполняется разный код), хотя результат почти всегда должен быть одинаковым. Эта функция предназначена для отладки такого поведения.

288 289
## ignore(…) {#ignore}

290
Принимает любые аргументы, в т.ч. `NULL`, всегда возвращает 0.
291 292
При этом, аргумент всё равно вычисляется. Это может использоваться для бенчмарков.

293 294
## sleep(seconds) {#sleepseconds}

295 296
Спит seconds секунд на каждый блок данных. Можно указать как целое число, так и число с плавающей запятой.

297 298
## currentDatabase() {#currentdatabase}

299 300 301
Возвращает имя текущей базы данных.
Эта функция может использоваться в параметрах движка таблицы в запросе CREATE TABLE там, где нужно указать базу данных.

302
## currentUser() {#other-function-currentuser}
303 304 305

Возвращает логин текущего пользователя. При распределенном запросе, возвращается имя пользователя, инициировавшего запрос.

306
``` sql
S
Fixes  
Sergei Bocharov 已提交
307
SELECT currentUser();
308 309 310 311 312 313
```

Алиас: `user()`, `USER()`.

**Возвращаемые значения**

314 315
-   Логин текущего пользователя.
-   При распределенном запросе — логин пользователя, инициировавшего запрос.
316 317 318 319 320 321 322

Тип: `String`.

**Пример**

Запрос:

323
``` sql
S
Fixes  
Sergei Bocharov 已提交
324
SELECT currentUser();
325 326 327 328
```

Ответ:

329
``` text
330 331 332 333
┌─currentUser()─┐
│ default       │
└───────────────┘
```
A
Alexandr Krasheninnikov 已提交
334

335
## isConstant {#is-constant}
336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403

Проверяет, является ли аргумент константным выражением.

Константное выражение — это выражение, результат которого известен на момент анализа запроса (до его выполнения). Например, выражения над [литералами](../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 │
└────────────────────┘
```

404 405
## isFinite(x) {#isfinitex}

406 407
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент не бесконечный и не NaN, иначе 0.

408 409 410 411
## ifNotFinite {#ifnotfinite}

Проверяет, является ли значение дробного числа с плавающей точкой конечным.

412
**Синтаксис**
413

414
    ifNotFinite(x,y)
415 416 417

**Параметры**

418 419
-   `x` — Значение, которое нужно проверить на бесконечность. Тип: [Float\*](../../sql-reference/functions/other-functions.md).
-   `y` — Запасное значение. Тип: [Float\*](../../sql-reference/functions/other-functions.md).
420 421 422

**Возвращаемые значения**

423 424
-   `x`, если `x` принимает конечное значение.
-   `y`, если`x` принимает не конечное значение.
425 426 427 428 429

**Пример**

Запрос:

430
    SELECT 1/0 as infimum, ifNotFinite(infimum,42)
431 432 433

Результат:

434 435 436
    ┌─infimum─┬─ifNotFinite(divide(1, 0), 42)─┐
    │     inf │                            42 │
    └─────────┴───────────────────────────────┘
437

438
Аналогичный результат можно получить с помощью [тернарного оператора](conditional-functions.md#ternary-operator) `isFinite(x) ? x : y`.
439

440 441
## isInfinite(x) {#isinfinitex}

442 443
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент бесконечный, иначе 0. Отметим, что в случае NaN возвращается 0.

444 445
## isNaN(x) {#isnanx}

446 447
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент является NaN, иначе 0.

448 449
## hasColumnInTable(\[‘hostname’\[, ‘username’\[, ‘password’\]\],\] ‘database’, ‘table’, ‘column’) {#hascolumnintablehostname-username-password-database-table-column}

450
Принимает константные строки - имя базы данных, имя таблицы и название столбца. Возвращает константное выражение типа UInt8, равное 1,
451
если есть столбец, иначе 0. Если задан параметр hostname, проверка будет выполнена на удалённом сервере.
452 453 454
Функция кидает исключение, если таблица не существует.
Для элементов вложенной структуры данных функция проверяет существование столбца. Для самой же вложенной структуры данных функция возвращает 0.

B
BayoNet 已提交
455
## bar {#function-bar}
456

457 458
Позволяет построить unicode-art диаграмму.

459 460 461 462
`bar(x, min, max, width)` рисует полосу ширины пропорциональной `(x - min)` и равной `width` символов при `x = max`.

Параметры:

463 464 465
-   `x` — Величина для отображения.
-   `min, max` — Целочисленные константы, значение должно помещаться в `Int64`.
-   `width` — Константа, положительное число, может быть дробным.
466 467 468 469 470

Полоса рисуется с точностью до одной восьмой символа.

Пример:

471
``` sql
472 473 474 475 476 477 478 479 480
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
```

481
``` text
482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509
┌──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 │ █████████████▎     │
└────┴────────┴────────────────────┘
```

510
## transform {#transform}
511

512 513 514
Преобразовать значение согласно явно указанному отображению одних элементов на другие.
Имеется два варианта функции:

A
Alexey Milovidov 已提交
515
### transform(x, array_from, array_to, default) {#transformx-array-from-array-to-default}
516

517
`x` - что преобразовывать.
518

519
`array_from` - константный массив значений для преобразования.
520

521
`array_to` - константный массив значений, в которые должны быть преобразованы значения из from.
522

523
`default` - какое значение использовать, если x не равен ни одному из значений во from.
524

525
`array_from` и `array_to` - массивы одинаковых размеров.
526 527 528

Типы:

529
`transform(T, Array(T), Array(U), U) -> U`
530

531
`T` и `U` - могут быть числовыми, строковыми, или Date или DateTime типами.
532 533 534
При этом, где обозначена одна и та же буква (T или U), могут быть, в случае числовых типов, не совпадающие типы, а типы, для которых есть общий тип.
Например, первый аргумент может иметь тип Int64, а второй - Array(UInt16).

A
Alexey Milovidov 已提交
535
Если значение x равно одному из элементов массива array_from, то возвращает соответствующий (такой же по номеру) элемент массива array_to; иначе возвращает default. Если имеется несколько совпадающих элементов в array_from, то возвращает какой-нибудь из соответствующих.
536 537 538

Пример:

539
``` sql
540
SELECT
B
BayoNet 已提交
541
    transform(SearchEngineID, [2, 3], ['Yandex', 'Google'], 'Other') AS title,
542 543 544 545 546 547 548
    count() AS c
FROM test.hits
WHERE SearchEngineID != 0
GROUP BY title
ORDER BY c DESC
```

549
``` text
550
┌─title─────┬──────c─┐
B
BayoNet 已提交
551
│ Yandex    │ 498635 │
552
│ Google    │ 229872 │
B
BayoNet 已提交
553
│ Other     │ 104472 │
554 555 556
└───────────┴────────┘
```

A
Alexey Milovidov 已提交
557
### transform(x, array_from, array_to) {#transformx-array-from-array-to}
558 559

Отличается от первого варианта отсутствующим аргументом default.
A
Alexey Milovidov 已提交
560
Если значение x равно одному из элементов массива array_from, то возвращает соответствующий (такой же по номеру) элемент массива array_to; иначе возвращает x.
561 562 563

Типы:

564
`transform(T, Array(T), Array(T)) -> T`
565 566 567

Пример:

568
``` sql
569
SELECT
570
    transform(domain(Referer), ['yandex.ru', 'google.ru', 'vk.com'], ['www.yandex', 'example.com']) AS s,
571 572 573 574 575 576 577
    count() AS c
FROM test.hits
GROUP BY domain(Referer)
ORDER BY count() DESC
LIMIT 10
```

578
``` text
579 580 581 582 583 584 585 586 587 588 589 590 591
┌─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 │
└────────────────┴─────────┘
```

592 593
## formatReadableSize(x) {#formatreadablesizex}

594 595 596 597
Принимает размер (число байт). Возвращает округленный размер с суффиксом (KiB, MiB и т.д.) в виде строки.

Пример:

598
``` sql
599 600 601 602 603
SELECT
    arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes,
    formatReadableSize(filesize_bytes) AS filesize
```

604
``` text
605 606 607 608 609 610 611 612
┌─filesize_bytes─┬─filesize───┐
│              1 │ 1.00 B     │
│           1024 │ 1.00 KiB   │
│        1048576 │ 1.00 MiB   │
│      192851925 │ 183.92 MiB │
└────────────────┴────────────┘
```

A
Artem Hnilov 已提交
613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635
## 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    │
└────────────────┴───────────────────┘
```

636 637
## least(a, b) {#leasta-b}

638 639
Возвращает наименьшее значение из a и b.

640 641
## greatest(a, b) {#greatesta-b}

642 643
Возвращает наибольшее значение из a и b.

644 645
## uptime() {#uptime}

646 647
Возвращает аптайм сервера в секундах.

648 649
## version() {#version}

650 651
Возвращает версию сервера в виде строки.

652 653 654 655
## rowNumberInBlock {#function-rownumberinblock}

Возвращает порядковый номер строки в блоке данных. Для каждого блока данных нумерация начинается с 0.

656 657
## rowNumberInAllBlocks() {#rownumberinallblocks}

658 659
Возвращает порядковый номер строки в блоке данных. Функция учитывает только задействованные блоки данных.

S
Sergei Bocharov 已提交
660
## neighbor {#neighbor}
A
Done  
Alexandr Krasheninnikov 已提交
661

D
Dmitriy 已提交
662
Функция позволяет получить доступ к значению в столбце `column`, находящемуся на смещении `offset` относительно текущей строки. Является частичной реализацией [оконных функций](https://en.wikipedia.org/wiki/SQL_window_function) `LEAD()` и `LAG()`.
A
Done  
Alexandr Krasheninnikov 已提交
663

S
Sergei Bocharov 已提交
664 665
**Синтаксис**

666
``` sql
S
Sergei Bocharov 已提交
667 668 669
neighbor(column, offset[, default_value])
```

D
Dmitriy 已提交
670 671 672 673 674 675
Результат функции зависит от затронутых блоков данных и порядка данных в блоке.

!!! warning "Предупреждение"
    Функция может получить доступ к значению в столбце соседней строки только внутри обрабатываемого в данный момент блока данных.

Порядок строк, используемый при вычислении функции `neighbor`, может отличаться от порядка строк, возвращаемых пользователю.
D
Dmitriy 已提交
676
Чтобы этого не случилось, вы можете сделать подзапрос с [ORDER BY](../../sql-reference/statements/select/order-by.md) и вызвать функцию изне подзапроса.
A
Done  
Alexandr Krasheninnikov 已提交
677

S
Sergei Bocharov 已提交
678 679
**Параметры**

680
-   `column` — Имя столбца или скалярное выражение.
681
-   `offset` - Смещение от текущей строки `column`. [Int64](../../sql-reference/functions/other-functions.md).
682
-   `default_value` - Опциональный параметр. Значение, которое будет возвращено, если смещение выходит за пределы блока данных.
S
Sergei Bocharov 已提交
683 684 685

**Возвращаемое значение**

686 687
-   Значение `column` в смещении от текущей строки, если значение `offset` не выходит за пределы блока.
-   Значение по умолчанию для `column`, если значение `offset` выходит за пределы блока данных. Если передан параметр `default_value`, то значение берется из него.
S
Sergei Bocharov 已提交
688 689 690 691 692 693 694

Тип: зависит от данных в `column` или переданного значения по умолчанию в `default_value`.

**Пример**

Запрос:

695
``` sql
S
Sergei Bocharov 已提交
696 697
SELECT number, neighbor(number, 2) FROM system.numbers LIMIT 10;
```
A
Done  
Alexandr Krasheninnikov 已提交
698

S
Sergei Bocharov 已提交
699 700
Ответ:

701
``` text
S
Sergei Bocharov 已提交
702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717
┌─number─┬─neighbor(number, 2)─┐
│      0 │                   2 │
│      1 │                   3 │
│      2 │                   4 │
│      3 │                   5 │
│      4 │                   6 │
│      5 │                   7 │
│      6 │                   8 │
│      7 │                   9 │
│      8 │                   0 │
│      9 │                   0 │
└────────┴─────────────────────┘
```

Запрос:

718
``` sql
S
Sergei Bocharov 已提交
719 720 721 722 723
SELECT number, neighbor(number, 2, 999) FROM system.numbers LIMIT 10;
```

Ответ:

724
``` text
S
Sergei Bocharov 已提交
725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741
┌─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 значение показателя:

Запрос:
A
Done  
Alexandr Krasheninnikov 已提交
742

743
``` sql
A
Done  
Alexandr Krasheninnikov 已提交
744 745 746 747
WITH toDate('2018-01-01') AS start_date
SELECT
    toStartOfMonth(start_date + (number * 32)) AS month,
    toInt32(month) % 100 AS money,
A
Alexey Milovidov 已提交
748
    neighbor(money, -12) AS prev_year,
A
Done  
Alexandr Krasheninnikov 已提交
749 750 751 752
    round(prev_year / money, 2) AS year_over_year
FROM numbers(16)
```

S
Sergei Bocharov 已提交
753 754
Ответ:

755
``` text
A
Done  
Alexandr Krasheninnikov 已提交
756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775
┌──────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 │
└────────────┴───────┴───────────┴────────────────┘
```

776 777
## runningDifference(x) {#runningdifferencex}

778 779 780
Считает разницу между последовательными значениями строк в блоке данных.
Возвращает 0 для первой строки и разницу с предыдущей строкой для каждой последующей строки.

D
Dmitriy 已提交
781 782 783
!!! warning "Предупреждение"
    Функция может взять значение предыдущей строки только внутри текущего обработанного блока данных.

784
Результат функции зависит от затронутых блоков данных и порядка данных в блоке.
D
Dmitriy 已提交
785 786

Порядок строк, используемый при вычислении функции `runningDifference`, может отличаться от порядка строк, возвращаемых пользователю.
D
Dmitriy 已提交
787
Чтобы этого не случилось, вы можете сделать подзапрос с [ORDER BY](../../sql-reference/statements/select/order-by.md) и вызвать функцию извне подзапроса.
788 789 790

Пример:

791
``` sql
792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807
SELECT
    EventID,
    EventTime,
    runningDifference(EventTime) AS delta
FROM
(
    SELECT
        EventID,
        EventTime
    FROM events
    WHERE EventDate = '2016-11-24'
    ORDER BY EventTime ASC
    LIMIT 5
)
```

808
``` text
809 810 811 812 813 814 815 816 817
┌─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 │
└─────────┴─────────────────────┴───────┘
```

D
Denis Zhuravlev 已提交
818 819
Обратите внимание — размер блока влияет на результат. С каждым новым блоком состояние `runningDifference` сбрасывается.

820
``` sql
D
Denis Zhuravlev 已提交
821 822 823 824 825
SELECT
    number,
    runningDifference(number + 1) AS diff
FROM numbers(100000)
WHERE diff != 1
826
```
827 828

``` text
D
Denis Zhuravlev 已提交
829 830 831 832 833 834
┌─number─┬─diff─┐
│      0 │    0 │
└────────┴──────┘
┌─number─┬─diff─┐
│  65536 │    0 │
└────────┴──────┘
835
```
D
Denis Zhuravlev 已提交
836

837
    set max_block_size=100000 -- по умолчанию 65536!
838

839 840 841 842 843
    SELECT
        number,
        runningDifference(number + 1) AS diff
    FROM numbers(100000)
    WHERE diff != 1
844 845

``` text
D
Denis Zhuravlev 已提交
846 847 848 849 850
┌─number─┬─diff─┐
│      0 │    0 │
└────────┴──────┘
```

851 852
## runningDifferenceStartingWithFirstValue {#runningdifferencestartingwithfirstvalue}

A
Alexey Milovidov 已提交
853
То же, что и \[runningDifference\] (./other_functions.md # other_functions-runningdifference), но в первой строке возвращается значение первой строки, а не ноль.
854 855

## MACNumToString(num) {#macnumtostringnum}
D
Denis Zhuravlev 已提交
856

D
Dmitry Luhtionov 已提交
857 858
Принимает число типа UInt64. Интерпретирует его, как MAC-адрес в big endian. Возвращает строку, содержащую соответствующий MAC-адрес в формате AA:BB:CC:DD:EE:FF (числа в шестнадцатеричной форме через двоеточие).

859 860
## MACStringToNum(s) {#macstringtonums}

D
Dmitry Luhtionov 已提交
861
Функция, обратная к MACNumToString. Если MAC адрес в неправильном формате, то возвращает 0.
D
Dmitry Luhtionov 已提交
862

863 864
## MACStringToOUI(s) {#macstringtoouis}

D
Dmitry Luhtionov 已提交
865
Принимает MAC адрес в формате AA:BB:CC:DD:EE:FF (числа в шестнадцатеричной форме через двоеточие). Возвращает первые три октета как число в формате UInt64. Если MAC адрес в неправильном формате, то возвращает 0.
866

867
## getSizeOfEnumType {#getsizeofenumtype}
868

869
Возвращает количество полей в [Enum](../../sql-reference/functions/other-functions.md).
870

871
``` sql
872 873 874 875 876
getSizeOfEnumType(value)
```

**Параметры**

877
-   `value` — Значение типа `Enum`.
878 879 880

**Возвращаемые значения**

881 882
-   Количество полей входного значения типа `Enum`.
-   Исключение, если тип не `Enum`.
883 884 885

**Пример**

886
``` sql
887
SELECT getSizeOfEnumType( CAST('a' AS Enum8('a' = 1, 'b' = 2) ) ) AS x
888
```
889

890
``` text
891 892 893 894 895
┌─x─┐
│ 2 │
└───┘
```

896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927
## blockSerializedSize {#blockserializedsize}

Возвращает размер на диске (без учета сжатия).

``` sql
blockSerializedSize(value[, value[, ...]])
```

**Параметры**

-   `value` — Значение произвольного типа.

**Возвращаемые значения**

-   Количество байтов, которые будут записаны на диск для блока значений (без сжатия).

**Пример**

Запрос:

``` sql
SELECT blockSerializedSize(maxState(1)) as x
```

Ответ:

``` text
┌─x─┐
│ 2 │
└───┘
```

928
## toColumnTypeName {#tocolumntypename}
929 930 931

Возвращает имя класса, которым представлен тип данных столбца в оперативной памяти.

932
``` sql
933 934 935 936 937
toColumnTypeName(value)
```

**Параметры**

938
-   `value` — Значение произвольного типа.
939 940 941

**Возвращаемые значения**

942
-   Строка с именем класса, который используется для представления типа данных `value` в оперативной памяти.
943 944 945

**Пример разницы между `toTypeName` и `toColumnTypeName`**

946
``` sql
947
SELECT toTypeName(CAST('2018-01-01 01:02:03' AS DateTime))
948 949
```

950
``` text
951 952 953
┌─toTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
│ DateTime                                            │
└─────────────────────────────────────────────────────┘
954
```
955 956

``` sql
957 958
SELECT toColumnTypeName(CAST('2018-01-01 01:02:03' AS DateTime))
```
959

960
``` text
961 962 963 964 965
┌─toColumnTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
│ Const(UInt32)                                             │
└───────────────────────────────────────────────────────────┘
```

966
В примере видно, что тип данных `DateTime` хранится в памяти как `Const(UInt32)`.
967

968
## dumpColumnStructure {#dumpcolumnstructure}
969 970 971

Выводит развернутое описание структур данных в оперативной памяти

972
``` sql
973 974 975 976 977
dumpColumnStructure(value)
```

**Параметры**

978
-   `value` — Значение произвольного типа.
979 980 981

**Возвращаемые значения**

982
-   Строка с описанием структуры, которая используется для представления типа данных `value` в оперативной памяти.
983 984 985

**Пример**

986
``` sql
987
SELECT dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))
988
```
989

990
``` text
991 992 993 994 995
┌─dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
│ DateTime, Const(size = 1, UInt32(size = 1))                  │
└──────────────────────────────────────────────────────────────┘
```

996
## defaultValueOfArgumentType {#defaultvalueofargumenttype}
997 998 999 1000 1001

Выводит значение по умолчанию для типа данных.

Не учитывает значения по умолчанию для столбцов, заданные пользователем.

1002
``` sql
1003 1004 1005 1006 1007
defaultValueOfArgumentType(expression)
```

**Параметры**

1008
-   `expression` — Значение произвольного типа или выражение, результатом которого является значение произвольного типа.
1009 1010 1011

**Возвращаемые значения**

1012 1013
-   `0` для чисел;
-   Пустая строка для строк;
1014
-   `ᴺᵁᴸᴸ` для [Nullable](../../sql-reference/functions/other-functions.md).
1015 1016 1017

**Пример**

1018
``` sql
1019
SELECT defaultValueOfArgumentType( CAST(1 AS Int8) )
1020 1021
```

1022
``` text
1023 1024 1025
┌─defaultValueOfArgumentType(CAST(1, 'Int8'))─┐
│                                           0 │
└─────────────────────────────────────────────┘
1026
```
1027 1028

``` sql
1029 1030
SELECT defaultValueOfArgumentType( CAST(1 AS Nullable(Int8) ) )
```
1031

1032
``` text
1033 1034 1035
┌─defaultValueOfArgumentType(CAST(1, 'Nullable(Int8)'))─┐
│                                                  ᴺᵁᴸᴸ │
└───────────────────────────────────────────────────────┘
1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077
```

## 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)')─┐
│                                     ᴺᵁᴸᴸ │
└──────────────────────────────────────────┘
1078 1079
```

1080
## replicate {#other-functions-replicate}
1081 1082 1083

Создает массив, заполненный одним значением.

1084
Используется для внутренней реализации [arrayJoin](array-join.md#functions_arrayjoin).
1085

1086
``` sql
1087
SELECT replicate(x, arr);
1088 1089 1090 1091
```

**Параметры**

1092 1093
-   `arr` — Исходный массив. ClickHouse создаёт новый массив такой же длины как исходный и заполняет его значением `x`.
-   `x` — Значение, которым будет заполнен результирующий массив.
1094

1095 1096 1097
**Возвращаемое значение**

Массив, заполненный значением `x`.
1098

1099
Тип: `Array`.
1100 1101 1102

**Пример**

1103 1104
Запрос:

1105
``` sql
1106
SELECT replicate(1, ['a', 'b', 'c']);
1107
```
1108

1109 1110
Ответ:

1111
``` text
1112 1113 1114 1115
┌─replicate(1, ['a', 'b', 'c'])─┐
│ [1,1,1]                       │
└───────────────────────────────┘
```
I
Ivan Blinkov 已提交
1116

1117
## filesystemAvailable {#filesystemavailable}
1118

A
alexey-milovidov 已提交
1119
Возвращает объём доступного для записи данных места на файловой системе. Он всегда меньше общего свободного места ([filesystemFree](#filesystemfree)), потому что некоторое пространство зарезервировано для нужд операционной системы.
1120 1121

**Синтаксис**
1122

1123
``` sql
1124 1125 1126 1127 1128
filesystemAvailable()
```

**Возвращаемое значение**

1129
-   Объём доступного для записи данных места в байтах.
1130

1131
Тип: [UInt64](../../sql-reference/functions/other-functions.md).
1132 1133 1134

**Пример**

1135 1136
Запрос:

1137
``` sql
S
Sergei Bocharov 已提交
1138
SELECT formatReadableSize(filesystemAvailable()) AS "Available space", toTypeName(filesystemAvailable()) AS "Type";
1139
```
1140 1141 1142

Ответ:

1143
``` text
1144
┌─Available space─┬─Type───┐
S
Sergei Bocharov 已提交
1145
│ 30.75 GiB       │ UInt64 │
1146 1147 1148 1149 1150
└─────────────────┴────────┘
```

## filesystemFree {#filesystemfree}

A
alexey-milovidov 已提交
1151
Возвращает объём свободного места на файловой системе. Смотрите также `filesystemAvailable`.
1152 1153 1154

**Синтаксис**

1155
``` sql
S
Sergei Bocharov 已提交
1156
filesystemFree()
1157 1158 1159 1160
```

**Возвращаемое значение**

1161
-   Объем свободного места в байтах.
1162

1163
Тип: [UInt64](../../sql-reference/functions/other-functions.md).
1164 1165 1166

**Пример**

1167 1168
Запрос:

1169
``` sql
S
Sergei Bocharov 已提交
1170
SELECT formatReadableSize(filesystemFree()) AS "Free space", toTypeName(filesystemFree()) AS "Type";
1171 1172
```

1173 1174
Ответ:

1175
``` text
S
Sergei Bocharov 已提交
1176 1177 1178
┌─Free space─┬─Type───┐
│ 32.39 GiB  │ UInt64 │
└────────────┴────────┘
1179 1180
```

1181 1182
## filesystemCapacity {#filesystemcapacity}

1183
Возвращает информацию о ёмкости файловой системы в байтах. Для оценки должен быть настроен [путь](../../sql-reference/functions/other-functions.md#server_configuration_parameters-path) к каталогу с данными.
1184 1185 1186

**Синтаксис**

1187
``` sql
S
Sergei Bocharov 已提交
1188
filesystemCapacity()
1189 1190
```

1191
**Возвращаемое значение**
1192

1193
-   Информация о ёмкости файловой системы в байтах.
1194

1195
Тип: [UInt64](../../sql-reference/functions/other-functions.md).
1196 1197 1198 1199 1200

**Пример**

Запрос:

1201
``` sql
S
Sergei Bocharov 已提交
1202
SELECT formatReadableSize(filesystemCapacity()) AS "Capacity", toTypeName(filesystemCapacity()) AS "Type"
1203 1204
```

1205
Ответ:
1206

1207
``` text
S
Sergei Bocharov 已提交
1208 1209 1210
┌─Capacity──┬─Type───┐
│ 39.32 GiB │ UInt64 │
└───────────┴────────┘
1211
```
1212 1213 1214

## finalizeAggregation {#function-finalizeaggregation}

N
Nikita Mikhaylov 已提交
1215
Принимает состояние агрегатной функции. Возвращает результат агрегирования (или конечное состояние при использовании комбинатора [-State](../../sql-reference/aggregate-functions/combinators.md#state)).
G
George 已提交
1216 1217 1218 1219 1220 1221 1222 1223 1224

**Синтаксис** 

``` sql
finalizeAggregation(state)
```

**Параметры**

G
George 已提交
1225
-   `state` — состояние агрегатной функции. [AggregateFunction](../../sql-reference/data-types/aggregatefunction.md#data-type-aggregatefunction).
G
George 已提交
1226 1227 1228 1229 1230

**Возвращаемые значения**

-   Значения, которые были агрегированы.

G
George 已提交
1231
Тип: соответствует типу агрегируемых значений.
G
George 已提交
1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262

**Примеры**

Запрос:

```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 │
└──────────────────────────────────┘
```

G
George 已提交
1263
Обратите внимание, что значения `NULL` игнорируются. 
G
George 已提交
1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312

Запрос:

```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)
1313

B
BayoNet 已提交
1314
## runningAccumulate {#runningaccumulate}
1315

B
BayoNet 已提交
1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330
Накапливает состояния агрегатной функции для каждой строки блока данных.

!!! 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), для которого определен оператор равенства.
1331

B
BayoNet 已提交
1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364
**Возвращаемое значение**

- Каждая результирующая строка содержит результат агрегатной функции, накопленный для всех входных строк от 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 │
└───┴─────┘
```

1365
Подзапрос формирует `sumState` для каждого числа от `0` до `9`. `sumState` возвращает состояние функции [sum](../../sql-reference/aggregate-functions/reference/sum.md#agg_function-sum), содержащее сумму одного числа.
B
BayoNet 已提交
1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417

Весь запрос делает следующее:

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` объединяет состояния для каждой группы строк отдельно.
1418

1419
## joinGet {#joinget}
1420

1421
Функция позволяет извлекать данные из таблицы таким же образом как из [словаря](../../sql-reference/functions/other-functions.md).
1422

1423
Получает данные из таблиц [Join](../../sql-reference/functions/other-functions.md#creating-a-table) по ключу.
1424

1425
Поддерживаются только таблицы, созданные с `ENGINE = Join(ANY, LEFT, <join_keys>)`.
1426

1427
**Синтаксис**
1428

1429
``` sql
1430 1431 1432
joinGet(join_storage_table_name, `value_column`, join_keys)
```

1433
**Параметры**
1434

1435 1436 1437
-   `join_storage_table_name`[идентификатор](../syntax.md#syntax-identifiers), который указывает, откуда производится выборка данных. Поиск по идентификатору осуществляется в базе данных по умолчанию (см. конфигурацию `default_database`). Чтобы переопределить базу данных по умолчанию, используйте команду `USE db_name`, или укажите базу данных и таблицу через разделитель `db_name.db_table`, см. пример.
-   `value_column` — столбец, из которого нужно произвести выборку данных.
-   `join_keys` — список ключей, по которым производится выборка данных.
1438 1439 1440 1441 1442

**Возвращаемое значение**

Возвращает значение по списку ключей.

A
Alexey Milovidov 已提交
1443
Если значения не существует в исходной таблице, вернется `0` или `null` в соответствии с настройками [join_use_nulls](../../operations/settings/settings.md#join_use_nulls).
1444

1445
Подробнее о настройке `join_use_nulls` в [операциях Join](../../sql-reference/functions/other-functions.md).
S
Sergei Bocharov 已提交
1446

1447 1448 1449 1450
**Пример**

Входная таблица:

1451
``` sql
S
Fixes  
Sergei Bocharov 已提交
1452
CREATE DATABASE db_test
S
Sergei Bocharov 已提交
1453
CREATE TABLE db_test.id_val(`id` UInt32, `val` UInt32) ENGINE = Join(ANY, LEFT, id) SETTINGS join_use_nulls = 1
S
Fixes  
Sergei Bocharov 已提交
1454
INSERT INTO db_test.id_val VALUES (1,11)(2,12)(4,13)
1455 1456
```

1457
``` text
1458 1459 1460 1461 1462 1463 1464 1465 1466
┌─id─┬─val─┐
│  4 │  13 │
│  2 │  12 │
│  1 │  11 │
└────┴─────┘
```

Запрос:

1467
``` sql
S
Sergei Bocharov 已提交
1468
SELECT joinGet(db_test.id_val,'val',toUInt32(number)) from numbers(4) SETTINGS join_use_nulls = 1
1469 1470 1471 1472
```

Результат:

1473
``` text
S
Fixes  
Sergei Bocharov 已提交
1474 1475 1476 1477 1478 1479
┌─joinGet(db_test.id_val, 'val', toUInt32(number))─┐
│                                                0 │
│                                               11 │
│                                               12 │
│                                                0 │
└──────────────────────────────────────────────────┘
1480
```
1481

A
Alexey Milovidov 已提交
1482
## modelEvaluate(model_name, …) {#function-modelevaluate}
1483

S
Sergei Shtykov 已提交
1484
Оценивает внешнюю модель.
1485

S
Sergei Shtykov 已提交
1486
Принимает на вход имя и аргументы модели. Возвращает Float64.
D
Denis Zhuravlev 已提交
1487

A
Alexey Milovidov 已提交
1488
## throwIf(x\[, custom_message\]) {#throwifx-custom-message}
D
Denis Zhuravlev 已提交
1489 1490

Бросает исключение, если аргумент не равен нулю.
A
Alexey Milovidov 已提交
1491
custom_message - необязательный параметр, константная строка, задает текст сообщения об ошибке.
D
Denis Zhuravlev 已提交
1492

1493
``` sql
D
Denis Zhuravlev 已提交
1494
SELECT throwIf(number = 3, 'Too many') FROM numbers(10);
1495
```
1496 1497

``` text
D
Denis Zhuravlev 已提交
1498 1499 1500
↙ 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.
```
D
Denis Zhuravlev 已提交
1501

S
Sergei Bocharov 已提交
1502 1503
## identity {#identity}

1504
Возвращает свой аргумент. Используется для отладки и тестирования, позволяет отменить использование индекса, и получить результат и производительность полного сканирования таблицы. Это работает, потому что оптимизатор запросов не может «заглянуть» внутрь функции `identity`.
D
Denis Zhuravlev 已提交
1505

D
Denis Zhuravlev 已提交
1506
**Синтаксис**
S
Sergei Bocharov 已提交
1507

1508
``` sql
A
alexey-milovidov 已提交
1509
identity(x)
S
Sergei Bocharov 已提交
1510 1511
```

D
Denis Zhuravlev 已提交
1512
**Пример**
S
Sergei Bocharov 已提交
1513

A
alexey-milovidov 已提交
1514
Query:
D
Denis Zhuravlev 已提交
1515

1516
``` sql
D
Denis Zhuravlev 已提交
1517
SELECT identity(42)
1518
```
D
Denis Zhuravlev 已提交
1519

D
Denis Zhuravlev 已提交
1520
Результат:
S
Sergei Bocharov 已提交
1521

1522
``` text
D
Denis Zhuravlev 已提交
1523 1524 1525 1526 1527
┌─identity(42)─┐
│           42 │
└──────────────┘
```

1528
## randomPrintableASCII {#randomascii}
S
Sergei Bocharov 已提交
1529

S
Sergei Shtykov 已提交
1530
Генерирует строку со случайным набором печатных символов [ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters).
S
Sergei Bocharov 已提交
1531

S
Sergei Shtykov 已提交
1532
**Синтаксис**
S
Sergei Bocharov 已提交
1533

1534
``` sql
1535
randomPrintableASCII(length)
S
Sergei Shtykov 已提交
1536 1537 1538 1539
```

**Параметры**

1540
-   `length` — Длина результирующей строки. Положительное целое число.
S
Sergei Shtykov 已提交
1541

1542
        Если передать `length < 0`, то поведение функции не определено.
S
Sergei Shtykov 已提交
1543 1544 1545

**Возвращаемое значение**

1546
-   Строка со случайным набором печатных символов [ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters).
S
Sergei Shtykov 已提交
1547

1548
Тип: [String](../../sql-reference/functions/other-functions.md)
S
Sergei Shtykov 已提交
1549 1550 1551

**Пример**

1552
``` sql
1553
SELECT number, randomPrintableASCII(30) as str, length(str) FROM system.numbers LIMIT 3
S
Sergei Shtykov 已提交
1554
```
1555 1556

``` text
1557 1558 1559 1560 1561
┌─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 │
└────────┴────────────────────────────────┴──────────────────────────────────┘
S
Sergei Shtykov 已提交
1562 1563
```

B
BayoNet 已提交
1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611
## 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)


B
BayoNet 已提交
1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648
## 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)                 │
└──────────┴───────────────────────────────────┘

```

1649 1650
## randomStringUTF8 {#randomstringutf8}

B
BayoNet 已提交
1651
Генерирует строку заданной длины со случайными символами в кодировке UTF-8.
1652 1653 1654 1655 1656 1657 1658 1659 1660

**Синтаксис**

``` sql
randomStringUTF8(length);
```

**Параметры**

S
Sergei Shtykov 已提交
1661
-   `length` — Длина итоговой строки в кодовых точках. [UInt64](../../sql-reference/data-types/int-uint.md).
1662 1663 1664

**Возвращаемое значение**

A
alexey-milovidov 已提交
1665
-   Случайная строка в кодировке UTF-8.
1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685

Тип: [String](../../sql-reference/data-types/string.md).

**Пример**

Запрос:

```sql 
SELECT randomStringUTF8(13)
```

Результат:

```text 
┌─randomStringUTF8(13)─┐
│ 𘤗𙉝д兠庇󡅴󱱎󦐪􂕌𔊹𓰛   │
└──────────────────────┘

```

1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720
## 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)

1721 1722
## isDecimalOverflow {#is-decimal-overflow}

1723
Проверяет, находится ли число [Decimal](../../sql-reference/data-types/decimal.md) вне собственной (или заданной) области значений.
1724 1725 1726 1727 1728 1729 1730 1731 1732

**Синтаксис**

``` sql
isDecimalOverflow(d, [p])
```

**Параметры** 

1733
-   `d` — число. [Decimal](../../sql-reference/data-types/decimal.md).
1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769
-   `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)
```

**Параметры** 

1770
-   `x`[целое](../../sql-reference/data-types/int-uint.md#uint8-uint16-uint32-uint64-int8-int16-int32-int64) или [дробное](../../sql-reference/data-types/decimal.md) число.
1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795

**Возвращаемое значение**

Количество цифр.

Тип: [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
```
1796

D
Daria Mozhaeva 已提交
1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816
## errorCodeToName {#error-code-to-name}

**Возвращаемое значение**

-   Название переменной для кода ошибки.

Тип: [LowCardinality(String)](../../sql-reference/data-types/lowcardinality.md).

**Синтаксис**

``` sql
errorCodeToName(1)
```

Результат:

``` text
UNSUPPORTED_METHOD
```

D
Dmitriy 已提交
1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836
## tcpPort {#tcpPort}

Вовращает номер TCP порта, который использует сервер для [нативного протокола](../../interfaces/tcp.md).

**Синтаксис**

``` sql
tcpPort()
```

**Параметры**

-   Нет.

**Возвращаемое значение**

-   Номер TCP порта.

Тип: [UInt16](../../sql-reference/data-types/int-uint.md).

D
Dmitriy 已提交
1837
**Пример**
D
Dmitriy 已提交
1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856

Запрос:

``` sql
SELECT tcpPort();
```

Результат:

``` text
┌─tcpPort()─┐
│      9000 │
└───────────┘
```

**Смотрите также**

-   [tcp_port](../../operations/server-configuration-parameters/settings.md#server_configuration_parameters-tcp_port)

I
Ivan Blinkov 已提交
1857
[Оригинальная статья](https://clickhouse.tech/docs/ru/query_language/functions/other_functions/) <!--hide-->