Databricks Varlık Paketlerindeki değişimler ve değişkenler
Databricks Varlık Paketleri, paket yapılandırma dosyalarınızı daha modüler ve yeniden kullanılabilir hale getirmek için değiştirmeleri ve özel değişkenleri destekler. Hem değiştirmeler hem de özel değişkenler, değerlerin dinamik olarak alınmasını sağlar, böylece ayarlar paket dağıtıldığında ve çalıştırıldığında belirlenebilir.
İpucu
Ayrıca, bir iş çalıştırması hakkındaki bağlamı iş görevlerine geçirmek için iş parametresi değerleri için dinamik değer başvuruları da kullanabilirsiniz. Bkz . Dinamik değer başvurusu nedir? ve İşleri parametreleştirme.
Değişimler
Paket dağıtımının bağlamını temel alarak değişen ayarların değerlerini almak ve çalıştırmak için değiştirmeleri kullanabilirsiniz.
Örneğin, komutu çalıştırdığınızda bundle validate --output json
aşağıdakine benzer bir grafik görebilirsiniz:
{
"bundle": {
"name": "hello-bundle",
"target": "dev",
"...": "..."
},
"workspace": {
"...": "...",
"current_user": {
"...": "...",
"userName": "someone@example.com",
"...": "...",
},
"...": "..."
},
"...": {
"...": "..."
}
}
Alt bileşenler, paket yapılandırma dosyasında çalışma alanını oluşturmak için paket name
, paket target
ve çalışma alanı userName
alanlarının root_path
değerlerine başvurmak için kullanılabilir:
bundle:
name: hello-bundle
workspace:
root_path: /Users/${workspace.current_user.userName}/.bundle/${bundle.name}/my-envs/${bundle.target}
# ...
targets:
dev:
default: true
Adlandırılmış kaynaklar için değiştirmeler de oluşturabilirsiniz. Örneğin, adıyla my_pipeline
${resources.pipelines.my_pipeline.target}
yapılandırılan işlem hattı için hedefinin değerinin değiştirilmesidirmy_pipeline
.
Geçerli değiştirmeleri belirlemek için REST API başvurusunda veya komutun çıkışında belgelenen şema hiyerarşisini bundle schema
kullanabilirsiniz.
Yaygın olarak kullanılan bazı değiştirmeler şunlardır:
${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}
Özel değişkenler
Birçok senaryo için gereken değerlerin dinamik olarak alınmasını sağlamak için paketinizde hem basit hem de karmaşık özel değişkenler tanımlayabilirsiniz. Özel değişkenler, paket yapılandırma dosyalarınızda variables
eşlemesinde veya variable-overrides.json
dosyasında bildirilir.
variables
eşlemesi hakkında bilgi için bkz. değişkenleri.
Aşağıdaki örnek yapılandırma, ve my_cluster_id
değişkenlerini my_notebook_path
tanımlar:
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
Bu bildirimin bir parçası olarak bir değişken için değer default
sağlamazsanız, değişken değerini ayarlama bölümünde açıklandığı gibi paket komutlarını, ortam değişkeni aracılığıyla veya paket yapılandırma dosyalarınızın içinde başka bir yerde yürütürken bunu ayarlamanız gerekir.
Ayrıca paket projesindeki .databricks/bundle/<target>/variable-overrides.json
dosyasında değişken değerleri tanımlayabilir ve ayarlayabilirsiniz; burada <target>
dev
gibi çalışma alanı hedefidir. Bkz. Değişkenin değeriniayarlama.
Bir değişkene referans verin
Paket yapılandırmanızda özel bir değişkene başvurmak için değişken değiştirmesini${var.<variable_name>}
kullanın. Örneğin, ve my_cluster_id
değişkenlerine my_notebook_path
başvurmak için:
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}
Değişkenin değerini ayarlama
Bir değişken için değer default
sağlamadıysanız veya değişkenin default
değerini geçici olarak geçersiz kılmak istiyorsanız, aşağıdaki yaklaşımlardan birini kullanarak değişkenin yeni geçici değerini sağlayın:
Değişkenin değerini ,
bundle
veyavalidate
gibi bir komutun parçasıdeploy
olarakrun
sağlayın. Bunu yapmak için, değişkenin adı ve--var="<key>=<value>"
değişkenin değeri olan seçeneğini<key>
<value>
kullanın. Örneğin, komutununbundle validate
bir parçası olarak, adlı1234-567890-abcde123
değişkenine değerinimy_cluster_id
sağlamak ve adlı./hello.py
değişkeninemy_notebook_path
değerini sağlamak için komutunu çalıştırın: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"
Ortam değişkeni ayarlayarak değişkenin değerini sağlayın. Ortam değişkeninin adı ile
BUNDLE_VAR_
başlamalıdır. Ortam değişkenlerini ayarlamak için işletim sisteminizin belgelerine bakın. Örneğin, adlı değişkene değerini1234-567890-abcde123
sağlamak ve adlımy_cluster_id
değişkenine./hello.py
değerini sağlamak için, , veyamy_notebook_path
gibibundle
validate
birdeploy
komutu çağırmadan önce aşağıdaki komutu çalıştırın:run
Linux ve macOS için:
export BUNDLE_VAR_my_cluster_id=1234-567890-abcde123 && export BUNDLE_VAR_my_notebook_path=./hello.py
Windows için:
"set BUNDLE_VAR_my_cluster_id=1234-567890-abcde123" && "set BUNDLE_VAR_my_notebook_path=./hello.py"
Veya değişkenin değerini ,
bundle
veyavalidate
gibi birdeploy
komutun parçası olarakrun
sağlayın, örneğin Linux ve macOS için:BUNDLE_VAR_my_cluster_id=1234-567890-abcde123 BUNDLE_VAR_my_notebook_path=./hello.py databricks bundle validate
Veya Windows için:
"set BUNDLE_VAR_my_cluster_id=1234-567890-abcde123" && "set BUNDLE_VAR_my_notebook_path=./hello.py" && "databricks bundle validate"
targets
eşlemesi içindekivariables
eşlemesini kullanarak aşağıdaki biçimi kullanarak paket yapılandırma dosyalarınızda değişkenin değerini sağlayın:variables: <variable-name>: <value>
Örneğin, iki ayrı hedef için
my_cluster_id
vemy_notebook_path
adlı değişkenlerin değerlerini ayarlamak için: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
Aşağıdaki biçimi kullanarak değişkenin değerini
.databricks/bundle/<target>/variable-overrides.json
dosyasında sağlayın:{ "<variable-name>": "<variable-value>" }
Örneğin, geliştirme hedefi için
my_cluster_id
vemy_notebook_path
adlı değişkenlere değer sağlamak için bir dosya.databricks/bundle/dev/variable-overrides.json
oluşturun ve içeriğini şu şekilde ayarlayın:{ "my_cluster_id": "1234-567890-abcde123", "my_notebook_path": "./hello.py" }
Karmaşık değişkenleri
variable-overrides.json
dosyasında da tanımlayabilirsiniz.
Not
Değişken değerleri sağlamayı seçtiğiniz yaklaşım, hem dağıtım hem de çalıştırma aşamalarında aynı yaklaşımı kullanın. Aksi takdirde, bir dağıtımın zamanı ile mevcut dağıtımı temel alan bir iş veya işlem hattı çalıştırması arasında beklenmeyen sonuçlar alabilirsiniz.
Öncelik sırası
Databricks CLI, değişkenlerin değerlerini aşağıdaki sırayla arar ve bir değişken için değer bulduğunda durduruluyor:
- Komutun bir parçası olarak belirtilen tüm
--var
seçenekler içindebundle
. - ile
BUNDLE_VAR_
başlayan tüm ortam değişkenleri kümesi içinde. - varsa,
variables-overrides.json
dosyasının içinde. - Tüm
variables
eşlemeler içinde, paket yapılandırma dosyalarınızdaki eşlemeler arasındatargets
. - Paket yapılandırma dosyalarınızdaki en üst düzey
default
eşlemeler arasında bu değişkenin tanımı için herhangi birvariables
değer.
Karmaşık değişken tanımlama
Özel değişkenin, karmaşık bir değişken olarak tanımlamadığınız sürece dize türünde olduğu varsayılır. Paket yapılandırmanızda paketinize yönelik karmaşık bir türe sahip özel bir değişken tanımlamak için type
complex
olarak ayarlayın.
Not
Ayar için type
tek geçerli değer olur complex
. Buna ek olarak, olarak ayarlanırsa type
ve complex
değişkeni için tanımlanan tek bir değerse default
paket doğrulaması başarısız olur.
Aşağıdaki örnekte, küme ayarları adlı my_cluster
özel bir karmaşık değişken içinde tanımlanır:
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şağıdaki örnekte gösterildiği gibi .databricks/bundles/<target>/variable-overrides.json
dosyasında da karmaşık bir değişken tanımlayabilirsiniz:
{
"my_cluster": {
"spark_version": "13.2.x-scala2.11",
"node_type_id": "Standard_DS3_v2",
"num_workers": 2
}
}
Nesnenin kimlik değerini alma
alert
, cluster_policy
, cluster
, dashboard
, instance_pool
, job
, metastore
, notification_destination
, pipeline
, query
, service_principal
ve warehouse
nesne türleri için, adlandırılmış nesne kimliğini almak için özel değişkeniniz için bir lookup
tanımlayabilirsiniz:
variables:
<variable-name>:
lookup:
<object-type>: "<object-name>"
Bir değişken için arama tanımlanmışsa, değişkenin değeri olarak belirtilen ada sahip nesnenin kimliği kullanılır. Bu, değişken için nesnenin doğru çözümlenmiş kimliğinin her zaman kullanılmasını sağlar.
Not
Belirtilen ada sahip bir nesne yoksa veya belirtilen ada sahip birden fazla nesne varsa hata oluşur.
Örneğin, aşağıdaki yapılandırmada, ${var.my_cluster_id}
12.2 paylaşılan kümesinin kimliğiyle değiştirilecektir.
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}