Icono del sitio Aprender BIG DATA

Snowflake Warehouses: Guía rápida para entenderlos

Snowflake Warehouses

Snowflake Warehouses

¿Sabías que el tiempo de arranque de un warehouse en Snowflake puede afectar directamente el rendimiento de tus pipelines de datos? Lo que muchos no saben es que este arranque no siempre es instantáneo… y entender por qué puede marcar la diferencia entre un sistema eficiente y uno que desperdicia tiempo y créditos. Pero aquí no acaba la historia: lo más interesante es cómo puedes controlar estos factores para tener una plataforma más rápida, segura y optimizada.

Snowflake Warehouses

En este artículo descubrirás cómo funciona realmente un warehouse en Snowflake, qué influye en su rendimiento, y cómo configurarlo para ahorrar costes, escalar automáticamente y proteger tus datos.

Snowflake Warehouse

Un warehouse en Snowflake es un clúster virtual de recursos de cómputo que se encarga de ejecutar consultas, cargas de datos y transformaciones. Es la unidad de procesamiento en Snowflake, separada del almacenamiento, lo que permite escalar ambos de forma independiente.

Un warehouse:

Tiempos de Arranque

Cada warehouse tarda un tiempo en arrancar, pero generalmente es muy rápido (del orden de milisegundos a pocos segundos). Aquí tienes los factores más importantes que influyen en el tiempo de arranque:

  1. Si el warehouse estaba apagado: Si el warehouse estaba completamente suspendido, tardará unos segundos en encenderse. Snowflake almacena los metadatos en caché, lo que ayuda a minimizar la latencia.
  2. Tamaño del warehouse: Los warehouses más grandes (L, XL, 2XL, etc.) pueden tardar un poco más en arrancar porque asignan más recursos. Los más pequeños (XS, S) arrancan más rápido.
  3. Estado de la caché: Si el warehouse estuvo activo recientemente, la caché puede seguir disponible y la activación será casi instantánea. Si se ha suspendido por mucho tiempo, puede requerir tiempo adicional para cargar datos en memoria.
  4. Carga de trabajo en la región: Si hay alta demanda en los recursos compartidos de Snowflake, el arranque puede tardar más de lo normal.

¿Cómo reducir el tiempo de arranque?

Aunque levantar warehouses en Snowflake no es completamente instantáneo, su rendimiento es muy rápido comparado con otros sistemas de data warehousing.

¿Quieres Convertirte en Ingeniero de Datos?

Además de evaluar los factores anteriores, te recomiendo las siguientes ideas para reducir los tiempos de arranque de tus warehouses:

Asignación de Warehouse a roles

Cada warehouse en Snowflake puede estar vinculado a un rol específico, lo que permite que solo ciertos usuarios ejecuten consultas en él.

Si, por ejemplo, tienes dos warehouses (WH_FINANZAS y WH_MARKETING), puedes crear roles separados:

CREATE ROLE role_finanzas;
CREATE ROLE role_marketing;

GRANT USAGE ON WAREHOUSE WH_FINANZAS TO role_finanzas;
GRANT USAGE ON WAREHOUSE WH_MARKETING TO role_marketing;

Luego, asignas estos roles a los usuarios correspondientes:

GRANT ROLE role_finanzas TO usuario_finanzas;
GRANT ROLE role_marketing TO usuario_marketing;

Con esto, cada usuario solo podrá ejecutar consultas en su warehouse asignado.

Control de accesos a bases de datos y esquemas

Además de aislar los warehouses, puedes restringir el acceso a las bases de datos y esquemas para que un usuario no pueda consultar datos fuera de su ámbito.

Si WH_FINANZAS solo debe acceder a la base de datos DB_FINANZAS:

GRANT USAGE ON DATABASE DB_FINANZAS TO role_finanzas;
GRANT USAGE ON SCHEMA DB_FINANZAS.PUBLIC TO role_finanzas;
GRANT SELECT ON ALL TABLES IN SCHEMA DB_FINANZAS.PUBLIC TO role_finanzas;

Y para WH_MARKETING:

GRANT USAGE ON DATABASE DB_MARKETING TO role_marketing;
GRANT USAGE ON SCHEMA DB_MARKETING.PUBLIC TO role_marketing;
GRANT SELECT ON ALL TABLES IN SCHEMA DB_MARKETING.PUBLIC TO role_marketing;

Así, los usuarios de cada warehouse solo pueden consultar sus respectivas bases de datos.

Row Access Policies (Filtrado por filas)

Si necesitas aún más granularidad, puedes usar Row Access Policies para filtrar datos según el usuario o rol.

Si quieres que solo ciertos usuarios dentro de role_finanzas puedan ver datos específicos:

CREATE OR REPLACE ROW ACCESS POLICY policy_finanzas
AS (departamento STRING) RETURNS BOOLEAN ->
current_role() = 'role_finanzas';

ALTER TABLE DB_FINANZAS.PUBLIC.transacciones
ADD ROW ACCESS POLICY policy_finanzas;

Esto asegurará que los usuarios solo puedan ver las filas correspondientes a su rol.

Resource Monitors

Si quieres asegurarte de que un warehouse no sea utilizado más de lo debido, puedes aplicar un Resource Monitor que limite su consumo.

Limitar WH_FINANZAS a 100 créditos al mes:

CREATE RESOURCE MONITOR monitor_finanzas 
WITH CREDIT_QUOTA = 100
TRIGGERS ON 90 PERCENT DO SUSPEND
ON 100 PERCENT DO SUSPEND_IMMEDIATE;

ALTER WAREHOUSE WH_FINANZAS
SET RESOURCE_MONITOR = monitor_finanzas;

Esto evitará que el warehouse sea sobreutilizado por usuarios de ese rol.

Resumen de estrategias

Al final, debes combinar estas estrategias para controlar los permisos y los accesos a tus warehouses:

EstrategiaQué controla
Asignar warehouses a rolesSolo ciertos usuarios pueden ejecutar queries en un warehouse
Controlar acceso a bases de datos y esquemasSolo ciertos roles pueden ver ciertos datos
Aplicar Row Access PoliciesControla qué filas de una tabla puede ver cada usuario
Configurar Resource MonitorsEvita que un warehouse consuma demasiados créditos

Warehouse Multi-cluster en Snowflake

En Snowflake, cuando configuras un warehouse multi-cluster, puedes definir un número mínimo (min) y máximo (max) de clusters. Esto permite que el warehouse escale dinámicamente según la carga de trabajo.

MIN_CLUSTER_COUNT (mínimo de clusters): Es el número mínimo de clusters que Snowflake mantendrá activos. Si hay poca carga, el warehouse reducirá el número de clusters, pero nunca por debajo de este valor.

MAX_CLUSTER_COUNT (máximo de clusters): Es el número máximo de clusters que Snowflake puede activar automáticamente. Si hay muchas consultas simultáneas y se necesita más poder de procesamiento, Snowflake escalará hasta este límite

Si hay pocas consultas, solo funciona el número mínimo de clusters (MIN_CLUSTER_COUNT).

Si la demanda aumenta, Snowflake activa más clusters hasta el máximo (MAX_CLUSTER_COUNT).

Cuando la carga disminuye, los clusters adicionales se apagan automáticamente.

Ejemplo de configuración:

CREATE WAREHOUSE WH_MULTICLUSTER 
WITH WAREHOUSE_SIZE = 'LARGE'
MIN_CLUSTER_COUNT = 1
MAX_CLUSTER_COUNT = 5
AUTO_SUSPEND = 300
AUTO_RESUME = TRUE;

En este caso, si hay pocas consultas, solo hay 1 cluster activo. Si muchas consultas se ejecutan al mismo tiempo, Snowflake escala hasta 5 clusters para evitar colas. Si la carga baja, los clusters extra se apagan, pero al menos 1 siempre queda activo.

¿Cuándo usar un warehouse multi-cluster?

En general, debes considerar usar un warehouse multi-cluster cuando tienes múltiples usuarios o procesos concurrentes ejecutando consultas. Esta es la razón más importante.

Además, este tipo de warehouses facilitarán que evites las colas en los momentos de alta demanda.

No es útil si solo ejecutas pocas consultas o procesos secuenciales, ya que un solo cluster puede manejar la carga.

ParámetroQué hace
MIN_CLUSTER_COUNTMínimo de clusters que siempre estarán activos
MAX_CLUSTER_COUNTMáximo de clusters que Snowflake puede activar automáticamente
EscalabilidadSe activan más clusters cuando hay mucha carga y se apagan cuando no son necesarios
Casos de usoWorkloads con alta concurrencia y muchas consultas simultáneas

Sigue Aprendiendo con Cursos y Certificaciones

Aquí tienes los cursos de Udemy que te recomiendo para que sigas aprendiendo sobre Snowflake y cómo implementarlo en tus proyectos Big Data como Data Warehouse, ¡no te los pierdas!

Paso 1:

Aprende los conceptos fundamentales teóricos y prácticos de Snowflake

Este primer curso te permitirá familiarizarte rápidamente con los conceptos teóricos fundamentales.

Paso 2:

Domina el Data Warehouse de Snowflake con ejercicios prácticos

Después, te recomiendo hacer este curso práctico en el que desarrollarás conceptos más avanzados con ejemplos acerca de la arquitectura, cargas de datos y mejores prácticas.

Paso 3:

Snowflake para desarrolladores

Por último, este curso está orientado a desarrolladores, en el que usarás el conector de Python para implementar soluciones usando todas las características de la tecnología. Tiene más de 4 horas de vídeo.

Salir de la versión móvil