En cualquier proyecto profesional de datos, trabajar directamente sobre producción es una mala práctica. Los equipos suelen necesitar varios entornos para desarrollar, probar y desplegar cambios de forma controlada.
Cuando utilizamos dbt Labs junto con Snowflake, es fundamental definir correctamente los entornos de trabajo.
Los más comunes son:
- Development (dev)
- Testing / Staging (test)
- Production (prod)
Una correcta gestión de entornos permite reducir riesgos, mejorar colaboración y mantener pipelines confiables.
¿Por qué son importantes los entornos?
Sin separación de entornos pueden ocurrir problemas como:
- Sobrescribir datos de producción accidentalmente
- Ejecutar pruebas sobre datasets reales
- Interferir con consultas de negocio
- Generar inconsistencias en pipelines
Separar entornos permite experimentar sin afectar sistemas críticos.
Cómo funciona la configuración de entornos en dbt
dbt gestiona conexiones a bases de datos mediante el archivo profiles.yml.
Este archivo define:
- Conexiones a Snowflake
- Credenciales
- Warehouses
- Bases de datos
- Esquemas
Cada entorno se configura como un target.
Ejemplo de profiles.yml
my_dbt_project:
target: dev
outputs:
dev:
type: snowflake
account: my_account
user: my_user
password: my_password
role: transformer
database: DEV_DB
warehouse: DEV_WH
schema: dbt_dev
prod:
type: snowflake
account: my_account
user: my_user
password: my_password
role: transformer
database: PROD_DB
warehouse: PROD_WH
schema: analytics
Aquí tenemos dos entornos configurados:
- dev
- prod
Ejecutar dbt en un entorno específico
Por defecto, dbt ejecuta el entorno definido en target.
Pero también podemos especificarlo manualmente:
dbt run –target prod
Esto ejecutará los modelos en la base de datos y esquema configurados para producción.
Uso de esquemas dinámicos
En entornos de desarrollo es común crear esquemas dinámicos para cada usuario.
Ejemplo:
schema: dbt_{{ env_var(‘USER’) }}
Esto permite que cada desarrollador tenga su propio espacio de trabajo sin interferir con otros.
Diferencias entre entornos
Un ejemplo típico de configuración:
|
Entorno |
Base de datos |
Warehouse |
|
Dev |
DEV_DB |
DEV_WH |
|
Test |
STAGING_DB |
STAGING_WH |
|
Prod |
PROD_DB |
PROD_WH |
Esto permite aislar recursos y controlar consumo.
Integración con CI/CD
En proyectos maduros, los entornos se integran con pipelines automáticos.
Ejemplo de flujo:
- Desarrollo en entorno dev
- Pull request en Git
- Tests automáticos en entorno staging
- Despliegue en producción
Esto permite mantener calidad y trazabilidad.
Uso de variables por entorno
dbt permite cambiar comportamiento según entorno.
Ejemplo:
{% if target.name == ‘prod’ %}
WHERE is_active = TRUE
{% else %}
LIMIT 1000
{% endif %}
Esto permite consultas más ligeras en desarrollo.
Buenas prácticas
- Nunca desarrollar directamente en producción
- Usar esquemas aislados por desarrollador
- Definir warehouses distintos por entorno
- Integrar control de versiones
- Automatizar despliegues
Estas prácticas alinean proyectos de datos con estándares de ingeniería de software.
Errores comunes
- Compartir esquema dev entre varios desarrolladores
- Usar mismo warehouse para todos los entornos
- No separar bases de datos
- Ejecutar dbt run en producción accidentalmente
- No controlar credenciales
La disciplina en entornos es fundamental.
Snowflake y gestión de entornos
Snowflake facilita esta arquitectura gracias a:
- Separación de warehouses
- Gestión flexible de roles
- Bases de datos independientes
- Cloning instantáneo
Estas capacidades hacen que crear entornos aislados sea rápido y económico.
Conclusión
Gestionar correctamente los entornos en dbt es esencial para mantener proyectos de datos organizados, seguros y escalables. La combinación de dbt y Snowflake permite crear flujos de trabajo estructurados donde desarrollo, pruebas y producción están claramente separados.
Adoptar buenas prácticas en la gestión de entornos no solo reduce riesgos, sino que también facilita colaboración entre equipos y mejora la calidad de los pipelines de datos.




