Ersättningar och variabler i Databricks-tillgångspaket
Databricks Asset Bundles stöder ersättningar och anpassade variabler, vilket gör paketkonfigurationsfilerna mer modulära och återanvändbara. Både substitutioner och anpassade variabler möjliggör dynamisk hämtning av värden så att inställningarna kan fastställas när ett paket distribueras och körs.
Dricks
Du kan också använda dynamiska värdereferenser för jobbparametervärden för att skicka kontext om en jobbkörning till jobbaktiviteter. Se Vad är en referens för dynamiskt värde? och Parameterisera jobb.
Substitutioner
Du kan använda ersättningar för att hämta värden för inställningar som ändras baserat på kontexten för paketdistributionen och körningen.
När du till exempel kör bundle validate --output json
kommandot kan du se ett diagram som liknar detta:
{
"bundle": {
"name": "hello-bundle",
"target": "dev",
"...": "..."
},
"workspace": {
"...": "...",
"current_user": {
"...": "...",
"userName": "someone@example.com",
"...": "...",
},
"...": "..."
},
"...": {
"...": "..."
}
}
Undertabeller kan användas för att referera till värdena för fälten bundle name
, bundle target
och workspace userName
för att konstruera arbetsytan root_path
i paketkonfigurationsfilen:
bundle:
name: hello-bundle
workspace:
root_path: /Users/${workspace.current_user.userName}/.bundle/${bundle.name}/my-envs/${bundle.target}
# ...
targets:
dev:
default: true
Du kan också skapa ersättningar för namngivna resurser. Till exempel för pipelinen som konfigurerats med namnet my_pipeline
, ${resources.pipelines.my_pipeline.target}
är ersättningen för värdet för målet my_pipeline
för .
För att fastställa giltiga ersättningar kan du använda schemahierarkin som beskrivs i REST API-referensen eller utdata från bundle schema
kommandot.
Här är några vanliga ersättningar:
${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}
Anpassade variabler
Du kan definiera både enkla och komplexa anpassade variabler i ditt paket för att aktivera dynamisk hämtning av värden som behövs för många scenarier. Anpassade variabler deklareras i paketkonfigurationsfilerna i mappningen variables
. Se variabler.
Följande exempelkonfiguration definierar variablerna my_cluster_id
och my_notebook_path
:
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
Om du inte anger ett default
värde för en variabel som en del av den här deklarationen måste du ange det när du kör paketkommandon, via en miljövariabel eller någon annanstans i paketkonfigurationsfilerna enligt beskrivningen i Ange en variabels värde.
Om du vill referera till en anpassad variabel i paketkonfigurationen använder du variabelersättningen ${var.<variable_name>}
. Om du till exempel vill referera till variablerna my_cluster_id
och my_notebook_path
:
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}
Ange en variabels värde
Om du inte har angett något default
värde för en variabel, eller om du tillfälligt vill åsidosätta default
värdet för en variabel, anger du variabelns nya temporära värde med någon av följande metoder:
Ange variabelns värde som en del av ett
bundle
kommando, till exempelvalidate
,deploy
ellerrun
. Om du vill göra detta använder du alternativet--var="<key>=<value>"
, där<key>
är variabelns namn och<value>
är variabelns värde. Som en del avbundle validate
kommandot kan du till exempel ange värdet1234-567890-abcde123
för variabeln med namnetmy_cluster_id
och ange värdet./hello.py
för variabeln med namnetmy_notebook_path
, kör: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"
Ange variabelns värde genom att ange en miljövariabel. Miljövariabelns namn måste börja med
BUNDLE_VAR_
. Information om hur du anger miljövariabler finns i dokumentationen till operativsystemet. Om du till exempel vill ange värdet1234-567890-abcde123
för variabeln med namnetmy_cluster_id
och ange värdet./hello.py
för variabeln med namnetmy_notebook_path
kör du följande kommando innan du anropar ettbundle
kommando somvalidate
,deploy
ellerrun
:För Linux och macOS:
export BUNDLE_VAR_my_cluster_id=1234-567890-abcde123 && export BUNDLE_VAR_my_notebook_path=./hello.py
För Windows:
"set BUNDLE_VAR_my_cluster_id=1234-567890-abcde123" && "set BUNDLE_VAR_my_notebook_path=./hello.py"
Eller ange variabelns värde som en del av ett
bundle
kommando somvalidate
,deploy
ellerrun
, till exempel för Linux och macOS:BUNDLE_VAR_my_cluster_id=1234-567890-abcde123 BUNDLE_VAR_my_notebook_path=./hello.py databricks bundle validate
Eller för Windows:
"set BUNDLE_VAR_my_cluster_id=1234-567890-abcde123" && "set BUNDLE_VAR_my_notebook_path=./hello.py" && "databricks bundle validate"
Ange variabelns värde i paketkonfigurationsfilerna. Det gör du genom att använda en
variables
mappning i mappningentargets
enligt det här formatet:variables: <variable-name>: <value>
Om du till exempel vill ange värden för variablerna med namnet
my_cluster_id
ochmy_notebook_path
för två separata mål: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
Kommentar
Oavsett vilken metod du väljer att ange variabelvärden använder du samma metod under både distributions- och körningsstegen. Annars kan du få oväntade resultat mellan tidpunkten för en distribution och ett jobb eller en pipelinekörning som baseras på den befintliga distributionen.
I föregående exempel letar Databricks CLI efter värden för variablerna my_cluster_id
och my_notebook_path
i följande ordning stoppar du när det hittar ett värde för varje matchande variabel och hoppar över andra platser för variabeln:
- Inom alla
--var
alternativ som anges som en del avbundle
kommandot. - I alla miljövariabler som börjar med
BUNDLE_VAR_
. - I alla
variables
mappningar, bland mappningarnatargets
i paketkonfigurationsfilerna. - Valfritt
default
värde för variabelns definition, bland de översta mappningarnavariables
i paketkonfigurationsfilerna.
Definiera en komplex variabel
En anpassad variabel antas vara av typen sträng om du inte definierar den som en komplex variabel. Om du vill definiera en anpassad variabel med en komplex typ för ditt paket anger du type
till complex
i paketkonfigurationen.
Kommentar
Det enda giltiga värdet för inställningen type
är complex
. Dessutom misslyckas paketverifieringen om type
har angetts till complex
och den default
definierade för variabeln är ett enda värde.
I följande exempel definieras klusterinställningar i en anpassad komplex variabel med namnet 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
Hämta ett objekts ID-värde
För objekttyperna alert
, cluster_policy
, cluster
, instance_pool
dashboard
, job
, metastore
, pipeline
, service_principal
query
och warehouse
kan du definiera en lookup
för din anpassade variabel för att hämta ett namngivet objekts ID med det här formatet:
variables:
<variable-name>:
lookup:
<object-type>: "<object-name>"
Om en sökning har definierats för en variabel används ID:t för objektet med det angivna namnet som värdet för variabeln. Detta säkerställer att rätt löst ID för objektet alltid används för variabeln.
Kommentar
Ett fel uppstår om ett objekt med det angivna namnet inte finns eller om det finns fler än ett objekt med det angivna namnet.
I följande konfiguration ${var.my_cluster_id}
ersätts till exempel med ID:t för det delade klustret 12.2.
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}