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
モードのディメンションテーブルのみと結合できます。 - ディメンションテーブルで宣言された一意のキーは、データベーステーブルの一意なキーである必要があります。 それ以外の場合は、以下のような悪影響が発生する可能性があります。
- ディメンションテーブルの読み取り速度が低下します。
- ディメンションテーブルを別のテーブルに結合すると、テーブル結合は最初のデータレコードから行われます。 ジョブの処理中に、同じキーを持つ複数のデータレコードがデータベース内で順番に更新されます。 これにより、結合結果にエラーが発生する可能性があります。
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 対 多のテーブル結合を示します。
注
UNIQUE CONSTRAINT
(UNIQUE KEY
) は、Realtime Compute 2.2.7 以降のバージョンでサポートされています。 ほとんどのリレーショナルデータベース管理システム (RDBMS) と同様に、Realtime Compute はUNIQUE 制約
を宣言した後で、間接的にUNIQUE INDEX
属性を提供します。 以前のバージョンの Realtime Compute を使用している場合は、PRIMARY KEY
定義を使用できます。- 実行プランを生成すると、Realtime Compute は優先的に
UNIQUE INDEX
を使用します。 つまり、INDEX が DDL 内で使用され、UNIQUE INDEX
とNON-UNIQUE INDEX
の両方が等結合条件に含まれている場合、Realtime Compute は優先的にUNIQUE INDEX
を使用して、右側のテーブルでデータを検索します。 - RDS と MaxCompute のディメンションテーブルは、1 対多の結合をサポートします。 MaxCompute のディメンションテーブルは、
ALL
キャッシュポリシーのみサポートし、ランダムなアクセスを許可しません。 maxJoinRows
パラメーターは、左側のテーブルの行を結合できる右のテーブルの最大行数を示します。 デフォルト値は 1024 です。 1つの行が多すぎる行に結合されている場合は、キャッシュメモリを増やすことを検討してください。cacheSize
パラメーターは、左側のテーブルの行キー数を制限します。 左側のテーブルの 1 つの行が、右側のテーブルのあまりにも多くの行に結合されている場合、ジョブのパフォーマンスに深刻な影響がおよぶ可能性があります。
ディメンションテーブル、ソーステーブル、結果テーブルの違い
ソーステーブル | 結果テーブル | ディメンションテーブル | |
---|---|---|---|
計算を開始する原因であるかどうか | はい | いいえ | いいえ |
データの読み取りをサポートするかどうか | はい、データを直接読み取ることができます。 | いいえ | はい。ただし、ソーステーブルをディメンションテーブルに結合することによるデータの読み取りのみサポートしています。 |
データの書き込みをサポートするかどうか | いいえ | はい | いいえ |
キャッシュをサポートするかどうか | いいえ | いいえ | はい |