Skip to content

Rodar modelos dbt localmente

Laura Amaral edited this page May 2, 2024 · 1 revision

Configurações para rodar um modelo dbt localmente

  • Clonar o diretório queries-basedosdados-dev

  • Acessar o diretório queries-basedosdados-dev

cd <path/do/seu/clone/queries-basedosdados-dev>
  • Atualizar o pip É muito importante garantir que a versão do pip está atualizada antes dos próximos passos.
python -m pip install --upgrade pip
  • Instalar o poetry
pip install poetry
  • Criar o ambiente virtual e instalar as dependências
poetry install --with=dev && pre-commit install
  • Ative o ambiente virtual
poetry shell
  • Instalar os pacotes do dbt no ambiente local
dbt deps

Alterar as credenciais em profiles.yml:

Para que o teste dos modelos seja feito localmente é necessário mudar o caminho das credenciais que ficam no arquivo profiles.yml.

  • Criar uma cópia do arquivo profiles.yml original fora do repo queries-basedosdados-dev,
  • No campo keyfile altera o caminho para a credencial local (se vc já usou o pacote basedosdados ela deve estar em /home/<user>/.basedosdados/credentials/prod.json)

Pronto! agora você já tem seu ambiente configurado para desenvolver e rodar os modelos no seu ambiente local.

Como rodar o modelo?

Mais informações: https://docs.getdbt.com/reference/node-selection/syntax

Materializando o modelo no BigQuery:

# materializa um único modelo pelo nome
$ dbt run --select dataset_id__table_id --profiles-dir <path/to/profiles.yml>     

# materializa todos os modelos em uma pasta      
$ dbt run --select model.dateset_id.table_id --profiles-dir <path/to/profiles.yml>      

# materializa todos os modelos no caminho 
$ dbt run --select /models/dataset_id --profiles-dir <path/to/profiles.yml>
 
# materializa um único modelo pelo caminho sql
$ dbt run --select /models/dataset/table_id.sql --profiles-dir <path/to/profiles.yml> 

Verificando o modelo com os testes incluídos no schema.yaml

  • Comando para executar o modelo: dbt test --select <path/to/dataset> --profiles-dir <path/to/profiles.yml>
  • Obs: Como os testes ficam no arquivo schema.yml não é possível passar o caminho do .sql para realizar testes, mas

Erro de dbt cloud CLI:

image Caso você esteja com esse erro:

  1. Rode which dbt
  2. Exclua a virtualenv do repositório
  3. Reinstale o processo o poetry e crie outra virtualenv

Erros ao testar o modelo DBT local

Runtime Error: log

Unable to generate access token, if you're using impersonate_service_account,
  make sure your initial account has the "roles/iam.serviceAccountTokenCreator"
 role on the account you are trying to impersonate.

{'error': 'invalid_grant', 
'error_description': 
'Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe. 
Check your iat and exp values in the JWT claim.'})
  • O erro ocorre em virtude de um descompasso do horário do WSL2 com o horário do Windows. Por alguns motivos o horário do WSL pode ficar defasado. Como os tokens de validação de acesso da service account duram 60 minutos, se o horário local do WSL2 tiver uma defasagem maior ocorre o erro.*

Uma das alternativas para resolver o erro acima é seguir os passos abaixo (para mais detalhes acessar esse guia):

  • No console do Powershell rode o comando abaixo para ver o horário no windows e o horário no WSL2;
Get-Date; wsl.exe date
  • No console do WSL
#instale 
sudo apt install ntpdate
#rode o comando para sincronizar os horários
sudo ntpdate time.windows.com