Merge pull request #5550 from ogorbacheva/DOCAPI-3951-lambda

Doc fix: small fix in lambda
This commit is contained in:
alexey-milovidov 2019-06-14 09:22:12 +03:00 committed by GitHub
commit 864e1370b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 115 additions and 62 deletions

View File

@ -21,7 +21,7 @@ The following actions are supported:
- [COMMENT COLUMN](#alter_comment-column) — Adds a text comment to the column.
- [MODIFY COLUMN](#alter_modify-column) — Changes column's type and/or default expression.
Detailed description of these actions is shown below.
These actions are described in detail below.
#### ADD COLUMN {#alter_add-column}
@ -127,7 +127,7 @@ The `ALTER` query for changing columns is replicated. The instructions are saved
The `ALTER` query lets you create and delete separate elements (columns) in nested data structures, but not whole nested data structures. To add a nested data structure, you can add columns with a name like `name.nested_name` and the type `Array(T)`. A nested data structure is equivalent to multiple array columns with a name that has the same prefix before the dot.
There is no support for deleting columns in the primary key or the sampling key (columns that are used in the `ENGINE` expression). Changing the type for columns that are included in the primary key is only possible if this change does not cause the data to be modified (for example, it is allowed to add values to an Enum or to change a type from `DateTime` to `UInt32`).
There is no support for deleting columns in the primary key or the sampling key (columns that are used in the `ENGINE` expression). Changing the type for columns that are included in the primary key is only possible if this change does not cause the data to be modified (for example, you are allowed to add values to an Enum or to change a type from `DateTime` to `UInt32`).
If the `ALTER` query is not sufficient to make the table changes you need, you can create a new table, copy the data to it using the [INSERT SELECT](insert_into.md#insert_query_insert-select) query, then switch the tables using the [RENAME](misc.md#misc_operations-rename) query and delete the old table. You can use the [clickhouse-copier](../operations/utils/clickhouse-copier.md) as an alternative to the `INSERT SELECT` query.

View File

@ -10,15 +10,43 @@ Higher-order functions can only accept lambda functions as their functional argu
A lambda function that accepts multiple arguments can be passed to a higher-order function. In this case, the higher-order function is passed several arrays of identical length that these arguments will correspond to.
For all functions other than 'arrayMap' and 'arrayFilter', the first argument (the lambda function) can be omitted. In this case, identical mapping is assumed.
For some functions, such as [arrayCount](#higher_order_functions-array-count) or [arraySum](#higher_order_functions-array-count), the first argument (the lambda function) can be omitted. In this case, identical mapping is assumed.
### arrayMap(func, arr1, ...)
A lambda function can't be omitted for the following functions:
Returns an array obtained from the original application of the 'func' function to each element in the 'arr' array.
- [arrayMap](#higher_order_functions-array-map)
- [arrayFilter](#higher_order_functions-array-filter)
- [arrayFirst](#higher_order_functions-array-first)
- [arrayFirstIndex](#higher_order_functions-array-first-index)
### arrayFilter(func, arr1, ...)
### arrayMap(func, arr1, ...) {#higher_order_functions-array-map}
Returns an array containing only the elements in 'arr1' for which 'func' returns something other than 0.
Returns an array obtained from the original application of the `func` function to each element in the `arr` array.
Examples:
``` sql
SELECT arrayMap(x -> (x + 2), [1, 2, 3]) as res;
┌─res─────┐
│ [3,4,5] │
└─────────┘
```
The following example shows how to create a tuple of elements from different arrays:
``` sql
SELECT arrayMap((x, y) -> (x, y), [1, 2, 3], [4, 5, 6]) AS res
┌─res─────────────────┐
│ [(1,4),(2,5),(3,6)] │
└─────────────────────┘
```
Note that the first argument (lambda function) can't be omitted in the `arrayMap` function.
### arrayFilter(func, arr1, ...) {#higher_order_functions-array-filter}
Returns an array containing only the elements in `arr1` for which `func` returns something other than 0.
Examples:
@ -47,7 +75,9 @@ SELECT
└─────┘
```
### arrayCount(\[func,\] arr1, ...)
Note that the first argument (lambda function) can't be omitted in the `arrayFilter` function.
### arrayCount(\[func,\] arr1, ...) {#higher_order_functions-array-count}
Returns the number of elements in the arr array for which func returns something other than 0. If 'func' is not specified, it returns the number of non-zero elements in the array.
@ -59,18 +89,22 @@ Returns 1 if there is at least one element in 'arr' for which 'func' returns som
Returns 1 if 'func' returns something other than 0 for all the elements in 'arr'. Otherwise, it returns 0.
### arraySum(\[func,\] arr1, ...)
### arraySum(\[func,\] arr1, ...) {#higher_order_functions-array-sum}
Returns the sum of the 'func' values. If the function is omitted, it just returns the sum of the array elements.
### arrayFirst(func, arr1, ...)
### arrayFirst(func, arr1, ...) {#higher_order_functions-array-first}
Returns the first element in the 'arr1' array for which 'func' returns something other than 0.
### arrayFirstIndex(func, arr1, ...)
Note that the first argument (lambda function) can't be omitted in the `arrayFirst` function.
### arrayFirstIndex(func, arr1, ...) {#higher_order_functions-array-first-index}
Returns the index of the first element in the 'arr1' array for which 'func' returns something other than 0.
Note that the first argument (lambda function) can't be omitted in the `arrayFirstIndex` function.
### arrayCumSum(\[func,\] arr1, ...)
Returns an array of partial sums of elements in the source array (a running sum). If the `func` function is specified, then the values of the array elements are converted by this function before summing.
@ -89,7 +123,7 @@ SELECT arrayCumSum([1, 1, 1, 1]) AS res
### arrayCumSumNonNegative(arr)
Same as arrayCumSum, returns an array of partial sums of elements in the source array (a running sum). Different arrayCumSum, when then returned value contains a value less than zero, the value is replace with zero and the subsequent calculation is performed with zero parameters. For example:
Same as `arrayCumSum`, returns an array of partial sums of elements in the source array (a running sum). Different `arrayCumSum`, when then returned value contains a value less than zero, the value is replace with zero and the subsequent calculation is performed with zero parameters. For example:
``` sql
SELECT arrayCumSumNonNegative([1, 1, -4, 1]) AS res
@ -119,33 +153,23 @@ SELECT arraySort((x, y) -> y, ['hello', 'world'], [2, 1]);
└────────────────────┘
```
Note that NULLs and NaNs go last (NaNs go before NULLs). For example:
``` sql
SELECT arraySort([1, nan, 2, NULL, 3, nan, 4, NULL])
```
```
┌─arraySort([1, nan, 2, NULL, 3, nan, 4, NULL])─┐
│ [1,2,3,4,nan,nan,NULL,NULL] │
└───────────────────────────────────────────────┘
```
For more information about the `arraySort` method, see the [Functions for Working With Arrays](array_functions.md#array_functions-sort) section.
### arrayReverseSort(\[func,\] arr1, ...)
Returns an array as result of sorting the elements of `arr1` in descending order. If the `func` function is specified, sorting order is determined by the result of the function `func` applied to the elements of array (arrays)
Returns an array as result of sorting the elements of `arr1` in descending order. If the `func` function is specified, sorting order is determined by the result of the function `func` applied to the elements of array (arrays).
Example:
Note that NULLs and NaNs go last (NaNs go before NULLs). For example:
``` sql
SELECT arrayReverseSort([1, nan, 2, NULL, 3, nan, 4, NULL])
SELECT arrayReverseSort((x, y) -> y, ['hello', 'world'], [2, 1]) as res;
```
```
┌─arrayReverseSort([1, nan, 2, NULL, 3, nan, 4, NULL])─┐
│ [4,3,2,1,nan,nan,NULL,NULL]
└──────────────────────────────────────────────────────
``` sql
┌─res───────────────┐
│ ['hello','world']
└───────────────────┘
```
For more information about the `arrayReverseSort` method, see the [Functions for Working With Arrays](array_functions.md#array_functions-reverse-sort) section.
[Original article](https://clickhouse.yandex/docs/en/query_language/functions/higher_order_functions/) <!--hide-->

View File

@ -10,13 +10,44 @@
В функции высшего порядка может быть передана лямбда-функция, принимающая несколько аргументов. В этом случае, в функцию высшего порядка передаётся несколько массивов одинаковых длин, которым эти аргументы будут соответствовать.
Для всех функций кроме arrayMap, arrayFilter, первый аргумент (лямбда-функция) может отсутствовать. В этом случае, подразумевается тождественное отображение.
Для некоторых функций, например [arrayCount](#higher_order_functions-array-count) или [arraySum](#higher_order_functions-array-count), первый аргумент (лямбда-функция) может отсутствовать. В этом случае, подразумевается тождественное отображение.
### arrayMap(func, arr1, ...)
Вернуть массив, полученный из исходного применением функции func к каждому элементу массива arr.
Для функций, перечисленных ниже, лямбда-функцию должна быть указана всегда:
### arrayFilter(func, arr1, ...)
Вернуть массив, содержащий только те элементы массива arr1, для которых функция func возвращает не 0.
- [arrayMap](#higher_order_functions-array-map)
- [arrayFilter](#higher_order_functions-array-filter)
- [arrayFirst](#higher_order_functions-array-first)
- [arrayFirstIndex](#higher_order_functions-array-first-index)
### arrayMap(func, arr1, ...) {#higher_order_functions-array-count}
Вернуть массив, полученный на основе результатов применения функции `func` к каждому элементу массива `arr`.
Примеры:
``` sql
SELECT arrayMap(x -> (x + 2), [1, 2, 3]) as res;
┌─res─────┐
│ [3,4,5] │
└─────────┘
```
Следующий пример показывает, как создать кортежи из элементов разных массивов:
``` sql
SELECT arrayMap((x, y) -> (x, y), [1, 2, 3], [4, 5, 6]) AS res
┌─res─────────────────┐
│ [(1,4),(2,5),(3,6)] │
└─────────────────────┘
```
Обратите внимание, что у функции `arrayMap` первый аргумент (лямбда-функция) не может быть опущен.
### arrayFilter(func, arr1, ...) {#higher_order_functions-array-filter}
Вернуть массив, содержащий только те элементы массива `arr1`, для которых функция `func` возвращает не 0.
Примеры:
@ -45,24 +76,30 @@ SELECT
└─────┘
```
Обратите внимание, что у функции `arrayFilter` первый аргумент (лямбда-функция) не может быть опущен.
### arrayCount(\[func,\] arr1, ...)
Вернуть количество элементов массива arr, для которых функция func возвращает не 0. Если func не указана - вернуть количество ненулевых элементов массива.
Вернуть количество элементов массива `arr`, для которых функция func возвращает не 0. Если func не указана - вернуть количество ненулевых элементов массива.
### arrayExists(\[func,\] arr1, ...)
Вернуть 1, если существует хотя бы один элемент массива arr, для которого функция func возвращает не 0. Иначе вернуть 0.
Вернуть 1, если существует хотя бы один элемент массива `arr`, для которого функция func возвращает не 0. Иначе вернуть 0.
### arrayAll(\[func,\] arr1, ...)
Вернуть 1, если для всех элементов массива arr, функция func возвращает не 0. Иначе вернуть 0.
Вернуть 1, если для всех элементов массива `arr`, функция `func` возвращает не 0. Иначе вернуть 0.
### arraySum(\[func,\] arr1, ...)
Вернуть сумму значений функции func. Если функция не указана - просто вернуть сумму элементов массива.
Вернуть сумму значений функции `func`. Если функция не указана - просто вернуть сумму элементов массива.
### arrayFirst(func, arr1, ...)
Вернуть первый элемент массива arr1, для которого функция func возвращает не 0.
### arrayFirst(func, arr1, ...) {#higher_order_functions-array-first}
Вернуть первый элемент массива `arr1`, для которого функция func возвращает не 0.
### arrayFirstIndex(func, arr1, ...)
Обратите внимание, что у функции `arrayFirst` первый аргумент (лямбда-функция) не может быть опущен.
Вернуть индекс первого элемента массива arr1, для которого функция func возвращает не 0.
### arrayFirstIndex(func, arr1, ...) {#higher_order_functions-array-first-index}
Вернуть индекс первого элемента массива `arr1`, для которого функция func возвращает не 0.
Обратите внимание, что у функции `arrayFirstFilter` первый аргумент (лямбда-функция) не может быть опущен.
### arrayCumSum(\[func,\] arr1, ...)
@ -99,31 +136,23 @@ SELECT arraySort((x, y) -> y, ['hello', 'world'], [2, 1]);
└────────────────────┘
```
`NULL` и `NaN` будут последними в массиве (при этом `NaN` будет перед `NULL`). Например:
``` sql
SELECT arraySort([1, nan, 2, NULL, 3, nan, 4, NULL])
```
```
┌─arraySort([1, nan, 2, NULL, 3, nan, 4, NULL])─┐
│ [1,2,3,4,nan,nan,NULL,NULL] │
└───────────────────────────────────────────────┘
```
Подробная информация о методе `arraySort` приведена в разделе [Функции по работе с массивами](array_functions.md#array_functions-sort).
### arrayReverseSort(\[func,\] arr1, ...)
Возвращает отсортированный в нисходящем порядке массив `arr1`. Если задана функция `func`, то порядок сортировки определяется результатом применения функции `func` на элементы массива (массивов).
`NULL` и `NaN` будут последними в массиве (при этом `NaN` будет перед `NULL`). Например:
Пример:
``` sql
SELECT arrayReverseSort([1, nan, 2, NULL, 3, nan, 4, NULL])
SELECT arrayReverseSort((x, y) -> y, ['hello', 'world'], [2, 1]) as res;
```
```
┌─arrayReverseSort([1, nan, 2, NULL, 3, nan, 4, NULL])─┐
│ [4,3,2,1,nan,nan,NULL,NULL]
└──────────────────────────────────────────────────────
``` sql
┌─res───────────────┐
│ ['hello','world']
└───────────────────┘
```
Подробная информация о методе `arrayReverseSort` приведена в разделе [Функции по работе с массивами](array_functions.md#array_functions-reverse-sort).
[Оригинальная статья](https://clickhouse.yandex/docs/ru/query_language/functions/higher_order_functions/) <!--hide-->