ClickHouse/docs/ja/sql_reference/functions/higher_order_functions.md
2020-04-04 12:15:31 +03:00

10 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true d734a8e46d 57 より高い次数

高階関数

-> 演算子、ラムダ(params,expr)関数

Allows describing a lambda function for passing to a higher-order function. The left side of the arrow has a formal parameter, which is any ID, or multiple formal parameters any IDs in a tuple. The right side of the arrow has an expression that can use these formal parameters, as well as any table columns.

例: x -> 2 * x, str -> str != Referer.

高階関数は、関数の引数としてラムダ関数のみを受け入れることができます。

複数の引数を受け入れるラムダ関数は、高階関数に渡すことができます。 この場合、高次関数は、これらの引数が対応する同一の長さのいくつかの配列を渡されます。

いくつかの機能については、 arrayCount または arraySum、最初の引数(ラムダ関数)を省略することができます。 この場合、同一のマッピングが想定されます。

以下の関数ではラムダ関数を省略することはできません:

arrayMap(func, arr1, …)

の元のアプリケーションから取得した配列を返します。 func の各要素への機能 arr 配列だ

例:

SELECT arrayMap(x -> (x + 2), [1, 2, 3]) as res;
┌─res─────┐
│ [3,4,5] │
└─────────┘

次の例は、異なる配列から要素のタプルを作成する方法を示しています:

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, …)

要素のみを含む配列を返します arr1 そのために func 0以外の値を返します。

例:

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

最初の引数(ラムダ関数)を省略することはできないことに注意してください。 arrayFilter 機能。

arrayFill(func, arr1, …)

スキャンスルー arr1 最初の要素から最後の要素まで arr1[i] によって arr1[i - 1] もし func 0を返します。 の最初の要素 arr1 交換されません。

例:

SELECT arrayFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5, 6, 14, null, null]) AS res
┌─res──────────────────────────────┐
│ [1,1,3,11,12,12,12,5,6,14,14,14] │
└──────────────────────────────────┘

最初の引数(ラムダ関数)を省略することはできないことに注意してください。 arrayFill 機能。

arrayReverseFill(func, arr1, …)

スキャンスルー arr1 最後の要素から最初の要素へと置き換えます arr1[i] によって arr1[i + 1] もし func 0を返します。 の最後の要素 arr1 交換されません。

例:

SELECT arrayReverseFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5, 6, 14, null, null]) AS res
┌─res────────────────────────────────┐
│ [1,3,3,11,12,5,5,5,6,14,NULL,NULL] │
└────────────────────────────────────┘

最初の引数(ラムダ関数)を省略することはできないことに注意してください。 arrayReverseFill 機能。

arraySplit(func, arr1, …)

分割 arr1 複数の配列に変換します とき func 0以外のものを返すと、配列は要素の左側で分割されます。 配列は最初の要素の前に分割されません。

例:

SELECT arraySplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res
┌─res─────────────┐
│ [[1,2,3],[4,5]] │
└─────────────────┘

最初の引数(ラムダ関数)を省略することはできないことに注意してください。 arraySplit 機能。

arrayReverseSplit(func, arr1, …)

分割 arr1 複数の配列に変換します とき func 0以外のものを返すと、配列は要素の右側で分割されます。 配列は最後の要素の後に分割されません。

例:

SELECT arrayReverseSplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res
┌─res───────────────┐
│ [[1],[2,3,4],[5]] │
└───────────────────┘

最初の引数(ラムダ関数)を省略することはできないことに注意してください。 arraySplit 機能。

arrayCount([func,] arr1, …)

Funcが0以外を返すarr配列内の要素の数を返します。 もし func 指定されていない場合は、配列内の非ゼロ要素の数を返します。

arrayExists([func,] arr1, …)

少なくとも1つの要素がある場合は1を返します arr そのために func 0以外の値を返します。 それ以外の場合は、0を返します。

arrayAll([func,] arr1, …)

場合は1を返します func すべての要素に対して0以外のものを返します arr. それ以外の場合は、0を返します。

arraySum([func,] arr1, …)

の合計を返します func 値。 関数が省略された場合、それだけで配列要素の合計を返します。

arrayFirst(func, arr1, …)

の最初の要素を返します arr1 そのための配列 func 0以外の値を返します。

最初の引数(ラムダ関数)を省略することはできないことに注意してください。 arrayFirst 機能。

arrayFirstIndex(func, arr1, …)

最初の要素のインデックスを返します arr1 そのための配列 func 0以外の値を返します。

最初の引数(ラムダ関数)を省略することはできないことに注意してください。 arrayFirstIndex 機能。

arrayCumSum([func,] arr1, …)

ソース配列内の要素の部分和の配列(実行中の合計)を返します。 この func 関数が指定されると、配列要素の値が合計される前にこの関数によって変換されます。

例えば:

SELECT arrayCumSum([1, 1, 1, 1]) AS res
┌─res──────────┐
│ [1, 2, 3, 4] │
└──────────────┘

ツ環板篠ョツ嘉ッツ偲青ツエツδツ-ツアツイツ-ツエツス)

と同じ arrayCumSum,ソース配列の要素の部分和の配列を返します(実行中の合計). 異なる arrayCumSum、その後、戻り値がゼロ未満の値が含まれている場合、値がゼロで置き換えられ、その後の計算は、ゼロのパラメータで実行されます。 例えば:

SELECT arrayCumSumNonNegative([1, 1, -4, 1]) AS res
┌─res───────┐
│ [1,2,0,1] │
└───────────┘

arraySort([func,] arr1, …)

の要素をソートした結果として配列を返します arr1 昇順で。 この func 関数が指定され、ソート順序は関数の結果によって決定されます func 配列(配列)の要素に適用されます)

その シュワルツ語変換 分類の効率を改善するのに使用されています。

例えば:

SELECT arraySort((x, y) -> y, ['hello', 'world'], [2, 1]);
┌─res────────────────┐
│ ['world', 'hello'] │
└────────────────────┘

の詳細については、 arraySort 方法は、を参照してください 配列を操作するための関数 セクション。

arrayReverseSort([func,] arr1, …)

の要素をソートした結果として配列を返します arr1 降順で。 この func 関数が指定され、ソート順序は関数の結果によって決定されます func 配列(配列)の要素に適用されます。

例えば:

SELECT arrayReverseSort((x, y) -> y, ['hello', 'world'], [2, 1]) as res;
┌─res───────────────┐
│ ['hello','world'] │
└───────────────────┘

の詳細については、 arrayReverseSort 方法は、を参照してください 配列を操作するための関数 セクション。

元の記事