Realtime Compute では、ディメンションテーブル用に設計された特別な DDL 構文はありません。 PERIOD FOR SYSTEM_TIME 文を追加するだけで、標準の CREATE TABLE 構文を使用できます。 この文は、ディメンションテーブルの変更期間を定義します。つまり、ディメンションテーブルは変更可能であることを示します。

CREATE TABLE white_list (
  id varchar,
  name varchar,
  age int,
  PRIMARY KEY (id),  -- If the table is used as a dimension table, it must have a declared primary key.
  PERIOD FOR SYSTEM_TIME -- Define the change period of the dimension table.
) with (
  type = 'rds',
  ...
)
  • ディメンションテーブルの宣言時は、主キーを指定する必要があります。 ディメンションテーブルを別のテーブルに結合する場合、ON 条件には、すべての主キーと同等の条件が含まれている必要があります。
  • 現在、Realtime Compute は、ソーステーブルを INNER JOIN または LEFT JOIN モードのディメンションテーブルのみと結合できます。
  • ディメンションテーブルで宣言された一意のキーは、データベーステーブルの一意なキーである必要があります。 それ以外の場合は、以下のような悪影響が発生する可能性があります。
    1. ディメンションテーブルの読み取り速度が低下します。
    2. ディメンションテーブルを別のテーブルに結合すると、テーブル結合は最初のデータレコードから行われます。 ジョブの処理中に、同じキーを持つ複数のデータレコードがデータベース内で順番に更新されます。 これにより、結合結果にエラーが発生する可能性があります。

INDEX 構文

Realtime Compute 2.2.7 以降のバージョンでは、INDEX 構文の使用を推奨します。
Realtime Compute 2.2 以前のバージョンでは、ディメンションテーブルの宣言時に PRIMARY KEY を宣言する必要があります。 これは、1 対 1 のテーブル結合でのみ機能します。 1 対多のテーブル結合の要件を満たすために、 INDEX 構文が導入されました。 現在は、キャッシュが ALL に設定されていない場合は、ディメンションテーブルの結合は、INDEX LOOKUP メソッドに基づいて実装されます。 将来的には、バッチジョブでは COST に基づいて SCAN メソッドを使用する可能性があります。
CREATE TABLE Persons (
    ID bigint,
    LastName varchar,
    FirstName varchar,
    Nick varchar,
    Age int,
    [UNIQUE] INDEX(LastName,FirstName,Nick), -- Define the index. You do not need to specify the index type (such as fulltext or clustered).
    PERIOD FOR SYSTEM_TIME
) with (
  type='xxx',
  ...
);
UNIQUE INDEX は、1 対 1 のテーブル結合を示します。 INDEX は、1 対 多のテーブル結合を示します。
  1. UNIQUE CONSTRAINT (UNIQUE KEY) は、Realtime Compute 2.2.7 以降のバージョンでサポートされています。 ほとんどのリレーショナルデータベース管理システム (RDBMS) と同様に、Realtime Compute は UNIQUE 制約を宣言した後で、間接的に UNIQUE INDEX 属性を提供します。 以前のバージョンの Realtime Compute を使用している場合は、PRIMARY KEY 定義を使用できます。
  2. 実行プランを生成すると、Realtime Compute は優先的に UNIQUE INDEX を使用します。 つまり、INDEX が DDL 内で使用され、UNIQUE INDEXNON-UNIQUE INDEX の両方が等結合条件に含まれている場合、Realtime Compute は優先的に UNIQUE INDEX を使用して、右側のテーブルでデータを検索します。
  3. RDS と MaxCompute のディメンションテーブルは、1 対多の結合をサポートします。 MaxCompute のディメンションテーブルは、ALL キャッシュポリシーのみサポートし、ランダムなアクセスを許可しません。
  4. maxJoinRows パラメーターは、左側のテーブルの行を結合できる右のテーブルの最大行数を示します。 デフォルト値は 1024 です。 1つの行が多すぎる行に結合されている場合は、キャッシュメモリを増やすことを検討してください。 cacheSizeパラメーターは、左側のテーブルの行キー数を制限します。 左側のテーブルの 1 つの行が、右側のテーブルのあまりにも多くの行に結合されている場合、ジョブのパフォーマンスに深刻な影響がおよぶ可能性があります。

ディメンションテーブル、ソーステーブル、結果テーブルの違い

ソーステーブル 結果テーブル ディメンションテーブル
計算を開始する原因であるかどうか はい いいえ いいえ
データの読み取りをサポートするかどうか はい、データを直接読み取ることができます。 いいえ はい。ただし、ソーステーブルをディメンションテーブルに結合することによるデータの読み取りのみサポートしています。
データの書き込みをサポートするかどうか いいえ はい いいえ
キャッシュをサポートするかどうか いいえ いいえ はい