Megosztás:


Csomagkonfiguráció a Pythonban

A Python támogatás a Databricks Asset Bundles számára kibővíti a Databricks-eszközcsomagokat a csomag üzembe helyezése során alkalmazott további képességekkel, amelyek lehetővé teszik, hogy ön:

A Databricks Asset Bundles databricks-bundles csomag Python-támogatásának referenciadokumentációja a következő címen https://databricks.github.io/cli/python/érhető el: .

Követelmények

A Databricks Asset Bundles Python-támogatásának használatához először a következőt kell tennie:

  1. Telepítse a Databricks CLI 0.275.0-s vagy újabb verzióját. Lásd : A Databricks parancssori felület telepítése vagy frissítése.

  2. Hitelesítés a Databricks-munkaterületen, ha még nem tette meg:

    databricks configure
    
  3. Telepítse uv. Lásd : Az UV telepítése. A Databricks Asset Bundles Python uv használatával hoz létre egy virtuális környezetet, és telepíti a szükséges függőségeket. Másik lehetőségként konfigurálhatja a Python-környezetet más eszközökkel, például a venv használatával.

Projekt létrehozása a sablonból

A Databricks Asset Bundles-projekt új Python-támogatásának létrehozásához inicializáljon egy csomagot a pydabs sablon használatával:

databricks bundle init pydabs

Amikor a rendszer felszólítja, adjon nevet a projektnek, például my_pydabs_project, és fogadja el a notebook és a Python-csomag beillesztését.

Most hozzon létre egy új virtuális környezetet az új projektmappában:

cd my_pydabs_project
uv sync

Alapértelmezés szerint a sablon egy Pythonként definiált feladat példáját tartalmazza a resources/my_pydabs_project_job.py fájlban:

from databricks.bundles.jobs import Job


my_pydabs_project_job = Job.from_dict(
    {
        "name": "my_pydabs_project_job",
        "tasks": [
            {
                "task_key": "notebook_task",
                "notebook_task": {
                    "notebook_path": "src/notebook.ipynb",
                },
            },
        ],
    },
)

A Job.from_dict függvény a YAML formátumával megegyező formátumú Python-szótárat fogad el. Az erőforrások adatosztályszintaxissal is létrehozhatók:

from databricks.bundles.jobs import Job, Task, NotebookTask


my_pydabs_project_job = Job(
    name="my_pydabs_project_job",
    tasks=[
        Task(
            task_key="notebook_task",
            notebook_task=NotebookTask(
                notebook_path="src/notebook.ipynb",
            ),
        ),
    ],
)

A Python-fájlok a python szakaszban megadott belépési ponton keresztül töltődnek be databricks.yml.

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'

Alapértelmezés szerint olyan függvényt tartalmaz, resources/__init__.py amely betölti az erőforráscsomag összes Python-fájlját.

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

Feladatok vagy folyamatok üzembe helyezése és futtatása

A csomag fejlesztési célra történő üzembe helyezéséhez használja a bundle deploy parancsot a csomagprojekt gyökeréből.

databricks bundle deploy --target dev

Ez a parancs üzembe helyezi a csomagprojekthez definiált összes beállítást. Az alapértelmezett sablonnal létrejövő projekt például üzembe helyez egy [dev yourname] my_pydabs_project_job nevű feladatot a munkaterületére. Ezt a feladatot a Databricks-munkaterületEn található Feladatok & folyamatok között navigálva találja meg.

A csomag üzembe helyezése után a csomag összegzési parancsával áttekintheti az üzembe helyezett összes elemet:

databricks bundle summary --target dev

Végül egy feladat vagy folyamat futtatásához használja a csomagfuttatási parancsot:

databricks bundle run my_pydabs_project_job

Meglévő csomagok frissítése

A meglévő csomagok frissítéséhez modellezheti a projektsablon szerkezetét a Projekt létrehozása sablonból című szakaszban leírtak szerint. A YAML-sel rendelkező meglévő csomagok frissíthetők úgy, hogy a Python-kódként definiált erőforrásokat is tartalmazzák egy python szakasz hozzáadásával a következőben databricks.yml:

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'

A megadott virtuális környezetnek tartalmaznia kell a telepített databricks-bundles PyPi-csomagot.

pip install databricks-bundles==0.275.0

Az erőforrások mappájának a következő fájlt kell tartalmaznia __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()

Meglévő feladatok konvertálása Pythonra

A meglévő feladatok Pythonra való konvertálásához használhatja a Nézet kódként funkciót. Lásd: Feladatok megtekintése kódként.

  1. Nyissa meg a Databricks-munkaterületen a meglévő munka oldalát.

  2. Kattintson a Kebab menü ikonra. kebab a Futtatás most gombtól balra, majd kattintson a Nézet kódként parancsra:

    Megtekintés kódként menüelemként

  3. Válassza a Pythont, majd a Databricks-eszközcsomagokat

    Megtekintés kódként, Python

  4. Kattintson a Másolás gombra, és mentse el a generált Python-fájlt Python-fájlként a csomagprojekt erőforrás mappájába.

    Jótanács

    Megtekintheti és átmásolhatja a YAML-et a meglévő feladatokhoz és folyamatokhoz, amelyeket közvetlenül beilleszthet a csomagkonfigurációs YAML-fájlokba.

Erőforrások létrehozása metaadatok használatával

A függvény alapértelmezett implementációja Betölti a load_resources Python-fájlokat a resources csomagban. A Python használatával programozott módon hozhat létre erőforrásokat. Betöltheti például a konfigurációs fájlokat, és létrehozhat feladatokat egy ciklusban:

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

Csomagváltozók elérése

A köteghelyettesítések és az egyéni változók lehetővé teszik az értékek dinamikus lekérését, hogy a beállítások meghatározhatók legyenek a csomag üzembe helyezésekor és a célon való futtatáskor. A csomagváltozókról további információt az Egyéni változók című témakörben talál.

Pythonban definiáljon változókat, majd használja a bundle paramétert azok eléréséhez. Lásd @variables dekorátor, Változó, csomag és Erőforrások.

from databricks.bundles.core import Bundle, Resources, Variable, variables

@variables
class Variables:
    # Define a variable
    warehouse_id: Variable[str]


def load_resources(bundle: Bundle) -> Resources:
    # Resolve the variable
    warehouse_id = bundle.resolve_variable(Variables.warehouse_id)

    ...

A változók a Pythonban is elérhetők helyettesítések használatával.

sample_job = Job.from_dict(
    {
        "name": "sample_job",
        "tasks": [
            {
                "task_key": "my_sql_query_task",
                "sql_task": {
                    "warehouse_id": "${var.warehouse_id}",
                    "query": {
                        "query_id": "11111111-1111-1111-1111-111111111111",
                    },
    ...

A célfelüldefiniálásokkal változóértékeket állíthat be a különböző üzembehelyezési célokhoz.

YAML-ben vagy Pythonban definiált erőforrások módosítása

Az erőforrások módosításához az erőforrásokat betöltő függvényekhez hasonlóan hivatkozhat módosító függvényekre databricks.yml. Ez a funkció a Pythonban definiált erőforrások betöltésétől függetlenül használható, és a YAML-ben és a Pythonban definiált erőforrásokat is mutálja.

Először hozzon létre mutators.py a csomag gyökerében a következő tartalommal:

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)

Most használja a következő konfigurációt a függvény végrehajtásához a add_email_notifications csomag üzembe helyezése során. Ez frissíti a csomagban definiált összes feladatot e-mail-értesítésekkel, ha hiányoznak. A mutációs függvényeket a megadott sorrendben databricks.ymlkell megadni, és végre kell hajtani. A feladatmutátorok a csomagban definiált összes feladathoz végrehajthatók, és frissített vagy módosítatlan bemenetet adhatnak vissza. A mutációk más mezőkhöz is használhatók, például alapértelmezett feladatfürtök vagy SQL-raktárak konfigurálásához.

python:
  mutators:
    - 'mutators:add_email_notifications'

Ha a függvények kivételt jeleznek a mutáció végrehajtása során, a csomag üzembe helyezése megszakad.

Jótanács

A célok előbeállításainak konfigurálásához (például a cél ütemezésének feloldásához) használja az prod üzembe helyezési módokat és az előre beállított beállításokat. Lásd: egyéni beállítások.

További erőforrások