En un Data Warehouse, cada clic en un e-commerce, cada factura de un ERP o cada lead en un CRM se convierte en un dato. El reto no es almacenar, sino desarrollar un Data Warehouse modular que mantenga esos datos seguros y confiables a medida que el negocio crece.
Diseñar para crecer es diseñar de forma sostenible. La sostenibilidad, en el contexto de un Data Warehouse, consiste en mantenibilidad y escalabilidad.
1. Data Warehouses mantenibles y escalables.
La Ley de Murphy—confirmada en la experiencia—nos dice que si algo puede salir mal, saldrá mal. Un Data Warehouse mantenible está diseñado con conciencia de esta realidad. La causa de los fallos de un Data Warehouse mantenible es fácil de encontrar, a la vez que su resolución es directa y sencilla.
Antes mencioné que el almacenamiento de un Data Warehouse tiende a ir en aumento. Por eso es tan importante la escalabilidad, que consiste en su adaptabilidad al crecimiento. Un Data Warehouse escalable requiere pocas o ninguna modificación para absorber un incremento volumétrico, o para incorporar una fuente de datos nueva.
El esfuerzo que dedica un ingeniero a que un Data Warehouse funcione según lo previsto nos da una idea de su mantenibilidad; el esfuerzo que dedica a expandir un Data Warehouse para acomodar un crecimiento nos da una idea de su escalabilidad.
No es fácil desarrollar soluciones mantenibles y escalables. El problema es cómo diseñar para un futuro que el diseñador sólo puede suponer.
Por suerte, no hace falta reinventar la rueda: cientos de ingenieros han ensayado diversas fórmulas para afrontar estos retos. ¿El resultado? Un método probado y comprobado para diseñar un Data Warehouse mantenible y escalable: se llama diseño modular.
2. ¿Qué es un Data Warehouse modular?
Cuando algo es modular, está construido a partir de módulos: elementos más pequeños, independientes y reutilizables. Fundamentalmente, un Data Warehouse está compuesto de dos cosas: transformaciones (queries de SQL) y tablas. Para que sean modulares, cada uno de estos componentes debe tener una función única y bien delimitada.
Por ejemplo, supongamos que quieres calcular los ingresos de un e-commerce:
- En un diseño no modular, escribirías una sola query que:
- Limpia datos de pedidos.
- Une clientes.
- Aplica reglas de negocio.
- Calcula ingresos netos.
- En un diseño modular, en cambio, lo dividirías en pasos:
- stg_orders.sql → limpia pedidos.
- int_customer_orders.sql → une clientes y pedidos.
- fct_revenue.sql → calcula ingresos netos.
El primer caso no es modular porque una sola query tiene varias funciones. En cambio, el segundo caso sí lo es, porque cada query cumple su propia función. Así, el concepto de modularidad está íntimamente ligado al de función.
Esto suscita la pregunta, ¿cómo sé si una query cumple una o más funciones? Por desgracia, no hay un método para contar funciones. Por regla general, cuando modularizar genera más engorro del que resuelve, tu labor ha terminado.
3. Modularidad, escalabilidad y mantenibilidad
Los diseños modulares son más mantenibles y escalables, porque sus partes son menos complejas. A continuación explico algunas de las razones por qué:
- Solución de errores:
Cuando algo falla en programación, suele ser más fácil encontrar el qué—mirando el mensaje de error—que el por qué. Los componentes pequeños aprovechan esta realidad: cuanto menor la extensión del módulo, menor la cantidad de líneas a escanear en busca del por qué.
- Modificación simplificada:
Los módulos pequeños son más predecibles: tienen menos dependencias con otros componentes, y esas dependencias, además, son más claras y explícitas. Gracias a su predictibilidad, la tarea de modificarlos es más expedita y mucho menos delicada.
- Reutilización de código:
Reutilizar módulos evita duplicar código innecesariamente. Además, si el componente falla, solucionar el problema en un lugar lo soluciona en todas partes. Por último, para agregar funcionalidades es más factible crear un módulo desde cero que alterar uno existente—si se quiere añadir una fuente de datos, por ejemplo.
4. Un Data Warehouse modular es un Data Warehouse feliz
Como mencioné al principio, el reto de un Data Warehouse no es crecer, sino que su arquitectura sea capaz de sostener su crecimiento. Para ello, su diseño debe ser mantenible y escalable. La modularidad—el uso de componentes reutilizables—es uno de los puntos cardinales de un diseño sostenible, porque facilita la resolución de errores, la modificación de la arquitectura existente y la reutilización del código.
Hemos visto que la modularidad es uno de los principios que articulan la arquitectura de un Data Warehouse sostenible. Esto requiere del arquitecto la previsión de elaborar un plan, a la vez que la disciplina necesaria para ceñirse a él. La elaboración de un diseño modular no es rápida, pero, a la larga, ahorra tiempo, esfuerzo y dinero.
En la continuación de este artículo hablaré de dbt, una herramienta de transformación que, con su enfoque modular, promueve las mejores prácticas de modelado. ¡No os lo perdáis!