Aggregate table
集約テーブル
集約テーブルを使用するテーブルを作成するときには、ソートキーカラムとメトリックカラムを定義し、メトリックカラムに集計関数を指定することができます。もしロードするレコードが同じソートキーを持つ場合、メトリックカラムが集約されます。これにより、クエリの処理対象データ量を減らし、クエリを高速化することができます。
シナリオ
集約テーブルは、データの統計および分析に適したものです。以下にいくつかの例を示します。
- ウェブサイトやアプリプロバイダーが、特定のウェブサイトやアプリのトラフィック量や利用時間、合計訪問回数を分析するのに役立ちます。
- 広告代理店が、顧客に提供する広告のクリック数、表示回数、消費統計を分析するのに役立ちます。
- EC企業が、四半期や月ごとに地理的な売れ筋商品を特定するために、年間の取引データを分析するのに役立ちます。
前述のシナリオにおけるデータのクエリとインジェストには、以下の特徴があります。
- SUM、COUNT、MAXなど、ほとんどのクエリは集計クエリです。 -生の詳細データは取得する必要はありません。
- 過去のデータを頻繁に更新する必要はありません。新しいデータの追加のみです。
原則
集約テーブルを使用するテーブルでは、データインジェストからデータクエ リまでの間において、同じソートキーを持つデータは以下のように複数回集約されます。
- データインジェストフェーズでは、データがテーブルにバッチとしてロードされる際、各バッチはデータバージョンとして生成されます。データバージョンが生成された後、StarRocksはデータバージョン内で同じソートキーを持つデータを集約します。
- バックグラウンドのコンパクションフェーズでは、データインジェストで生成された複数のデータバージョンのファイルが定期的に大きなファイルにコンパクションされる際、StarRocksは大きなファイル内で同じソートキーを持つデータを集約します。
- データクエリフェーズでは、StarRocksはクエリ結果を返す前に、すべてのデータバージョンの中から同じソートキーを持つデータを集約します。
これにより、集約操作を行うことで、処理する必要のあるデータ量を減らし、クエリを高速化することができます。
集約テーブルを使用するテーブルがあり、次の4つの生のレコードをそのテーブルにロードしたいとします。
Date | Country | PV |
---|---|---|
2020.05.01 | CHN | 1 |
2020.05.01 | CHN | 2 |
2020.05.01 | USA | 3 |
2020.05.01 | USA | 4 |
StarRocksは、データインジェスト時にこれらの4つの生のレコードを以下の2つのレコードに集約します。
Date | Country | PV |
---|---|---|
2020.05.01 | CHN | 3 |
2020.05.01 | USA | 7 |
テーブルの作成
さまざまな都市から異なるウェブページへの訪問者数を分析したいとします。この例では、example_db.aggregate_tbl
というテーブルを作成し、site_id
、date
、city_code
をソートキーカラムとして定義し、pv
をメトリックカラムとして定義し、pv
カラムにはSUM関数を指定します。
テーブルの作成文は以下の通りです。
CREATE TABLE IF NOT EXISTS example_db.aggregate_tbl (
site_id LARGEINT NOT NULL COMMENT "サイトのID",
date DATE NOT NULL COMMENT "イベントの日時",
city_code VARCHAR(20) COMMENT "ユーザーの都市コード",
pv BIGINT SUM DEFAULT "0" COMMENT "合計ページビュー数"
)
AGGREGATE KEY(site_id, date, city_code)
DISTRIBUTED BY HASH(site_id)
PROPERTIES (
"replication_num" = "3"
);
注意
使用上の注意事項
- テーブルのソートキーについて以下の点を注意してください:
AGGREGATE KEY
キーワードを使用して、ソートキーに使用する列を明示的に定義することができます。AGGREGATE KEY
キーワードがすべての次元列を含んでいない場合、テーブルは作成できません。- デフォルトでは、
AGGREGATE KEY
キーワードを使用してソートキーカラムを明示的に定義しない場合、StarRocksはメトリックカラム以外のすべての列をソートキーカラムとして選択します。
- ソートキーは、一意の制約が適用されている列上に作成する必要があります。変更できない列名の次元カラムで構成する必要があります。
- 列の名前の後に集計関数を指定して、メトリックカラムとして列を定義することができます。ほとんどの場合、メトリックカラムには集計や分析の対象となるデータが格納されています。
- 集計テーブルでサポートされている集計関数の詳細については、CREATE TABLEを参照してください。
- クエリが実行される際、ソートキーカラムは複数のデータバージョンの集計の前にフィルタリングされ、メトリックカラムは複数のデータバージョンの集計の後にフィルタリングされます。そのため、使用頻度の高いフィルタ条件を持つ列を特定し、これらの列をソートキーとして定義することを推奨します。これにより、データのフィルタリングが複数のデータバージョンの集計の前に開始され、クエリのパフォーマンスを向上させることができます。
- テーブルを作成する際、テーブルのメトリックカラムにはBITMAPインデックスやBloom Filterインデックスを作成することはできません。