NotebookUtils ile not defteri yapıtlarını yönetme

Microsoft Fabric'te not defteri öğelerini program aracılığıyla yönetmek için kullanın notebookutils.notebook . Dağıtım, yaşam döngüsü yönetimi ve CI/CD iş akışlarını otomatikleştirmek için not defteri yapıtları oluşturabilir, alabilir, güncelleştirebilir, silebilir ve listeleyebilirsiniz.

Uyarı

Bu API'ler Yalnızca Doku not defterlerinde desteklenir, Azure Synapse'te desteklenmez. Her işlem için hedef çalışma alanında uygun izinlere sahip olmanız gerekir.

Aşağıdaki tabloda kullanılabilir not defteri yönetim yöntemleri listelenmektedir:

Yöntem Signature Açıklama
create create(name, description, content, defaultLakehouse, defaultLakehouseWorkspace, workspaceId): Artifact Yeni bir not defteri oluşturur.
get get(name, workspaceId): Artifact Adı veya kimliğiyle bir not defterini alır.
getDefinition getDefinition(name, workspaceId, format): String Not defteri tanımını (içerik) alır.
update update(name, newName, description, workspaceId): Artifact Not defteri meta verilerini günceller.
updateDefinition updateDefinition(name, content, defaultLakehouse, defaultLakehouseWorkspace, workspaceId, environmentId, environmentWorkspaceId): bool Not defteri tanımını ve lakehouse'u güncelleştirir.
delete delete(name, workspaceId): Boolean Bir defteri siler.
list list(workspaceId, maxResults): Array[Artifact] Çalışma alanında tüm not defterlerini listeler.

Not defteri oluşturma

notebookutils.notebook.create() kullanarak geçerli çalışma alanında veya belirtilen çalışma alanında yeni bir not defteri nesnesi oluşturun.

Uyarı

Bu makalede .ipynb dosyalarını okuyan veya yazan iş akışı örnekleri, dosya G/Ç işlemleri için Python kullanır. Aksi belirtilmediği sürece çekirdek notebookutils.notebook API'ler Python, PySpark, Scala ve R'de kullanılabilir.

Parametreler

Parametre Türü Zorunlu Açıklama
name Dize Evet Yeni not defterinin görünen adı. Çalışma alanı içinde benzersiz olmalıdır.
description Dize Hayır Not defterinin açıklaması. Varsayılan olarak boş ayarlanır.
content Dize, bayt veya sözlük Evet Geçerli .ipynb JSON biçiminde not defteri içeriği. Ham bayt veya dikte nesnesi de olabilir. Boş olamaz.
defaultLakehouse Dize Hayır Eklenecek varsayılan göl evi adı veya kimliği.
defaultLakehouseWorkspace Dize Hayır Varsayılan lakehouse çalışma alanı kimliği. Geçerli çalışma alanı için boş bırakın.
workspaceId Dize Hayır Hedef çalışma alanı kimliği. Geçerli çalışma alanı için boş bırakın.

Önemli

content Parametresi boş olamaz. Not defteri oluştururken geçerli .ipynb biçim içeriği sağlamanız gerekir. En azından geçerli bir boş not defteri yapısı sağlayın:

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

Şablondan not defteri oluşturma

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

Varsayılan lakehouse ile not defteri oluşturma

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

Dönüş değeri

create() yöntemi aşağıdaki özelliklere sahip bir Artifact nesne döndürür:

  • displayName: Defterin ekran adı.
  • id: Oluşturulan not defterinin benzersiz tanımlayıcısı.
  • description: Not defterinin açıklaması.

Başka bir çalışma alanında not defteri oluşturma

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

Şablondan birden çok not defteri oluşturma

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

Tavsiye

Not defterlerinizin bulunmasını kolaylaştırmak için anlamlı adlar ve açıklamalar sağlayın. Otomatik dağıtımlar gibi <Project>_<Purpose>_<Region> tutarlı bir adlandırma kuralı kullanın.

Bir defter al

Not defteri meta verilerini ad veya kimlik ile almak için notebookutils.notebook.get() kullanın. , Artifactve displayNamegibi idözelliklere sahip bir description nesne döndürür.

Parametreler

Parametre Türü Zorunlu Açıklama
name Dize Evet Alınacak not defterinin adı veya kimliği.
workspaceId Dize Hayır Çalışma Alanı Kimliği. Geçerli çalışma alanı için boş bırakın.

Geçerli çalışma alanından not defteri alma

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

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

Başka bir çalışma alanından not defteri alma

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

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

Dönüş değeri

get() yöntemi aşağıdaki özelliklere sahip bir Artifact nesne döndürür:

  • displayName: Defterin ekran adı.
  • id: Benzersiz tanımlayıcı.
  • description: Not defterinin açıklaması.

Tavsiye

Hedef not defterinin mevcut olduğunu doğrulamak için güncelleştirmeden veya silme işlemden önce kullanın get() . Yeni bir tane oluşturmadan önce not defteri adının zaten kullanımda olup olmadığını denetlemek için de kullanabilirsiniz.

Dizüstü bilgisayar tanımını al

Tam not defteri içeriğini notebookutils.notebook.getDefinition() biçiminde almak için kullanın.ipynb. Yedekleme, geçiş, sürüm denetimi veya içerik analizi için kullanın.

Parametreler

Parametre Türü Zorunlu Açıklama
name Dize Evet Not defterinin adı veya kimliği.
workspaceId Dize Hayır Çalışma Alanı Kimliği. Geçerli çalışma alanı için boş bırakın.
format Dize Hayır Çıkış biçimi. Varsayılan olarak "ipynb" değerini alır.

Not defteri tanımını alma ve kaydetme

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

Başka bir çalışma alanından not defteri tanımı alma

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

Dönüş değeri

yöntemi, getDefinition() JSON biçiminde not defteri içeriğini .ipynb içeren bir dize döndürür.

Yedekleme için tüm not defterlerini dışarı aktarma

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

Not defterini güncelleştirme

Not defteri meta verilerini, örneğin görünen adını ve açıklamasını değiştirmek için notebookutils.notebook.update() kullanın. Not defteri içeriğini veya lakehouse yapılandırmasını değiştirmez.

Parametreler

Parametre Türü Zorunlu Açıklama
name Dize Evet Not defterinin geçerli adı veya kimliği.
newName Dize Evet Not defteri için yeni görünen ad.
description Dize Hayır Açıklama güncelleştirildi.
workspaceId Dize Hayır Çalışma Alanı Kimliği. Geçerli çalışma alanı için boş bırakın.

Not defterini yeniden adlandırma

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

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

Dönüş değeri

yöntemi, update() güncelleştirilmiş özelliklere sahip bir Artifact nesne döndürür.

Not defteri tanımını güncelleştirme

Not defteri içeriğini, varsayılan lakehouse'u veya her ikisini birden değiştirmek için kullanın notebookutils.notebook.updateDefinition() . Meta verileri yerine not defteri tanımını değiştirmeniz gerektiğinde bunu kullanın.

Parametreler

Parametre Türü Zorunlu Açıklama
name Dize Evet Güncelleştirilecek not defterinin adı veya kimliği.
content Dize Hayır .ipynb biçiminde bir yeni not defteri içeriği.
defaultLakehouse Dize Hayır Yeni varsayılan lakehouse adı.
defaultLakehouseWorkspace Dize Hayır Yeni varsayılan lakehouse çalışma alanı kimliği. Geçerli çalışma alanı için boş bırakın.
workspaceId Dize Hayır Çalışma Alanı Kimliği. Geçerli çalışma alanı için boş bırakın.
environmentId Dize Hayır Not defterine eklenecek ortam kimliği.
environmentWorkspaceId Dize Hayır Ortamın çalışma alanı kimliği. Geçerli çalışma alanı için boş bırakın.

Uyarı

environmentId ve environmentWorkspaceId parametreleri yalnızca Spark not defteri çalışma zamanında kullanılabilir. Python not defterleri bu parametreleri desteklemez.

Not defteri içeriğini güncelleştirme

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

Varsayılan lakehouse'u değiştir

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

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

Hem içeriği hem de lakehouse'ı güncelleştirme

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

Dönüş değeri

Yöntemi, updateDefinition() güncelleştirme başarılı olursa veya True başarısız olursa döndürürFalse.

Tavsiye

Meta veri değişiklikleri (ad, açıklama) için update(), içerik ve lakehouse değişiklikleri için updateDefinition() kullanın. Hem meta veriler hem de içerik için tam yenilemeye ihtiyacınız olduğunda, her iki yöntemi de sırayla çağırın.

Bir defteri sil

Çalışma alanından not defterini kalıcı olarak kaldırmak için kullanın notebookutils.notebook.delete() . Silme işlemi başarılı olursa döndürür True ; aksi takdirde döndürür False.

Parametreler

Parametre Türü Zorunlu Açıklama
name Dize Evet Silinecek not defterinin adı veya kimliği.
workspaceId Dize Hayır Çalışma Alanı Kimliği. Geçerli çalışma alanı için boş bırakın.

Önemli

Silme işlemi kalıcıdır. Silinen not defterleri kurtarılamaz. Silmeden önce her zaman not defteri adını doğrulayın ve önce not defteri tanımını getDefinition() yedeklemeyi göz önünde bulundurun.

Dönüş değeri

Yöntem, silme başarılı olursa delete() veya başarısız olursa True döndürürFalse.

Bir defteri sil

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

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

Not defterlerini desene göre güvenli bir şekilde temizleme

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)

Tavsiye

Güvenli toplu silme için, hangi not defterlerinin kaldırılacağını önizlemek için her zaman ilk ile dry_run=True çalıştırın. Gerekirse kurtarabilmeniz için not defterlerini hemen silmek yerine bir _TO_DELETE ön ekle yeniden adlandırmayı göz önünde bulundurun.

Dizüstü bilgisayarları listele

Çalışma alanında not defterlerini listelemek için kullanın notebookutils.notebook.list() . Bir nesne dizisi Artifact döndürür.

Parametreler

Parametre Türü Zorunlu Açıklama
workspaceId Dize Hayır Çalışma Alanı Kimliği. Geçerli çalışma alanı için boş bırakın.
maxResults Int Hayır Döndürülecek en fazla sonuç sayısı. Varsayılan değer 1000'dir.

Geçerli çalışma alanında tüm not defterlerini listeleme

notebooks = notebookutils.notebook.list()

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

Başka bir çalışma alanındaki not defterlerini listeleme

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

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

Dönüş değeri

list() yöntemi bir nesne dizisi Artifact döndürür. Her nesne , displayNameve id özelliklerini içerirdescription.

Not defterlerini ad düzenine göre filtreleme

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

Not defterini kopyalama

list() ve getDefinition() birlikte kullanarak bir not defterini aynı çalışma alanı içinde veya başka bir çalışma alanına klonlayın.

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

Not defterini başka bir çalışma alanına geçirme

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