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:
El objeto no se borra físicamente de inmediato
Se marca como "eliminado" y se oculta de las vistas normales
Permanece accesible para recuperación durante 7 días
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.


