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

説明

ClickHouse のすべての Aggregate functions には、 実装固有の中間状態があり、これをシリアライズして 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) 型のカラムに挿入する場合は、次の コンビネータ付き集約関数を使用します。
関数 uniqquantiles とは対照的に、uniqStatequantilesState (-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 つのクエリは同じ結果を返します。

使用例

AggregatingMergeTree エンジンの説明をご覧ください。
最終更新日 2026年6月19日