Snowflake 的架构检测和映射

本指南介绍了如何将数据从 Snowflake 转移到 BigQuery 时定义架构。您可以使用 BigQuery Data Transfer Service 自动检测架构和数据类型映射,也可以使用转换引擎手动定义架构和数据类型。

默认架构检测

Snowflake 连接器可以自动检测 Snowflake 表架构。如需使用自动架构检测,您可以在设置 Snowflake 转移作业时将转换输出 GCS 路径 字段留空。

以下列表展示了 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
      

在将 Snowflake 表迁移到 BigQuery 时,适用于 Snowflake 的 BigQuery Data Transfer Service 连接器会使用 BigQuery 迁移服务转换引擎进行架构映射。如需完成 Snowflake 数据转移,您必须先生成元数据以进行转换,然后运行转换引擎:

  1. 运行适用于 Snowflake 的 dwh-migration-tool。如需了解详情,请参阅生成元数据以进行转换和评估
  2. 将生成的 metadata.zip 文件上传到 Cloud Storage 存储桶。metadata.zip 文件用作转换引擎的输入。
  3. 运行批量转换服务,并将 target_types 字段指定为 metadata。如需了解详情,请参阅使用转换 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 项目 。如果服务账号属于与创建 BigQuery 数据转移作业的项目不同的 Google Cloud 项目,则您必须启用跨项目服务账号授权

如需了解详情,请参阅 BigQuery IAM 角色和权限