Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os Pacotes de Ativos do Databricks dão suporte a substituições e variáveis personalizadas, o que torna os arquivos de configuração do pacote mais modulares e reutilizáveis. Tanto as substituições quanto as variáveis personalizadas permitem a recuperação dinâmica de valores para que as configurações possam ser determinadas no momento em que um pacote é implantado e executado.
Dica
Você também pode usar referências de valores dinâmicos para valores de parâmetros de trabalho para passar o contexto sobre uma execução de trabalho para tarefas de trabalho. Confira O que é uma referência de valor dinâmico? e Parametrizar trabalhos.
Substituições
Você pode usar substituições para recuperar valores de configurações que podem ser alteradas com base no contexto da implantação e execução do pacote. Por exemplo, as subsituções podem ser usadas para se referir aos valores dos campos de pacote name, pacote targete workspace userName para construir o workspace root_path no arquivo de configuração do pacote:
bundle:
name: hello-bundle
workspace:
root_path: /Workspace/Users/${workspace.current_user.userName}/.bundle/${bundle.name}/my-envs/${bundle.target}
targets:
dev:
default: true
Se someone@example.com implantado esse pacote, ele será implantado no caminho /Workspace/Users/someone@example.com/.bundle/hello-bundle/my-envs/devraiz.
Você também pode criar substituições para recursos nomeados. Por exemplo, para a seguinte definição de pipeline, você pode usar ${resources.pipelines.my_pipeline.target} para o valor do destino do pipeline:
resources:
pipelines:
my_pipeline:
name: my_pipeline
schema: pipeline_bundle_${bundle.target}
libraries:
- notebook:
path: ../src/my_pipeline.ipynb
configuration:
bundle.sourcePath: ${workspace.file_path}/src
Para determinar substituições válidas, use a referência de configuração de pacote, a referência de configuração de recurso ou a hierarquia de esquema dos objetos correspondentes documentados na referência da API REST ou a saída do bundle schema comando.
Dica
Para obter uma lista completa de substituições disponíveis para recursos, consulte o arquivo out.fields.txt no repositório GitHub da CLI do Databricks.
Aqui estão algumas substituições comumente utilizadas:
${bundle.name}${bundle.target} # Use this substitution instead of ${bundle.environment}${workspace.host}${workspace.current_user.domain_friendly_name}${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}
Variáveis personalizadas
Você pode definir variáveis personalizadas simples e complexas em seu pacote para habilitar a recuperação dinâmica de valores necessários para muitos cenários. Variáveis personalizadas são declaradas em seus arquivos de configuração de pacote dentro do mapeamento de variables ou em um arquivo de variable-overrides.json. Para obter informações sobre o mapeamento de variables, consulte variáveis .
A configuração de exemplo a seguir define as variáveis my_cluster_id e 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
Se você não fornecer um default valor para uma variável como parte dessa declaração, deverá defini-la ao executar comandos de pacote, por meio de uma variável de ambiente, em outro lugar em seus arquivos de configuração de pacote ou no .databricks/bundle/<target>/variable-overrides.json arquivo no projeto de pacote. Veja Definir o valor de uma variável.
Referenciar uma variável
Para fazer referência a uma variável personalizada na configuração do pacote, use a variável substituição${var.<variable_name>}. Por exemplo, a configuração a seguir faz referência às variáveis my_cluster_id e 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}
Definir o valor de uma variável
Se você não tiver definido um default valor para uma variável ou se quiser substituir temporariamente o default valor de uma variável, forneça o novo valor temporário da variável usando uma das abordagens a seguir.
Observação
As variáveis de pacote são variáveis de tempo de implantação. Eles são interpretados quando você implanta o pacote. Por exemplo, quando você executa um trabalho, ele executa um trabalho implantado anteriormente e as variáveis configuradas para essa implantação, portanto, passar valores diferentes para variáveis para a execução do trabalho não se aplicará. Em vez disso, passe valores para a execução de um trabalho usando parâmetros de trabalho. Consulte Passar parâmetros de trabalho.
Forneça o valor da variável como parte de um
bundlecomando comovalidate,deployourun. Para fazer isso, use a opção--var="<key>=<value>", onde<key>está o nome da variável e<value>é o valor da variável. Por exemplo, como parte do comandobundle validate, para fornecer o valor1234-567890-abcde123à variável nomeadamy_cluster_ide para fornecer o valor./hello.pyà variável nomeadamy_notebook_path, execute: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"Forneça o valor da variável definindo uma variável de ambiente. O nome da variável de ambiente deve começar com
BUNDLE_VAR_. Para definir variáveis de ambiente, consulte a documentação do sistema operacional. Por exemplo, para fornecer o valor1234-567890-abcde123à variável nomeadamy_cluster_ide para fornecer o valor./hello.pyà variável nomeadamy_notebook_path, execute o seguinte comando antes de chamar um comandobundlecomovalidate,deployourun:Para Linux e macOS:
export BUNDLE_VAR_my_cluster_id=1234-567890-abcde123 && export BUNDLE_VAR_my_notebook_path=./hello.pyPara Windows:
"set BUNDLE_VAR_my_cluster_id=1234-567890-abcde123" && "set BUNDLE_VAR_my_notebook_path=./hello.py"Ou forneça o valor da variável como parte de um
bundlecomando comovalidate,deployourun, por exemplo, para Linux e macOS:BUNDLE_VAR_my_cluster_id=1234-567890-abcde123 BUNDLE_VAR_my_notebook_path=./hello.py databricks bundle validateOu para o Windows:
"set BUNDLE_VAR_my_cluster_id=1234-567890-abcde123" && "set BUNDLE_VAR_my_notebook_path=./hello.py" && "databricks bundle validate"Forneça o valor da variável em seus arquivos de configuração de conjunto usando o mapeamento
variablesdentro do mapeamentotargets, seguindo este formato:variables: <variable-name>: <value>Por exemplo, para definir valores para as variáveis nomeadas
my_cluster_idemy_notebook_pathpara dois destinos separados: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.pyForneça o valor da variável dentro do
.databricks/bundle/<target>/variable-overrides.jsonarquivo, usando o seguinte formato:{ "<variable-name>": "<variable-value>" }Por exemplo, para fornecer valores para as variáveis denominadas
my_cluster_idemy_notebook_pathpara o destino de desenvolvimento, crie um arquivo.databricks/bundle/dev/variable-overrides.jsone defina seu conteúdo como:{ "my_cluster_id": "1234-567890-abcde123", "my_notebook_path": "./hello.py" }Você também pode definir variáveis complexas no arquivo
variable-overrides.json.
Observação
Seja qual for a abordagem que você escolher para fornecer valores variáveis, use a mesma abordagem durante as fases de implantação e execução. Caso contrário, você poderá obter resultados inesperados entre o momento de uma implantação e uma execução de trabalho ou pipeline baseada nessa implantação existente.
Ordem de precedência
A CLI do Databricks procura valores para variáveis na seguinte ordem, parando quando encontrar um valor para uma variável:
- Em todas as opções
--varespecificadas como parte do comandobundle. - Em qualquer conjunto de variáveis de ambiente que comece com
BUNDLE_VAR_. - No arquivo
variables-overrides.json, se ele existir. - Em qualquer mapeamento
variables, entre os mapeamentostargetsnos seus arquivos de configuração do pacote. - Qualquer
defaultvalor para a definição dessa variável, entre os mapeamentos de nívelvariablessuperior dentro dos arquivos de configuração do pacote.
Definir uma variável complexa
Uma variável personalizada é considerada do tipo string, a menos que você a defina como uma variável complexa. Para definir uma variável personalizada com um tipo complexo para o pacote na configuração do pacote, defina type como complex.
Observação
O único valor válido para a configuração de type é complex. Além disso, a validação do pacote falhará se type estiver definido como complex e o default definido para a variável for um valor único.
No exemplo a seguir, as configurações de cluster são definidas em uma variável complexa personalizada chamada 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
Você também pode definir uma variável complexa no arquivo .databricks/bundle/<target>/variable-overrides.json, conforme mostrado no exemplo a seguir:
{
"my_cluster": {
"spark_version": "13.2.x-scala2.11",
"node_type_id": "Standard_DS3_v2",
"num_workers": 2
}
}
Recuperar o valor da ID de um objeto
Para os tipos de objeto alert, cluster_policy, cluster, dashboard, instance_pool, job, metastore, notification_destination, pipeline, query, service_principal e warehouse, você pode definir uma variável personalizada lookup para recuperar a ID de um objeto nomeado usando este formato:
variables:
<variable-name>:
lookup:
<object-type>: '<object-name>'
Se uma pesquisa for definida para uma variável, a ID do objeto com o nome especificado será utilizada como o valor da variável. Isso garante que a ID resolvida corretamente do objeto seja sempre usada para a variável.
Observação
Ocorrerá um erro se um objeto com o nome especificado não existir ou se houver mais de um objeto com o nome especificado.
Por exemplo, na configuração a seguir, ${var.my_cluster_id} será substituído pela ID do cluster 12.2 compartilhado.
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}
Substituição de saída e valores variáveis
Para garantir que suas substituições e variáveis sejam especificadas corretamente e analisadas pelos Pacotes de Ativos do Databricks, execute databricks bundle validate. Confira a validação do pacote do Databricks. Para exibir valores que serão usados ao implantar um pacote, use a opção --output json :
databricks bundle validate --output json
Por exemplo, para um pacote com a variável my_cluster_id definida e usada em uma tarefa de trabalho:
bundle:
name: variables_bundle
variables:
my_cluster_id:
default: 1234-567890-abcde123
resources:
jobs:
variables_bundle_job:
name: variables_bundle_job
tasks:
- task_key: notebook_task
existing_cluster_id: ${var.my_cluster_id}
notebook_task:
notebook_path: ../src/notebook.ipynb
A databricks bundle validate saída do esquema seria a seguinte:
{
"bundle": {
"..."
"name": "variables_bundle",
"target": "dev",
"..."
},
"resources": {
"jobs": {
"variables_bundle_job": {
"deployment": {
"kind": "BUNDLE",
"metadata_file_path": "/Workspace/Users/someone@example.com/.bundle/variables_bundle/dev/state/metadata.json"
},
"max_concurrent_runs": 4,
"name": "[dev someone] variables_bundle_job",
"tasks": [
{
"existing_cluster_id": "1234-567890-abcde123",
"notebook_task": {
"notebook_path": "/Workspace/Users/someone@example.com/.bundle/variables_bundle/dev/files/variables_bundle/src/notebook"
},
"task_key": "notebook_task"
},
],
"..."
}
}
},
"..."
"variables": {
"my_cluster_id": {
"default": "1234-567890-abcde123",
"value": "1234-567890-abcde123"
}
},
"..."
}