メインコンテンツまでスキップ

集計テーブル

集計テーブルを使用するテーブルを作成する際、ソートキー列とメトリック列を定義し、メトリック列に対して集計関数を指定できます。ロードされるレコードが同じソートキーを持つ場合、メトリック列が集計されます。集計テーブルは、クエリの処理が必要なデータ量を削減し、クエリを高速化するのに役立ちます。

シナリオ

集計テーブルは、データ統計と分析のシナリオに適しています。以下はその例です:

  • ウェブサイトやアプリのプロバイダーが、特定のウェブサイトやアプリでユーザーが費やすトラフィック量や時間、訪問回数を分析するのを支援します。

  • 広告代理店が、顧客に提供する広告の総クリック数、総表示数、消費統計を分析するのを支援します。

  • Eコマース企業が、年間取引データを分析し、四半期または月ごとの地理的ベストセラーを特定するのを支援します。

上記のシナリオにおけるデータクエリと取り込みには、以下の特徴があります:

  • ほとんどのクエリは、SUM、MAX、MIN などの集計クエリです。
  • 生の詳細データを取得する必要はありません。
  • 履歴データは頻繁に更新されず、新しいデータのみが追加されます。

原理

データ取り込みからデータクエリに至るまで、集計テーブルを使用するテーブル内の同じソートキーを持つデータは、以下のように複数回集計されます:

  1. データ取り込みフェーズでは、データがバッチとしてテーブルにロードされるとき、各バッチはデータバージョンを構成します。データバージョンが生成されると、StarRocks はそのデータバージョン内で同じソートキーを持つデータを集計します。
  2. バックグラウンドの Compaction フェーズでは、データ取り込みで生成された複数のデータバージョンのファイルが定期的に大きなファイルに圧縮されるとき、StarRocks はその大きなファイル内で同じソートキーを持つデータを集計します。
  3. データクエリフェーズでは、StarRocks はクエリ結果を返す前に、すべてのデータバージョン間で同じソートキーを持つデータを集計します。

集計操作は、処理が必要なデータ量を削減し、クエリを高速化するのに役立ちます。

集計テーブルを使用するテーブルがあり、次の4つの生データをテーブルにロードしたいとします。

DateCountryPV
2020.05.01CHN1
2020.05.01CHN2
2020.05.01USA3
2020.05.01USA4

StarRocks は、データ取り込み時にこれら4つの生データを次の2つのレコードに集計します。

DateCountryPV
2020.05.01CHN3
2020.05.01USA7

テーブルの作成

異なる都市からのユーザーが異なるウェブページを訪問した回数を分析したいとします。この例では、example_db.aggregate_tbl という名前のテーブルを作成し、site_iddatecity_code をソートキー列として定義し、pv をメトリック列として定義し、pv 列に対して SUM 関数を指定します。

テーブルを作成するためのステートメントは次のとおりです:

CREATE TABLE IF NOT EXISTS example_db.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);

注意

  • テーブルを作成する際、DISTRIBUTED BY HASH 句を使用してバケット列を指定する必要があります。詳細については、 bucketing を参照してください。
  • バージョン 2.5.7 以降、StarRocks はテーブルを作成する際やパーティションを追加する際に、バケット数 (BUCKETS) を自動的に設定できます。バケット数を手動で設定する必要はありません。詳細については、 set the number of buckets を参照してください。

使用上の注意

  • テーブルのソートキーについて、次の点に注意してください:

    • AGGREGATE KEY キーワードを使用して、ソートキーに使用される列を明示的に定義できます。

      • AGGREGATE KEY キーワードがすべてのディメンション列を含まない場合、テーブルは作成できません。
      • デフォルトでは、AGGREGATE KEY キーワードを使用してソートキー列を明示的に定義しない場合、StarRocks はメトリック列を除くすべての列をソートキー列として選択します。
    • ソートキーは、ユニーク制約が適用される列に作成する必要があります。名前を変更できないすべてのディメンション列で構成されている必要があります。

  • 列の名前の後に集計関数を指定して、その列をメトリック列として定義できます。ほとんどの場合、メトリック列は集計および分析が必要なデータを保持します。

  • 集計テーブルがサポートする集計関数については、 CREATE TABLE を参照してください。

  • クエリが実行されると、ソートキー列は複数のデータバージョンの集計前にフィルタリングされ、メトリック列は複数のデータバージョンの集計後にフィルタリングされます。したがって、フィルタ条件として頻繁に使用される列を特定し、これらの列をソートキーとして定義することをお勧めします。これにより、複数のデータバージョンの集計前にデータフィルタリングを開始でき、クエリパフォーマンスが向上します。

  • テーブルを作成する際、テーブルのメトリック列にビットマップインデックスやブルームフィルターインデックスを作成することはできません。

次のステップ

テーブルが作成された後、さまざまなデータ取り込み方法を使用して StarRocks にデータをロードできます。StarRocks がサポートするデータ取り込み方法については、 Loading options を参照してください。

注: 集計テーブルを使用するテーブルにデータをロードする際、テーブルのすべての列を更新する必要があります。たとえば、前述の example_db.aggregate_tbl テーブルを更新する場合、site_iddatecity_codepv のすべての列を更新する必要があります。