Manual de Snowflake
Snowflake es una plataforma de datos en la nube para analitica, data warehousing, intercambio de datos y cargas de ingenieria de datos. En este repositorio queda ubicado en bases-de-datos porque su nucleo es el almacenamiento, el gobierno, el SQL y la administracion de datos. Los manuales de data-engineering lo enlazaran cuando lo usen como destino de pipelines, pero no repetiran su contenido.
La idea principal de Snowflake es separar almacenamiento, computo y servicios de gestion. Los datos viven en una capa gestionada por la plataforma; las consultas se ejecutan en warehouses virtuales; y operaciones como metadatos, seguridad, optimizacion y planificacion se gestionan como servicios.
Capitulos previstos
- Introduccion y arquitectura
- Warehouses bases y esquemas
- Carga de datos
- SQL en Snowflake
- Time Travel y cloning
- Roles permisos y seguridad
- Optimizacion y costes
- Pipelines con Snowpipe
- Buenas practicas
Conceptos esenciales
- Account: entorno de Snowflake asociado a una organizacion, region y proveedor cloud.
- Database: contenedor logico de schemas.
- Schema: agrupacion de tablas, vistas, stages, file formats, streams, tasks y otros objetos.
- Table: estructura donde se almacenan datos.
- Virtual warehouse: cluster de computo que ejecuta consultas, cargas y transformaciones.
- Role: unidad principal para permisos. Los privilegios se conceden a roles, no directamente a personas.
- Stage: ubicacion interna o externa desde la que se cargan o consultan archivos.
- Micro-partitions: particiones internas gestionadas automaticamente por Snowflake.
- Credit: unidad de coste consumida principalmente por computo.
Arquitectura resumida
Usuarios y herramientas
|
v
Servicios de Snowflake
autenticacion, metadata, optimizador, seguridad
|
v
Virtual warehouses
computo elastico para SQL, cargas y transformaciones
|
v
Almacenamiento gestionado
tablas, micro-partitions, time travel, clonesSeparar almacenamiento y computo permite que un equipo de BI use un warehouse pequeno, un proceso de carga use otro distinto y una transformacion pesada use un warehouse mayor sin bloquearse entre si. Esa separacion tambien obliga a controlar costes: un warehouse mal configurado puede consumir creditos aunque las tablas esten bien modeladas.
Primer contexto de trabajo
Un flujo basico suele empezar fijando rol, warehouse, base de datos y schema:
USE ROLE analyst_role;
USE WAREHOUSE compute_wh;
USE DATABASE analytics_db;
USE SCHEMA raw;Crear un warehouse pequeno para pruebas:
CREATE WAREHOUSE IF NOT EXISTS compute_wh
WAREHOUSE_SIZE = 'XSMALL'
AUTO_SUSPEND = 60
AUTO_RESUME = TRUE
INITIALLY_SUSPENDED = TRUE;Crear una base y schemas por capas:
CREATE DATABASE IF NOT EXISTS analytics_db;
CREATE SCHEMA IF NOT EXISTS analytics_db.raw;
CREATE SCHEMA IF NOT EXISTS analytics_db.staging;
CREATE SCHEMA IF NOT EXISTS analytics_db.marts;Buenas practicas desde el inicio
- Separa warehouses por tipo de carga: BI, ingesta, transformacion y exploracion.
- Activa
AUTO_SUSPENDen todos los warehouses salvo que haya una razon clara. - Usa roles por responsabilidad:
loader_role,transformer_role,analyst_role. - Organiza schemas por capas de datos:
raw,staging,marts. - Evita cargar datos directamente en tablas finales sin validacion previa.
- Revisa consumo con frecuencia durante pruebas y aprendizaje.
Errores comunes
- Tratar Snowflake como una base de datos tradicional instalada en un servidor propio.
- Usar un unico warehouse para todos los procesos.
- Conceder permisos a usuarios individuales en vez de roles.
- Mezclar datos crudos, limpios y analiticos en el mismo schema.
- Olvidar suspender warehouses en entornos de pruebas.
Ejercicio
- Crea una base
learning_db. - Crea los schemas
raw,stagingymarts. - Crea un warehouse
learning_whconAUTO_SUSPEND = 60. - Cambia el contexto de sesion con
USE ROLE,USE WAREHOUSE,USE DATABASEyUSE SCHEMA. - Comprueba el contexto activo con:
SELECT CURRENT_ROLE(), CURRENT_WAREHOUSE(), CURRENT_DATABASE(), CURRENT_SCHEMA();