avgState
説明
State
コンビネータは、avg
関数に適用でき、AggregateFunction(avg, T)
型の中間状態を生成します。ここで T
は、平均のために指定された型です。
使用例
この例では、AggregateFunction
型をどのように使用し、avgState
関数と組み合わせてウェブサイトのトラフィックデータを集計するかを見ていきます。
まず、ウェブサイトのトラフィックデータのためのソーステーブルを作成します。
次に、平均応答時間を保存する集約テーブルを作成します。avg
は複雑な状態(合計とカウント)を必要とするため、SimpleAggregateFunction
型を使用できません。そのため、AggregateFunction
型を使用します。
新しいデータの挿入トリガーとして機能し、上記で定義されたターゲットテーブルに中間状態データを保存するインクリメンタルマテリアライズドビューを作成します。
ソーステーブルに初期データを挿入し、ディスク上にパーツを作成します。
ディスク上に2番目のパーツを作成するためにさらにデータを挿入します。
ターゲットテーブル page_performance
を確認します。
avg_response_time
カラムは AggregateFunction(avg, UInt32)
タイプであり、中間状態情報を保存していることに注意してください。また、avg_response_time
の行データは私たちにとって有用ではなく、�, n, F, }
などの奇妙な文字が表示されています。これは端末がバイナリデータをテキストとして表示しようとしたためです。この理由は、AggregateFunction
型が状態を効率的な保存と計算のために最適化されたバイナリ形式で保存し、人間が読めない形式であるためです。このバイナリ状態は平均を計算するために必要なすべての情報を含んでいます。
これを利用するには、Merge
コンビネータを使用します。
これで正しい平均が表示されます。