Muchos de nosotros hemos realizado cambios en los datos en función de requisitos que luego evolucionaron. Cuando nos damos cuenta de ello, resulta imposible retroceder. El cambio no es sólo una constante; es una parte esencial de la gestión de datos que exige un enfoque sofisticado. Ingrese a la funcionalidad similar a Git del catálogo de datos de Dremio, Nessie.
Así como Git se ha vuelto fundamental para el desarrollo de software, los ingenieros de datos necesitan herramientas similares para trabajar en paralelo, comparar versiones de datos, promover cambios en la producción y revertir datos cuando sea necesario. Nessie proporciona a los ingenieros de datos un sistema de control de versiones similar a Git para gestionar versiones, ramas, fusiones y confirmaciones de datos. Esto puede resultar muy útil cuando varios ingenieros de datos trabajan con datos y los transforman al mismo tiempo. Nessie permite que cada ingeniero trabaje en ramas separadas mientras mantiene una única fuente de verdad en la forma de la rama principal. Esta funcionalidad permite a los equipos de ingeniería de datos mantener la calidad de los datos de forma colaborativa frente al cambio implacable.
Este artículo proporciona una guía paso a paso que demuestra cómo Nessie, Dremio y MinIO trabajan juntos para mejorar la calidad de los datos y la colaboración en sus flujos de trabajo de ingeniería de datos. Ya sea que sea ingeniero de datos, ingeniero de aprendizaje automático o simplemente un entusiasta de los lagos de datos modernos, este blog le brinda el conocimiento y las herramientas necesarias para mejorar de manera efectiva sus prácticas de control de versiones de datos.
Nessie permite cargas de trabajo similares a Git que le permiten probar, desarrollar y pasar a producción. Analicemos algunos conceptos clave:
Sucursales: al igual que en Git, las sucursales en Nessie le permiten trabajar en diferentes tareas de ingeniería de datos al mismo tiempo. Por ejemplo, es posible que tenga una rama para el desarrollo de funciones, la limpieza y la transformación de datos. Cada rama puede tener su propio conjunto de cambios de datos.
Confirmaciones: en Nessie, una confirmación representa una instantánea de los datos en un momento específico. Cuando realiza cambios en sus datos, crea una nueva confirmación, que registra esos cambios. Los compromisos están vinculados a una rama específica. Cuando necesita revertir sus datos a un estado estable o en buen estado, Nessie facilita la selección de una confirmación específica y la reversión a esa versión de datos. Esto garantiza la calidad y coherencia de los datos.
Fusiones : Nessie le permite fusionar los cambios de una rama en otra. Esto es similar a fusionar cambios de código en Git. Cuando fusiona una rama, los cambios de datos realizados en esa rama pasan a formar parte de la rama de destino.
Dremio es un motor de análisis distribuido que opera como una plataforma de código abierto y ofrece una interfaz de autoservicio intuitiva para la exploración, transformación y trabajo colaborativo de datos. Su diseño se basa en
Ya hemos explorado cómo implementar Dremio con Kubernetes y también cómo
MinIO es un almacenamiento de objetos de alto rendimiento. Reconocido por su excepcional
Necesitarás el
Esta parte del tutorial se basa en Dremio.
Para comenzar, abra una terminal y navegue hasta la carpeta donde clonó/descargó el repositorio y ejecute el siguiente comando para iniciar Dremio.
docker-compose up dremio
Espere unos momentos y luego navegue hasta http://localhost:9047
para acceder a Dremio. Actualice los campos solicitados y luego haga clic en Siguiente.
A continuación, ejecute el siguiente comando para iniciar MinIO.
docker-compose up minio
El comando final docker-compose up
a continuación iniciará Nessie.
docker-compose up nessie
Navegue a http://localhost:9001
para iniciar sesión en MinIO con el nombre de usuario y contraseña de minioadmin:minioadmin
. Se le pedirá que cree un depósito.
Crea uno llamado iceberg-datalake
.
Luego regrese a Dremio en http://localhost:9047
y haga clic en Agregar fuente y seleccione Nessie.
nessie
http://nessie:19120/api/v2
none
No hagas clic en Guardar todavía. En su lugar, en el panel de navegación de la izquierda, haga clic en Almacenamiento. MinIO es un almacenamiento de objetos compatible con S3-API y puede utilizar las mismas rutas de conexión que AWS S3.
minioadmin
minioadmin
/iceberg-datalake
Desplácese hacia abajo para ver el siguiente conjunto de instrucciones.
Add Property
en Connection Properties
para crear y configurar las siguientes propiedades.fs.s3a.path.style.access
a true
fs.s3a.endpoint
a minio:9000
dremio.s3.compat
a true
Encrypt connection
Luego haga clic en Guardar. Ahora deberías ver los catálogos de Nessie en tus fuentes de datos.
En Dremio, navegue hasta SQL Runner en el lado izquierdo. Asegúrese de que Context
en el área superior derecha del editor de texto esté configurado en nuestra fuente Nessie. De lo contrario, tendrá que hacer referencia al contexto como nessie.SalesData
en lugar de solo SalesData
para ejecutar esta consulta. Copie y pegue el siguiente SQL y ejecútelo.
CREATE TABLE SalesData ( id INT, product_name VARCHAR, sales_amount DECIMAL, transaction_date DATE ) PARTITION BY (transaction_date);
Ejecute la siguiente consulta para insertar datos en la tabla que acaba de crear.
INSERT INTO SalesData (id, product_name, sales_amount, transaction_date) VALUES (1, 'ProductA', 1500.00, '2023-10-15'), (2, 'ProductB', 2000.00, '2023-10-15'), (3, 'ProductA', 1200.00, '2023-10-16'), (4, 'ProductC', 1800.00, '2023-10-16'), (5, 'ProductB', 2200.00, '2023-10-17');
Vuelva a MinIO para ver que su lago de datos se ha poblado con las tablas Iceberg.
Regrese a Dremio en http://localhost:9047
. Comience consultando una tabla en la rama principal usando la sintaxis AT BRANCH
:
SELECT * FROM nessie.SalesData AT BRANCH main;
Cree una rama ETL (Extract Transform and Load) que le permita jugar y transformar datos sin afectar la producción.
CREATE BRANCH etl_06092023 in nessie
Dentro de la rama ETL, inserte nuevos datos en la tabla:
USE BRANCH etl_06092023 in nessie; INSERT INTO nessie.SalesData (id, product_name, sales_amount, transaction_date) VALUES (6, 'ProductC', 1400.00, '2023-10-18');
Confirmar la disponibilidad inmediata de los nuevos datos dentro de la sucursal ETL:
SELECT * FROM nessie.SalesData AT BRANCH etl_06092023;
Tenga en cuenta el aislamiento de los cambios de los usuarios en la rama principal:
SELECT * FROM nessie.SalesData AT BRANCH main;
Fusione los cambios de la rama ETL nuevamente en la rama principal:
MERGE BRANCH etl_06092023 INTO main in nessie;
Seleccione la rama principal nuevamente para ver que los cambios efectivamente se han fusionado.
SELECT * FROM nessie.SalesData AT BRANCH main
Esta estrategia de ramificación permite a los ingenieros de datos manejar de forma independiente numerosas transacciones en varias tablas. Cuando estén listos, los ingenieros de datos pueden fusionar estas transacciones en una transacción única e integral de múltiples tablas dentro de la sucursal principal.
Esta publicación de blog profundizó en el poder del control de versiones similar a Git en la ingeniería de datos, enfatizando cómo
Háganos saber cómo se ve su data lakehouse
También aparece aquí .