テーブルタイプ概要
Dorisでテーブルを作成する際は、データの保存方法と管理方法を決定するテーブルタイプを指定する必要があります。Dorisでは、「Key Model」という概念を使用してキーの保存と管理のセマンティクスを定義しており、これはテーブルタイプと密接に関連しています。Dorisは3つのキーモデル(またはテーブルタイプ)をサポートしています:Duplicate Key、Unique Key、Aggregate Keyです。各キーモデルは、データの重複除去、集約、更新処理に対して異なるメカニズムを提供し、異なるビジネスシナリオに適しています。適切なキーモデル(テーブルタイプ)を選択することは、ビジネス要件を満たしながら効率的で柔軟なデータ処理を確保するために不可欠です。
テーブルタイプの分類
Dorisは3種類のテーブルタイプをサポートしています:
-
Duplicate Key Model: 指定されたKey列の重複を許可し、Dorisのストレージ層は書き込まれたすべてのデータを保持します。このモデルは、すべての元のデータレコードを保存する必要がある状況に適しています。
-
Unique Key Model: 各行が一意のKey値を持つことを保証し、指定されたKey列に対して重複する行がないことを保証します。Dorisストレージ層は各キーに対して最後に書き込まれたデータのみを保持するため、このモデルはデータ更新を伴うシナリオに適しています。
-
Aggregate Key Model: Key列に基づいてデータを集約できます。Dorisストレージ層は集約されたデータを保持し、ストレージ容量を削減してクエリパフォーマンスを向上させます。このモデルは通常、要約情報や集約情報(合計や平均など)が必要な状況で使用されます。
テーブルの作成後、テーブルタイプのプロパティは確定され、変更することはできません。ビジネスに適したモデルを選択することは重要です:
-
Duplicate Key Modelは任意の次元でのアドホッククエリに適しています。事前集約の利点を活用することはできませんが、集約モデルの制約を受けず、列指向ストレージモデルの利点を活用できます(すべてのキー列を読み込む必要なく、関連する列のみを読み込む)。
-
Unique Key Modelは一意キー制約が必要なシナリオ向けに設計されており、キーの一意性を保証します。ただし、ROLLUPなどの事前集約によるクエリの利点は活用できません。
-
Aggregate Key Modelは事前集約により集約クエリに必要なデータと計算を大幅に削減でき、固定スキーマのレポートクエリに最適です。ただし、このモデルは
count(*)クエリには適していません。また、Value列の集約方法が固定されているため、他のタイプの集約クエリを実行する際は、セマンティクスの正確性を考慮する必要があります。 -
部分列の更新については、Unique Key Modelでの部分列更新とAggregate Modelでの部分列更新のドキュメントで関連する使用上のアドバイスを参照してください。
Sort Key
Dorisでは、データは列形式で保存され、テーブルはKey列とValue列に分割できます。Key列はグループ化とソートに使用され、Value列は集約に使用されます。Key列は1つまたは複数のフィールドで構成でき、テーブルの作成時に、データはAggregate Key、Unique Key、Duplicate Keyモデルの列に従ってソートされて保存されます。
異なるテーブルタイプでは、テーブル作成時にKey列の指定が必要で、それぞれ異なる意味を持ちます:Duplicate Key modelでは、Key列はソートを表し、一意性制約はありません。Aggregate KeyとUnique Keyモデルでは、Key列に基づいて集約が実行され、ソート機能だけでなく一意性制約も適用されます。
Sort Keyを適切に使用することで、以下の利点が得られます:
-
クエリパフォーマンスの向上: ソートキーは、スキャンする必要があるデータ量を削減するのに役立ちます。範囲クエリやフィルタリングクエリでは、ソートキーでデータを直接特定できます。ソートが必要なクエリでも、ソートキーによりソート処理を高速化できます。
-
データ圧縮の最適化: ソートキーに基づいてデータを順序立てて保存することで圧縮効率が向上し、類似したデータがグループ化されるため、圧縮率が大幅に向上し、ストレージ容量が削減されます。
-
重複除去コストの削減: Unique Key Modelを使用する場合、ソートキーによりDorisはより効率的に重複除去を実行でき、データの一意性を保証します。
ソートキーを選択する際は、以下の推奨事項に従うことができます:
-
Key列はすべてのValue列より前に配置する必要があります。
-
整数型を選択することが推奨されます。これは、整数型が文字列よりも計算と検索において格段に効率的だからです。
-
異なる長さの整数型を選択する場合は、十分なものを選択するという原則に従います。
-
VARCHARとSTRING型の長さについては、十分なものを選択するという原則に従います...
テーブルタイプの比較
| Duplicate Key Model | Unique Key Model | Aggregate Key Model | |
|---|---|---|---|
| Key列の一意性 | サポートなし、Key列は重複可能 | サポート | サポート |
| 同期Materialized View | サポート | サポート | サポート |
| 非同期Materialized View | サポート | サポート | サポート |
| UPDATE文 | サポートなし | サポート | サポートなし |
| DELETE文 | 部分的にサポート | サポート | サポートなし |
| インポート時の全行更新 | サポートなし | サポート | サポートなし |
| インポート時の部分列更新 | サポートなし | サポート | 部分的にサポート |