AggregatingMergeTree
エンジンは MergeTree から継承され、データパーツのマージロジックが変更されます。ClickHouseは、同じ主キーを持つすべての行(正確には、同じ ソートキー を持つ行)を、集約関数の状態の組み合わせを保存する単一の行(単一のデータパーツ内)に置き換えます。
AggregatingMergeTree
テーブルを使用して、インクリメンタルデータ集約を行うことができます。これには集約されたマテリアライズドビューも含まれます。
以下のビデオで、AggregatingMergeTree と Aggregate 関数の使用例を確認できます:
エンジンは、次のタイプのすべてのカラムを処理します:
AggregateFunction
SimpleAggregateFunction
行数がオーダーで削減される場合は、AggregatingMergeTree
を使用することが適切です。
テーブルの作成
リクエストパラメータの説明については、リクエストの説明 を参照してください。
クエリ句
AggregatingMergeTree
テーブルを作成する場合は、MergeTree
テーブルを作成する際と同様の 句 が必要です。
テーブルを作成するための非推奨メソッド
新しいプロジェクトでこのメソッドを使用せず、可能であれば古いプロジェクトを上記のメソッドに切り替えてください。
すべてのパラメータは MergeTree
のものと同じ意味を持ちます。
SELECT および INSERT
データを挿入するには、集約 -State- 関数を用いた INSERT SELECT クエリを使用します。AggregatingMergeTree
テーブルからデータを選択する際は、GROUP BY
句を使用し、データ挿入時と同じ集約関数を使用しますが、-Merge
サフィックスを使用します。
SELECT
クエリの結果では、AggregateFunction
型の値が、すべての ClickHouse 出力形式のために実装依存のバイナリ表現を持ちます。例えば、TabSeparated
形式にデータをダンプする場合、そのダンプは INSERT
クエリを使用して再ロードできます。
集約されたマテリアライズドビューの例
以下の例では、test
という名前のデータベースがあると想定していますので、存在しない場合は作成してください:
次に、生データを含むテーブル test.visits
を作成します:
次に、訪問の総数とユニークユーザー数を追跡する AggregationFunction
を保存する AggregatingMergeTree
テーブルを作成する必要があります。
test.visits
テーブルを監視し、AggregateFunction
型を使用する AggregatingMergeTree
マテリアライズドビューを作成します:
test.visits
から test.agg_visits
にデータを入力するマテリアライズドビューを作成します:
test.visits
テーブルにデータを挿入します:
データは test.visits
と test.agg_visits
の両方に挿入されます。
集約データを取得するには、マテリアライズドビュー test.visits_mv
から SELECT ... GROUP BY ...
のようなクエリを実行します:
test.visits
に別のレコードを追加しますが、今回は異なるタイムスタンプを使用してみてください:
再度 SELECT
クエリを実行すると、次の出力が返されます: