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 bien puedes usar el motor de traducción para definir tu esquema y tus tipos de datos de forma manual.
Habilita la detección automática del esquema predeterminado
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 del resultado de la 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.
Cómo definir el esquema de forma manual con la salida del motor de traducción
El conector del Servicio de transferencia de datos de BigQuery para 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 definir tu esquema de forma manual (por ejemplo, para anular ciertos atributos del esquema), puedes generar tus metadatos y, luego, ejecutar el motor de traducción.
Limitaciones
Los datos se extraen de Snowflake en formato 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 Cómo evaluar los datos de Snowflake.
Los siguientes tipos de datos de Parquet no son compatibles, 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 ejecutes el motor de traducción.
El archivo YAML de configuración podría parecerse al siguiente ejemplo:
type: experimental_object_rewriter global: typeConvert: datetime: TIMESTAMP json: VARCHAR
- No se admiten los siguientes tipos de datos de Parquet:
Permisos obligatorios 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 Cloud Storage especificada.
Debes otorgar a la cuenta de servicio los permisos storage.objects.get y storage.objects.list.
Recomendamos que la cuenta de servicio pertenezca al mismo Google Cloud proyecto en el que se crean la configuración de transferencia y el conjunto de datos de destino. Si la cuenta de servicio se encuentra en un proyecto Google Cloud diferente del proyecto que creó la transferencia de datos de BigQuery, debes habilitar la autorización de cuentas de servicio entre proyectos.
Para obtener más información, consulta Roles y permisos de IAM de BigQuery.
Cómo definir manualmente la asignación del esquema
Puedes definir manualmente la asignación de esquemas siguiendo estos pasos:
- 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.- A continuación, se muestra 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/.