Cómo crear una Delta Table Lakehouse con ACID en Microsoft Fabric
Este tutorial explica cómo crear una Delta Table en un Lakehouse de Microsoft Fabric y cómo garantizar propiedades ACID esenciales: atomicidad (transacción), consistencia de lectura y gestión de esquema (schema). Saber crear y gestionar Delta Tables es útil para pipelines ETL/ELT, historial de datos, auditoría e integración con Spark y Power BI. Al final tendrá pequeñas pruebas prácticas para verificar que las operaciones básicas funcionan y para inspeccionar los metadatos.
Requisitos previos
- Cuenta con acceso a un workspace de Microsoft Fabric con permisos de edición (al menos Contributor en el workspace).
- Un Lakehouse creado en el workspace (OneLake integrado) y la ruta del Lakehouse disponible. Ej.: lakehouse://mi_workspace/mi_lakehouse/tables.
- Nociones básicas de Spark SQL o PySpark y acceso a un Notebook o Spark Job dentro del workspace.
- Recomendado: probar primero en un entorno de desarrollo con conjuntos de datos pequeños (100–10 000 filas) antes de migrar a producción.
Paso 1: Preparar el entorno y la conexión al Lakehouse
Abra un Notebook en el workspace de Microsoft Fabric (Python o Spark SQL). Verifique la ruta del Lakehouse que va a usar. Usaremos Spark SQL para compatibilidad con otras áreas del Fabric y para reutilizar en Jobs. El objetivo es definir una variable de ruta y garantizar que los permisos permiten escritura en OneLake.
-- exemplo Spark SQL: definir caminho do Lakehouse
SET lakehouse_path = 'lakehouse://<seu_workspace>/<seu_lakehouse>/tables';
Concretamente, confirme en la UI del Lakehouse el nombre exacto (case-sensitive). Si prefiere Python, puede leer la configuración con spark.conf.get('lakehouse_path') después de definirla en el Notebook.
Paso 2: Crear un directorio para la Delta Table y escribir datos iniciales
Una Delta Table en Lakehouse se materializa en OneLake como archivos Parquet y un directorio _delta_log con metadatos. Primero cree un pequeño DataFrame (ej.: 3–5 filas) y grábelo como Delta. Esto crea el layout y el primer commit que garantiza atomicidad de la operación inicial.
-- Spark SQL: crear tabela temporária e gravar em formato delta
CREATE OR REPLACE TEMP VIEW vendas_tmp AS
SELECT * FROM VALUES
(1, '2026-01-01', 100.0),
(2, '2026-01-02', 150.5)
AS t(id, data_venda, valor);
-- gravar como Delta table no Lakehouse
CREATE TABLE IF NOT EXISTS delta.`${lakehouse_path}/vendas_delta`
USING DELTA
AS SELECT * FROM vendas_tmp;
Después de ejecutar, verifique: la operación CREATE TABLE genera un commit en _delta_log (un archivo JSON con metadatos). Si esta operación falla, la tabla no se habrá creado y no habrá archivos Parquet válidos.
Paso 3: Leer la Delta Table con consistencia y probar transacciones
Una de las ventajas de Delta es que las lecturas obtienen un snapshot consistente del estado de la tabla incluso si ocurren escrituras concurrentes. Pruebe una operación de escritura seguida de una lectura para confirmar el comportamiento ACID básico.
-- Exemplo: adicionar linha (transacção simples)
INSERT INTO delta.`${lakehouse_path}/vendas_delta` VALUES (3, '2026-01-03', 200.0);
-- Ler a tabela após a escrita
SELECT * FROM delta.`${lakehouse_path}/vendas_delta` ORDER BY id;
En un escenario de concurrencia, un lector que inició antes de un commit verá la versión anterior; un lector que inicia después del commit verá la nueva versión. Esto garantiza aislamiento de lectura. En pruebas prácticas, insertar 100–1 000 filas y medir el tiempo de commit (normalmente segundos, según el tamaño de los archivos) ayuda a calibrar cargas.
Paso 4: Actualizar esquema (schema evolution) de forma segura
Si necesita añadir una columna, use schema evolution para no romper lectores antiguos. Delta soporta cambios de esquema controlados. Puede optar por alterar la tabla explícitamente o hacer append con mergeSchema.
-- Adicionar coluna opcional 'cliente' sem falhar com schema evolution
ALTER TABLE delta.`${lakehouse_path}/vendas_delta`
ADD COLUMNS (cliente STRING);
-- Ou gravar com opção de mergeSchema em operações de escrita via DataFrame (PySpark)
# Python (PySpark) exemplo mínimo
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame([(4, '2026-01-04', 75.0, 'Cliente A')], ['id','data_venda','valor','cliente'])
df.write.format('delta').mode('append').option('mergeSchema','true').save(spark.conf.get('lakehouse_path') + '/vendas_delta')
En entornos de producción, adopte políticas: por ejemplo, permitir solo columnas opcionales (nullable) o seguir un proceso de revisión para cambios de esquema. Pruebe con 1–2 columnas nuevas y confirme que las aplicaciones existentes continúan funcionando.
Paso 5: Usar Time Travel básico para recuperar versiones
Delta permite consultar versiones antiguas (Time Travel). Esto es útil para deshacer cambios o auditar el historial. Cada commit incrementa la versión — comience por verificar versión 0, 1, etc. En tablas pequeñas esto es inmediato; en tablas grandes la consulta a versiones antiguas continúa indexada a través del _delta_log.
-- Ver a versão anterior (exemplo: versão 0, 1, ...)
SELECT * FROM delta.`${lakehouse_path}/vendas_delta` VERSION AS OF 0;
-- Ou usar timestamp (exemplo)
SELECT * FROM delta.`${lakehouse_path}/vendas_delta` TIMESTAMP AS OF '2026-01-01 00:00:00';
Experimente: haga 3 commits (inserciones) y consulte VERSION AS OF 1 para ver el estado intermedio. Esto facilita auditoría y recuperaciones puntuales.
Verificar el resultado
Confirme que la carpeta vendas_delta existe en el Lakehouse (OneLake) y que los archivos _delta_log y los archivos parquet están presentes. En el Notebook, puede listar el directorio con comandos de la interfaz (ej.: %fs ls) o usar APIs:
-- exemplo (Notebook): listar ficheiros
%fs ls /lakehouse///tables/vendas_delta
-- ou em PySpark
spark.read.format('delta').load(spark.conf.get('lakehouse_path') + '/vendas_delta').show()
Busque archivos _delta_log/00000000000000000001.json (ejemplo) y archivos parquet con nombres como part-00000-... .parquet. Ejecute un SELECT final y verifique las filas, la nueva columna 'cliente' y que las versiones anteriores devuelven los datos esperados. Si todo está conforme, tiene una Delta Table lista para usar con Power BI (Direct Lake) o para integrar en pipelines ETL/ELT.
Conclusión
Ha creado una Delta Table en el Lakehouse de Microsoft Fabric, ha probado escritura, lectura consistente, cambio de esquema y Time Travel básico. Siguientes pasos recomendados: automatizar escrituras con un Spark Job (programado), configurar retención de logs y optimizaciones como compaction/OPTIMIZE para tablas con millones de filas, y exponer la tabla a Power BI con Direct Lake. Consejo: antes de operaciones en producción, pruebe schema evolution y recuperaciones con Time Travel en entorno de desarrollo para evitar conflictos y pérdida de datos.