メインコンテンツまでスキップ
バージョン: 2.5

ユニークキーテーブル

テーブルを作成する際に、プライマリキーカラムとメトリックカラムを定義できます。これにより、同じプライマリキーを持つレコードのグループの中で、最も新しいレコードがクエリで返されます。重複キーテーブルと比較して、ユニークキーテーブルはデータロードプロセスを簡素化し、リアルタイムで頻繁なデータ更新をより良くサポートします。

シナリオ

ユニークキーテーブルは、データがリアルタイムで頻繁に更新される必要があるビジネスシナリオに適しています。例えば、eコマースのシナリオでは、1日に数億件の注文が行われ、注文のステータスが頻繁に変わります。

原理

ユニークキーテーブルは、同じプライマリキーを持つレコードのグループの中で最も新しいレコードを返すために、メトリックカラムに REPLACE 集計関数が指定された特別な集計キーテーブルと考えることができます。

ユニークキーテーブルを使用するテーブルにデータをロードする際、データは複数のバッチに分割されます。各バッチにはバージョン番号が割り当てられます。したがって、同じプライマリキーを持つレコードは複数のバージョンで存在する可能性があり、その中で最も新しいバージョン(つまり、最大のバージョン番号を持つレコード)がクエリで取得されます。

次の表に示すように、ID はプライマリキーカラム、value はメトリックカラム、_version は StarRocks 内で生成されたデータバージョン番号を保持します。この例では、ID が 1 のレコードはバージョン番号が 12 の2つのバッチでロードされ、ID2 のレコードはバージョン番号が 345 の3つのバッチでロードされます。

IDvalue_version
11001
11012
21003
21014
21025

ID1 のレコードをクエリすると、最も新しいバージョン番号 2 のレコードが返されます。ID2 のレコードをクエリすると、最も新しいバージョン番号 5 のレコードが返されます。次の表は、2つのクエリで返されるレコードを示しています。

IDvalue
1101
2102

テーブルの作成

eコマースのシナリオでは、注文のステータスを日付ごとに収集して分析する必要がよくあります。この例では、orders という名前のテーブルを作成し、注文を保持します。create_timeorder_id をプライマリキーカラムとして定義し、order_statetotal_price の2つのカラムをメトリックカラムとして定義します。これにより、注文のステータスが変わるとリアルタイムで更新され、クエリを加速するために迅速にフィルタリングできます。

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

CREATE TABLE IF NOT EXISTS orders (
create_time DATE NOT NULL COMMENT "create time of an order",
order_id BIGINT NOT NULL COMMENT "id of an order",
order_state INT COMMENT "state of an order",
total_price BIGINT COMMENT "price of an order"
)
UNIQUE KEY(create_time, order_id)
DISTRIBUTED BY HASH(order_id) BUCKETS 8;

使用上の注意

  • テーブルのプライマリキーについて、次の点に注意してください:

    • プライマリキーは UNIQUE KEY キーワードを使用して定義されます。
    • プライマリキーは、一意制約が適用され、名前を変更できないカラムに作成する必要があります。
    • プライマリキーは適切に設計する必要があります:
      • クエリが実行されると、プライマリキーカラムは複数のデータバージョンの集約前にフィルタリングされ、メトリックカラムは複数のデータバージョンの集約後にフィルタリングされます。したがって、フィルタ条件として頻繁に使用されるカラムを特定し、これらのカラムをプライマリキーカラムとして定義することをお勧めします。これにより、複数のデータバージョンの集約前にデータフィルタリングを開始し、クエリパフォーマンスを向上させることができます。
      • 集約プロセス中に、StarRocks はすべてのプライマリキーカラムを比較します。これは時間がかかり、クエリパフォーマンスを低下させる可能性があります。したがって、多数のプライマリキーカラムを定義しないでください。クエリのフィルタ条件としてほとんど使用されないカラムは、プライマリキーカラムとして定義しないことをお勧めします。
  • テーブルを作成する際、テーブルのメトリックカラムに BITMAP インデックスや Bloom Filter インデックスを作成することはできません。

  • ユニークキーテーブルはマテリアライズドビューをサポートしていません。

次のステップ

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

  • ユニークキーテーブルを使用するテーブルにデータをロードする際、テーブルのすべてのカラムを更新する必要があります。例えば、前述の orders テーブルを更新する場合、create_timeorder_idorder_statetotal_price のすべてのカラムを更新する必要があります。
  • ユニークキーテーブルを使用するテーブルからデータをクエリする際、StarRocks は複数のデータバージョンのレコードを集約する必要があります。この状況では、多数のデータバージョンがクエリパフォーマンスを低下させます。したがって、リアルタイムデータ分析の要件を満たしつつ、多数のデータバージョンを防ぐために、テーブルへのデータロードの適切な頻度を指定することをお勧めします。分単位のデータが必要な場合、1秒ごとのロード頻度ではなく、1分ごとのロード頻度を指定できます。