mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-01 20:12:02 +00:00
68 lines
3.9 KiB
ReStructuredText
68 lines
3.9 KiB
ReStructuredText
|
Функции высшего порядка
|
|||
|
-----------------------
|
|||
|
|
|||
|
Оператор ->, функция lambda(params, expr)
|
|||
|
~~~~~~~~~~~~~~
|
|||
|
Позволяет описать лямбда-функцию для передачи в функцию высшего порядка. Слева от стрелочки стоит формальный параметр - произвольный идентификатор, или несколько формальных параметров - произвольные идентификаторы в кортеже. Справа от стрелочки стоит выражение, в котором могут использоваться эти формальные параметры, а также любые столбцы таблицы.
|
|||
|
|
|||
|
Примеры: ``x -> 2 * x, str -> str != Referer.``
|
|||
|
|
|||
|
Функции высшего порядка, в качестве своего функционального аргумента могут принимать только лямбда-функции.
|
|||
|
|
|||
|
В функции высшего порядка может быть передана лямбда-функция, принимающая несколько аргументов. В этом случае, в функцию высшего порядка передаётся несколько массивов одинаковых длин, которым эти аргументы будут соответствовать.
|
|||
|
|
|||
|
Для всех функций кроме arrayMap, arrayFilter, первый аргумент (лямбда-функция) может отсутствовать. В этом случае, подразумевается тождественное отображение.
|
|||
|
|
|||
|
arrayMap(func, arr1, ...)
|
|||
|
~~~~~~~~~~~~
|
|||
|
Вернуть массив, полученный из исходного применением функции func к каждому элементу массива arr.
|
|||
|
|
|||
|
arrayFilter(func, arr1, ...)
|
|||
|
~~~~~~~~~~~~~
|
|||
|
Вернуть массив, содержащий только те элементы массива arr1, для которых функция func возвращает не 0.
|
|||
|
|
|||
|
Примеры:
|
|||
|
|
|||
|
.. code-block:: sql
|
|||
|
|
|||
|
SELECT arrayFilter(x -> x LIKE '%World%', ['Hello', 'abc World']) AS res
|
|||
|
|
|||
|
┌─res───────────┐
|
|||
|
│ ['abc World'] │
|
|||
|
└───────────────┘
|
|||
|
|
|||
|
SELECT
|
|||
|
arrayFilter(
|
|||
|
(i, x) -> x LIKE '%World%',
|
|||
|
arrayEnumerate(arr),
|
|||
|
['Hello', 'abc World'] AS arr)
|
|||
|
AS res
|
|||
|
|
|||
|
┌─res─┐
|
|||
|
│ [2] │
|
|||
|
└─────┘
|
|||
|
|
|||
|
arrayCount([func,] arr1, ...)
|
|||
|
~~~~~~~~~
|
|||
|
Вернуть количество элементов массива arr, для которых функция func возвращает не 0. Если func не указана - вернуть количество ненулевых элементов массива.
|
|||
|
|
|||
|
arrayExists([func,] arr1, ...)
|
|||
|
~~~~~~~~~~
|
|||
|
Вернуть 1, если существует хотя бы один элемент массива arr, для которого функция func возвращает не 0. Иначе вернуть 0.
|
|||
|
|
|||
|
arrayAll([func,] arr1, ...)
|
|||
|
~~~~~~~~~
|
|||
|
Вернуть 1, если для всех элементов массива arr, функция func возвращает не 0. Иначе вернуть 0.
|
|||
|
|
|||
|
arraySum([func,] arr1, ...)
|
|||
|
~~~~~~~~~~~
|
|||
|
Вернуть сумму значений функции func. Если функция не указана - просто вернуть сумму элементов массива.
|
|||
|
|
|||
|
arrayFirst(func, arr1, ...)
|
|||
|
~~~~~~~~~
|
|||
|
Вернуть первый элемент массива arr1, для которого функция func возвращает не 0.
|
|||
|
|
|||
|
arrayFirstIndex(func, arr1, ...)
|
|||
|
~~~~~~~
|
|||
|
Вернуть индекс первого элемента массива arr1, для которого функция func возвращает не 0.
|