Compartilhar via


Usar transformações do dbt em um trabalho do Azure Databricks

Você pode executar seus projetos do Core dbt como uma tarefa em um trabalho do Azure Databricks. Ao executar seu projeto do Core dbt como uma tarefa de trabalho, você pode se beneficiar dos seguintes recursos de Trabalhos do Azure Databricks:

  • Automatize suas tarefas dbt e agende fluxos de trabalho que incluem tarefas dbt.
  • Monitore suas transformações de dbt e envie notificações sobre o status das transformações.
  • Inclua seu projeto dbt em um fluxo de trabalho com outras tarefas. Por exemplo, seu fluxo de trabalho pode ingerir dados com o Carregador Automático, transformar os dados com dbt e analisar os dados com uma tarefa de computador.
  • Arquivamento automático dos artefatos de execuções de trabalho, incluindo logs, resultados, manifestos e configuração.

Para saber mais sobre o Core dbt, consulte a documentação do dbt.

Fluxo de trabalho de desenvolvimento e produção

O Databricks recomenda o desenvolvimento de seus projetos dbt em um warehouse SQL do Databricks. Usando um warehouse SQL do Databricks, você pode testar o SQL gerado pelo dbt e usar o histórico de consultas do warehouse SQL para depurar as consultas geradas pelo dbt.

Para executar suas transformações de dbt em produção, o Databricks recomenda usar a tarefa dbt em um trabalho do Databricks. Por padrão, a tarefa do dbt executará o processo do dbt do Python usando a computação do Azure Databricks e o SQL gerado pelo dbt no SQL warehouse selecionado.

Você pode executar transformações de dbt em um SQL warehouse sem servidor ou no SQL Warehouse Pro, na computação do Azure Databricks ou em qualquer outro warehouse compatível com dbt. Este artigo discute as duas primeiras opções com exemplos.

Se seu espaço de trabalho tiver o Catálogo do Unity habilitado e os Trabalhos Sem Servidor estiverem habilitados, o trabalho será executado em computação sem servidor por padrão.

Observação

Desenvolver modelos dbt em um SQL warehouse e executá-los em produção na computação do Azure Databricks pode levar a diferenças sutis no desempenho e no suporte à linguagem SQL. O Databricks recomenda usar a mesma versão do Databricks Runtime para a computação e o SQL Warehouse.

Requisitos

Crie e execute seu primeiro trabalho dbt

O exemplo a seguir usa o projeto jaffle_shop, um projeto de exemplo que demonstra os principais conceitos de dbt. Para criar um trabalho que executa o projeto jaffle shop, execute as etapas a seguir.

  1. Vá para a página inicial do Azure Databricks e siga um destes procedimentos:

    • Clique em Ícone de fluxos de trabalho Fluxos de Trabalho na barra lateral e clique em botão Criar Trabalho.
    • Na barra lateral, clique em ícone Novo Novo e selecione Trabalho.
  2. Na caixa de texto da tarefa na guia Tarefas, substitua Adicione um nome para o seu trabalho… pelo nome do seu trabalho.

  3. Em Nome da tarefa, insira um nome para a tarefa.

  4. Em Tipo, selecione o tipo de tarefa dbt.

    Adicione uma tarefa dbt

  5. No menu suspenso Fonte, você pode selecionar Espaço de Trabalho para usar um projeto dbt localizado em uma pasta de espaço de trabalho do Azure Databricks ou Provedor Git para um projeto localizado em um repositório Git remoto. Como este exemplo usa o projeto jaffle shop localizado em um repositório Git, selecione Provedor Git, clique em Editar e insira os detalhes do repositório GitHub da jaffle shop.

    Configure o repositório do projeto dbt

    • Na URL do repositório Git, insira a URL do projeto de loja de demonstração.
    • Em Referência do Git (ramo / tag / confirmar), insira main. Você também pode usar uma marca ou SHA.
  6. Clique em Confirmar.

  7. Nas caixas de texto de comandos dbt, especifique os comandos dbt a serem executados (deps, semente e execução). Você deve prefixar todos os comandos com dbt. Os comandos são executados na ordem especificada.

    Configure os comandos dbt

  8. Em SQL Warehouse, selecione um SQL warehouse para executar o SQL gerado pelo dbt. O menu suspenso SQL warehouse mostra apenas os SQL warehouses sem servidor e pro.

  9. (Opcional) Você pode especificar um esquema para a saída da tarefa. Por padrão, o esquema default é usado.

  10. (Opcional) Se você quiser alterar a configuração de computação que executa o dbt Core, clique em computação da CLI do dbt.

  11. (Opcional) Você pode especificar uma versão dbt-databricks para a tarefa. Por exemplo, para fixar sua tarefa dbt em uma versão específica para desenvolvimento e produção:

    • Em Bibliotecas dependentes, clique no Ícone excluir próximo à versão atual dbt-databricks.
    • Clique em Adicionar.
    • Na caixa de diálogo Adicionar biblioteca dependente, selecione PyPI e insira a versão do pacote dbt na caixa de texto Pacote (por exemplo, dbt-databricks==1.6.0).
    • Clique em Adicionar.

    Configure a versão dbt-databricks

    Observação

    O Databricks recomenda fixar suas tarefas dbt a uma versão específica do pacote dbt-databricks para garantir que a mesma versão seja usada para execuções de desenvolvimento e produção. O Databricks recomenda a versão 1.6.0 ou superior do pacote dbt.databricks.

  12. Clique em Criar.

  13. Para executar o trabalho imediatamente, clique no Botão Executar Agora .

Exiba os resultados da tarefa de trabalho dbt

Quando o trabalho for concluído, você poderá testar os resultados executando consultas SQL de um computador ou executando consultas no Databricks warehouse. Por exemplo, confira os seguintes exemplos de consultas:

 SHOW tables IN <schema>;
SELECT * from <schema>.customers LIMIT 10;

Substitua <schema> pelo nome do esquema configurado na configuração da tarefa.

Exemplo de API

Use também a API de Trabalhos para criar e gerenciar trabalhos que incluem tarefas do dbt. O exemplo a seguir cria um trabalho com uma única tarefa dbt:

{
  "name": "jaffle_shop dbt job",
  "max_concurrent_runs": 1,
  "git_source": {
    "git_url": "https://github.com/dbt-labs/jaffle_shop",
    "git_provider": "gitHub",
    "git_branch": "main"
  },
  "job_clusters": [
    {
      "job_cluster_key": "dbt_CLI",
      "new_cluster": {
        "spark_version": "10.4.x-photon-scala2.12",
        "node_type_id": "Standard_DS3_v2",
        "num_workers": 0,
        "spark_conf": {
          "spark.master": "local[*, 4]",
          "spark.databricks.cluster.profile": "singleNode"
        },
        "custom_tags": {
          "ResourceClass": "SingleNode"
        }
      }
    }
  ],
  "tasks": [
    {
      "task_key": "transform",
      "job_cluster_key": "dbt_CLI",
      "dbt_task": {
        "commands": [
          "dbt deps",
          "dbt seed",
          "dbt run"
        ],
        "warehouse_id": "1a234b567c8de912"
      },
      "libraries": [
        {
          "pypi": {
            "package": "dbt-databricks>=1.0.0,<2.0.0"
          }
        }
      ]
    }
  ]
}

(Avançado) Executar dbt com um perfil personalizado

Para executar sua tarefa do dbt com um SQL warehouse (recomendado) ou computação para todas as finalidades, use um profiles.yml personalizado definindo o warehouse ou a computação do Azure Databricks para se conectar. Para criar um trabalho que execute o projeto de loja jaffle com um warehouse ou computação para todas as finalidades, execute as etapas a seguir.

Observação

Somente um SQL warehouse ou computação para todas as finalidades podem ser usados como destino para uma tarefa do dbt. Você não pode usar a computação de trabalho como um destino para o dbt.

  1. Criar uma cópia do repositório jaffle_shop.

  2. Clone a cópia do repositório na área de trabalho. Por exemplo, você pode executar um comando como o seguinte:

    git clone https://github.com/<username>/jaffle_shop.git
    

    Substitua <username> pelo seu cabo do GitHub.

  3. Crie um novo arquivo chamado profiles.yml no diretório jaffle_shop com o seguinte conteúdo:

     jaffle_shop:
       target: databricks_job
       outputs:
         databricks_job:
          type: databricks
          method: http
          schema: "<schema>"
          host: "<http-host>"
          http_path: "<http-path>"
          token: "{{ env_var('DBT_ACCESS_TOKEN') }}"
    
    • Substitua <schema> por um nome de esquema para as tabelas do projeto.
    • Para executar sua tarefa dbt com um SQL warehouse, substitua <http-host> pelo valor Nome do host do servidor na guia Detalhes da Conexão do SQL warehouse. Para executar sua tarefa do dbt com computação para todas as finalidades, substitua <http-host> pelo valor do Nome do Host do Servidor da guia Opções avançadas, JDBC/ODBC para a sua computação do Azure Databricks.
    • Para executar sua tarefa dbt com um SQL warehouse, substitua <http-path> pelo valor Caminho HTTP na guia Detalhes da Conexão do SQL warehouse. Para executar sua tarefa do dbt com computação para todas as finalidades, substitua <http-path> pelo valor de Caminho HTTP das Opções avançadas, JDBC/ODBC para a sua computação do Azure Databricks.

    Você não especifica segredos, como tokens de acesso, no arquivo porque fará check-in desse arquivo no controle de origem. Em vez disso, esse arquivo usa a funcionalidade de modelagem dbt para inserir credenciais dinamicamente no tempo de execução.

    Observação

    As credenciais geradas são válidas durante a execução, até 30 dias, no máximo, e são revogadas automaticamente após a conclusão.

  4. Faça check-in desse arquivo no Git e efetue push dele para o seu repositório com fork. Por exemplo, você pode executar comandos como os seguintes:

    git add profiles.yml
    git commit -m "adding profiles.yml for my Databricks job"
    git push
    
  5. Clique em Ícone de fluxos de trabalho Fluxos de trabalho na barra lateral da interface do usuário do Databricks.

  6. Selecione o trabalho dbt e clique na guia Tarefas.

  7. Em Origem, clique em Editar e insira os detalhes da cópia do repositório GitHub da loja de demonstração.

    Configurar a cópia do repositório do projeto

  8. No SQL warehouse, selecione Nenhum (Manual).

  9. No Diretório de Perfis, insira o caminho relativo ao diretório que contém o arquivo profiles.yml. Deixe o valor do caminho em branco para usar o padrão da raiz do repositório.

(Avançado) Usar modelos do Python dbt em um fluxo de trabalho

Observação

o suporte a dbt para modelos do Python está em beta e requer o dbt 1.3 ou superior.

O dbt agora dá suporte a modelos do Python em banco de dados de data warehouse específicos, incluindo o Databricks. Com modelos do Python dbt, você pode usar ferramentas do ecossistema Python para implementar transformações difíceis de serem implantadas com o SQL. Você pode criar um trabalho do Azure Databricks para executar uma única tarefa com o modelo do Python dbt ou incluir a tarefa dbt como parte de um fluxo de trabalho que inclui várias tarefas.

Não é possível executar modelos Python em uma tarefa dbt que usa um SQL warehouse. Para obter mais informações sobre como usar modelos do Python dbt com o Azure Databricks, consulte Bancos de dados de data warehouse específicos na documentação do dbt.

Erros e solução de problemas

O arquivo de perfil não existe erro

Mensagem de erro:

dbt looked for a profiles.yml file in /tmp/.../profiles.yml but did not find one.

Causas possíveis::

O arquivo profiles.yml não foi encontrado no $PATH especificado. Verifique se a raiz do projeto dbt contém o arquivo profiles.yml.