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

Aggregate table

集約テーブル

集約テーブルを使用するテーブルを作成するときには、ソートキーカラムとメトリックカラムを定義し、メトリックカラムに集計関数を指定することができます。もしロードするレコードが同じソートキーを持つ場合、メトリックカラムが集約されます。これにより、クエリの処理対象データ量を減らし、クエリを高速化することができます。

シナリオ

集約テーブルは、データの統計および分析に適したものです。以下にいくつかの例を示します。

  • ウェブサイトやアプリプロバイダーが、特定のウェブサイトやアプリのトラフィック量や利用時間、合計訪問回数を分析するのに役立ちます。
  • 広告代理店が、顧客に提供する広告のクリック数、表示回数、消費統計を分析するのに役立ちます。
  • EC企業が、四半期や月ごとに地理的な売れ筋商品を特定するために、年間の取引データを分析するのに役立ちます。

前述のシナリオにおけるデータのクエリとインジェストには、以下の特徴があります。

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

原則

集約テーブルを使用するテーブルでは、データインジェストからデータクエリまでの間において、同じソートキーを持つデータは以下のように複数回集約されます。

  1. データインジェストフェーズでは、データがテーブルにバッチとしてロードされる際、各バッチはデータバージョンとして生成されます。データバージョンが生成された後、StarRocksはデータバージョン内で同じソートキーを持つデータを集約します。
  2. バックグラウンドのコンパクションフェーズでは、データインジェストで生成された複数のデータバージョンのファイルが定期的に大きなファイルにコンパクションされる際、StarRocksは大きなファイル内で同じソートキーを持つデータを集約します。
  3. データクエリフェーズでは、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_iddatecity_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"
);

注意

  • テーブルを作成する際は、DISTRIBUTED BY HASH句を使用してバケット化カラムを指定する必要があります。詳細については、バケットを参照してください。
  • v2.5.7以降、StarRocksはテーブルまたはパーティションを作成する際に自動的にバケツの数(BUCKETS)を設定できるようになりました。バケツの数を手動で設定する必要はもうありません。詳細については、バケツの数の決定を参照してください。

使用上の注意事項

  • テーブルのソートキーについて以下の点を注意してください:
    • AGGREGATE KEYキーワードを使用して、ソートキーに使用する列を明示的に定義することができます。
      • AGGREGATE KEYキーワードがすべての次元列を含んでいない場合、テーブルは作成できません。
      • デフォルトでは、AGGREGATE KEYキーワードを使用してソートキーカラムを明示的に定義しない場合、StarRocksはメトリックカラム以外のすべての列をソートキーカラムとして選択します。
    • ソートキーは、一意の制約が適用されている列上に作成する必要があります。変更できない列名の次元カラムで構成する必要があります。
  • 列の名前の後に集計関数を指定して、メトリックカラムとして列を定義することができます。ほとんどの場合、メトリックカラムには集計や分析の対象となるデータが格納されています。
  • 集計テーブルでサポートされている集計関数の詳細については、CREATE TABLEを参照してください。
  • クエリが実行される際、ソートキーカラムは複数のデータバージョンの集計の前にフィルタリングされ、メトリックカラムは複数のデータバージョンの集計の後にフィルタリングされます。そのため、使用頻度の高いフィルタ条件を持つ列を特定し、これらの列をソートキーとして定義することを推奨します。これにより、データのフィルタリングが複数のデータバージョンの集計の前に開始され、クエリのパフォーマンスを向上させることができます。
  • テーブルを作成する際、テーブルのメトリックカラムにはBITMAPインデックスやBloom Filterインデックスを作成することはできません。

次の手順

テーブルが作成されたら、さまざまなデータインジェスト手法を使用してデータをStarRocksにロードすることができます。StarRocksでサポートされているデータインジェスト手法については、データインポートを参照してください。

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