Aracılığıyla paylaş


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 targetve ç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_iddeğ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>devgibi ç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_iddeğ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 , bundleveya validategibi bir komutun parçası deploy olarak runsağ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, komutunun bundle validate bir parçası olarak, adlı 1234-567890-abcde123değişkenine değerini my_cluster_id sağlamak ve adlı ./hello.pydeğişkenine my_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ğerini 1234-567890-abcde123 sağlamak ve adlı my_cluster_iddeğişkenine ./hello.py değerini sağlamak için, , veya my_notebook_pathgibi bundlevalidatebir deploy 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 , bundleveya validategibi bir deploy komutun parçası olarak runsağ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çindeki variables 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 ve my_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 ve my_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:

  1. Komutun bir parçası olarak belirtilen tüm --var seçenekler içinde bundle .
  2. ile BUNDLE_VAR_başlayan tüm ortam değişkenleri kümesi içinde.
  3. varsa, variables-overrides.json dosyasının içinde.
  4. Tüm variables eşlemeler içinde, paket yapılandırma dosyalarınızdaki eşlemeler arasında targets .
  5. 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 bir variables 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 typecomplexolarak 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_principalve 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}