-If
sumIf(column, cond), countIf(cond), avgIf(x, cond), quantilesTimingIf(level1, level2)(x, cond), argMinIf(arg, val, cond) などです。
条件付き集約関数を使うと、サブクエリや JOIN を使わずに、複数の条件に対する集約を一度に計算できます。たとえば、条件付き集約関数はセグメント比較機能の実装に使用できます。
-Array
sumArray(arr) - すべての ‘arr’ 配列の全要素を合計します。この例は、sum(arraySum(arr)) とよりシンプルに書くこともできます。
例 2: uniqArray(arr) – すべての ‘arr’ 配列に含まれる重複しない要素数を数えます。これは uniq(arrayJoin(arr)) とすればより簡単に実現できますが、クエリに ‘arrayJoin’ を追加できるとは限りません。
-If と -Array は組み合わせて使用できます。ただし、‘Array’ を先に、その後に ‘If’ を付ける必要があります。例: uniqArrayIf(arr, cond), quantilesTimingArrayIf(level1, level2)(arr, cond)。この順序では、‘cond’ 引数は配列になりません。
-Map
-SimpleState
x— 集約関数のパラメータ。
SimpleAggregateFunction(...) 型の集約関数の値。
例
Query
Response
-State
uniq の場合、これは一意な値の数を計算するための hash table です) 。これは AggregateFunction(...) で、後続の処理に使用したり、あとで aggregation を完了できるように table に保存したりできます。
-MapState は、同じデータに対しても不変ではない点に注意してください。これは、中間 state 内のデータの順序が変わる可能性があるためです。ただし、このデータのインジェストには影響しません。
- AggregatingMergeTree table engine。
- finalizeAggregation 関数。
- runningAccumulate 関数。
- -Merge コンビネータ。
- -MergeState コンビネータ。
-Merge
-MergeState
-ForEach
[1, 2]、[3, 4, 5]、[6, 7] に対する sumForEach は、対応する配列要素同士を加算した結果として [10, 13, 5] を返します。
-Distinct
sum(DISTINCT x) (または sumDistinct(x)) 、groupArray(DISTINCT x) (または groupArrayDistinct(x)) 、corrStable(DISTINCT x, y) (または corrStableDistinct(x, y)) などです。
-OrDefault
-OrDefault はほかのコンビネータと併用できます。
構文
x— 集約関数のパラメータです。
Query
Response
-OrDefault は他の コンビネータ と組み合わせて使うこともできます。これは、集約関数が空の入力を受け付けない場合に便利です。
Query
Response
-OrNull
-OrNull は他のコンビネータと組み合わせて使用できます。
構文
x— 集約関数のパラメータ。
Nullableデータ型に変換された集約関数の結果。- 集約する値がない場合は
NULL。
Nullable(aggregate function return type)。
例
集約関数の末尾に -orNull を追加します。
Query
Response
-OrNull はほかの コンビネータ と組み合わせて使用することもできます。これは、aggregate function が空の入力を受け付けない場合に便利です。
Query
Response
-Resample
start—resampling_keyの値に対して必要な全インターバルの開始値。stop—resampling_keyの値に対して必要な全インターバルの終了値。全インターバルにはstopの値は含まれません[start, stop)。step— 全インターバルを部分インターバルに分割する際のステップ。aggFunctionは各部分インターバルに対して独立して実行されます。resampling_key— その値を使用してデータをインターバルに分割するカラム。aggFunction_params—aggFunctionのパラメーター。
- 各部分インターバルに対する
aggFunctionの結果の Array。
people テーブルについて考えます。
[30,60) と [60,75) の区間に入る年齢の人の名前を取得してみましょう。年齢は整数で表しているため、対象となる年齢は [30, 59] および [60,74] の区間になります。
名前を配列に集約するには、groupArray 集約関数を使用します。この関数は 1 つの引数を取ります。今回の場合は name カラムです。groupArrayResample 関数では、年齢ごとに名前を集約するために age カラムを使用する必要があります。必要な区間を定義するには、30, 75, 30 という引数を groupArrayResample 関数に渡します。
John は若すぎるため、サンプルには含まれません。ほかの人たちは、指定した年齢インターバルに応じて振り分けられます。
それでは、指定した年齢インターバルごとの総人数と平均賃金を求めてみましょう。
-ArgMin
sumArgMin(column, expr), countArgMin(expr), avgArgMin(x, expr) などです。