Detección y asignación de esquemas para Snowflake

En esta guía, se muestra cómo definir tu esquema cuando transfieres datos de Snowflake a BigQuery. Puedes usar el Servicio de transferencia de datos de BigQuery para detectar automáticamente el esquema y la asignación de tipos de datos, o puedes usar el motor de traducción para definir tu esquema y tipos de datos de forma manual.

Detección de esquemas predeterminada

El conector de Snowflake puede detectar automáticamente el esquema de tu tabla de Snowflake. Para usar la detección automática de esquemas, puedes dejar en blanco el campo Ruta de acceso de GCS de salida de traducción cuando configures una transferencia de Snowflake.

En la siguiente lista, se muestra cómo el conector de Snowflake asigna tus tipos de datos de Snowflake a BigQuery:

  • Los siguientes tipos de datos se asignan como STRING en BigQuery:
    • TIMESTAMP_TZ
    • TIMESTAMP_LTZ
    • OBJECT
    • VARIANT
    • ARRAY
  • Los siguientes tipos de datos se asignan como TIMESTAMP en BigQuery:
    • TIMESTAMP_NTZ

Todos los demás tipos de datos de Snowflake se asignan directamente a sus tipos equivalentes en BigQuery.

Usa el resultado del motor de traducción para el esquema

Para definir tu esquema de forma manual (por ejemplo, para anular ciertos atributos del esquema), puedes generar tus metadatos y ejecutar el motor de traducción con los siguientes pasos:

Limitaciones

  • Los datos se extraen de Snowflake en el formato de datos Parquet antes de cargarse en BigQuery:

    • No se admiten los siguientes tipos de datos de Parquet:
    • No se admiten los siguientes tipos de datos de Parquet, pero se pueden convertir:

      • TIMESTAMP_NTZ
      • OBJECT, VARIANT, ARRAY

      Usa el archivo YAML de configuración de conversión de tipo global para anular el comportamiento predeterminado de estos tipos de datos cuando ejecutas el motor de traducción.

      El archivo YAML de configuración puede ser similar al siguiente ejemplo:

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

El Servicio de transferencia de datos de BigQuery para el conector de Snowflake usa el motor de traducción del servicio de migración de BigQuery para la asignación de esquemas cuando se migran tablas de Snowflake a BigQuery. Para completar una transferencia de datos de Snowflake, primero debes generar metadatos para la traducción y, luego, ejecutar el motor de traducción:

  1. Ejecuta dwh-migration-tool para Snowflake. Si deseas obtener más información, consulta Genera metadatos para la traducción y la evaluación.
  2. Sube el archivo metadata.zip generado a un bucket de Cloud Storage. El archivo metadata.zip se usa como entrada para el motor de traducción.
  3. Ejecuta el servicio de traducción por lotes y especifica el campo target_types como metadata. Para obtener más información, consulta Traduce consultas en SQL con la API de Translation.

    • El siguiente es un ejemplo de un comando para ejecutar una traducción por lotes para 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
    
    • Puedes verificar el estado de este comando en la página Traducción de SQL en BigQuery. El resultado del trabajo de traducción por lotes se almacena en gs://translation_target_base_uri/metadata/config/.

Permisos necesarios de la cuenta de servicio

En una transferencia de Snowflake, se usa una cuenta de servicio para leer datos del resultado del motor de traducción en la ruta de acceso de Cloud Storage especificada. Debes otorgar a la cuenta de servicio los permisos storage.objects.get y storage.objects.list.

Te recomendamos que la cuenta de servicio pertenezca al mismo Google Cloud proyecto en el que se crea la configuración de transferencia y el conjunto de datos de destino. Si la cuenta de servicio está en un Google Cloud proyecto diferente del proyecto que creó la transferencia de datos de BigQuery, debes habilitar la autorización de la cuenta de servicio entre proyectos.

Para obtener más información, consulta Roles y permisos de IAM de BigQuery.