Управляйте артефактами записных книжек с использованием NotebookUtils

Используйте notebookutils.notebook для программного управления элементами записной книжки в Microsoft Fabric. Вы можете создавать, извлекать, обновлять, удалять и перечислять артефакты записных книжек для автоматизации развертывания, управления жизненным циклом и рабочих процессов CI/CD.

Замечание

Эти API поддерживаются только в записных книжках Fabric, а не в Azure Synapse. Для каждой операции необходимо иметь соответствующие разрешения в целевой рабочей области.

В следующей таблице перечислены доступные методы управления записными книжками:

Метод Signature Описание
create create(name, description, content, defaultLakehouse, defaultLakehouseWorkspace, workspaceId): Artifact Создает новую записную книжку.
get get(name, workspaceId): Artifact Извлекает записную книжку по имени или идентификатору.
getDefinition getDefinition(name, workspaceId, format): String Извлекает определение записной книжки (содержимое).
update update(name, newName, description, workspaceId): Artifact Обновляет метаданные записной книжки.
updateDefinition updateDefinition(name, content, defaultLakehouse, defaultLakehouseWorkspace, workspaceId, environmentId, environmentWorkspaceId): bool Обновляет определение записной книжки и lakehouse.
delete delete(name, workspaceId): Boolean Удаляет записную книжку.
list list(workspaceId, maxResults): Array[Artifact] Выводит список всех записных книжек в рабочей области.

Создание записной книжки

Используйте notebookutils.notebook.create() для создания артефакта записной книжки в текущей рабочей области или указанной рабочей области.

Замечание

Примеры рабочих процессов в этой статье, которые считывают или записывают .ipynb файлы, используют Python для ввода-вывода файлов. Основные notebookutils.notebook API доступны в Python, PySpark, Scala и R, если иное не указано.

Параметры

Параметр Тип Обязательный Описание
name String Да Отображаемое имя новой записной книжки. Должен быть уникальным в рабочей области.
description String Нет Описание записной книжки. Значение по умолчанию устанавливается в пустое.
content Строка, байты или словарь Да Содержимое записной книжки в допустимом .ipynb формате JSON. Также может быть необработанным байтом или объектом дикта. Не может быть пустым.
defaultLakehouse String Нет Имя или идентификатор lakehouse по умолчанию для присоединения.
defaultLakehouseWorkspace String Нет Идентификатор рабочей области по умолчанию lakehouse. Оставьте пустым для текущей рабочей области.
workspaceId String Нет Идентификатор целевой рабочей области. Оставьте пустым для текущей рабочей области.

Это важно

Параметр content не может быть пустым. При создании записной книжки необходимо предоставить допустимое .ipynb содержимое формата. По крайней мере укажите допустимую пустую структуру записной книжки:

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

Создание записной книжки из шаблона

# 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})")

Создание записной книжки с помощью lakehouse по умолчанию

# 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}")

Возвращаемое значение

Метод create() возвращает Artifact объект со следующими свойствами:

  • displayName: отображаемое имя записной книжки.
  • id: уникальный идентификатор созданной записной книжки.
  • description: описание записной книжки.

Создание записной книжки в другой рабочей области

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}")

Создание нескольких записных книжек из шаблона

# 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")

Подсказка

Укажите значимые имена и описания записных книжек, чтобы упростить поиск. Используйте согласованное соглашение об именовании, например <Project>_<Purpose>_<Region> для автоматизированных развертываний.

Получение записной книжки

Используется notebookutils.notebook.get() для получения метаданных записной книжки по имени или идентификатору. Он возвращает Artifact объект со свойствами, такими как displayName, idи description.

Параметры

Параметр Тип Обязательный Описание
name String Да Имя или идентификатор записной книжки для получения.
workspaceId String Нет Идентификатор рабочей области. Оставьте пустым для текущей рабочей области.

Получите записную книжку из текущей рабочей области

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

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

Получение записной книжки из другой рабочей области

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

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

Возвращаемое значение

Метод get() возвращает Artifact объект со следующими свойствами:

  • displayName: отображаемое имя записной книжки.
  • id: уникальный идентификатор.
  • description: описание записной книжки.

Подсказка

Используйте get() перед обновлением или удалением операций, чтобы убедиться, что целевая записная книжка существует. Вы также можете использовать его для проверки того, используется ли имя записной книжки перед созданием новой.

Получить определение электронной тетради

Используется notebookutils.notebook.getDefinition() для получения полного содержимого записной книжки в .ipynb формате. Используйте его для резервного копирования, миграции, управления версиями или анализа содержимого.

Параметры

Параметр Тип Обязательный Описание
name String Да Имя или идентификатор записной книжки.
workspaceId String Нет Идентификатор рабочей области. Оставьте пустым для текущей рабочей области.
format String Нет Формат вывода. По умолчанию — "ipynb".

Получение и сохранение определения записной книжки

# 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")

Получение определения записной книжки из другой рабочей области

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}")

Возвращаемое значение

Метод getDefinition() возвращает строку, содержащую содержимое записной книжки в .ipynb формате JSON.

Экспорт всех записных книжек для резервного копирования

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()

Обновление записной книжки

Используется notebookutils.notebook.update() для изменения метаданных записной книжки, таких как отображаемое имя и описание. Он не изменяет содержимое записной книжки или конфигурацию Lakehouse.

Параметры

Параметр Тип Обязательный Описание
name String Да Текущее имя или идентификатор записной книжки.
newName String Да Новое отображаемое название для записной книжки.
description String Нет Обновлено описание.
workspaceId String Нет Идентификатор рабочей области. Оставьте пустым для текущей рабочей области.

Переименование записной книжки

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

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

Возвращаемое значение

Метод update() возвращает Artifact объект с обновленными свойствами.

Обновление определения записной книжки

Используется notebookutils.notebook.updateDefinition() для изменения содержимого записной книжки, озера по умолчанию или обоих. Используйте его, если необходимо изменить определение записной книжки, а не его метаданные.

Параметры

Параметр Тип Обязательный Описание
name String Да Имя или идентификатор записной книжки для обновления.
content String Нет Новое содержимое записной книжки в .ipynb формате.
defaultLakehouse String Нет Новое имя по умолчанию для lakehouse.
defaultLakehouseWorkspace String Нет Идентификатор рабочей области нового "Lakehouse" по умолчанию. Оставьте пустым для текущей рабочей области.
workspaceId String Нет Идентификатор рабочей области. Оставьте пустым для текущей рабочей области.
environmentId String Нет Идентификатор среды для подключения к ноутбуку.
environmentWorkspaceId String Нет Идентификатор рабочей области среды. Оставьте пустым для текущей рабочей области.

Замечание

Параметры environmentId и environmentWorkspaceId доступны только в среде выполнения записной книжки Spark. Записные книжки Python не поддерживают эти параметры.

Обновление содержимого записной книжки

# 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}")

Изменение озера по умолчанию

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

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

Обновите как содержимое, так и 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}")

Возвращаемое значение

Метод updateDefinition() возвращается True , если обновление выполнено успешно или False если оно завершается ошибкой.

Подсказка

Используйте update() для изменений метаданных (имя, описание) и updateDefinition() для изменений содержимого и lakehouse. Если требуется полное обновление метаданных и содержимого, вызовите оба метода последовательно.

Удаление записной книжки

Используйте notebookutils.notebook.delete(), чтобы окончательно удалить записную книжку из рабочей области. Возвращается True , если удаление выполнено успешно; в противном случае возвращается False.

Параметры

Параметр Тип Обязательный Описание
name String Да Имя или идентификатор записной книжки для удаления.
workspaceId String Нет Идентификатор рабочей области. Оставьте пустым для текущей рабочей области.

Это важно

Удаление является постоянным. Удаленные записные книжки не могут быть восстановлены. Всегда проверяйте название записной книжки перед удалением, и сначала создайте резервную копию определения записной книжки с помощью getDefinition().

Возвращаемое значение

Метод delete() возвращается True , если удаление выполнено успешно или False если оно завершается ошибкой.

Удаление записной книжки

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

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

Безопасная очистка записных книжек по шаблону

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)

Подсказка

Для безопасного массового удаления всегда запускайте сначала dry_run=True, чтобы предварительно увидеть, какие записные книжки будут удалены. Рекомендуется переименовать записные книжки с _TO_DELETE префиксом, а не сразу удалить их, чтобы при необходимости их можно было восстановить.

Список записных книжек

Используйте notebookutils.notebook.list() для перечисления записных книжек в рабочей области. Он возвращает массив Artifact объектов.

Параметры

Параметр Тип Обязательный Описание
workspaceId String Нет Идентификатор рабочей области. Оставьте пустым для текущей рабочей области.
maxResults Int Нет Максимальное количество возвращаемых результатов. По умолчанию 1000.

Перечислить все ноутбуки в текущей рабочей области

notebooks = notebookutils.notebook.list()

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

Список записных книжек в другой рабочей области

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

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

Возвращаемое значение

Метод list() возвращает массив Artifact объектов. Каждый объект содержит displayNameи iddescription свойства.

Фильтрация записных книжек по шаблону имени

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}")

Клонирование записной книжки

Используйте list() и getDefinition() вместе, чтобы клонировать записную книжку в пределах одного рабочего пространства или в другое рабочее пространство.

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")

Перенос записной книжки в другую рабочую область

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")