Snowflake 的結構定義偵測和對應

本指南說明如何從 Snowflake 轉移資料至 BigQuery 時定義結構定義。您可以使用 BigQuery 資料移轉服務自動偵測結構定義和資料類型對應,也可以使用轉譯引擎手動定義結構定義和資料類型。

預設結構定義偵測

Snowflake 連接器可自動偵測 Snowflake 資料表結構定義。如要使用自動結構定義偵測功能,請在設定 Snowflake 轉移作業時,將「翻譯輸出內容 GCS 路徑」欄位留空。

下表顯示 Snowflake 連接器如何將 Snowflake 資料類型對應至 BigQuery:

  • 下列資料類型會在 BigQuery 中對應為 STRING
    • TIMESTAMP_TZ
    • TIMESTAMP_LTZ
    • OBJECT
    • VARIANT
    • ARRAY
  • 下列資料類型會在 BigQuery 中對應為 TIMESTAMP
    • TIMESTAMP_NTZ

所有其他 Snowflake 資料類型都會直接對應至 BigQuery 中的同等類型。

使用翻譯引擎輸出內容做為結構定義

如要手動定義結構定義 (例如覆寫特定結構定義屬性),可以產生中繼資料,並按照下列步驟執行翻譯引擎:

限制

  • 系統會先以 Parquet 資料格式從 Snowflake 擷取資料,再載入至 BigQuery:

    • 系統不支援下列 Parquet 資料類型:
    • 系統不支援下列 Parquet 資料類型,但可以轉換:

      • TIMESTAMP_NTZ
      • OBJECTVARIANTARRAY

      執行翻譯引擎時,請使用全域類型轉換設定 YAML 覆寫這些資料類型的預設行為。

      設定 YAML 可能類似下列範例:

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

將 Snowflake 資料表遷移至 BigQuery 時,Snowflake 連接器的 BigQuery 資料移轉服務會使用 BigQuery 遷移服務翻譯引擎進行結構定義對應。如要完成 Snowflake 資料轉移,請先產生用於翻譯的中繼資料,然後執行翻譯引擎:

  1. 執行 Snowflake 的 dwh-migration-tool。詳情請參閱「產生翻譯和評估用的中繼資料」。
  2. 將產生的 metadata.zip 檔案上傳至 Cloud Storage bucket。翻譯引擎會將 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.getstorage.objects.list 權限。

建議服務帳戶與建立移轉設定和目的地資料集的 Google Cloud 專案 屬於同一個專案。如果服務帳戶位於 Google Cloud 的專案與建立 BigQuery 資料移轉作業的專案不同,則必須啟用跨專案服務帳戶授權

詳情請參閱「BigQuery IAM 角色和權限」。