Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wichtig
Python-Unterstützung für Databricks Asset Bundles befindet sich in der öffentlichen Vorschau.
Python für Databricks Asset Bundles erweitert Databricks Asset Bundles so, dass Sie:
- Definieren Von Aufträgen und Pipelines als Python-Code. Diese Definitionen können mit den in YAML definierten Definitionen koexistieren.
- Dynamisches Erstellen von Aufträgen oder Pipelines mithilfe von Metadaten. Siehe "Erstellen von Ressourcen mithilfe von Metadaten".
- Ändern Sie während der Bereitstellung eines Bundles Aufträge, die in YAML oder Python definiert sind. Siehe "Ändern von Aufträgen", die in YAML oder Python definiert sind.
Referenzdokumentation für die Python-Unterstützung für Databricks Asset Bundles databricks-bundles package ist unter https://databricks.github.io/cli/experimental/python/.
Anforderungen
Um python-Unterstützung für Databricks Asset Bundles zu verwenden, müssen Sie zuerst:
Installieren Sie databricks CLI, Version 0.248.0 oder höher. Weitere Informationen finden Sie unter Installieren oder Aktualisieren der Databricks CLI.
Authentifizieren Sie sich bei Ihrem Databricks-Arbeitsbereich, wenn Sie dies noch nicht getan haben:
databricks configure
Installieren Sie uv. Siehe Installieren von UV. Python für Databricks Asset Bundles verwendet uv, um eine virtuelle Umgebung zu erstellen und die erforderlichen Abhängigkeiten zu installieren. Alternativ können Sie Ihre Python-Umgebung mit anderen Tools wie venv konfigurieren.
Erstellen eines Projekts aus der Vorlage
Um eine neue Python-Unterstützung für das Projekt "Databricks Asset Bundles" zu erstellen, initialisieren Sie ein Bündel mithilfe der experimental-jobs-as-code
Vorlage:
databricks bundle init experimental-jobs-as-code
Wenn Sie dazu aufgefordert werden, geben Sie Ihrem Projekt einen Namen, wie my_jobs_as_code_project
, und akzeptieren Sie die Aufnahme eines Notebooks und eines Python-Pakets.
Erstellen Sie nun eine neue virtuelle Umgebung in Ihrem neuen Projektordner:
cd my_jobs_as_code_project
uv sync
Standardmäßig enthält die Vorlage ein Beispiel für einen Auftrag, der in der resources/my_jobs_as_code_project_job.py
Datei als Python definiert ist:
from databricks.bundles.jobs import Job
my_jobs_as_code_project_job = Job.from_dict(
{
"name": "my_jobs_as_code_project_job",
"tasks": [
{
"task_key": "notebook_task",
"notebook_task": {
"notebook_path": "src/notebook.ipynb",
},
},
],
},
)
Die Job.from_dict
Funktion akzeptiert ein Python-Wörterbuch mit demselben Format wie YAML. Aufträge können auch mithilfe der Datenklassensyntax erstellt werden:
from databricks.bundles.jobs import Job, Task, NotebookTask
my_jobs_as_code_project_job = Job(
name="my_jobs_as_code_project_job",
tasks=[
Task(
task_key="notebook_task",
notebook_task=NotebookTask(
notebook_path="src/notebook.ipynb",
),
),
],
)
Python-Dateien werden durch einen Einstiegspunkt geladen, der im experimental
-Abschnitt in databricks.yml
angegeben ist.
experimental:
python:
# Activate the virtual environment before loading resources defined in
# Python. If disabled, it defaults to using the Python interpreter
# available in the current shell.
venv_path: .venv
# Functions called to load resources defined in Python.
# See resources/__init__.py
resources:
- 'resources:load_resources'
Enthält standardmäßig eine Funktion, resources/__init__.py
die alle Python-Dateien im Ressourcenpaket lädt.
from databricks.bundles.core import (
Bundle,
Resources,
load_resources_from_current_package_module,
)
def load_resources(bundle: Bundle) -> Resources:
"""
'load_resources' function is referenced in databricks.yml and is responsible for loading
bundle resources defined in Python code. This function is called by Databricks CLI during
bundle deployment. After deployment, this function is not used.
"""
# the default implementation loads all Python files in 'resources' directory
return load_resources_from_current_package_module()
Bereitstellen und Ausführen von Aufträgen oder Pipelines
Um das Bundle im Entwicklungsziel bereitzustellen, verwenden Sie den Befehl "Bundle bereitstellen " aus dem Stammverzeichnis des Bundleprojekts:
databricks bundle deploy --target dev
Mit diesem Befehl werden alle für das Bundleprojekt definierten Elemente bereitgestellt. Beispielsweise wird bei einem Projekt, das mit der Standardvorlage erstellt wird, ein Auftrag namens [dev yourname] my_jobs_as_code_project_job
in Ihrem Arbeitsbereich bereitgestellt. Sie finden diesen Auftrag, indem Sie in Ihrem Databricks-Arbeitsbereich zu Aufträgen und Pipelines navigieren.
Nachdem das Bundle bereitgestellt wurde, können Sie den Zusammenfassungsbefehl des Bundles verwenden, um alles zu überprüfen, was bereitgestellt wird:
databricks bundle summary --target dev
Um einen Auftrag oder eine Pipeline auszuführen, verwenden Sie schließlich den Befehl zum Ausführen des Bundles:
databricks bundle run my_jobs_as_code_project_job
Aktualisieren vorhandener Bundles
Um vorhandene Bündel zu aktualisieren, modellieren Sie die Projektvorlagenstruktur wie unter Erstellen eines Projekts aus einer Vorlage beschrieben. Vorhandene Bündel mit YAML können aktualisiert werden, um Aufträge oder Pipelines einzuschließen, die als Python-Code definiert sind, indem sie einen experimental.python
Abschnitt hinzufügen in databricks.yml
:
experimental:
python:
# Activate the virtual environment before loading resources defined in
# Python. If disabled, it defaults to using the Python interpreter
# available in the current shell.
venv_path: .venv
# Functions called to load resources defined in Python.
# See resources/__init__.py
resources:
- 'resources:load_resources'
Die angegebene virtuelle Umgebung muss das installierte "databricks-bundles PyPi"-Paket enthalten.
pip install databricks-bundles==0.248.0
Der Ressourcenordner muss eine Datei enthalten __init__.py
:
from databricks.bundles.core import (
Bundle,
Resources,
load_resources_from_current_package_module,
)
def load_resources(bundle: Bundle) -> Resources:
"""
'load_resources' function is referenced in databricks.yml and
is responsible for loading bundle resources defined in Python code.
This function is called by Databricks CLI during bundle deployment.
After deployment, this function is not used.
"""
# default implementation loads all Python files in 'resources' folder
return load_resources_from_current_package_module()
Konvertieren vorhandener Aufträge in Python
Um vorhandene Aufträge in Python zu konvertieren, können Sie das Feature "Als Code anzeigen" verwenden. Siehe Anzeigen von Aufträgen als Code.
- Öffnen Sie eine Auftragsseite in Databricks-Workflows.
- Klicken Sie links neben der Schaltfläche " Jetzt ausführen " auf den Kebab, und klicken Sie dann auf "Als Code anzeigen":
- Wählen Sie Python und dann Databricks Asset Bundles aus.
- Klicken Sie auf "Kopieren ", und speichern Sie die generierte Python-Datei als Python-Datei im Ressourcenordner des Bundleprojekts.
Tipp
Sie können YAML auch für vorhandene Aufträge und Pipelines anzeigen und kopieren, die Sie direkt in Ihre Bündelkonfigurations-YAML-Dateien einfügen können.
Erstellen von Ressourcen mithilfe von Metadaten
Die Standardimplementierung der load_resources
Funktion lädt Python-Dateien im resources
Paket. Sie können Python verwenden, um Ressourcen programmgesteuert zu erstellen. Sie können beispielsweise Konfigurationsdateien laden und Aufträge in einer Schleife erstellen:
from databricks.bundles.core import (
Bundle,
Resources,
load_resources_from_current_package_module,
)
from databricks.bundles.jobs import Job
def create_job(country: str):
my_notebook = {
"task_key": "my_notebook",
"notebook_task": {
"notebook_path": "files/my_notebook.py",
},
}
return Job.from_dict(
{
"name": f"my_job_{country}",
"tasks": [my_notebook],
}
)
def load_resources(bundle: Bundle) -> Resources:
resources = load_resources_from_current_package_module()
for country in ["US", "NL"]:
resources.add_resource(f"my_job_{country}", create_job(country))
return resources
Zugriff auf Bündelvariablen
Der bundle
Parameter kann für den Zugriff auf Bundlevariablen und das Bereitstellungsziel verwendet werden:
from databricks.bundles.core import Bundle, Resources, Variable, variables
@variables
class Variables:
warehouse_id: Variable[str]
def load_resources(bundle: Bundle) -> Resources:
warehouse_id = bundle.resolve_variable(Variables.warehouse_id)
...
Weitere Informationen finden Sie in der Ressourcen - und Bundle-Klassenreferenz .
Ändern von Aufträgen, die in YAML oder Python definiert sind
Sie können auf Auftragsmutatorfunktionen in databricks.yml
verweisen, ähnlich wie bei Funktionen, die Ressourcen laden. Dieses Feature kann unabhängig von in Python definierten Ladeaufträgen verwendet werden und verändert Ressourcen, die sowohl in YAML als auch in Python definiert sind.
Erstellen Sie zunächst mutators.py
im Stammverzeichnis des Bundle mit dem folgenden Inhalt:
from dataclasses import replace
from databricks.bundles.core import Bundle, job_mutator
from databricks.bundles.jobs import Job, JobEmailNotifications
@job_mutator
def add_email_notifications(bundle: Bundle, job: Job) -> Job:
if job.email_notifications:
return job
email_notifications = JobEmailNotifications.from_dict(
{
"on_failure": ["${workspace.current_user.userName}"],
}
)
return replace(job, email_notifications=email_notifications)
Verwenden Sie nun die folgende Konfiguration, um die add_email_notifications
Funktion während der Bundlebereitstellung auszuführen. Dadurch wird jeder im Bundle definierte Auftrag mit E-Mail-Benachrichtigungen aktualisiert, wenn sie fehlen. Mutatorfunktionen müssen in databricks.yml
angegeben und in der angegebenen Reihenfolge ausgeführt werden. Job-Mutatoren werden für jeden in einem Paket definierten Auftrag ausgeführt und können entweder eine aktualisierte Kopie oder den unveränderten Eingang zurückgeben. Mutatoren können auch für andere Felder verwendet werden, z. B. das Konfigurieren von Standardauftragsclustern oder SQL-Lagerhäusern.
experimental:
python:
mutators:
- 'mutators:add_email_notifications'
Wenn Funktionen während der Mutatorausführung eine Ausnahme auslösen, wird die Bundlebereitstellung abgebrochen.