Snowflake のスキーマの検出とマッピング

このガイドでは、Snowflake から BigQuery にデータを転送するときにスキーマを定義する方法について説明します。BigQuery Data Transfer Service を使用してスキーマとデータ型のマッピングを自動的に検出することも、変換エンジンを使用してスキーマとデータ型を手動で定義することもできます。

デフォルトのスキーマ検出

Snowflake コネクタは、Snowflake テーブル スキーマを自動的に検出できます。スキーマの自動検出を使用するには、Snowflake の転送を設定するときに、[Translation output GCS path] フィールドを空白のままにします。

次のリストは、Snowflake コネクタが Snowflake データ型を BigQuery にマッピングする方法を示しています。

  • 次のデータ型は、BigQuery で STRING としてマッピングされます。
    • TIMESTAMP_TZ
    • TIMESTAMP_LTZ
    • OBJECT
    • VARIANT
    • ARRAY
  • 次のデータ型は、BigQuery で TIMESTAMP としてマッピングされます。
    • TIMESTAMP_NTZ

他のすべての Snowflake データ型は、BigQuery の同等の型に直接マッピングされます。

スキーマに変換エンジン出力を使用する

スキーマを手動で定義する(特定のスキーマ属性をオーバーライドするなど)には、次の手順でメタデータを生成して変換エンジンを実行します。

制限事項

  • データは、BigQuery に読み込まれる前に、Parquet データ形式で Snowflake から抽出されます。

    • 次の Parquet データ型はサポートされていません。
    • 次の Parquet データ型はサポートされていませんが、変換できます。

      • TIMESTAMP_NTZ
      • OBJECTVARIANTARRAY

      グローバル型変換構成 YAML を使用して、変換エンジンを実行するときに、これらのデータ型のデフォルトの動作をオーバーライドします。

      構成 YAML は次の例のようになります。

      type: experimental_object_rewriter
      global:
        typeConvert:
          datetime: TIMESTAMP
          json: VARCHAR
      

BigQuery Data Transfer Service for Snowflake コネクタは、Snowflake テーブルを BigQuery に移行するときに、BigQuery 移行サービス変換エンジンをスキーマ マッピングに使用します。Snowflake データ転送を完了するには、まず変換用のメタデータを生成してから、変換エンジンを実行する必要があります。

  1. Snowflake 用の dwh-migration-tool を実行します。詳細については、変換と評価のためのメタデータを生成するをご覧ください。
  2. 生成された metadata.zip ファイルを Cloud Storage バケットにアップロードします。metadata.zip ファイルは、変換エンジンの入力として使用されます。
  3. target_types フィールドを metadata として指定して、バッチ変換サービスを実行します。詳細については、Translation API を使用して SQL クエリを変換するをご覧ください。

    • Snowflake のバッチ変換を実行するコマンドの例を次に示します。
      curl -d "{
      \"name\": \"sf_2_bq_translation\",
      \"displayName\": \"Snowflake to BigQuery Translation\",
      \"tasks\": {
          string: {
            \"type\": \"Snowflake2BigQuery_Translation\",
            \"translation_details\": {
                \"target_base_uri\": \"gs://sf_test_translation/output\",
                \"source_target_mapping\": {
                  \"source_spec\": {
                      \"base_uri\": \"gs://sf_test_translation/input\"
                  }
                },
                \"target_types\": \"metadata\",
            }
          }
      },
      }" \
      -H "Content-Type:application/json" \
      -H "Authorization: Bearer TOKEN" -X POST https://bigquerymigration.googleapis.com/v2alpha/projects/project_id/locations/location/workflows
    
    • このコマンドのステータスは、BigQuery の SQL 変換ページで確認できます。バッチ変換ジョブの出力は gs://translation_target_base_uri/metadata/config/ に保存されます。

サービス アカウントに必要な権限

Snowflake 転送では、サービス アカウントを使用して、指定された Cloud Storage パスの変換エンジン出力からデータを読み取ります。サービス アカウントに storage.objects.get 権限と storage.objects.list 権限を付与する必要があります。

転送構成と宛先データセットが作成される Google Cloud プロジェクトに属しているサービス アカウントを使用することをおすすめします。サービス アカウントが BigQuery データ転送を作成したプロジェクトとは異なる Google Cloud プロジェクトのサービス アカウントである場合は、プロジェクト間のサービス アカウントの承認を有効にする必要があります。

詳細については、BigQuery の IAM ロールと権限をご覧ください。