mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-26 01:22:04 +00:00
Adding documentation
This commit is contained in:
parent
160d4a756e
commit
923e9c644e
@ -1213,6 +1213,62 @@ SELECT arrayFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5, 6, 14,
|
|||||||
|
|
||||||
Note that the `arrayFill` is a [higher-order function](../../sql-reference/functions/index.md#higher-order-functions). You must pass a lambda function to it as the first argument, and it can’t be omitted.
|
Note that the `arrayFill` is a [higher-order function](../../sql-reference/functions/index.md#higher-order-functions). You must pass a lambda function to it as the first argument, and it can’t be omitted.
|
||||||
|
|
||||||
|
## arrayFold(func, arr1, …, init) {#array-fold}
|
||||||
|
|
||||||
|
Returns an result of [folding](https://en.wikipedia.org/wiki/Fold_(higher-order_function)) arrays and value `init` using function `func`.
|
||||||
|
I.e. result of calculation `func(arr1[n], …, func(arr1[n - 1], …, func(…, func(arr1[2], …, func(arr1[1], …, init)))))`.
|
||||||
|
|
||||||
|
Note that the `arrayMap` is a [higher-order function](../../sql-reference/functions/index.md#higher-order-functions). You must pass a lambda function to it as the first argument, and it can’t be omitted.
|
||||||
|
|
||||||
|
**Arguments**
|
||||||
|
|
||||||
|
- `func` — The lambda function with `n+1` arguments (where `n` is number of input arrays), first `n` arguments are for
|
||||||
|
current elements of input arrays, and last argument is for current value of accumulator.
|
||||||
|
- `arr` — Any number of [arrays](../../sql-reference/data-types/array.md).
|
||||||
|
- `init` - Initial value of accumulator.
|
||||||
|
|
||||||
|
**Returned value**
|
||||||
|
|
||||||
|
Final value of accumulator.
|
||||||
|
|
||||||
|
**Examples**
|
||||||
|
|
||||||
|
The following example shows how to acquire product and sum of elements of array:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT arrayMap(x, accum -> (accum.1 * x, accum.2 + x), [1, 2, 3], (0, 1)) as res;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─res───────┐
|
||||||
|
│ (120, 15) │
|
||||||
|
└───────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
The following example shows how to reverse elements of array:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT arrayFold(x, acc -> arrayPushFront(acc, x), [1,2,3,4,5], emptyArrayUInt64()) as res;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─res─────────┐
|
||||||
|
│ [5,4,3,2,1] │
|
||||||
|
└─────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Folding may be used to access of already passed elements due to function calculation, for example:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT arrayFold(x, acc -> (x, concat(acc.2, toString(acc.1), ',')), [1,2], (0,''))
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─res────────┐
|
||||||
|
│ (2,'0,1,') │
|
||||||
|
└────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
## arrayReverseFill(func, arr1, …) {#array-reverse-fill}
|
## arrayReverseFill(func, arr1, …) {#array-reverse-fill}
|
||||||
|
|
||||||
Scan through `arr1` from the last element to the first element and replace `arr1[i]` by `arr1[i + 1]` if `func` returns 0. The last element of `arr1` will not be replaced.
|
Scan through `arr1` from the last element to the first element and replace `arr1[i]` by `arr1[i + 1]` if `func` returns 0. The last element of `arr1` will not be replaced.
|
||||||
|
@ -1147,6 +1147,62 @@ SELECT arrayReverseFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5,
|
|||||||
|
|
||||||
Функция `arrayReverseFill` является [функцией высшего порядка](../../sql-reference/functions/index.md#higher-order-functions) — в качестве первого аргумента ей нужно передать лямбда-функцию, и этот аргумент не может быть опущен.
|
Функция `arrayReverseFill` является [функцией высшего порядка](../../sql-reference/functions/index.md#higher-order-functions) — в качестве первого аргумента ей нужно передать лямбда-функцию, и этот аргумент не может быть опущен.
|
||||||
|
|
||||||
|
## arrayFold(func, arr1, …, init) {#array-fold}
|
||||||
|
|
||||||
|
Возвращает результат [сворачивания](https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%91%D1%80%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0) массивов и начального значения `init` с помощью функции `func`.
|
||||||
|
Т.е. результат вычисления `func(arr1[n], …, func(arr1[n - 1], …, func(…, func(arr1[2], …, func(arr1[1], …, init)))))`.
|
||||||
|
|
||||||
|
Функция `arrayFold` является [функцией высшего порядка](../../sql-reference/functions/index.md#higher-order-functions) — в качестве первого аргумента ей нужно передать лямбда-функцию, и этот аргумент не может быть опущен.
|
||||||
|
|
||||||
|
**Аргументы**
|
||||||
|
|
||||||
|
- `func` — лямбда-функция с `n+1` параметром (где `n` это количество входных массивов), причём первые `n` параметров
|
||||||
|
используются для текущих элементов входных массивов, а последний элемент для текущего значения аккумулятора.
|
||||||
|
- `arr` — произвольное количество [массивов](../../sql-reference/data-types/array.md).
|
||||||
|
- `init` - начальное значение аккумулятора.
|
||||||
|
|
||||||
|
**Возвращаемое значение**
|
||||||
|
|
||||||
|
Итоговое значение аккумулятора.
|
||||||
|
|
||||||
|
**Примеры**
|
||||||
|
|
||||||
|
Следующий пример показывает, как вычислить произведение и сумму элементов массива:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT arrayMap(x, accum -> (accum.1 * x, accum.2 + x), [1, 2, 3], (0, 1)) as res;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─res───────┐
|
||||||
|
│ (120, 15) │
|
||||||
|
└───────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
В этом примере показано, как обратить массив:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT arrayFold(x, acc -> arrayPushFront(acc, x), [1,2,3,4,5], emptyArrayUInt64()) as res;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─res─────────┐
|
||||||
|
│ [5,4,3,2,1] │
|
||||||
|
└─────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Свёртка может быть использована для доступа к уже пройденным в процессе вычисления элементам. Например:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT arrayFold(x, acc -> (x, concat(acc.2, toString(acc.1), ',')), [1,2], (0,''))
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─res────────┐
|
||||||
|
│ (2,'0,1,') │
|
||||||
|
└────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
## arraySplit(func, arr1, …) {#array-split}
|
## arraySplit(func, arr1, …) {#array-split}
|
||||||
|
|
||||||
Разделяет массив `arr1` на несколько. Если `func` возвращает не 0, то массив разделяется, а элемент помещается в левую часть. Массив не разбивается по первому элементу.
|
Разделяет массив `arr1` на несколько. Если `func` возвращает не 0, то массив разделяется, а элемент помещается в левую часть. Массив не разбивается по первому элементу.
|
||||||
@ -1183,6 +1239,7 @@ SELECT arrayReverseSplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res
|
|||||||
|
|
||||||
Функция `arrayReverseSplit` является [функцией высшего порядка](../../sql-reference/functions/index.md#higher-order-functions) — в качестве первого аргумента ей нужно передать лямбда-функцию, и этот аргумент не может быть опущен.
|
Функция `arrayReverseSplit` является [функцией высшего порядка](../../sql-reference/functions/index.md#higher-order-functions) — в качестве первого аргумента ей нужно передать лямбда-функцию, и этот аргумент не может быть опущен.
|
||||||
|
|
||||||
|
|
||||||
## arrayExists(\[func,\] arr1, …) {#arrayexistsfunc-arr1}
|
## arrayExists(\[func,\] arr1, …) {#arrayexistsfunc-arr1}
|
||||||
|
|
||||||
Возвращает 1, если существует хотя бы один элемент массива `arr`, для которого функция func возвращает не 0. Иначе возвращает 0.
|
Возвращает 1, если существует хотя бы один элемент массива `arr`, для которого функция func возвращает не 0. Иначе возвращает 0.
|
||||||
|
Loading…
Reference in New Issue
Block a user