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