Compartir a través de


Administración de artefactos de notebook con NotebookUtils

Use notebookutils.notebook para administrar elementos de cuaderno mediante programación en Microsoft Fabric. Puede crear, recuperar, actualizar, eliminar y enumerar artefactos de cuadernos para automatizar la implementación, la administración del ciclo de vida y los flujos de trabajo de CI/CD.

Nota:

Estas API solo se admiten en cuadernos de Fabric, no en Azure Synapse. Debe tener los permisos adecuados en el área de trabajo de destino para cada operación.

En la tabla siguiente se enumeran los métodos de administración de cuadernos disponibles:

Método Signature Descripción
create create(name, description, content, defaultLakehouse, defaultLakehouseWorkspace, workspaceId): Artifact Crea un nuevo cuaderno.
get get(name, workspaceId): Artifact Recupera un cuaderno por nombre o identificador.
getDefinition getDefinition(name, workspaceId, format): String Recupera la definición del cuaderno (contenido).
update update(name, newName, description, workspaceId): Artifact Actualiza los metadatos del cuaderno.
updateDefinition updateDefinition(name, content, defaultLakehouse, defaultLakehouseWorkspace, workspaceId, environmentId, environmentWorkspaceId): bool Actualiza la definición del cuaderno y lakehouse.
delete delete(name, workspaceId): Boolean Elimina un cuaderno
list list(workspaceId, maxResults): Array[Artifact] Enumera todos los cuadernos de un área de trabajo.

Creación de un cuaderno

Use notebookutils.notebook.create() para crear un nuevo artefacto de cuaderno en el área de trabajo actual o en un área de trabajo especificada.

Nota:

Los ejemplos de flujo de trabajo de este artículo que leen o escriben .ipynb archivos usan Python para E/S de archivos. Las API principales notebookutils.notebook están disponibles en Python, PySpark, Scala y R, a menos que se indique lo contrario.

Parámetros

Parámetro Tipo Obligatorio Descripción
name String Nombre visible del nuevo cuaderno. Debe ser único dentro del área de trabajo.
description String No Descripción del cuaderno. El valor predeterminado es vacío.
content Cadena, bytes o dict Contenido del cuaderno en formato JSON válido .ipynb . También puede ser bytes en bruto o un objeto diccionario. No puede estar vacío.
defaultLakehouse String No Nombre o identificador del lago predeterminado que se va a adjuntar.
defaultLakehouseWorkspace String No ID del área de trabajo predeterminada del lakehouse. Deje vacío para el área de trabajo actual.
workspaceId String No ID del área de trabajo de destino. Deje vacío para el área de trabajo actual.

Importante

El content parámetro no puede estar vacío. Debe proporcionar contenido de formato válido .ipynb al crear un cuaderno. Como mínimo, proporcione una estructura de cuaderno vacía válida:

{
  "cells": [],
  "metadata": {},
  "nbformat": 4,
  "nbformat_minor": 5
}

Creación de un cuaderno a partir de una plantilla

# Read notebook template from a file
with open("/path/to/template.ipynb", "r") as f:
    notebook_content = f.read()

# Create the notebook
notebook = notebookutils.notebook.create(
    name="ProcessingNotebook",
    description="Data processing notebook from template",
    content=notebook_content
)

print(f"Created notebook: {notebook.displayName} (ID: {notebook.id})")

Crea un cuaderno con un lakehouse predeterminado

# Minimum valid notebook content - content cannot be empty
minimal_content = '''{
    "cells": [],
    "metadata": {},
    "nbformat": 4,
    "nbformat_minor": 5
}'''

# Create notebook with default lakehouse configuration
notebook = notebookutils.notebook.create(
    name="DataAnalysis",
    description="Analysis notebook with lakehouse access",
    content=minimal_content,
    defaultLakehouse="MyLakehouse",
    defaultLakehouseWorkspace=""  # Current workspace
)

print(f"Created notebook with lakehouse: {notebook.displayName}")

Valor de retorno

El create() método devuelve un Artifact objeto con las siguientes propiedades:

  • displayName: nombre visible del cuaderno.
  • id: identificador único del cuaderno creado.
  • description: descripción del cuaderno.

Creación de un cuaderno en otra área de trabajo

with open("/path/to/notebook.ipynb", "r") as f:
    content = f.read()

notebook = notebookutils.notebook.create(
    name="SharedNotebook",
    description="Notebook for the shared workspace",
    content=content,
    workspaceId="bbbbbbbb-2222-3333-4444-cccccccccccc"
)

print(f"Created in remote workspace: {notebook.displayName}")

Creación de varios cuadernos a partir de una plantilla

# Load template content (must be valid .ipynb)
with open("/path/to/template.ipynb", "r") as f:
    template_content = f.read()

regions = ["US", "EU", "Asia"]

created_notebooks = []
for region in regions:
    notebook = notebookutils.notebook.create(
        name=f"Process_{region}",
        description=f"Processing notebook for {region} region",
        content=template_content,
        defaultLakehouse=f"Lakehouse_{region}"
    )
    created_notebooks.append(notebook)
    print(f"Created: {notebook.displayName}")

print(f"\nCreated {len(created_notebooks)} notebooks")

Sugerencia

Proporcione nombres y descripciones significativos para los blocs de notas para que sean más fáciles de encontrar. Use una convención de nomenclatura coherente, como <Project>_<Purpose>_<Region> para las implementaciones automatizadas.

Obtener un cuaderno

Use notebookutils.notebook.get() para recuperar los metadatos del cuaderno por nombre o identificador. Devuelve un Artifact objeto con propiedades como displayName, idy description.

Parámetros

Parámetro Tipo Obligatorio Descripción
name String Nombre o identificador del cuaderno que se va a recuperar.
workspaceId String No ID del área de trabajo. Deje vacío para el área de trabajo actual.

Obtener un cuaderno del espacio de trabajo actual

notebook = notebookutils.notebook.get("MyNotebook")

print(f"Notebook Name: {notebook.displayName}")
print(f"Notebook ID: {notebook.id}")
print(f"Description: {notebook.description}")

Obtención de un cuaderno de otra área de trabajo

workspace_id = "bbbbbbbb-2222-3333-4444-cccccccccccc"
notebook = notebookutils.notebook.get("SharedNotebook", workspaceId=workspace_id)

print(f"Retrieved: {notebook.displayName} from workspace {workspace_id}")

Valor de retorno

El get() método devuelve un Artifact objeto con las siguientes propiedades:

  • displayName: nombre visible del cuaderno.
  • id: identificador único.
  • description: descripción del cuaderno.

Sugerencia

Use get() antes de actualizar o eliminar operaciones para comprobar que el cuaderno de destino existe. También puede usarlo para comprobar si un nombre de cuaderno ya está en uso antes de crear uno nuevo.

Obtención de una definición de cuaderno

Use notebookutils.notebook.getDefinition() para recuperar el contenido completo del bloc de notas en .ipynb formato. Úselo para realizar copias de seguridad, migración, control de versiones o análisis de contenido.

Parámetros

Parámetro Tipo Obligatorio Descripción
name String Nombre o identificador del cuaderno.
workspaceId String No ID del área de trabajo. Deje este campo vacío para el espacio de trabajo actual.
format String No Formato de salida. Tiene como valor predeterminado "ipynb".

Recuperar y guardar una definición de cuaderno

# Retrieve notebook definition as .ipynb content
notebook_content = notebookutils.notebook.getDefinition("MyNotebook")

# Save to a file for backup
with open("/path/to/backup/MyNotebook.ipynb", "w") as f:
    f.write(notebook_content)

print("Notebook definition retrieved and saved")

Obtén una definición de cuaderno de otra área de trabajo

workspace_id = "cccccccc-3333-4444-5555-dddddddddddd"
notebook_content = notebookutils.notebook.getDefinition(
    name="SharedNotebook",
    workspaceId=workspace_id,
    format="ipynb"
)

print(f"Retrieved definition from workspace {workspace_id}")

Valor de retorno

El getDefinition() método devuelve una cadena que contiene el contenido del cuaderno en .ipynb formato JSON.

Exportación de todos los cuadernos para la copia de seguridad

import os
from datetime import datetime

def export_all_notebooks(backup_dir="/path/to/backups"):
    """Export all notebooks in the workspace for backup."""

    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    export_dir = f"{backup_dir}/backup_{timestamp}"
    os.makedirs(export_dir, exist_ok=True)

    notebooks = notebookutils.notebook.list()
    print(f"Exporting {len(notebooks)} notebooks to {export_dir}")

    exported_count = 0
    for nb in notebooks:
        try:
            content = notebookutils.notebook.getDefinition(nb.displayName)
            filename = f"{export_dir}/{nb.displayName}.ipynb"
            with open(filename, "w") as f:
                f.write(content)
            exported_count += 1
            print(f"Exported: {nb.displayName}")
        except Exception as e:
            print(f"Failed to export {nb.displayName}: {e}")

    print(f"\nExported {exported_count} of {len(notebooks)} notebooks")
    return export_dir

backup_location = export_all_notebooks()

Actualización de un cuaderno

Use notebookutils.notebook.update() para cambiar los metadatos del cuaderno, como su nombre para mostrar y su descripción. No modifica el contenido del cuaderno ni la configuración de lakehouse.

Parámetros

Parámetro Tipo Obligatorio Descripción
name String Nombre o identificador actual del cuaderno.
newName String Nuevo nombre visible del cuaderno.
description String No Descripción actualizada.
workspaceId String No ID del área de trabajo. Deje vacío para el área de trabajo actual.

Cambio de nombre de un cuaderno

updated_notebook = notebookutils.notebook.update(
    name="OldNotebookName",
    newName="NewNotebookName",
    description="Updated description with more details"
)

print(f"Updated notebook: {updated_notebook.displayName}")

Valor de retorno

El update() método devuelve un Artifact objeto con las propiedades actualizadas.

Actualización de una definición de cuaderno

Utilice notebookutils.notebook.updateDefinition() para modificar el contenido del cuaderno, el lakehouse predeterminado o ambos. Úselo cuando necesite cambiar la definición del cuaderno en lugar de sus metadatos.

Parámetros

Parámetro Tipo Obligatorio Descripción
name String Nombre o identificador del cuaderno que se va a actualizar.
content String No Nuevo contenido del cuaderno en .ipynb formato.
defaultLakehouse String No Nuevo nombre predeterminado de lakehouse.
defaultLakehouseWorkspace String No ID del área de trabajo del nuevo lakehouse predeterminado. Deje vacío para el área de trabajo actual.
workspaceId String No ID del área de trabajo. Deje vacío para el área de trabajo actual.
environmentId String No Identificador de entorno para adjuntar al notebook.
environmentWorkspaceId String No ID del área de trabajo del entorno. Deje vacío para el área de trabajo actual.

Nota:

Los parámetros environmentId y environmentWorkspaceId solo están disponibles en el entorno de ejecución del cuaderno de Spark. Los cuadernos de Python no admiten estos parámetros.

Actualización del contenido del cuaderno

# Load new content
with open("/path/to/updated_notebook.ipynb", "r") as f:
    new_content = f.read()

is_updated = notebookutils.notebook.updateDefinition(
    name="MyNotebook",
    content=new_content
)

print(f"Notebook definition updated: {is_updated}")

Cambiar el lakehouse predeterminado

is_updated = notebookutils.notebook.updateDefinition(
    name="MyNotebook",
    defaultLakehouse="NewLakehouse",
    defaultLakehouseWorkspace=""  # Current workspace
)

print(f"Default lakehouse updated: {is_updated}")

Actualice tanto el contenido como el lakehouse

with open("/path/to/new_version.ipynb", "r") as f:
    new_content = f.read()

is_updated = notebookutils.notebook.updateDefinition(
    name="MyNotebook",
    content=new_content,
    defaultLakehouse="ProductionLakehouse",
    defaultLakehouseWorkspace=""
)

print(f"Notebook fully updated: {is_updated}")

Valor de retorno

El updateDefinition() método devuelve si la actualización se realiza True correctamente o False si se produce un error.

Sugerencia

Use update() para los cambios de metadatos (nombre, descripción) y updateDefinition() para los cambios de contenido y lakehouse. Cuando necesite una actualización completa de los metadatos y el contenido, llame a ambos métodos en secuencia.

Eliminación de un cuaderno

Use notebookutils.notebook.delete() para quitar permanentemente un cuaderno de un área de trabajo. True Devuelve si la eliminación se realiza correctamente; de lo contrario, devuelve False.

Parámetros

Parámetro Tipo Obligatorio Descripción
name String Nombre o identificador del cuaderno que se va a eliminar.
workspaceId String No ID del área de trabajo. Deje vacío para el área de trabajo actual.

Importante

La eliminación es permanente. No se pueden recuperar cuadernos eliminados. Compruebe siempre el nombre del cuaderno antes de eliminar y considere la posibilidad de realizar copias de seguridad de la definición del cuaderno con getDefinition() primero.

Valor de retorno

El delete() método devuelve True si la eliminación se realiza correctamente o False si se produce un error.

Eliminación de un cuaderno

is_deleted = notebookutils.notebook.delete("ObsoleteNotebook")

if is_deleted:
    print("Notebook deleted successfully")
else:
    print("Failed to delete notebook")

Limpieza segura de notebooks según el patrón

def cleanup_notebooks(name_pattern, dry_run=True):
    """Delete notebooks matching a name pattern."""

    notebooks = notebookutils.notebook.list()
    to_delete = [nb for nb in notebooks if name_pattern in nb.displayName]

    print(f"Found {len(to_delete)} notebooks matching '{name_pattern}':")
    for nb in to_delete:
        print(f"  - {nb.displayName}")

    if dry_run:
        print("\nDRY RUN - No notebooks deleted")
        return

    deleted_count = 0
    for nb in to_delete:
        if notebookutils.notebook.delete(nb.displayName):
            deleted_count += 1
            print(f"Deleted: {nb.displayName}")
        else:
            print(f"Failed to delete: {nb.displayName}")

    print(f"\nDeleted {deleted_count} of {len(to_delete)} notebooks")

# Always run with dry_run=True first to preview
cleanup_notebooks("temp_", dry_run=True)

Sugerencia

Para la eliminación masiva segura, ejecute siempre con dry_run=True primero para obtener una vista previa de los cuadernos que se quitarán. Considere la posibilidad de cambiar el nombre de los cuadernos con un _TO_DELETE prefijo en lugar de eliminarlos inmediatamente, por lo que puede recuperarlos si es necesario.

Enumerar blocs de notas

Se usa notebookutils.notebook.list() para enumerar cuadernos en un área de trabajo. Devuelve una matriz de Artifact objetos .

Parámetros

Parámetro Tipo Obligatorio Descripción
workspaceId String No ID del área de trabajo. Deje vacío para el área de trabajo actual.
maxResults Int No Número máximo de resultados que se van a devolver. Predeterminado a 1000.

Enumeración de todos los cuadernos del área de trabajo actual

notebooks = notebookutils.notebook.list()

print(f"Found {len(notebooks)} notebooks:")
for nb in notebooks:
    print(f"  - {nb.displayName} (ID: {nb.id})")

Listar cuadernos en otro espacio de trabajo

workspace_id = "cccccccc-3333-4444-5555-dddddddddddd"
notebooks = notebookutils.notebook.list(workspaceId=workspace_id)

print(f"Found {len(notebooks)} notebooks in workspace {workspace_id}")

Valor de retorno

El list() método devuelve una matriz de Artifact objetos . Cada objeto contiene las propiedades displayName, id y description.

Filtrado de cuadernos por patrón de nombre

all_notebooks = notebookutils.notebook.list()

# Filter for notebooks that start with a specific prefix
processing_notebooks = [nb for nb in all_notebooks if nb.displayName.startswith("Process_")]

print(f"Found {len(processing_notebooks)} processing notebooks:")
for nb in processing_notebooks:
    print(f"  - {nb.displayName}")

Clonación de un cuaderno

Use list() y getDefinition() juntos para clonar un cuaderno dentro del mismo área de trabajo o en otra área de trabajo.

def clone_notebook(source_name, target_name, target_workspace=""):
    """Clone a notebook by retrieving its content and creating a copy."""

    source = notebookutils.notebook.get(source_name)
    content = notebookutils.notebook.getDefinition(source_name)

    cloned = notebookutils.notebook.create(
        name=target_name,
        description=f"Clone of {source_name}",
        content=content,
        workspaceId=target_workspace
    )

    print(f"Cloned {source_name} to {cloned.displayName}")
    return cloned

cloned_notebook = clone_notebook("TemplateNotebook", "NewInstance")

Migración de un cuaderno a otra área de trabajo

def migrate_notebook(name, target_workspace_id, new_name=None):
    """Migrate a notebook from the current workspace to another workspace."""

    content = notebookutils.notebook.getDefinition(name)
    target_name = new_name if new_name else name

    migrated = notebookutils.notebook.create(
        name=target_name,
        description=f"Migrated from {name}",
        content=content,
        workspaceId=target_workspace_id
    )

    print(f"Migrated {name} to workspace {target_workspace_id} as {target_name}")
    return migrated

target_ws = "dddddddd-4444-5555-6666-eeeeeeeeeeee"
migrated_nb = migrate_notebook("DataPipeline", target_ws, "DataPipeline_v2")