Partilhar via


Modelos de projeto do Databricks Asset Bundle

Os Databricks Asset Bundles descrevem recursos do Databricks, como trabalhos, pipelines e blocos de anotações, como arquivos de origem, permitem incluir metadados ao lado desses arquivos de origem para provisionar infraestrutura e outros recursos e fornecem uma definição completa de um projeto, tudo empacotado como um único projeto implantável. Consulte O que são Databricks Asset Bundles?.

Os modelos de pacote permitem que os usuários criem pacotes de forma consistente e repetível, estabelecendo estruturas de pastas, etapas e tarefas de compilação, testes e outros atributos de infraestrutura como código (IaC) de DevOps comuns em um pipeline de implantação.

Por exemplo, se você executar rotineiramente trabalhos do Databricks que exigem pacotes personalizados com uma etapa de compilação demorada após a instalação, poderá acelerar o loop de desenvolvimento criando um modelo de pacote que especifique um ambiente de contêiner personalizado.

O Databricks fornece um conjunto de modelos de pacote padrão, mas você também pode criar modelos de pacote personalizados. Os usuários podem então inicializar pacotes usando o comando bundle init, especificando um modelo padrão ou seu modelo personalizado.

Criar um pacote usando um modelo

Para usar um modelo de pacote do Azure Databricks para criar seu pacote, use o comando bundle init da CLI do Databricks, especificando o nome do modelo a ser usado. Por exemplo, o comando a seguir cria um pacote usando o modelo de pacote Python padrão:

databricks bundle init default-python

Para usar um modelo de pacote personalizado, passe o caminho local ou a URL remota do modelo para o comando bundle init da CLI do Databricks.

Por exemplo, o comando a seguir usa o modelo dab-container-template criado no Tutorial de Modelo de Pacote Personalizado:

databricks bundle init /projects/my-custom-bundle-templates/dab-container-template

Se você não especificar um modelo, o comando bundle init solicitará o conjunto de modelos padrão disponíveis entre os quais você pode escolher.

Modelos de pacote padrão

O Azure Databricks fornece os seguintes modelos de pacote padrão:

Modelo Descrição
default-python Um modelo para usar Python com Databricks. Este modelo cria um pacote com um pipeline de trabalho e DLT. Consulte default-python.
default-sql Um modelo para usar SQL com Databricks. Este modelo contém um arquivo de configuração que define um trabalho que executa consultas SQL em um SQL warehouse. Consulte default-sql.
dbt-sql Um modelo que aproveita dbt-core para desenvolvimento local e pacotes para implantação. Este modelo contém a configuração que define um trabalho com uma tarefa dbt, bem como um arquivo de configuração que define perfis dbt para trabalhos dbt implantados. Consulte dbt-sql.
mlops-stacks Um modelo avançado de stack completo para iniciar novos projetos de Stacks de MLOps. Consulte mlops-stacks e Databricks Asset Bundles para MLOps Stacks.

Modelos de pacote personalizados

Os modelos de pacote usam a sintaxe de modelos de pacote Go, que fornece flexibilidade nos modelos de pacote personalizados que você pode criar. Consulte a documentação do modelo de pacote Go.

Estrutura do projeto de modelo

No mínimo, um projeto de modelo de pacote deve ter:

  • Um ficheiro databricks_template_schema.json na raiz do projeto que define uma propriedade de solicitação do utilizador para o nome do projeto de pacote. Consulte Esquema de modelo.
  • Um databricks.yml.tmpl arquivo localizado em uma template pasta que define a configuração para quaisquer pacotes criados com o modelo. Se o databricks.yml.tmpl ficheiro fizer referência a modelos de configuração *.yml.tmpl adicionais, especifique a localização destes no mapeamento include. Consulte Modelos de configuração.

Além disso, a estrutura das pastas e os arquivos incluídos do projeto de modelo de pasta do pacote template são refletidos nos pacotes criados com o modelo. Por exemplo, se você quiser que o modelo gere um pacote com um bloco de anotações simples na pasta src e uma definição de trabalho que execute o bloco de anotações na pasta resources, organize seu projeto de modelo da seguinte forma:

basic-bundle-template
  ├── databricks_template_schema.json
  └── template
      └── {{.project_name}}
          ├── databricks.yml.tmpl
          ├── resources
          │   └── {{.project_name}}_job.yml.tmpl
          └── src
              └── simple_notebook.ipynb

Gorjeta

O nome da pasta do projeto e o nome do arquivo de definição de trabalho neste modelo de pacote usam uma variável de modelo. Para obter informações sobre auxiliares de modelo e variáveis, consulte Auxiliares de modelo e variáveis.

Esquema de modelo

Um projeto de modelo de pacote personalizado deve conter um arquivo JSON databricks_template_schema.json na raiz do projeto. Esse arquivo define campos usados pela CLI do Databricks quando o comando bundle init é executado, como texto de prompt.

O seguinte arquivo databricks_template_schema.json básico define uma variável de entrada project_name para o projeto de pacote, que inclui a mensagem de prompt e um valor padrão. Em seguida, ele define uma mensagem de êxito para a inicialização do projeto bunde que usa o valor da variável de entrada dentro da mensagem.

{
  "properties": {
    "project_name": {
      "type": "string",
      "default": "basic_bundle",
      "description": "What is the name of the bundle you want to create?",
      "order": 1
    }
  },
  "success_message": "\nYour bundle '{{.project_name}}' has been created."
}

Campos do esquema de modelo

O arquivo databricks_template_schema.json suporta a definição de variáveis de entrada para coletar informações durante a inicialização do pacote do usuário dentro do campo properties, bem como campos adicionais para personalizar a inicialização.

As variáveis de entrada são definidas no campo properties do esquema do modelo. Cada variável de entrada define os metadados necessários para apresentar um prompt ao usuário durante a iniciação do pacote. O valor da variável é então acessível usando a sintaxe da variável de modelo, como {{.project_name}}.

Você também pode definir os valores de alguns campos para personalizar o processo de inicialização do pacote.

Os campos de esquema suportados estão listados na tabela a seguir.

Campo do Esquema Descrição
properties As definições de variáveis de entrada do modelo de pacote. Databricks recomenda definir pelo menos uma variável de entrada que é o nome do projeto de pacote.
properties.<variable_name> O nome da variável de entrada.
properties.<variable_name>.default Um valor padrão a ser usado se um valor não for fornecido pelo usuário com --config-file como parte do comando bundle init ou na linha de comando quando for solicitado.
properties.<variable_name>.description A mensagem de prompt do usuário associada à variável de entrada.
properties.<variable_name>.enum Uma lista de valores possíveis para a propriedade, como "enum": ["azure", "aws", "gcp"]. Se esse campo estiver definido, a CLI do Databricks apresentará os valores em uma lista na linha de comando para solicitar que o usuário selecione um valor.
properties.<variable_name>.order Um inteiro que define a ordem relativa das propriedades de entrada. Isso controla a ordem em que os prompts para essas variáveis de entrada são mostrados na linha de comando.
properties.<variable_name>.pattern O padrão regexp a ser usado para validar a entrada do usuário, por exemplo, "pattern": "^[^ .\\\\/]{3,}$". Para obter a sintaxe regexp suportada, consulte https://github.com/google/re2/wiki/Syntax.
properties.<variable_name>.pattern_match_failure_message A mensagem que é exibida para o usuário se o valor inserido pelo usuário não corresponder ao padrão especificado, por exemplo, Project name must be at least 3 characters long and cannot contain the following characters: \"\\\", \"/\", \" \" and \".\".".
properties.<variable_name>.skip_prompt_if Ignore a solicitação da variável de entrada se esse esquema for satisfeito pela configuração já presente. Nesse caso, o valor padrão da propriedade é usado em vez disso. Para obter um exemplo, consulte o modelo mlops-stacks. Apenas const comparações são suportadas.
properties.<variable_name>.skip_prompt_if.properties.<previous_variable_name>.const Se o valor de <previous_variable_name> corresponder à constante configurada em skip_prompt_if, o prompt para <variable_name> será ignorado.
welcome_message A primeira mensagem a ser enviada antes de solicitar a entrada do usuário.
success_message A mensagem a ser impressa após a inicialização bem-sucedida do modelo.
min_databricks_cli_version A versão semver mínima desta CLI do Databricks que o modelo exige. databricks bundle init falhará se a versão da CLI for menor que esta versão.
version Reservado para uso futuro. A versão do esquema. Isso é usado para determinar se o esquema é compatível com a versão atual da CLI.

Modelos de configuração

Um modelo de pacote personalizado deve conter um ficheiro de databricks.yml.tmpl numa pasta template no projeto de modelo de pacote, que é usado para criar o ficheiro de configuração do projeto de pacote databricks.yml. Modelos para arquivos de configuração para recursos podem ser criados na pasta resources. Preencha esses arquivos de modelo com o modelo de configuração YAML.

Os seguintes modelos simples de configuração de exemplo para databricks.yml e o *_job.yml associado estabelecem o nome do pacote e dois ambientes de implementação, e definem um trabalho que executa o notebook no pacote, para pacotes criados usando este modelo. Esses modelos de configuração tiram partido das substituições de pacotes com e dos auxiliares de modelo de pacotes com.

template/{{.project_name}}/databricks.yml.tmpl:

# databricks.yml
# This is the configuration for the Databricks Asset Bundle {{.project_name}}.

bundle:
  name: {{.project_name}}

include:
  - resources/*.yml

targets:
  # The deployment targets. See https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html
  dev:
    mode: development
    default: true
    workspace:
      host: {{workspace_host}}

  prod:
    mode: production
    workspace:
      host: {{workspace_host}}
      root_path: /Shared/.bundle/prod/${bundle.name}
    {{- if not is_service_principal}}
    run_as:
      # This runs as {{user_name}} in production. Alternatively,
      # a service principal could be used here using service_principal_name
      user_name: {{user_name}}
    {{end -}}

template/{{.project_name}}/resources/{{.project_name}}_job.yml.tmpl:

# {{.project_name}}_job.yml
# The main job for {{.project_name}}

resources:
    jobs:
        {{.project_name}}_job:
        name: {{.project_name}}_job
        tasks:
            - task_key: notebook_task
            job_cluster_key: job_cluster
            notebook_task:
                notebook_path: ../src/simple_notebook.ipynb
        job_clusters:
            - job_cluster_key: job_cluster
            new_cluster:
                node_type_id: i3.xlarge
                spark_version: 13.3.x-scala2.12

Auxiliares de modelo e variáveis

Os auxiliares de modelo são funções fornecidas pelo Databricks que você pode usar em seus arquivos de modelo para obter informações específicas do usuário em tempo de execução ou interagir com o mecanismo de modelo. Você também pode definir suas próprias variáveis de modelo.

Os seguintes auxiliares de modelo estão disponíveis para projetos de modelo de pacote Databricks. Para obter informações sobre como usar modelos e variáveis Go, consulte Modelos Go.

Assistente Descrição
{{url}} Um alias para https://pkg.go.dev/net/url#Parse. Isso permite o uso de todos os métodos de url.URL.
{{regexp}} Um alias para https://pkg.go.dev/regexp#Compile. Isso permite o uso de todos os métodos de regexp.Regexp.
{{random_int}} Devolve, como int, um número pseudoaleatório não negativo no intervalo semi-aberto (0,n).
{{uuid}} Retorna como uma cadeia de caracteres, um UUID que é um Universal Unique IDentifier de 128 bits (16 bytes), conforme definido na RFC 4122.Este ID é estável durante a execução do modelo e pode ser usado para preencher o campo bundle.uuid em databricks.yml pelos autores do modelo.
{{bundle_uuid}} Um ID exclusivo para o pacote. Várias invocações desta função retornarão o mesmo UUID.
{{pair}} Um par de valores de chave. Isso é usado com o auxiliar map para gerar mapas para usar dentro de um modelo.
{{map}} Converte uma lista de pares em um objeto de mapa. Isso é útil para passar vários objetos para modelos definidos no diretório da biblioteca. Como a sintaxe do modelo de texto Go para invocar um modelo só permite especificar um único argumento, essa função pode ser usada para contornar essa limitação.
Por exemplo, na linha a seguir, {{template "my_template" (map (pair "foo" $arg1) (pair "bar" $arg2))}}, $arg1 e $arg2 podem ser referidos de dentro my_template como .foo e .bar.
{{smallest_node_type}} Retorna o menor tipo de nó.
{{path_separator}} O caractere separador de caminho do sistema operativo. Este é / para sistemas baseados em Unix e \ para Windows.
{{workspace_host}} A URL do host do espaço de trabalho no qual o usuário está autenticado no momento.
{{user_name}} O nome completo do usuário que inicializa o modelo.
{{short_name}} O nome curto do usuário inicializando o modelo.
{{default_catalog}} Retorna o catálogo de espaço de trabalho padrão. Se não houver nenhum padrão, ou se o Unity Catalog não estiver habilitado, isso retornará uma cadeia de caracteres vazia.
{{is_service_principal}} Se o utilizador atual é ou não um principal de serviço.
{{ skip <glob-pattern-relative-to-current-directory> }} Faz com que o motor de modelos ignore a geração de todos os ficheiros e diretórios que correspondem ao padrão glob de entrada. Para obter um exemplo, consulte o modelo mlops-stacks.

Auxiliares de modelo personalizados

Para definir seus próprios auxiliares de modelo, crie um arquivo de modelo na pasta library do projeto de modelo e use a sintaxe de modelagem Go para definir auxiliares. Por exemplo, o conteúdo a seguir de um arquivo de library/variables.tmpl define as variáveis cli_version e model_name. Quando esse modelo é usado para inicializar um pacote, o valor da variável model_name é construído usando o campo input_project_name definido no arquivo de esquema do modelo. O valor desse valor de campo é a entrada do usuário após um prompt.

{{ define `cli_version` -}}
    v0.240.0
{{- end }}

{{ define `model_name` -}}
    {{ .input_project_name }}-model
{{- end }}

Para ver um exemplo completo, consulte o arquivo de variáveis de modelo mlops-stacks.

Testar o modelo de pacote

Finalmente, certifique-se de testar seu modelo. Por exemplo, use a CLI do Databricks para inicializar um novo pacote usando o modelo definido nas seções anteriores:

databricks bundle init basic-bundle-template

Para o prompt, What is your bundle project name?, digite my_test_bundle.

Depois que o pacote de teste é criado, a mensagem de sucesso do arquivo de esquema é saída. Se você examinar o my_test_bundle conteúdo da pasta, você verá o seguinte:

my_test_bundle
   ├── databricks.yml
   ├── resources
   │  └── my_test_bundle_job.yml
   └── src
      └── simple_notebook.ipynb

E o arquivo databricks.yml e o trabalho agora são personalizados:

# databricks.yml
# This is the configuration for the Databricks Asset Bundle my-test-bundle.

bundle:
  name: my_test_bundle

include:
  - resources/*.yml

targets:
  # The 'dev' target, used for development purposes. See [_](https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html#development-mode)
  dev:
    mode: development
    default: true
    workspace:
      host: https://my-host.cloud.databricks.com

  # The 'prod' target, used for production deployment. See [_](https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html#production-mode)
  prod:
    mode: production
    workspace:
      host: https://my-host.cloud.databricks.com
      root_path: /Shared/.bundle/prod/${bundle.name}
    run_as:
      # This runs as someone@example.com in production. Alternatively,
      # a service principal could be used here using service_principal_name
      user_name: someone@example.com
# my_test_bundle_job.yml
# The main job for my_test_bundle

resources:
    jobs:
        my_test_bundle_job:
        name: my_test_bundle_job
        tasks:
            - task_key: notebook_task
                job_cluster_key: job_cluster
                notebook_task:
                    notebook_path: ../src/simple_notebook.ipynb
        job_clusters:
            - job_cluster_key: job_cluster
                new_cluster:
                    node_type_id: i3.xlarge
                    spark_version: 13.3.x-scala2.12

Partilhar o modelo

Se você quiser compartilhar esse modelo de pacote com outras pessoas, poderá armazená-lo no controle de versão com qualquer provedor que o Git ofereça suporte e ao qual seus usuários tenham acesso. Para executar o bundle init comando com uma URL do Git, verifique se o databricks_template_schema.json arquivo está no local raiz relativo a essa URL do Git.

Gorjeta

Você pode colocar o databricks_template_schema.json arquivo em uma pasta diferente, relativa à raiz do pacote. Em seguida, você pode usar a bundle init opção do --template-dir comando para fazer referência a essa pasta, que contém o databricks_template_schema.json arquivo.

Próximos passos

  • Procure modelos adicionais criados e mantidos pelo Databricks. Consulte o repositório de amostras do pacote no GitHub.
  • Para usar as pilhas de MLOps com modelos de pacotes de ativos Databricks, consulte Pacotes de Ativos Databricks para Pilhas de MLOps.
  • Saiba mais sobre a templatização de pacotes Go. Consulte a documentação do modelo de pacote Go.