Use dbt transformações em um Databricks Job

O senhor pode executar seus projetos do dbt Core como uma tarefa em um Databricks Job. Ao executar seu projeto dbt Core como uma tarefa Job, o senhor pode se beneficiar do seguinte recurso Databricks Jobs:

  • Automatize sua dbt tarefa e programe o fluxo de trabalho que inclui dbt tarefa.

  • 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 Auto Loader, transformar os dados com dbt e analisar os dados com uma tarefa de Notebook.

  • Arquivamento automático dos artefatos da execução do trabalho, incluindo logs, resultados, manifestos e configuração.

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

Desenvolvimento e produção fluxo de trabalho

Databricks recomenda desenvolver seus projetos dbt com base em um depósito Databricks SQL. Usando um Databricks SQL warehouse , o senhor pode testar o SQL gerado pelo dbt e usar o SQL warehouse histórico de consultas para depurar as consultas geradas pelo dbt.

Para executar suas dbt transformações em produção, o site Databricks recomenda o uso da tarefa dbt em um trabalho Databricks. Por default, a tarefa dbt executará o processo dbt Python usando Databricks compute e o dbt gerado SQL contra o SQL warehouse selecionado.

O senhor pode executar dbt transformações em um serverless SQL warehouse ou pro SQL warehouse, Databricks compute, ou qualquer outro depósito suportado pelodbt. Este artigo discute as duas primeiras opções com exemplos.

Se o seu workspace estiver habilitado para o Unity Catalog e o serverless Jobs estiver habilitado, em default, a execução do Job no serverless compute.

Observação

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

Requisitos

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

    A 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 os projetos dbt em um trabalho Databricks, o senhor deve configurar a integraçãoGit para as pastas Databricks Git . O senhor não pode executar um projeto dbt a partir de DBFS.

  • O senhor deve ter o direito do Databricks SQL.

Crie e execute seu primeiro dbt Job

O exemplo a seguir usa o projeto jaffle_shop, um projeto de exemplo que demonstra os principais conceitos de dbt. Para criar um Job que execute o projeto jaffle shop, execute os seguintes passos.

  1. Acesse o site Databricks páginas de aterrissagem e faça uma das seguintes ações:

    • Clique em fluxo de trabalho Icon fluxo de trabalho na barra lateral e clique em Botão criar job.

    • Na barra lateral, clique em Novo ícone Novo e selecione Job.

  2. Na caixa de texto da tarefa no site tab, substitua Add a name for your Job (Adicionar um nome para o trabalho ) pelo nome do trabalho.

  3. Em nome da tarefa, digite um nome para a tarefa.

  4. Em Type (Tipo), selecione o tipo de tarefa dbt.

    Adicionar uma tarefa dbt
  5. No menu suspenso Source (Fonte ), o senhor pode selecionar o espaço de trabalho para usar um projeto dbt localizado em uma pasta Databricks workspace ou o provedorGit 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 o provedor Git, clique em Edit (Editar) e insira os detalhes do repositório GitHub do jaffle shop.

    Configurar o projeto dbt repo
    • Em Git repository URL(URL do repositório Git), digite a URL do projeto jaffle shop.

    • Na referência do Git (branch / tag / commit), digite main. O senhor também pode usar uma tag ou SHA.

  6. Clique em Confirmar.

  7. Nas caixas de texto dbt comando, especifique o dbt comando para execução(deps, seed e execução). O senhor deve prefixar cada comando com dbt. comando são executados na ordem especificada.

    Configurar dbt comando
  8. Em SQL warehouse, selecione um SQL warehouse para executar o SQL gerado pelo dbt. O menu suspenso SQL warehouse O menu suspenso mostra apenas serverless e pro SQL warehouse.

  9. (Opcional) O senhor pode especificar um esquema para a saída da tarefa. Em default, o esquema default é usado.

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

  11. (Opcional) O senhor pode especificar uma versão do dbt-databricks para a tarefa. Por exemplo, para pin sua tarefa dbt para uma versão específica para desenvolvimento e produção:

    • Em Dependent library (Biblioteca dependente), clique em Excluir ícone ao lado da versão atual do dbt-databricks.

    • Clique em Adicionar.

    • Na caixa de diálogo Adicionar biblioteca dependente, selecione PyPI e digite a versão do dbt-pacote na caixa de texto pacote (por exemplo, dbt-databricks==1.6.0).

    • Clique em Adicionar.

    Configurar a versão do dbt-databricks

    Observação

    Databricks recomenda fixar sua tarefa dbt em uma versão específica do pacote dbt-databricks para garantir que a mesma versão seja usada para desenvolvimento e execução em produção. A 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.

Veja os resultados de seu dbt Job tarefa

Quando o Job estiver concluído, o senhor poderá testar os resultados executando consultas em SQL a partir de um Notebook ou executando consultas no seu depósito Databricks. Por exemplo, veja os exemplos de consultas a seguir:

 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

O senhor também pode usar o site Jobs API para criar e gerenciar trabalhos que incluam dbt tarefa. O exemplo a seguir cria um Job com um único dbt tarefa:

{
  "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": "i3.xlarge",
        "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) execução dbt com um perfil personalizado

Para executar sua tarefa dbt com um SQL warehouse (recomendado) ou compute para todos os fins, use um profiles.yml personalizado definindo o depósito ou Databricks compute para se conectar. Para criar um Job que execute o projeto jaffle shop com um warehouse ou all-purpose compute, execute os seguintes passos.

Observação

Somente um SQL warehouse ou um compute para todos os fins pode ser usado como alvo para uma tarefa dbt. O senhor não pode usar o Job compute como um alvo 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, o senhor poderia executar um comando como o seguinte:

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

    Substitua <username> pelo seu identificador 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 do nome do host do servidor do Connection Details tab do seu SQL warehouse. Para executar sua tarefa dbt com o compute multifuncional, substitua <http-host> pelo valor do nome do host do servidor nas Opções avançadas, JDBC/ODBC tab para seu Databricks compute.

    • Para executar sua tarefa dbt com um SQL warehouse, substitua <http-path> pelo valor do caminho HTTP do Connection Details tab do seu SQL warehouse. Para executar sua tarefa dbt com o compute multifuncional, substitua <http-path> pelo valor do caminho HTTP das opções avançadas, JDBC/ODBC tab para seu Databricks compute.

    Não especifique segredos, como access tokens, no arquivo porque o senhor verificará esse arquivo no controle de origem. Em vez disso, esse arquivo usa a funcionalidade de modelo dbt para inserir credenciais dinamicamente em tempo de execução.

    Observação

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

  4. Verifique esse arquivo no Git e envie-o para seu repositório bifurcado. Por exemplo, o senhor poderia executar um comando como o seguinte:

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

  6. Selecione dbt Job e clique na tarefa tab.

  7. Em Source (Fonte), clique em Edit (Editar ) e insira os detalhes do repositório do GitHub do jaffle shop bifurcado.

    Configurar o projeto bifurcado repo
  8. Em SQL warehouse, selecione None (Manual).

  9. Em Profiles Directory (Diretório de perfis), digite o caminho relativo para o diretório que contém o arquivo profiles.yml. Deixe o valor do caminho em branco para usar o endereço default da raiz do repositório.

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

Observação

O suporte do dbt para modelos Python está na versão beta e requer o dbt 1.3 ou superior.

dbt Agora, o senhor suporta os modelosPython em data warehouse específicos, incluindo Databricks. Com os modelos dbt Python, o senhor pode usar ferramentas do ecossistema Python para implementar transformações que são difíceis de implementar com o SQL. O senhor pode criar um trabalho 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 inclua várias tarefas.

O senhor não pode executar os modelos Python em uma tarefa dbt usando um SQL warehouse. Para obter mais informações sobre o uso de modelos dbt Python com Databricks, consulte Armazém de dados específico na documentação dbt.

Erros e solução de problemas

Erro de arquivo de perfil não existente

Mensagem de erro:

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

Possíveis causas:

O arquivo profiles.yml não foi encontrado no $PATH especificado. Certifique-se de que a raiz do seu projeto dbt contenha o arquivo profiles.yml.