SCD-2時点指定結合
ファクトテーブルをSCD-2マスタービルダーの履歴テーブルに結合し、ファクトの各行について、現在のバージョンではなく、そのファクトの日付時点で有効だったマスターデータのバージョンを返します。
これにより、各トランザクションを、発生当時に適用されていた地域、コストセンター、担当者、価格に紐付けることができます。LEFT JOINであるため、すべてのファクト行が保持されます。一致するバージョンがないキー(不明なキー、またはキーの最初のバージョンより前の日付)は、削除されずに、引き継ぎ列がnullとして返されます。
ファクトテーブル
Section titled “ファクトテーブル”補強したい行です(トランザクション、注文、イベントなど)。各行にはビジネスキーと日付が含まれます。
SCD-2テーブル
Section titled “SCD-2テーブル”SCD-2マスタービルダーが生成した履歴テーブルで、追跡対象の属性とともにvalid_from、valid_to、is_currentを持ちます。
出力テーブル
Section titled “出力テーブル”補強されたファクト行の書き込み先です。ビューではなくテーブルである必要があります。元のファクト列はすべてそのまま渡され、引き継ぎ対象のマスターデータ列が末尾に追加されます。
基準日とオプション
Section titled “基準日とオプション”基準日は、各ファクト行を解決する時点です。次の2つのうち、いずれか一方のみで指定します。
- ファクト基準日列 — ファクトテーブルの日付列(例:
txn_date)。各行は、その行自身の日付で解決されます。 - 固定の基準日 — 単一の
YYYY-MM-DD形式の日付、または{report_date}のようなワークフロー変数で、すべてのファクト行に適用されます(ファクトテーブル全体を1つのレポート日付時点で解決します)。変数は、ステップの実行時に値が設定されます。
名前の変更オプションにより、引き継ぎ列がファクト列と同じ名前を持つ場合の衝突を避けられます。
- 引き継ぎプレフィックス / 引き継ぎサフィックス — 引き継ぎ列それぞれの出力名に追加されます(
prefix+ 列名 +suffix)。名前を変更しても、引き継ぎ列がファクト列または別の引き継ぎ列と衝突する場合、実行は暗黙的に上書きされることなく失敗します。
SCD-2を検査を使ってSCD-2テーブルの列を一覧表示し、各列にタグを付けます。
| ロール | 意味 |
|---|---|
| ビジネスキー | ファクトと履歴を結合するキーです(例: customer_id)。ファクトのキー列と一致している必要があります。少なくとも1つが必要です。 |
| 引き継ぎ列 | ファクト行に取り込む属性です(例: region)。少なくとも1つが必要です。 |
| (無視) | タグのない列は引き継がれません。 |
保存時にチェックされる内容
Section titled “保存時にチェックされる内容”次の場合、ステップの保存は拒否され、該当する列または日付を示すメッセージが表示されます。
- 列が、ビジネスキーまたは引き継ぎ列として複数回タグ付けされている — ‘region’ is tagged as a Carry Column more than once.
- 列がビジネスキーと引き継ぎ列の両方になっている — customer_id can’t be both a Business Key and a Carry Column: the key columns already come from the fact table.
- 固定の基準日が、
YYYY-MM-DD形式の実在する日付ではない — The Literal As-Of Date ‘2026-02-30’ must be a date in YYYY-MM-DD form. ワークフロー変数を指定した日付は、実行時に値が設定される際にチェックされます。
半開区間の境界
Section titled “半開区間の境界”ファクト行は、半開の比較を使用して、基準日を含む期間を持つ履歴バージョン1つと一致します。
valid_from <= as_of AND as_of < valid_to下限は含まれ、上限は含まれません。この違いは境界日に影響します。
as_of == valid_from→ そのバージョンに一致します(開始日に有効になります)。as_of == valid_to→ そのバージョンには一致しません。このvalid_toとvalid_fromが等しい次のバージョンに割り当てられます。
SCD-2マスタービルダーは、連続するバージョンを、あるバージョンのvalid_toが次のバージョンのvalid_fromになるように書き込むため、すべての日付が必ずちょうど1つのバージョンに対応します。隙間も重複もありません。2026-04-01付けの変更は、新しい値が4月1日当日から適用されることを意味します。3月31日のトランザクションには、引き続き古い値が適用されます。
SCD-2マスタービルダーの続きとして、各トランザクションを、その日付時点で有効だった地域に紐付けます。
customer_scd2(履歴テーブル):
| customer_id | region | valid_from | valid_to | is_current |
|---|---|---|---|---|
| C1 | 西部 | 2026-01-01 | 2026-04-01 | false |
| C1 | 中部 | 2026-04-01 | 9999-12-31 | true |
| C2 | 東部 | 2026-01-01 | 9999-12-31 | true |
transactions(ファクトテーブル):
| txn_id | customer_id | txn_date | amount |
|---|---|---|---|
| T1 | C1 | 2026-03-15 | 100 |
| T2 | C1 | 2026-04-01 | 200 |
| T3 | C2 | 2026-05-10 | 150 |
| T4 | C9 | 2026-05-10 | 90 |
設定: ファクトテーブル = transactions、SCD-2テーブル = customer_scd2、出力テーブル = transactions_by_region、ファクト基準日列 = txn_date、ビジネスキー = customer_id、引き継ぎ列 = region。
transactions_by_region:
| txn_id | customer_id | txn_date | amount | region |
|---|---|---|---|---|
| T1 | C1 | 2026-03-15 | 100 | 西部 |
| T2 | C1 | 2026-04-01 | 200 | 中部 |
| T3 | C2 | 2026-05-10 | 150 | 東部 |
| T4 | C9 | 2026-05-10 | 90 | (null) |
境界に注目してください。2026-04-01のT2は中部に解決されます。半開区間では、4月1日は西部の最終日ではなく、中部バージョンの初日になるためです。T4のキーC9は不明なため、削除されずにregionがnullのまま保持されます。
- SCD-2マスタービルダー — このステップが読み取る履歴テーブルを構築します。
- Dimension Loadステップ — テーブルから階層をロードします。