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
STRINGen BigQuery:TIMESTAMP_TZTIMESTAMP_LTZOBJECTVARIANTARRAY
- Los siguientes tipos de datos se asignan como
TIMESTAMPen 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:
TIMESTAMP_TZ,TIMESTAMP_LTZ- Para obtener más información, consulta Evalúa los datos de Snowflake.
No se admiten los siguientes tipos de datos de Parquet, pero se pueden convertir:
TIMESTAMP_NTZOBJECT,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
- No se admiten los siguientes tipos de datos de Parquet:
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:
- Ejecuta
dwh-migration-toolpara Snowflake. Si deseas obtener más información, consulta Genera metadatos para la traducción y la evaluación. - Sube el archivo
metadata.zipgenerado a un bucket de Cloud Storage. El archivometadata.zipse usa como entrada para el motor de traducción. Ejecuta el servicio de traducción por lotes y especifica el campo
target_typescomometadata. 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.