Use transformações dbt em um Jobdo Databricks

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

  • Automatize suas tarefas de dbt e programe fluxos de trabalho que incluam tarefas de 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 Auto Loader, transformar os dados com dbt e analisar os dados com uma tarefa Notebook .

  • Arquivamento automático dos artefatos da execução Job , 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

A Databricks recomenda desenvolver seus projetos de dbt em um armazém Databricks SQL. Usando um Databricks SQL warehouse , o senhor pode testar o SQL gerado pelo dbt e usar a SQL warehouse história de consultas para depurar as consultas geradas pelo dbt.

Para executar suas dbt transformações em produção, a Databricks recomenda usar a dbt tarefa em um Databricks Job. 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 oserverless fluxo de trabalho estiver habilitado, pelo 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 ao dbt Core.

    Databricks recomenda o pacote dbt-databricks , não o pacote dbt-spark. O pacote dbt-databricks é um fork do dbt-spark otimizado para Databricks.

  • Para usar projetos dbt em um Databricks Job, o senhor deve configurar a integração do Git com as pastas Git do Databricks. O senhor não pode executar um projeto dbt a partir do DBFS.

  • O senhor deve ter o direito do Databricks SQL.

Crie e execute seu primeiro Jobdbt

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

  1. Vá para suas páginas de aterrissagem do Databricks e faça um dos seguintes:

    • Clique Ícone de trabalhos fluxo de trabalho na barra lateral e clique Botão Criar Job.

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

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

  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 Source (Fonte ), o senhor pode selecionar workspace para usar um projeto dbt localizado em uma pasta do Databricks workspace ou um 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 o provedor Git, clique em Edit e insira os detalhes do repositório GitHub do jaffle shop.

    Configurar repositório de projeto dbt
    • Em URL do repositório Git, insira a URL para o projeto jaffle shop.

    • Na referência do Git (branch/ tags /commit), digite main. Você também pode usar tags ou SHA.

  6. Clique em Confirmar.

  7. Nas caixas de texto de comandos dbt , especifique os comandos dbt para execução (deps, seed e execução). 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 por dbt. O menu suspenso SQL warehouse mostra apenas os armazéns serverless e pro SQL.

  9. (Opcional) Você pode especificar um esquema para a saída da tarefa. Por 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) Você pode especificar uma versão dbt-databricks para a tarefa. Por exemplo, para pin sua tarefa dbt em uma versão específica para desenvolvimento e produção:

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

    • Clique em Adicionar.

    • Na caixa de diálogo Add dependent library (Adicionar biblioteca dependente ), selecione PyPI e insira 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 dbt-databricks

    Observação

    A Databricks recomenda fixar a sua tarefa dbt a uma versão específica do pacote dbt-databricks para garantir que a mesma versão é utilizada para desenvolvimento e execução de 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 Job agora, clique botão de execução Agora.

Veja os resultados de sua tarefa Job dbt

Quando o Job estiver concluído, você poderá testar os resultados executando consultas SQL em um Notebook ou executando consultas em seu warehouse do Databricks. Por exemplo, consulte 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

Você também pode usar a API Jobs para criar e gerenciar Job que incluam tarefa dbt. O exemplo a seguir cria um Job 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": "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) dbt de execução 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 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, você poderia executar um comando como o seguinte:

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

    Substitua <username> pelo 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 Server hostname do Connection Details tab do seu SQL warehouse. Para executar sua dbt tarefa com o compute multifuncional, substitua <http-host> pelo valor do Server hostname das Advanced Options, 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.

    O senhor não especifica segredos, como o token de acesso, no arquivo porque 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é o máximo de 30 dias, e são revogadas automaticamente após a conclusão.

  4. Verifique este arquivo no Git e envie-o para seu repositório bifurcado. Por exemplo, você pode executar comandos como o seguinte:

    git add profiles.yml
    git commit -m "adding profiles.yml for my Databricks job"
    git push
    
  5. Clique Ícone de trabalhos fluxo de trabalho na barra lateral da IU do Databricks.

  6. Selecione o Job dbt e clique na tab tarefa .

  7. Em Origem, clique em Editar 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 Profiles Directory, insira o caminho relativo para o diretório que contém o arquivo profiles.yml . Deixe o valor do caminho em branco para usar o default da raiz do repositório.

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

Observação

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

dbt agora oferece suporte a modelos Python em data warehouses específicos, incluindo Databricks. Com modelos dbt Python, você pode usar ferramentas do ecossistema Python para implementar transformações que são difíceis de implementar com SQL. Você pode criar um Job do 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.

Você não pode executar modelos Python em uma tarefa dbt usando um SQL warehouse. Para obter mais informações sobre como usar modelos dbt Python com Databricks, consulte data warehouseespecífico na documentação 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.

Possíveis causas:

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