Redirecciona tu proyecto de dbt a Databricks sin volver a escribir modelos, pruebas o lógica de negocio.
• Aprende a redirigir tu proyecto dbt existente desde cualquier almacén de datos de origen a Databricks con cambios mínimos de código
• Conoce paso a paso los aspectos prácticos: configuración del adaptador, mapeo de espacios de nombres, diferencias de dialectos SQL, flujo de trabajo de desarrollo y programación de la producción con Lakeflow Jobs
• Comprende cómo validar los resultados modelo por modelo y realizar la transición de forma segura
Cada vez más equipos ejecutan sus transformaciones de dbt en Databricks Lakehouse: una plataforma abierta sin dependencia de proveedores, pipelines unificados, gobernanza integrada de Unity Catalog y una excelente relación precio/rendimiento.
Su proyecto de dbt funciona: los modelos compilan, las pruebas se superan y su lógica de transformación reside en SQL y YAML con control de versiones, no codificada de forma rígida en un único almacén de datos. El framework de adaptador abierto de dbt está diseñado exactamente para este desacoplamiento, por lo que migrar de un data warehouse en la nube a otro es principalmente cuestión de cambiar el adaptador y la configuración de conexión, además de algunos ajustes de dialecto, no de reescribir su DAG o lógica de negocio.
Databricks cumple con eso gracias al adaptador dbt-databricks, el almacenamiento de lakehouse abierto (Delta Lake y Apache Iceberg™), Unity Catalog y Lakeflow Jobs, que le ofrecen una plataforma abierta y unificada donde dbt se ejecuta con gobernanza integrada y una excelente relación precio/rendimiento desde el primer día, lo que lo convierte en un lugar ideal para ejecutar sus cargas de trabajo de dbt. Por eso, más de 3000 organizaciones ya ejecutan dbt en Databricks.
Si ha estado evaluando una migración, la buena noticia es que no tiene que reconstruir su proyecto. Este artículo explica cómo redirigir un proyecto de dbt activo a Databricks cambiando el adaptador y el perfil, gestionando algunas diferencias de SQL y manteniendo su lógica de transformación dentro de dbt.
Un desafío recurrente en los proyectos de migración de data warehouses es intentar mover todo a la vez, lo que puede provocar retrasos y cuellos de botella. Un mejor enfoque es comenzar con la capa de transformación, lo cual es una forma rápida de generar ahorros de costos en una migración.
Los proyectos de dbt ya son modulares y testeables. Eso los convierte en candidatos ideales para una migración incremental. Al redirigir dbt a Databricks, obtiene:

Alcance: Esta guía solo cubre la redirección de su capa de transformación de dbt. Se asume que sus datos de origen ya están en Databricks (almacenados como tablas Delta o Iceberg y registrados en Unity Catalog) y que sus catálogos y esquemas ya existen. La migración de los datos en sí y la configuración de Unity Catalog son esfuerzos independientes; consulte las guías de migración de Databricks y Lakebridge para obtener más información al respecto.
Antes de comenzar, asegúrese de tener:
El modelo que migraremos en este ejemplo es una tabla de hechos analítica estándar construida sobre dos modelos de origen: orders y order_items. Agrega datos a nivel de pedido para calcular los ingresos totales y compila una lista de productos vendidos para cada transacción individual del último año.
Este modelo utiliza varios patrones comunes de dialecto SQL, como regexp_substr, div0 y object_construct, que a menudo difieren entre los almacenes de datos, lo que lo convierte en un excelente ejemplo. Una vez que vea cómo manejar estos patrones aquí, podrá aplicar el mismo enfoque a todos los demás modelos de su proyecto.
Esta parte cubre el trabajo de migración que se realiza una sola vez, el cual incluye instalar el adaptador, mapear espacios de nombres y gestionar las diferencias de dialecto.
Instalar el adaptador dbt-databricks
El adaptador dbt-databricks es el puente entre su proyecto de dbt y el almacén de Databricks Lakehouse. Traduce el SQL compilado de dbt en consultas compatibles con Databricks.
(Usuarios de dbt Platform: seleccionen "Databricks" como tipo de conexión en un nuevo entorno, tal como se detalla en la documentación de dbt; el adaptador se instala automáticamente).
Agregue un destino de Databricks a `profiles.yml`. Mantenga intacto su destino existente; lo necesitará durante la validación. Agregue un segundo destino junto a él:
Verifica la conexión:
Deberías ver: Connection test: [OK connection ok].
Si aún no puedes conectarte, sigue los pasos de resolución de problemas de conexión en la guía de integración de Databricks + dbt y en la referencia de perfil de dbt Databricks.
Consejo profesional: http_path determina si las consultas se ejecutan en un SQL warehouse (recomendado para dbt) o en un clúster de uso general. Los SQL warehouses ofrecen una mejor relación precio/rendimiento para cargas de trabajo con un uso intensivo de SQL.
Databricks utiliza un espacio de nombres de tres niveles: catalog.schema.table. Actualiza las entradas de sources.yml de las que lee fct_orders:
Actualiza schema.yml para incluir pruebas
Consejo profesional: Si omites database:, las consultas irán al catálogo predeterminado del espacio de trabajo. Establécelo de forma explícita.
Ahora ejecuta dbt compile para el modelo:
Nuestro modelo fct_orders produjo 3 errores de compilación como se detalla a continuación, todos relacionados con el dialecto. Esto es de esperarse y, aunque estos tres son representativos de los problemas de dialecto que experimentan la mayoría de los proyectos, no lo son todo: las migraciones más grandes también se topan con estrategias de modelos incrementales, instantáneas (snapshots) y funciones semiestructuradas sin un equivalente directo.
Utilizamos intencionalmente un modelo de ejemplo que se basa en patrones específicos del dialecto como REGEXP_SUBSTR con parámetros posicionales, DIV0 para la división segura y OBJECT_CONSTRUCT para la creación de JSON - el tipo de funciones que difieren entre los warehouses. De esa manera, los errores iniciales de dbt run se convierten en una guía a lo largo del proceso de conversión, mostrándote cómo transformarlos en macros portátiles y SQL compatible con Databricks para que puedas aplicar las mismas correcciones en el resto de tu proyecto. Para demostrarlo, te guiaremos a través de cada error, su causa raíz y la solución. Antes de profundizar en los errores, una nota sobre la portabilidad: cuando una función tiene un equivalente portátil, las macros de bases de datos cruzadas de dbt (el espacio de nombres dbt.*) te permiten escribirla una sola vez para que se compile en cualquier warehouse, algo que vale la pena adoptar a medida que estandarizas. Analizaremos cada error y su solución, y luego mostraremos cómo automatizar la conversión en un proyecto grande.
Databricks sigue el dialecto Apache SQL y solo admite 2 parámetros para REGEXP_SUBSTR
Solución: usa la función nativa regexp_extract() de Databricks
También podrías dejar que Genie Code realice esta conversión por ti; solucionar brechas de dialecto como esta es exactamente para lo que sirve. Haremos las tres a mano para que puedas ver qué está cambiando.
Causa raíz: algunos warehouses usan DIV0 para devolver 0 en lugar de generar un error al dividir por cero.
Solución: agrega dbt_utils a tus paquetes y usa su función integrada safe_divide
No se puede resolver la rutina `object_construct`
Solución: Usa la función named_struct de Databricks
Vuelve a ejecutar la compilación:
Se compiló correctamente. Cambios totales de dialecto para este modelo: dbt_utils package installed (para división segura), regexp_substr call converted to regexp_extract, llamada a div0 reemplazada por dbt_utils.safe_divide(), object_construct call converted por named_struct.
Corregir tres funciones a mano es fácil. Un proyecto de dbt real tiene cientos o miles de modelos, y estas brechas de dialecto son exactamente lo que las herramientas de IA resuelven automáticamente. Genie Code convierte SQL específico del dialecto y se encarga de estas correcciones directamente en el editor, para que dediques tu tiempo a revisar las conversiones en lugar de escribir cada una de ellas.
Con la compilación en verde, ejecuta el modelo y cualquier prueba que exista:
Tanto la compilación del modelo como las pruebas se completaron correctamente. Consejo profesional:
equality o accepted_values fallan, casi siempre se debe a la precisión de punto flotante, no a un error de lógica.Un dbt run en verde demuestra que el SQL se ejecuta. Ahora, debemos conciliar los resultados entre el almacén de datos heredado y Databricks. Utilice dbt-audit-helper para comparar fila por fila.
Instalar:
Compare fct_orders en ambos almacenes de datos. En analyses/compare_fct_orders.sql:
Ejecútelo en Databricks (asumiendo que ha replicado el resultado heredado en Databricks para la comparación, o ejecute una comparación entre almacenes de datos):
Resultado esperado:
Nota: Estos ejemplos abarcan los patrones más comunes, pero no son exhaustivos. Para cualquier discrepancia adicional (por ejemplo, recorte de cadenas, intercalación o comportamiento de UDF personalizadas), configure summarize=false para materializar filas de muestra, inspeccione algunas claves primarias donde in_a y in_b difieran, corrija el modelo o la macro, y vuelva a ejecutar hasta obtener una coincidencia del 100 %.
En nuestra ejecución: fct_orders coincidió exactamente.
En lugar de mantener una capa de orquestación independiente para dbt, puede ejecutar dbt junto con la ingesta ascendente y las acciones descendentes en una sola canalización con Lakeflow Jobs. dbt es un tipo de tarea de primer nivel dentro de Jobs y no necesita un orquestador externo ni una imagen de Docker personalizada.
Crear el Job:
Lo que Jobs ofrece listo para usar:

Una vez que haya validado su proyecto de dbt e implementado en Databricks, el siguiente paso es trasladar el tráfico de producción a Databricks de manera controlada, mantener una ruta de retorno rápida (rollback) y evitar pagar por dos almacenes de datos más tiempo del necesario.
Siga esta lista de verificación:
profiles.yml para que prod apunte a Databricks; ahora, todas las nuevas ejecuciones de producción escribirán en Databricks.system.billing.usage para confirmar el perfil de gastos de Databricks.La mayor parte del trabajo que acaba de realizar se hace una sola vez: la instalación del adaptador, el destino profiles.yml y el cambio de espacio de nombres de origen. Una vez que estén listos, volver a apuntar el siguiente modelo solo requerirá las correcciones incrementales de dialecto.
Algunos patrones requieren más que un cambio de dialecto, y se encontrará con ellos a medida que escale:
Para el trabajo más complejo, apóyese en las guías de migración completas.
A partir de ahí, migre en pequeños lotes y trabaje en orden de DAG: primero los orígenes, luego staging, intermedias y marts, de modo que cada lote se valide correctamente con los modelos que ya ha trasladado. Ejecute ambos destinos en paralelo y use audit-helper para comparar cada modelo hasta que todos coincidan. Cuando el último modelo esté en verde, realice la transición de todo el proyecto. Esta guía es un recorrido simplificado para volver a apuntar, mientras que el alcance completo de una migración se cubre en nuestras guías de migración públicas.
Volver a apuntar dbt a Databricks es una forma práctica y de bajo riesgo de iniciar una migración de almacén de datos. Sus modelos y pruebas siguen siendo los mismos: solo está cambiando dónde se ejecutan, y obtiene formatos y estándares de código abierto como Delta Lake y Apache Iceberg™, con Unity Catalog proporcionando gobernanza y linaje sobre una plataforma que también puede servir para su trabajo de AI descendente. Comience con un modelo, compare los resultados y luego expándalo hasta que se sienta cómodo haciendo de Databricks el hogar principal de su proyecto de dbt.
¿Listo para probarlo?
Para obtener más información sobre dbt con Databricks, explore el adaptador dbt-databricks en GitHub.
(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original
Suscríbete a nuestro blog y recibe las últimas publicaciones directamente en tu bandeja de entrada.