M5E6 — Proyecto: Modelado dimensional en Snowflake & DBT

Proyecto #4 - Construyendo un Data Warehouse

En este proyecto vas a tener la oportunidad de construir un modelo dimensional utilizando Snowflake y DBT.

Al finalizar este proyecto habrás aprendido a:

  • Crear un modelo dimensional a partir de un modelo relacional
  • Materializar modelos de DBT en Snowflake
  • Organizar los datos de forma modular, siguiendo la estructura modular propuesta por DBT.

Descripción del proyecto

En este proyecto trabajaremos con el siguiente dataset de Northwind. Aquí puedes descargar los archivos: Link al dataset.

📌 Nota: Algunos archivos contienen columnas que son imágenes serializadas como texto y contienen caracteres no estandar. Estas columnas no son necesarias para el ejercicio de modelado de datos que haremos y pueden ser removidas de los respectivos datasets.

Outcome final

La solución final debe:

  • Crear un modelo dimensional que permita modelar de manera analítica el dataset
  • El modelo dimensional debe incluir al menos 2 tablas de hechos
  • El modelo debe ser construido utilizando DBT.

Instrucciones

1. Selecciona una plataforma de Data Warehousing

Recomiendo utilizar Snowflake como tu Data Warehouse. Es una herramienta ampliamente usada en la industria y todo el proyecto se puede ejecutar con su versión gratuita. Puedes crear tu cuenta aquí.

📌 Recuerda, realmente el objetivo es practicar modelado dimensional, más allá que aprender una herramienta. Sin embargo, también es una buena oportunidad para que descubras nuevas herramientas que te pueden ser útiles en tu trabajo en la industria.

2. Ingesta de datos

  1. Descarga el archivo los CSVs del dataset: Link al dataset.
  2. Carga el dataset en tu plataforma elegida (Snowflake, PostgreSQL, DuckDB, etc). Se recomienda utilizar seeds en DBT para hacer esto.

3. Instala DBT y conéctalo con tu Data Warehouse

Instala DBT de manera local (es una librería de python) y conéctalo con Snowflake.

Aquí una guía de cómo hacerlo:

📌 https://medium.com/@sara.almedac/easy-guide-to-create-your-local-dbt-snowflake-playground-with-python-generated-data-sources-bc81f31c103c

4. Modelado de datos

Si quieres un recurso externo a este curso para repasar de modelado dimensional se recomienda revisar el siguiente recurso:

📖 Lectura recomendada: Master Dimensional Modeling

Para crear los modelos de DBT, asegúrate de seguir el modelo de de 3 capas propuesto por DBT: rawstg, y marts.

Este modelo se explica en el siguiente artículo:

📖 Lectura recomendada: Data modeling techniques for more modularity

Adicionalmente, si nunca haz usado DBT, te recomiendo mirar este mini-curso antes de iniciar con el proyecto:

📖 Mini-curso de DBT: Intro to Data Build Tool (dbt) // Create your first project!

a) Zona raw

  • Crea una tabla llamada raw_TABLE_NAME para cada csv.
  • Esta tabla representa el CSV tal cual viene. No debe tener transformaciones.

b) Zona stg

  • Crea una tabla stg_TABLE_NAME a partir de las tablas RAW.
  • Aplica transformaciones ligeras: renombrar columnas, estandarizar formatos, crear nuevas columnas basadas en lógica de negocio, usar CASE WHEN... para limpiar valores.

c) Zona marts

  • A partir de las tablas de staging stg_TABLE_NAME, construye un modelo dimensional.
  • Crea tablas de dimensiones (dim_) y de hechos (fct_).
  • Ejemplo de dimensiones posibles: dim_customerdim_product, etc...
  • Ejemplo de tabla de hechos: fct_sales.
Recuerda que en un modelo dimensional, buscamos responder preguntas de negocio rápidamente, con datos desnormalizados.

5. Calidad de Datos

Un buen Data Warehouse no solo debe estar bien modelado, también debe tener controles de calidad.

📖 Lectura recomendada: Building a data quality framework with dbt and dbt Cloud

Para esta sección:

  • Crea al menos 3 pruebas de calidad de datos usando DBT.

Acá algunas ideas:

  • Validar que no existan valores nulos en campos clave (e.g., Order IDCustomer ID).
  • Asegurarte de que las fechas caigan dentro de un rango válido.
  • Revisar que los valores numéricos (e.g., SalesQuantity) no sean negativos.

Capa opcional

  • Crear 2 DBs en Snowlake. Una para producción y otra para desarrollo. Luego construir un pipeline the CI/CD con Github actions que permita desplegar el código automáticamente a snowflake y mover los datos entre los warehouses de producción de acuerdo a variables de ambiente que se definan en el proyecto de DBT.

Recursos técnicos

Recursos recomendados


Completar y continuar