Helyettesítések és változók a Databricks-eszközcsomagokban
A Databricks Asset Bundles támogatja a helyettesítéseket és az egyéni változókat, amelyek modulárisabbá és újrafelhasználhatóbbá teszik a csomagkonfigurációs fájlokat. A helyettesítések és az egyéni változók egyaránt 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 futtatásakor.
Tipp.
A feladatparaméterek értékeihez dinamikus értékhivatkozásokkal is átadhatja a feladatfuttatások kontextusát a feladattevékenységek számára. Lásd: Mi az a dinamikus értékhivatkozás? és a feladatok paraméterezése.
Helyettesítések
A helyettesítésekkel lekérheti a csomag üzembe helyezésének és futtatásának kontextusa alapján változó beállítások értékeit.
A parancs futtatásakor bundle validate --output json
például egy ilyen gráf jelenhet meg:
{
"bundle": {
"name": "hello-bundle",
"target": "dev",
"...": "..."
},
"workspace": {
"...": "...",
"current_user": {
"...": "...",
"userName": "someone@example.com",
"...": "...",
},
"...": "..."
},
"...": {
"...": "..."
}
}
Az aldokumentumok a köteg name
, a köteg target
és a munkaterület userName
mezőinek értékeire hivatkozva hozhatják létre a munkaterületet root_path
a csomagkonfigurációs fájlban:
bundle:
name: hello-bundle
workspace:
root_path: /Users/${workspace.current_user.userName}/.bundle/${bundle.name}/my-envs/${bundle.target}
# ...
targets:
dev:
default: true
A névvel ellátott erőforrásokhoz helyettesítőket is létrehozhat. A névvel my_pipeline
${resources.pipelines.my_pipeline.target}
konfigurált folyamat esetében például a célérték helyettesítésemy_pipeline
.
Az érvényes helyettesítések meghatározásához használhatja a REST API-referenciában vagy a
Íme néhány gyakran használt helyettesítés:
${bundle.name}
${bundle.target} # Use this substitution instead of ${bundle.environment}
${workspace.host}
${workspace.current_user.short_name}
${workspace.current_user.userName}
${workspace.file_path}
${workspace.root_path}
${resources.jobs.<job-name>.id}
${resources.models.<model-name>.name}
${resources.pipelines.<pipeline-name>.name}
Egyéni változók
A csomagban egyszerű és összetett egyéni változókat is meghatározhat, így számos forgatókönyvhöz szükséges értékek dinamikus lekérését teheti lehetővé. Az egyéni változók deklarálva vannak a csomagkonfigurációs fájlokban a variables
leképezésben vagy egy variable-overrides.json
fájlban. A variables
leképezésről további információért lásd a változókat.
A következő példakonfiguráció határozza meg a változókat my_cluster_id
és my_notebook_path
a következőket:
variables:
my_cluster_id:
description: The ID of an existing cluster.
default: 1234-567890-abcde123
my_notebook_path:
description: The path to an existing notebook.
default: ./hello.py
Ha a deklaráció részeként nem ad meg default
értéket egy változóhoz, akkor azt csomagparancsok végrehajtásakor, környezeti változón vagy a csomagkonfigurációs fájlok más részein kell beállítania a változó értékének beállítása című cikkben leírtak szerint.
A kötegprojekt .databricks/bundle/<target>/variable-overrides.json
fájljában is definiálhat és állíthat be változóértékeket, ahol <target>
a munkaterület célja, például dev
. Lásd: Változó értékének beállítása.
Hivatkozás egy változóra
Ha egyéni változóra szeretne hivatkozni a csomagkonfigurációban, használja a változó helyettesítését${var.<variable_name>}
. Például a változókra my_cluster_id
való hivatkozáshoz és my_notebook_path
a következőhöz:
resources:
jobs:
hello-job:
name: hello-job
tasks:
- task_key: hello-task
existing_cluster_id: ${var.my_cluster_id}
notebook_task:
notebook_path: ${var.my_notebook_path}
Változó értékének beállítása
Ha nem adott meg default
értéket egy változóhoz, vagy ha ideiglenesen felül szeretné bírálni default
egy változó értékét, adja meg a változó új ideiglenes értékét az alábbi módszerek egyikével:
Adja meg a változó értékét egy
bundle
parancs részeként, példáulvalidate
: ,deploy
vagyrun
. Ehhez használja azt a lehetőséget--var="<key>=<value>"
, amely<key>
a változó neve, és<value>
a változó értéke. Ha például abundle validate
parancs részeként meg szeretné adni a névvel ellátott1234-567890-abcde123
változó értékétmy_cluster_id
, és meg szeretné adni a névvel ellátott./hello.py
változó értékétmy_notebook_path
, futtassa a következőt:databricks bundle validate --var="my_cluster_id=1234-567890-abcde123,my_notebook_path=./hello.py" # Or: databricks bundle validate --var="my_cluster_id=1234-567890-abcde123" --var="my_notebook_path=./hello.py"
Adja meg a változó értékét egy környezeti változó beállításával. A környezeti változó nevének a következővel
BUNDLE_VAR_
kell kezdődnie: . A környezeti változók beállításához tekintse meg az operációs rendszer dokumentációját. Ha például meg szeretné adni a névvel ellátott változó értékét1234-567890-abcde123
, és meg szeretné adni a névvel ellátottmy_cluster_id
változó értékét./hello.py
, futtassa a következő parancsot, mielőtt meghívna egymy_notebook_path
parancsot, példáulbundle
:validate
deploy
run
Linux és macOS esetén:
export BUNDLE_VAR_my_cluster_id=1234-567890-abcde123 && export BUNDLE_VAR_my_notebook_path=./hello.py
Windows esetén:
"set BUNDLE_VAR_my_cluster_id=1234-567890-abcde123" && "set BUNDLE_VAR_my_notebook_path=./hello.py"
Vagy adja meg a változó értékét egy
bundle
parancs részeként, példáulvalidate
deploy
Linux ésrun
macOS esetén:BUNDLE_VAR_my_cluster_id=1234-567890-abcde123 BUNDLE_VAR_my_notebook_path=./hello.py databricks bundle validate
Vagy Windows esetén:
"set BUNDLE_VAR_my_cluster_id=1234-567890-abcde123" && "set BUNDLE_VAR_my_notebook_path=./hello.py" && "databricks bundle validate"
Adja meg a változó értékét a csomagkonfigurációs fájlokban a
targets
leképezésen belülivariables
leképezéssel, az alábbi formátum szerint:variables: <variable-name>: <value>
Ha például a
my_cluster_id
nevű változók értékeit szeretné beállítani, ésmy_notebook_path
két különálló célhoz:targets: dev: variables: my_cluster_id: 1234-567890-abcde123 my_notebook_path: ./hello.py prod: variables: my_cluster_id: 2345-678901-bcdef234 my_notebook_path: ./hello.py
Adja meg a változó értékét a
.databricks/bundle/<target>/variable-overrides.json
fájlban a következő formátumban:{ "<variable-name>": "<variable-value>" }
Ha például a fejlesztési célhoz
my_cluster_id
ésmy_notebook_path
nevű változók értékeit szeretné megadni, hozzon létre egy fájl.databricks/bundle/dev/variable-overrides.json
, és állítsa a tartalmát a következőre:{ "my_cluster_id": "1234-567890-abcde123", "my_notebook_path": "./hello.py" }
A
variable-overrides.json
fájlban összetett változókat is definiálhat.
Feljegyzés
Bármelyik módszert is választja a változó értékek megadásához, használja ugyanazt a megközelítést az üzembe helyezési és a futtatási szakaszokban is. Ellenkező esetben előfordulhat, hogy váratlan eredményeket kap az üzembe helyezés időpontja és a meglévő üzembe helyezésen alapuló feladat vagy folyamatfuttatás között.
Elsőbbségi sorrend
A Databricks parancssori felület a változók értékeit a következő sorrendben keresi meg, és leáll, amikor egy változó értékét keresi:
- A parancs részeként
--var
megadott beállításokonbundle
belül. - Minden olyan környezeti változókészleten belül, amely a következővel
BUNDLE_VAR_
kezdődik: . - A
variables-overrides.json
fájlon belül, ha létezik. - A csomagkonfigurációs fájlokban lévő
variables
leképezéseken belül mindentargets
leképezésen belül. - A változó definíciójának bármilyen
default
értéke a csomagkonfigurációs fájlok legfelső szintűvariables
leképezései között.
Összetett változó definiálása
Az egyéni változók sztring típusúak, kivéve, ha összetett változóként definiálják. Ha összetett típusú egyéni változót szeretne definiálni a csomagkonfigurációban, állítsa type
complex
.
Feljegyzés
A beállítás egyetlen érvényes értéke.type
complex
Emellett a köteg érvényesítése meghiúsul, ha type
be van állítva complex
, és a default
változóhoz definiált érték egyetlen érték.
Az alábbi példában a fürtbeállítások egy egyéni, összetett változóban vannak definiálva my_cluster
:
variables:
my_cluster:
description: "My cluster definition"
type: complex
default:
spark_version: "13.2.x-scala2.11"
node_type_id: "Standard_DS3_v2"
num_workers: 2
spark_conf:
spark.speculation: true
spark.databricks.delta.retentionDurationCheck.enabled: false
resources:
jobs:
my_job:
job_clusters:
- job_cluster_key: my_cluster_key
new_cluster: ${var.my_cluster}
tasks:
- task_key: hello_task
job_cluster_key: my_cluster_key
A .databricks/bundles/<target>/variable-overrides.json
fájlban is definiálhat egy összetett változót, ahogyan az a következő példában látható:
{
"my_cluster": {
"spark_version": "13.2.x-scala2.11",
"node_type_id": "Standard_DS3_v2",
"num_workers": 2
}
}
Objektum azonosítóértékének lekérése
A alert
, cluster_policy
, cluster
, dashboard
, instance_pool
, job
, metastore
, notification_destination
, pipeline
, query
, service_principal
és warehouse
objektumtípusok esetében definiálhat egy lookup
az egyéni változóhoz egy elnevezett objektum azonosítójának lekéréséhez az alábbi formátumban:
variables:
<variable-name>:
lookup:
<object-type>: "<object-name>"
Ha egy változóhoz keresési érték van definiálva, a rendszer a megadott névvel rendelkező objektum azonosítóját használja a változó értékeként. Ez biztosítja, hogy az objektum helyes feloldott azonosítója mindig a változóhoz legyen használva.
Feljegyzés
Hiba akkor fordul elő, ha a megadott névvel rendelkező objektum nem létezik, vagy ha egynél több objektum van a megadott névvel.
Az alábbi konfigurációban ${var.my_cluster_id}
például a 12.2 megosztott fürt azonosítója lesz lecserélve.
variables:
my_cluster_id:
description: An existing cluster
lookup:
cluster: "12.2 shared"
resources:
jobs:
my_job:
name: "My Job"
tasks:
- task_key: TestTask
existing_cluster_id: ${var.my_cluster_id}