Hace unos días os comentaba qué era el Linaje de Datos y su importancia dentro de un proyecto de Data, si os lo habéis perdido o queréis recordar lo que os contaba, os dejo aquí el enlace al post.
Pues bien, siguiendo esta temática, hoy os quiero hablar de un proyecto que nos ayudará a implementar el linaje de datos en nuestros proyectos, a través de alguna de las herramientas que lo implementan. Este proyecto se trata de OpenLineage. ¡Vamos al lío!
¿ Qué es OpenLineage ?
OpenLineage es un framework abierto para la recopilación y el análisis de datos de linaje. Su core es una especificación extensible que los sistemas pueden utilizar para interoperar con metadatos de linaje.
Ofrece un modelo de datos que define cómo se describe el linaje de los datos; se trata de una estructura jerárquica que permite una visualización y análisis eficientes de la procedencia y tratamiento de los datos.
Y complementa este modelo de datos base con una API, que permite a las diferentes herramientas y plataformas de datos interactuar y registrar la información de linaje. Gracias a esta API, los usuarios pueden integrar OpenLineage en su infraestructura existente, ya sea en sistemas de almacenamiento, herramientas de procesamiento de datos, o plataformas de visualización. Y el poder llamar a esta API permite el registrar eventos en tiempo real, proporcionando una visión dinámica de los flujos de datos, lo que facilita la identificación de problemas o cuellos de botella en los procesos de datos.
Modelo de datos de OpenLineage

El modelo de datos base de OpenLineage está diseñado para capturar el linaje de datos de manera estructurada y comprensible. Se compone de varios elementos clave que permiten a las organizaciones rastrear el flujo de datos desde su origen hasta su destino final. A continuación, se detallan los componentes principales del modelo:
1. Dataset:
Se trata del elemento central del modelo. Representa cualquier conjunto de datos que se utiliza, transforma o genera en un proceso. Cada Dataset tiene atributos como su nombre, tipo (por ejemplo, tabla, archivo, etc.) y una identificación única. Esto permite a los usuarios identificar y referenciar Datasets de manera precisa a lo largo de su ciclo de vida.
2. Job:
El Job representa una tarea o proceso que se ejecuta y que involucra uno o más Datasets. Puede ser un trabajo de procesamiento de datos, una consulta, o cualquier operación que modifique o genere Datasets.
3. Run
Cada ejecución de un job se captura en un Run, que incluye información sobre el contexto de la ejecución, como la fecha y hora, el estado (éxito, fallo), y detalles sobre el entorno (por ejemplo, el clúster donde se ejecutó). Esto proporciona un historial completo de cada instancia de procesamiento, lo que es crucial para la auditoría y el diagnóstico.
5. Namespaces
OpenLineage los utiliza para organizar y categorizar Datasets y Jobs. Esto ayuda a evitar conflictos de nombres y a estructurar los datos de manera que sea más fácil para los usuarios navegar por ellos. Es crucial el uso y definición de Namespaces en la gestión de entornos complejos.
4. Lineage
Si bien parece repetitivo al estar hablando de un framework enfocado a implementar soluciones para el registro del linaje de datos, es bueno detallar que el concepto de Lineage en OpenLineage se refiere a las relaciones entre Datasets, Jobs y Runs. Se captura la procedencia de cada Dataset, indicando de dónde proviene, qué transformaciones ha sufrido y a dónde ha sido enviado. Esta relación permite a los usuarios visualizar cómo los datos fluyen a través de sus sistemas y entender las dependencias entre diferentes Jobs y Datasets.
6. Metadata
Además de los componentes anteriores, OpenLineage permite la inclusión de metadata adicional relacionada con Datasets y Jobs. Esta metadata puede incluir descripciones, esquemas de datos, y cualquier otra información relevante que ayude a contextualizar los Datasets y sus transformaciones.
Facets
Si bien estos componentes forman parte también del modelo base de OpenLineage, he preferido incluirlos en un punto adicional debido a su relevancia en cómo vamos a poder extender el modelo base.
Un Facet es un objeto que se asocia a un dataset o job y que contiene propiedades específicas relacionadas con su contexto o características. Los facets pueden incluir información sobre el esquema de los datos, la calidad, la información de negocio, y otros atributos relevantes que pueden ser útiles para los usuarios que interactúan con esos datos. Se puede ver en esta documentación, el detalle de los distintos Facets predefinidos en OpenLineage.
Una de las características de OpenLineage es su flexibilidad. Las organizaciones pueden definir sus propios facets personalizados según sus necesidades específicas. Esto significa que pueden incluir información relevante que no esté cubierta por los tipos estándar de facets, adaptando el modelo a su contexto particular. De esta manera, los Facets permiten enriquecer la representación del linaje de datos al poder extender el modelo base.
Integraciones
OpenLineage ofrece diversas integraciones con herramientas y plataformas populares en el ecosistema de datos, facilitando la adopción y el uso de su marco de linaje de datos. Aquí os detallo las herramientas que lo integran directamente:
- Apache Airflow
- Apache Flink
- Apache Spark
- Great Expectations
- DBT
- Trino
Podéis ver aquí el detalle de estas integraciones.
Proyecto Marquez
De la mano de OpenLineage, surge el proyecto Marquez. Marquez es una herramienta de código abierto diseñada para gestionar y visualizar el linaje de datos en entornos de tratamiento de datos, que implementa OpenLineage y es un referente en cuanto al uso de este framework.
Proporciona una interfaz intuitiva que permite a los usuarios explorar cómo los datos se mueven y se transforman a lo largo de sus flujos de trabajo. Al implementar el estándar de OpenLineage, Marquez captura eventos de linaje generados por diversas herramientas y plataformas, facilitando la trazabilidad y mejorando la gobernanza de datos.
En las referencias os dejo el enlace al proyecto, por si queréis echarle un vistazo y tengáis una herramienta de base con la que empezar a jugar con OpenLineage.
Referencias
- Web del proyecto: https://openlineage.io/
- Documentación del proyecto: https://openlineage.io/docs/
- Web del proyecto Marquez: https://marquezproject.ai/
- Especificación de OpenLineage: https://github.com/OpenLineage/OpenLineage/blob/main/spec/OpenLineage.md
- Imagen especificación Openlineage: https://github.com/OpenLineage/OpenLineage/blob/main/spec/OpenLineageModel.svg
- Documentación sobre OpenLineage Facets: https://openlineage.io/docs/spec/facets/
- Documentación sobre integraciones de OpenLineage: https://openlineage.io/docs/integrations/about
Un comentario
Los comentarios están cerrados.