O Elementary pode ser definido como uma ferramenta de Observabilidade para projetos de transformação de dados com o dbt. Entretanto, quando falamos nele é muito importante distinguir dois componentes:
**O pacote Elementary do dbt:** um pacote do dbt responsável por:
<aside> ⚠️
Sobre artefatos do dbt e como o Elementary faz esse upload, consulte: Esta documentação
</aside>
**Elementary open-source CLI tool (Elementary OSS):** um CLI que trabalha com o pacote Elementary do dbt para produzir:
<aside> ⚠️
Idealmente, as versões precisam ser compatíveis, ou seja, o mesmo número de versão do elementary dbt package precisa ser usado como versão do Elementary CLI.
</aside>
O dbt core pode ser integrado ao Elementary (ao pacote e à CLI) desde que a plataforma usada como data wharehouse seja compatível. Logo mais isso ficará mais claro, quando falarmos das versões do Elementary OSS e o adaptador para o wharehouse.
packages.yaml no seu diretórtio de projeto do dbtdbt depspackages:
- package: dbt-labs/dbt_utils
version: 1.1.1
- package: elementary-data/elementary
version: 0.6.10
# version: 0.20.0 # -> Mais recente
# version: 0.14.1 # -> Instalada anteriormente, mas incompatível com o projeto atual
Adicionar o elementary ao dbt-project.yaml
O elementary vai ter seu próprio schema (dataset, para quem usa BigQuery).
Um schema à parte só para o Elementary e seus modelos.
Materialização do projeto dbt configurada: não deve haver configurações globais de materialização que possam intervir nas configurações do schema do Elementary, uma vez que alguns modelos precisam ser materializados como incrementais
models:
my_project:
materialized: "{{ 'table' if target.name == 'prod-cloud' else 'view' }}"
elementary:
+schema: "elementary"
Um profile para o elementary no profiles.yaml
Pode ser feito também através do:
dbt run-operation elementary.generate_elementary_cli_profile
Como deve ser o profile, segundo a documentação do Elementary:
## BIGQUERY ##
## By default, edr expects the profile name 'elementary'. ##
## Configure the database and schema of elementary models. ##
## Check where 'elementary_test_results' is to find it. ##
elementary:
outputs:
default:
type: bigquery
project: PROJECT_ID
dataset: elementary
method: service-account
keyfile: PATH_TO_CREDENTIALS_FILE.JSON
threads: 2
location: [dataset location]
Como está no nosso projeto:
elementary:
outputs:
default:
type: bigquery
method: service-account
keyfile: "{{ env_var('BD_SERVICE_ACCOUNT_DEV', '/credentials-dev/dev.json') }}"
project: basedosdados-dev # -> Estamos monitorando o ambiente dev
dataset: elementary
location: US # -> Importante ter a location
threads: 2
Instalar o CLI do elementary
uv add elementary-data==0.6.1 # -> Mesma versão do package no dbt
uv add 'elementary-data[bigquery]' # -> O Elementary tem compatibilidade com BQ
Cada execução do dbt gera artefatos com metadados sobre os recursos, configurações e resultados de execução projeto.
pipelines/
├── ...
├── dbt-packages/
├── macros/
├── models/
├── pipelines/
├── target/
│ ├── compiled/
│ ├── run/
│ ├── graph.gpickle
│ ├── manifest.json # Artefato
│ ├── partial_parse.msgpack
│ └── run_results.json # Artefato
└── ...
O elementary tem macros que extraem campos específicos dos artefatos e inserem nas tabelas, nos modelos do pacote. Algumas atualizações acontecem por meio de hooks, quando o dbt é executado (dbt run / test / build), e algumas somente quando os modelos são executados.
Os modelos dividem-se em: