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

説明

State コンビネータは、 avg 関数に適用でき、AggregateFunction(avg, T) 型の中間状態を生成します。ここで、 T は平均値の計算対象として指定された型です。

使用例

この例では、AggregateFunction 型と avgState 関数を使用して、ウェブサイトのトラフィックデータを集計する方法を見ていきます。 まず、ウェブサイトトラフィックデータのソーステーブルを作成します:
平均レスポンスタイムを格納する集計テーブルを作成します。avg は複雑な state (合計値とカウント) を必要とするため、SimpleAggregateFunction 型は使用できません。 そのため、AggregateFunction 型を使用します。
新しいデータに対してinsertトリガーとして機能し、中間状態データを上記で定義したターゲットテーブルに保存するインクリメンタルmaterialized viewを作成します:
ソーステーブルに初期データを挿入して、ディスク上にパートを作成します:
さらにデータを挿入して、ディスク上に2つ目のパートを作成します:
ターゲットテーブル page_performance を確認します:
avg_response_time カラムの型が AggregateFunction(avg, UInt32) であり、中間状態の情報を保持していることに注目してください。また、avg_response_time の行データは意味のある形では表示されず、�, n, F, } のような不可解な文字が現れます。これは、ターミナルがバイナリデータをテキストとして表示しようとしているためです。AggregateFunction 型は、効率的なストレージと計算に最適化されたバイナリフォーマットで状態を保持しており、人間が直接読むことを想定した設計ではありません。このバイナリ状態には、平均値を算出するために必要なすべての情報が含まれています。 これを利用するには、Merge コンビネーターを使用します:
これで正しい平均値が表示されます:

関連項目

最終更新日 2026年7月2日