基本概念
Apache Dorisでは、データは表形式で管理され、行(Row)と列(Column)で構成されます。行はユーザーのデータレコードを表し、列はそのレコードの属性を定義します。列は「Key列」と「Value列」に分類され、テーブル定義時にUNIQUE KEYやAGGREGATE KEY、DUPLICATE KEYで指定された列がKey列となります。
データモデルの種類
Dorisでは3つの主要なデータモデルを提供しています:
- 集計モデル (Aggregate)
- ユニークモデル (Unique)
- 重複モデル (Duplicate)
集計モデルの特徴
集計モデルでは、Key列が同一の行が自動的に集約されます。以下の例では、user_idとdateをKey列として定義しています:
CREATE TABLE sales_data (
`顧客ID` LARGEINT NOT NULL,
`日付` DATE NOT NULL,
`地域` VARCHAR(20),
`購入金額` BIGINT SUM DEFAULT "0",
`最終購入日` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00"
)
AGGREGATE KEY(`顧客ID`, `日付`, `地域`)
DISTRIBUTED BY HASH(`顧客ID`) BUCKETS 3;
Value列の集計方法は以下のような種類があります:
SUM: 数値の合計を計算REPLACE: 最新の値で上書きMAX: 最大値を保持MIN: 最小値を保持
ユニークモデルの実装
主キーの一意性を保証するユニークモデルには2つの実装方式があります:
- 読み込み時マージ:
CREATE TABLE users ( `ユーザーID` LARGEINT NOT NULL, `名前` VARCHAR(50) NOT NULL, `メール` VARCHAR(100) REPLACE ) UNIQUE KEY(`ユーザーID`, `名前`) DISTRIBUTED BY HASH(`ユーザーID`); - 書き込み時マージ:
CREATE TABLE users ( `ユーザーID` LARGEINT NOT NULL, `名前` VARCHAR(50) NOT NULL, `メール` VARCHAR(100) ) UNIQUE KEY(`ユーザーID`, `名前`) PROPERTIES("enable_unique_key_merge_on_write"="true");
書き込み時マージはインポート時に古いデータを削除し、最新データを直接保存することで高速なクエリを実現します。
重複モデルの利用
重複モデルは主キーなしでデータを保持する必要がある場合に適しています。例えば、ログデータの保存など:
CREATE TABLE access_logs (
`タイムスタンプ` DATETIME NOT NULL,
`エラーコード` INT,
`クライアントIP` VARCHAR(15)
)
DUPLICATE KEY(`タイムスタンプ`, `エラーコード`)
DISTRIBUTED BY HASH(`タイムスタンプ`);
このモデルでは同一内容の行もすべて保持され、データの集約は行われません。