集計テーブル
テーブル作成時に、集計キーを定義し、値カラムに対して集計関数を指定できます。同じ集計キーを持つ複数のデータ行がある場合、値カラムの値が集計されます。また、ソートキーを別に定義することもできます。クエリのフィルター条件にソートキーが含まれている場合、StarRocks はデータを迅速にフィルタリン グし、クエリの効率を向上させます。
データ分析や集計のシナリオでは、集計テーブルを使用することで処理するデータ量を削減し、クエリの効率を向上させることができます。
シナリオ
集計テーブルは、データ統計や分析のシナリオに適しています。以下はいくつかの例です。
-
ウェブサイトやアプリのプロバイダーが、特定のウェブサイトやアプリでユーザーが費やすトラフィック量や時間、訪問回数を分析するのに役立ちます。
-
広告代理店が、顧客に提供する広告の総クリック数、総表示数、消費統計を分析するのに役立ちます。
-
Eコマース企業が、年間の取引データを分析し、四半期や月ごとの地理的なベストセラーを特定するのに役立ちます。
上記のシナリオにおけるデータクエリと取り込みには以下の特徴があります。
- ほとんどのクエリは、SUM、MAX、MIN などの集計クエリです。
- 生の詳細データを取得する必要はありません。
- 履歴データは頻繁に更新されず、新しいデータのみが追加されます。
原理
データ取り込みからデータクエリまで、集計テーブル内のデータは以下のように複数回集計されます。
-
データ取り込みフェーズでは、データがバッチで集計テーブルにロードされるときに、各バッチのデータがバージョンを形成します。1つのバージョン内で、同じ集計キーを持つデータが集計されます。
-
バックグラウンドの Compaction フェーズでは、データ取り込みで生成された複数のデータバージョンのファイルが定期的に大きなファイルに圧縮される際に、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 aggregate_tbl (
site_id LARGEINT NOT NULL COMMENT "id of site",
date DATE NOT NULL COMMENT "time of event",
city_code VARCHAR(20) COMMENT "city_code of user",
pv BIGINT SUM DEFAULT "0" COMMENT "total page views"
)
AGGREGATE KEY(site_id, date, city_code)
DISTRIBUTED BY HASH(site_id);
NOTICE
- テーブルを作成する際には、
DISTRIBUTED BY HASH句を使用してバケット化カラムを指定する必要があります。詳細については、bucketing を参照してください。- バージョン 2.5.7 以降、StarRocks はテーブルを作成する際やパーティションを追加する際に、バケット数 (BUCKETS) を自動的に設定できます。バケット数を手動で設定する必要はありません。詳細については、set the number of buckets を参照してください。