Skip to main content

Command Palette

Search for a command to run...

Cómo recuperar objetos eliminados de tu Lakehouse en Microsoft Fabric

Published
5 min read
Cómo recuperar objetos eliminados de tu Lakehouse en Microsoft Fabric

¿Has eliminado accidentalmente una tabla Delta crítica o un archivo importante de tu lakehouse? No entres en pánico. Microsoft Fabric implementa un mecanismo de "soft delete" que mantiene tus objetos eliminados disponibles para recuperación durante 7 días. En este artículo te mostraré cómo aprovechar esta característica usando la librería semantic-link-labs.

El problema: Eliminaciones accidentales

Trabajar con lakehouses implica gestionar grandes volúmenes de datos y múltiples artefactos. Es fácil cometer errores:

  • Eliminar una tabla Delta pensando que era de desarrollo cuando era de producción

  • Borrar un archivo de configuración crítico durante una limpieza

  • Ejecutar un script que elimina carpetas completas por error

  • Sobrescribir datos importantes durante un proceso ETL

Hasta hace poco, estos errores podían significar pérdida permanente de datos o recurrir a backups externos. Ahora, con el soft delete de OneLake, tienes una red de seguridad de 7 días.


¿Qué es Soft Delete en OneLake?

OneLake, el sistema de almacenamiento subyacente de Microsoft Fabric, implementa soft delete similar a Azure Blob Storage. Cuando eliminas un objeto:

  1. El objeto no se borra físicamente de inmediato

  2. Se marca como "eliminado" y se oculta de las vistas normales

  3. Permanece accesible para recuperación durante 7 días

  4. Después de 7 días, se elimina permanentemente

Esta funcionalidad aplica a todo el contenido de un lakehouse:

  • Tablas Delta completas (incluyendo sus archivos Parquet y logs de transacciones)

  • Archivos individuales en la sección Files

  • Carpetas completas con toda su estructura

  • Esquemas con múltiples tablas


Instalación de semantic-link-labs

La librería semantic-link-labs extiende las capacidades de Fabric con funciones avanzadas para lakehouses, semantic models y más. Para instalarla en tu notebook:

%pip install semantic-link-labs

Explorando objetos eliminados

Antes de recuperar nada, es fundamental identificar qué objetos están disponibles para restauración. La función list_blobs() nos permite listar todos los objetos, incluidos los eliminados.

Listar todos los blobs

import sempy_labs.lakehouse as lake

# Listar todos los objetos del lakehouse
all_blobs = lake.list_blobs(
    lakehouse=None,  # None usa el lakehouse del notebook
    workspace=None   # None usa el workspace del notebook
)

print(f"Total de blobs encontrados: {len(all_blobs)}")
all_blobs.head()

Filtrar objetos eliminados

El DataFrame resultante incluye una columna Is Deleted que podemos usar para filtrar:

deleted_objects = all_blobs[all_blobs['Is Deleted'] == True]

print(f"Objetos eliminados: {len(deleted_objects)}")

if len(deleted_objects) > 0:
    print("\nObjetos disponibles para recuperación:")
    print("-" * 80)
    for _, obj in deleted_objects.iterrows():
        print(f"📁 {obj['Blob Name']}")
        print(f"   Eliminado: {obj['Deleted Time']}")
        print(f"   Días restantes: {obj['Remaining Retention Days']}")
        print(f"   Tamaño: {obj['Content Length']} bytes")
        print()
else:
    print("✓ No hay objetos eliminados en este lakehouse")

Filtrar por tipo de contenedor

Puedes especificar si quieres listar solo objetos de Tables o Files:

# Solo tablas eliminadas
deleted_tables = lake.list_blobs(
    lakehouse=None,  # None usa el lakehouse del notebook
    workspace=None,   # None usa el workspace del notebook
    container="Tables"
)
deleted_tables = deleted_tables[deleted_tables['Is Deleted'] == True]

# Solo archivos eliminados
deleted_files = lake.list_blobs(
    lakehouse=None,  # None usa el lakehouse del notebook
    workspace=None,   # None usa el workspace del notebook
    container="Files"
)
deleted_files = deleted_files[deleted_files['Is Deleted'] == True]

print(f"Tablas eliminadas: {len(deleted_tables)}")
print(f"Archivos eliminados: {len(deleted_files)}")


Recuperando objetos

Una vez identificado el objeto a recuperar, el proceso es muy simple usando recover_lakehouse_object().

import sempy_labs.lakehouse as lake

lake.recover_lakehouse_object(
    file_path='ruta/del/objeto',
    lakehouse=None,  # Nombre o ID del lakehouse
    workspace=None   # Nombre o ID del workspace
)

Ejemplo 1: Recuperar una Tabla Delta

Las tablas Delta son estructuras complejas con múltiples archivos Parquet y un transaction log. La recuperación restaura toda la estructura:

# Recuperar tabla en el nivel raíz
lake.recover_lakehouse_object(
    file_path='Tables/green_tripdata_2022',
    lakehouse="000xxx-xxxx-xxxx-xxxx-xxx000",
    workspace="000xxx-xxxx-xxxx-xxxx-xxx000"
)

Ejemplo 2: Recuperar archivos individuales

Los archivos en la sección Files se recuperan de la misma manera:

lake.recover_lakehouse_object(
    file_path='Files/Maestros/MaestroFechas.xlsx',
    lakehouse=None,
    workspace=None
)

Ejemplo 3: Recuperar carpetas completas

Puedes recuperar carpetas enteras con todo su contenido:

# Recuperar carpeta completa
lake.recover_lakehouse_object(
    file_path='Files/Maestros',
    lakehouse=None,
    workspace=None
)

Importante: Al recuperar una carpeta, se restauran recursivamente todos los archivos y subcarpetas que contenía.


Limitaciones y consideraciones

⏱️ Ventana de recuperación

7 días es el límite absoluto. Después de este período:

  • Los objetos se eliminan permanentemente de OneLake

  • No hay forma de recuperarlos sin un backup externo

  • El contador comienza en el momento de la eliminación

Recomendación: Implementa alertas automáticas para objetos próximos a expirar.

📂 Estructura de Paths

Los paths deben seguir la estructura exacta:

✓ Correcto:
  - Tables/FactSales
  - Tables/sales/FactSales
  - Files/raw/data.csv
  - Files/configs/app.json

✗ Incorrecto:
  - FactSales (falta el contenedor)
  - Tables\FactSales (barra invertida)
  - tables/FactSales (minúsculas)

🔄 Tablas Delta y consistencia

Al recuperar una tabla Delta:

  • Se restaura el estado exacto en el momento de eliminación

  • El transaction log se recupera completo

  • Todas las particiones y archivos Parquet se restauran

  • Los metadatos del Hive Metastore pueden requerir sincronización

⚠️ Conflictos de nombres

Si existe un objeto con el mismo nombre que el que intentas recuperar:

  • La operación puede fallar

  • Puede sobrescribirse el objeto actual (según configuración)

  • Es mejor renombrar o mover el objeto actual antes de recuperar

🔐 Permisos requeridos

Para recuperar objetos necesitas:

  • Permisos de escritura en el lakehouse

  • Permisos de administrador para carpetas del sistema

  • El rol de Contributor o superior en el workspace

💾 Impacto en el almacenamiento

Los objetos en soft delete cuentan para tu cuota de almacenamiento de OneLake. No se libera espacio hasta la eliminación permanente.