スキーマ追従
  • 31 Jan 2024
  • ダーク
    ライト
  • PDF

スキーマ追従

  • ダーク
    ライト
  • PDF

Article Summary

概要

スキーマ追従とは、「転送対象のデータ」と「転送先コネクタ側のテーブル」との間でスキーマの差分が発生した場合に、転送先コネクタ側テーブルのスキーマを自動修正して、スキーマの差分を解消する機能です。

スキーマの差分が発生するケース

以下は、スキーマの差分が発生する代表的な例の1つです。

  1. 転送設定を作成する
  2. 転送ジョブを実行し、Google BigQuery側にテーブルが転送される
  3. 転送元側のデータのスキーマが変更される(カラムの追加・削除や、カラム名や型の変更など)
  4. 転送設定を編集し、STEP2に遷移する際に自動データ設定を行う
    -> 転送設定STEP2のカラム定義に、転送元側データのスキーマが反映される

上記の例などによってスキーマの差分が発生している場合、再度転送ジョブを実行する前に、転送先コネクタ側のテーブルのスキーマを修正する必要があります。(※一部の転送モードでは修正は不要)
ですが、スキーマ追従を利用することで、スキーマの差分を自動で解消できます。

スキーマ追従が検知する差分

以下の差分を検出します。

  • カラムの追加
  • カラムの削除
  • カラムの型の変更

対象コネクタ

スキーマ追従は、以下の転送先コネクタにてご利用いただけます。

  • 転送先Google BigQuery
  • 転送先Snowflake

なお、転送元コネクタに関しては特段の制約なくご利用いただけます。

利用手順

以下では、転送先Google BigQueryを例に説明します。
前提として、「既存の転送設定を編集し、転送設定STEP2のカラム定義が変更されている状態」からの手順となります。

  1. 転送設定STEP3で保存して適用をクリックします。
    以下の画面が表示されます。
    schema-sync_001.png

  2. BigQueryにも反映・更新を選択した状態で、変更対象となった各カラムの挙動を指定します。

指定できる各カラムの挙動

追加されたカラムについて、既存のレコードに埋める値を以下より指定できます。

  • NULLで埋める
  • デフォルト値(リテラル)で埋める
    • 各型に応じたリテラル値(数値や文字列、TRUE/FALSEなど)で埋めます。
  • デフォルト値(式)で埋める
    • SQLの式を記述して埋めることができます。
    • CURRENT_TIMESTAMP()といった関数を利用したり、式に他のカラム名を指定することで他のカラムの値を利用したりすることもできます。

なお、カラムの型が対応していない値を指定した場合、スキーマ追従に失敗します。ご注意ください。

  1. 保存して適用をクリックします。
    転送設定の詳細画面に遷移します。自動でスキーマ追従が実行されます。
    schema-sync_002.png
スキーマ追従に失敗した場合

転送設定詳細画面にて、再実行できます。
ただし、後述の利用上の制約に記載されたケースでは、スキーマ追従は成功しません。ご了承ください。

利用上の制約

各転送先コネクタに共通の制約

  • 転送先の設定にてテーブル名などにカスタム変数を埋め込んでいる場合、スキーマ追従を利用することができません。
  • 以下の設定によるカラムの追加・削除・変更は、スキーマ追従の対象外となります。
  • 転送先コネクタにあるテーブルのスキーマを、troccoを介さずに直接的に変更した場合、スキーマ追従が正しく動作しないことがあります。
カラム名が変更された場合

スキーマ追従では、カラム名が変更された場合、「カラムが削除され、新たに別のカラムが追加された」とみなされます。
そのため、既存のカラムに含まれていた値は、転送設定STEP3のモーダルで指定した値に上書きされます。ご注意ください。

スキーマ追従が引き継ぐ設定について

スキーマ追従が実行されても、troccoで設定可能である設定は追従後のテーブルに引き継がれます。
たとえば、転送先Google BigQueryの転送設定STEP2>出力オプションで設定できる、以下の設定は引き継がれます。

  • カラムの説明(Description)
  • パーティション分割テーブル
  • パーティションの存続期間

一方で、troccoで設定できない各種設定を転送先コネクタ側で直接設定した場合、その設定内容はスキーマ追従時に失われる可能性があります。ご注意ください。

転送先Google BigQueryの場合

  • スキーマ追従は、以下の転送モードを選択している場合のみご利用いただけます。
    • 追記 (APPEND)
    • 追記 (APPEND DIRECT)
    • 全件洗い替え (DELETE IN ADVANCE)
  • 以下のいずれかに該当する場合、スキーマ追従を利用することができません。
    • 転送設定STEP2出力オプションスキーマ情報をテンプレートとして参照するテーブルを利用している場合
    • 転送先テーブル内にRECORD型のカラムを含む場合

転送先Snowflakeの場合

  • スキーマ追従は、以下の転送モードを選択している場合のみご利用いただけます。
    • 追記 (INSERT)
    • 追記 (INSERT DIRECT)
    • UPSERT (MERGE)
スキーマ追従後に転送ジョブに失敗する場合

転送先Snowflakeでは、カラムの順序が「Snowflake側のテーブル定義」と「troccoの転送設定STEP2のカラム定義」との間で一致しない場合、転送ジョブが失敗します。

また、スキーマ追従によって新規追加されたカラムやカラム名・カラム型が変更されたカラムは、Snowflake側のテーブル定義において、そのカラムの順序(ORDINAL)が最後尾に変更されます。

そのため、スキーマ追従実行後に転送ジョブのエラーが発生した場合は、Snowflake側のテーブル定義を参照した上で、troccoのカラム定義の各カラムの順序を入れ替えてください。

schema-sync_003.png

補足事項

  • スキーマ追従は、troccoの転送設定の情報をもとにスキーマの差分を検出します。
  • スキーマ追従は、カラム定義再読み込みスキーマ変更検知といった機能の利用の有無にかかわらず、利用できます。
  • スキーマ追従は、カラムのDescriptionや転送設定の出力オプションの変更(ただしデータ型の変更は除く)などは検出しません。
  • 転送先Google BigQueryの場合、スキーマ追従が実行されると、全量のSELECT文クエリが実行されます。その分、Google BigQuery側でスキャンが発生する旨、ご承知ください。

この記事は役に立ちましたか?