メインコンテンツまでスキップ
メインコンテンツまでスキップ

AggregateFunction Type

説明

ClickHouseのすべての Aggregate functions は、特定の実装に基づいた中間状態を持ち、これをシリアル化して AggregateFunction データ型としてテーブルに保存できます。通常、これは materialized view を通じて行われます。

AggregateFunction 型と一般的に使用される2つの集約関数 combinators があります:

  • -State 集約関数コンビネーターは、集約関数名に追加されると、AggregateFunction の中間状態を生成します。
  • -Merge 集約関数コンビネーターは、中間状態から集約の最終結果を得るために使用されます。

構文

AggregateFunction(aggregate_function_name, types_of_arguments...)

パラメータ

  • aggregate_function_name - 集約関数の名前。関数がパラメトリックの場合、そのパラメータも指定する必要があります。
  • types_of_arguments - 集約関数引数の型。

例えば:

CREATE TABLE t
(
    column1 AggregateFunction(uniq, UInt64),
    column2 AggregateFunction(anyIf, String, UInt8),
    column3 AggregateFunction(quantiles(0.5, 0.9), UInt64)
) ENGINE = ...

使用法

データ挿入

AggregateFunction 型のカラムを持つテーブルにデータを挿入するには、集約関数と -State 集約関数コンビネーターを使用して INSERT SELECT を利用できます。

例えば、AggregateFunction(uniq, UInt64) および AggregateFunction(quantiles(0.5, 0.9), UInt64) 型のカラムに挿入するには、次の集約関数とコンビネーターを使用します。

uniqState(UserID)
quantilesState(0.5, 0.9)(SendTiming)

関数 uniqquantiles と対照的に、uniqState および quantilesState-State コンビネーターが追加されたもの)は、最終値ではなく状態を返します。言い換えれば、これらは AggregateFunction 型の値を返します。

SELECT クエリの結果では、AggregateFunction 型の値は、すべての ClickHouse 出力形式に対して実装固有のバイナリ表現を持っています。

例えば、TabSeparated 形式にデータをダンプする際、SELECT クエリを使用してダンプした後、このダンプは INSERT クエリを使って再読み込みできます。

データ選択

AggregatingMergeTree テーブルからデータを選択する場合、GROUP BY 句を使用し、データを挿入した際と同じ集約関数を使用しますが、-Merge コンビネーターを使用します。

-Merge コンビネーターが追加された集約関数は、中間状態のセットを取得し、それらを結合して完全なデータ集約の結果を返します。

例えば、次の2つのクエリは同じ結果を返します:

SELECT uniq(UserID) FROM table

SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP BY RegionID)

使用例

AggregatingMergeTree エンジンの説明を参照してください。