メインコンテンツへスキップ
メインコンテンツへスキップ

SimpleAggregateFunction 型

説明

SimpleAggregateFunction データ型は、AggregateFunction 型が保持するような集約関数の完全な状態ではなく、集約関数の中間状態のみを格納します。

この最適化は、次の性質を満たす関数に適用できます。

行集合 S1 UNION ALL S2 に関数 f を適用した結果が、行集合の各部分に個別に f を適用し、その結果に対して再度 f を適用することで得られる場合: f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2))

この性質により、結合された集約結果を計算するには部分集約結果だけで十分であり、余分なデータを保存および処理する必要がないことが保証されます。たとえば、minmax 関数の結果は、中間ステップから最終結果を計算するために追加の処理を必要としません。一方、avg 関数では、最終的に中間状態を結合する Merge ステップで平均値を求めるために、合計値と件数を保持しておく必要があります。これら 2 つを割り算することで平均値を求めます。

集約関数の値は通常、関数名に -SimpleState コンビネータを付与した集約関数を呼び出すことで生成されます。

構文

SimpleAggregateFunction(aggregate_function_name, types_of_arguments...)

パラメータ

  • aggregate_function_name - 集約関数の名前。
  • Type - 集約関数の引数の型。

サポートされている関数

次の集約関数がサポートされています。

注記

SimpleAggregateFunction(func, Type) の値は、すべて同じ Type を持ちます。
そのため、AggregateFunction 型とは異なり、-Merge / -State コンビネータを適用する必要はありません。

SimpleAggregateFunction 型は、同じ集約関数に対して AggregateFunction 型よりも高いパフォーマンスを発揮します。

CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;

関連コンテンツ