Utilizar as transformações dbt numa tarefa do Azure Databricks

Pode executar os projetos dbt Core como uma tarefa numa tarefa do Azure Databricks. Ao executar seu projeto dbt Core 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 incluam tarefas dbt.
  • Monitore suas transformações 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 Auto Loader, transformar os dados com dbt e analisar os dados com uma tarefa de notebook.
  • Arquivamento automático dos artefatos de execuções de trabalho, incluindo logs, resultados, manifestos e configuração.

Para saber mais sobre o dbt Core, 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 armazém SQL Databricks. Utilizando um armazém SQL do Databricks, pode testar o SQL gerado pelo dbt e utilizar o histórico de consultas do armazém SQL para depurar as consultas geradas pelo dbt.

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

Você pode executar transformações dbt em um SQL warehouse sem servidor ou pro SQL warehouse, computação do Azure Databricks ou qualquer outro depósito com suporte dbt. Este artigo discute as duas primeiras opções com exemplos.

Se o espaço de trabalho estiver habilitado para Unity Catalog e o Serverless Jobs estiver habilitado, por padrão, o trabalho será executado na computação Serverless.

Nota

Desenvolver modelos dbt em um armazém SQL 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 o uso da mesma versão do Databricks Runtime para a computação e o SQL warehouse.

Requisitos

  • Para saber como usar o dbt Core e o dbt-databricks pacote para criar e executar projetos dbt em seu ambiente de desenvolvimento, consulte Conectar-se ao dbt Core.

    O Databricks recomenda o pacote dbt-databricks , não o pacote dbt-spark. O pacote dbt-databricks é uma bifurcação do dbt-spark otimizada para o Databricks.

  • Para usar projetos dbt em um trabalho do Azure Databricks, você deve configurar a integração do Git com as pastas do Databricks Git. Não é possível executar um projeto dbt a partir do DBFS.

  • Você deve ter armazéns SQL sem servidor ou pro habilitados.

  • Você deve ter o direito Databricks SQL.

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 dbt. Para criar um trabalho que execute 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 Fluxos de TrabalhoFluxos de trabalho na barra lateral e clique em .Botão Criar Trabalho
    • Na barra lateral, clique em Novo ícone Novo e selecione Trabalho.
  2. Na caixa de texto da tarefa no separador Tarefas, substitua Adicionar 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 .

    Adicionar uma tarefa dbt

  5. No menu suspenso Origem, 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 jaffle shop.

    Configurar o repositório do projeto dbt

    • Em URL do repositório Git, insira a URL do projeto jaffle shop.
    • Em Referência do Git (branch / tag / commit), digite main. Você também pode usar uma tag ou SHA.
  6. Clique em Confirmar.

  7. Nas caixas de texto de comandos dbt, especifique os comandos dbt a serem executados (deps, seed e run). Você deve prefixar cada comando com dbt. Os comandos são executados na ordem especificada.

    Configurar comandos dbt

  8. No SQL warehouse, selecione um SQL warehouse para executar o SQL gerado pelo dbt. O menu suspenso SQL warehouse mostra apenas armazéns SQL sem servidor e pro SQL.

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

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

  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 ao Ícone Excluir lado da versão atual do dbt-databricks.
    • Clique em Adicionar.
    • Na caixa de diálogo Adicionar biblioteca dependente, selecione PyPI e insira a versão dbt-package na caixa de texto Pacote (por exemplo, dbt-databricks==1.6.0).
    • Clique em Adicionar.

    Configurar a versão dbt-databricks

    Nota

    O Databricks recomenda fixar suas tarefas dbt em 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 agora, clique em Botão Executar agora.

Exibir os resultados da sua tarefa de trabalho dbt

Quando o trabalho estiver concluído, você poderá testar os resultados executando consultas SQL a partir de um bloco de anotações ou executando consultas em seu armazém Databricks . Por exemplo, consulte as seguintes consultas de exemplo:

 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

Você também pode usar a API de trabalhos para criar e gerenciar trabalhos que incluem tarefas 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 dbt com um SQL warehouse (recomendado) ou computação multiuso, use uma definição personalizada profiles.yml do depósito ou computação do Azure Databricks à qual se conectar. Para criar um trabalho que execute o projeto jaffle shop com um depósito ou computação multiuso, execute as etapas a seguir.

Nota

Somente um SQL warehouse ou computação multiuso pode ser usado como destino para uma tarefa dbt. Não é possível usar a computação de trabalho como um destino para dbt.

  1. Crie uma bifurcação do repositório jaffle_shop .

  2. Clone o repositório bifurcado em sua área de trabalho. Por exemplo, você pode executar um comando como o seguinte:

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

    Substitua <username> pela alça do GitHub.

  3. Crie um novo arquivo chamado profiles.yml no jaffle_shop diretório 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 Server Hostname na guia Detalhes da Conexão do SQL warehouse. Para executar sua tarefa dbt com computação multiuso, substitua <http-host> pelo valor Nome do host do servidor na guia Opções Avançadas, JDBC/ODBC para sua computação do Azure Databricks.
    • Para executar sua tarefa dbt com um SQL warehouse, substitua <http-path> pelo valor HTTP Path na guia Detalhes da Conexão do SQL warehouse. Para executar sua tarefa dbt com computação multiuso, substitua <http-path> pelo valor Caminho HTTP da guia Opções Avançadas, JDBC/ODBC para sua computação do Azure Databricks.

    Você não especifica segredos, como tokens de acesso, no arquivo porque verificará esse arquivo no controle do código-fonte. Em vez disso, esse arquivo usa a funcionalidade de modelagem dbt para inserir credenciais dinamicamente em tempo de execução.

    Nota

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

  4. Verifique este arquivo no Git e envie-o para o repositório bifurcado. 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 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 Source, clique em Edit e insira os detalhes do repositório GitHub da sua loja de jaffle bifurcada.

    Configurar repositório de projeto bifurcado

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

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

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

Nota

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

O dbt agora suporta modelos Python em armazéns de dados específicos, incluindo Databricks. Com modelos dbt Python, você pode usar ferramentas do ecossistema Python para implementar transformações difíceis de implementar com SQL. Você pode criar um trabalho do Azure Databricks para executar uma única tarefa com seu modelo dbt Python ou pode 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 usando um SQL warehouse. Para obter mais informações sobre como usar modelos dbt Python com o Azure Databricks, consulte Armazéns de dados específicos na documentação do dbt.

Erros e solução de problemas

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 profiles.yml arquivo não foi encontrado no $PATH especificado. Verifique se a raiz do projeto dbt contém o ficheiro profiles.yml.