説明
AggregateFunction データ型としてテーブルに保存できます。通常、これは
materialized view を使って行います。
AggregateFunction 型でよく使われる集約関数の 集約関数コンビネータ
は 2 つあります。
-State集約関数コンビネータ。これを集約 関数名の末尾に付けると、AggregateFunctionの中間状態を生成します。-Merge集約 関数コンビネータ。これは、中間状態から集約の最終結果を取得するために 使用されます。
構文
aggregate_function_name- 集約関数の名前。関数が パラメトリックな場合は、そのパラメータも指定する必要があります。types_of_arguments- 集約関数の引数の型。
使用
データの挿入
AggregateFunction 型のカラムを持つテーブルにデータを挿入するには、
集約関数と
-State 集約関数
コンビネータを用いた INSERT SELECT を使用できます。
たとえば、AggregateFunction(uniq, UInt64) 型および
AggregateFunction(quantiles(0.5, 0.9), UInt64) 型のカラムに挿入する場合は、次の
コンビネータ付き集約関数を使用します。
uniq と quantiles とは対照的に、uniqState と quantilesState
(-State コンビネータ を付加したもの) は、最終的な値ではなく状態を返します。
言い換えると、これらは AggregateFunction 型の値を返します。
SELECT クエリの結果では、AggregateFunction 型の値は、
ClickHouse のすべての出力フォーマットにおいて実装固有のバイナリ表現を持ちます。
入力値から状態を構築できる特別なセッションレベル設定 aggregate_function_input_format があります。
この設定は次のフォーマットをサポートします。
state- シリアライズされた状態を含む binary string (デフォルト) 。 たとえば、SELECTクエリでデータをTabSeparatedフォーマットにダンプした場合、その dump はINSERTクエリを使って再度読み込めます。value- このフォーマットでは、aggregate function の argument の単一の値、または複数の argument の場合はそれらの tuple を受け取ります。これがデシリアライズされ、対応する状態が構築されますarray- このフォーマットでは、上記の values オプションで説明したとおり、値の Array を受け取ります。Array のすべての要素が集計されて状態が構築されます
データの選択
AggregatingMergeTree テーブルからデータを選択する際は、GROUP BY 句と、
データの挿入時に使用したものと同じ集約関数を使いますが、
-Merge コンビネータを使用します。
集約関数に -Merge コンビネータを付加すると、複数の
state を受け取ってそれらを結合し、データ全体を集約した結果を返します。
たとえば、次の 2 つのクエリは同じ結果を返します。
使用例
- ブログ: ClickHouseでAggregate Combinatorを使う
- MergeState コンビネータ。
- State コンビネータ。