Apache Dorisのデータモデルの概要

基本概念

Apache Dorisでは、データは表形式で管理され、行(Row)と列(Column)で構成されます。行はユーザーのデータレコードを表し、列はそのレコードの属性を定義します。列は「Key列」と「Value列」に分類され、テーブル定義時にUNIQUE KEYAGGREGATE KEYDUPLICATE KEYで指定された列がKey列となります。

データモデルの種類

Dorisでは3つの主要なデータモデルを提供しています:

  • 集計モデル (Aggregate)
  • ユニークモデル (Unique)
  • 重複モデル (Duplicate)

集計モデルの特徴

集計モデルでは、Key列が同一の行が自動的に集約されます。以下の例では、user_iddateを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つの実装方式があります:

  1. 読み込み時マージ
    CREATE TABLE users (
            `ユーザーID` LARGEINT NOT NULL,
            `名前` VARCHAR(50) NOT NULL,
            `メール` VARCHAR(100) REPLACE
        )
        UNIQUE KEY(`ユーザーID`, `名前`) DISTRIBUTED BY HASH(`ユーザーID`);
  2. 書き込み時マージ
    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(`タイムスタンプ`);

このモデルでは同一内容の行もすべて保持され、データの集約は行われません。

タグ: Doris データモデリング 集計モデル ユニークモデル マージオンライト

6月13日 17:59 投稿