はい、既存テーブルにもSCD Type2モードで転送することは可能です。
ただし、SCD Type2の仕様に沿ったテーブル構造になっている必要があります。
必要なテーブル構成
SCD Type2では、履歴管理のために以下のカラムが必要になります。
| カラム名 | 型 | 説明 |
|---|---|---|
trocco_valid_from |
TIMESTAMP | 有効開始日時 |
trocco_valid_to |
TIMESTAMP | 有効終了日時 ( NULL =現在有効) |
trocco_is_current |
BOOLEAN | キーカラムにおける最新のレコードを示すフラグ |
こちらの3カラムが存在しない場合は、事前に追加しておく必要があります。
上記のカラムが存在していないテーブルに対して転送を実行すると、以下のエラーが発生します。
Google::Apis::ClientError invalidQuery: Query error: Name trocco_is_current not found inside t
補足
前提として、増分基準カラムが更新されている場合に、更新された有効なレコードが追加される仕様です。
① 有効開始日時 ( trocco_valid_from ) が NULL だった場合
NULLであっても、増分基準カラムの値に変化があった場合には、レコードが追加されます。以下が既存テーブルです。
| id | address | created_at | updated_at | trocco_valid_from | trocco_valid_to | trocco_is_current | |
|---|---|---|---|---|---|---|---|
| u_001 | user1@example.com | 神奈川県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | null | null | true |
| u_002 | user2@example.com | 兵庫県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | null | null | true |
| u_003 | user3@example.com | 福岡県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | null | null | true |
id=u_002 で住所の変更 (兵庫県→大阪府) があり、 updated_at の更新があった場合は、以下のようになります。
| id | address | created_at | updated_at | trocco_valid_from | trocco_valid_to | trocco_is_current | |
|---|---|---|---|---|---|---|---|
| u_001 | user1@example.com | 神奈川県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | null | null | true |
| u_002 | user2@example.com | 兵庫県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | null | 2026-02-16 11:00:00 UTC | false |
| u_003 | user3@example.com | 福岡県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | null | null | true |
| u_002 | user2@example.com | 大阪府 | 2026-02-01 10:00:00 UTC | 2026-02-16 10:00:00 UTC | 2026-02-16 11:00:00 UTC | null | true |
② 同一キーカラムで「現在レコード」が複数存在する (= trocco_is_current が true のレコードが複数ある) 場合
以下のような id=u_003 のレコードが重複しており、 trocco_is_current がどちらも true だった場合を例とします。
| id | address | created_at | updated_at | trocco_valid_from | trocco_valid_to | trocco_is_current | |
|---|---|---|---|---|---|---|---|
| u_001 | user1@example.com | 神奈川県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | 2026-02-10 11:00:00 UTC | null | true |
| u_002 | user2@example.com | 兵庫県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | 2026-02-10 11:00:00 UTC | null | true |
| u_003 | user3@example.com | 福岡県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | 2026-02-10 11:00:00 UTC | null | true |
| u_003 | user3@example.com | 長崎県 | 2026-02-10 00:00:00 UTC | 2026-02-10 00:00:00 UTC | 2026-02-10 11:00:00 UTC | null | true |
この場合は、既存のレコードは全て無効になり、新規レコードが追加されました。
| id | address | created_at | updated_at | trocco_valid_from | trocco_valid_to | trocco_is_current | |
|---|---|---|---|---|---|---|---|
| u_001 | user1@example.com | 神奈川県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | 2026-02-10 11:00:00 UTC | null | true |
| u_002 | user2@example.com | 兵庫県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | 2026-02-10 11:00:00 UTC | null | true |
| u_003 | user3@example.com | 福岡県 | 2026-02-01 10:00:00 UTC | 2026-02-01 10:00:00 UTC | 2026-02-10 11:00:00 UTC | 2026-02-15 18:30:00 UTC | false |
| u_003 | user3@example.com | 長崎県 | 2026-02-10 00:00:00 UTC | 2026-02-10 00:00:00 UTC | 2026-02-10 11:00:00 UTC | 2026-02-15 18:30:00 UTC | false |
| u_003 | user3@example.com | 佐賀県 | 2026-02-10 00:00:00 UTC | 2026-02-15 18:00:00 UTC | 2026-02-15 18:30:00 UTC | null | true |
コメント
0件のコメント
記事コメントは受け付けていません。