-
Notifications
You must be signed in to change notification settings - Fork 13
Incluindo testes no seu modelo
- Incluir as colunas no teste de chave única
- Incluir testes específicos. Liste o que você sabe sobre a base e busque testes que avaliam se o que você sabe se verifica.
Exemplos: determinada coluna não pode assumir valores negativos, outra coluna tem como valores válidos apenas 2 categorias)
- Se a base for grande incluir as configurações para que o teste rode apenas nas linhas mais recentes
- Rode os testes localmente
- Caso encontre problemas avalie: o problema aconteceu por um erro de processamento nos dados ou as suposições que você tinha sobre a base estavam incorretas?
- Se for um erro de processamento, volte e arrume
- Se for um erro nas suposições, considere utilizar os testes customizados (descritos abaixo) para adequar os testes a base. Sempre que usar testes customizados documentar as exceções nos metadados da tabela, pois o usuário final é o mais interessado em entender essas particularidades
models:
- name: orders
columns:
- name: id_municipio
tests:
- relationships:
to: ref('br_bd_diretorios_brasil__municipio')
field: id_municipio
models:
- name: orders
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- country_code
- order_id
- Ficam em
models/tests/generic
em queries-basedosdados-dev e queries-basedosdados
models:
- name: dataset_id__table_id
description:
tests:
- not_null_proportion_multiple_columns:
at_least: 0.95
Permite explicitar valores que vão ser ignorados no momento de realizar o teste de relação e a proporção de valores sem correspondência que será tolerada.
models:
- name: dataset_id__table_id
description: Table description
tests:
- custom_relationships:
to: ref('br_bd_diretorios_mundo__sistema_harmonizado')
field: id_sh4
ignore_values: ["5410"] # O valor 5410 será ignorado
proportion_allowed_failures: 0
Atenção: caso utilize esse teste é essencial documentar nos metadados da tabela quais exceções foram aplicadas e porque elas são aceitáveis. De preferencia adicionar essas informações na descrição da tabela para que o usuário seja informado dessas exceções
Permite inserir uma proporção de chaves únicas que repetidas que pode ser tolerada. Usar com parcimônia! Pode mascarar repetição de linhas.
models:
- name: dataset_id__table_id
description: Table description
tests:
- custom_unique_combinations_of_columns:
combination_of_columns:
- column_1
- column_2
proportion_allowed_failures: 0.05
Atenção: caso utilize esse teste é essencial documentar nos metadados da tabela quais exceções foram aplicadas e porque elas são aceitáveis. De preferencia adicionar essas informações na descrição da tabela para que o usuário seja informado dessas exceções
- O objetivo deste teste é verificar se todos os valores que estão presentes em colunas de tabelas com dicionário também estão nos dicionários.
- O teste é aplicado a nível da tabela
- Este teste não considera cobertural temporal dos dicionários
models:
- name: dataset_id__table_id
description: Table description
tests:
- custom_dictionaries:
columns_covered_by_dictionary: [id_pais, id_via, id_urf] #colunas que precisam ser testadas
dictionary_model: ref('br_me_comex_stat__dicionario') #dicionário que deve ser usado no teste
config:
where: __most_recent_year_month__
Para tabelas muito grandes é importante que o teste rode apenas nas linhas novas que serão incluidas. Para isso usaremos o config where
e uma das keywords __most_recent_year_month__
| __most_recent_date__
| __most_recent_year__
O where é inserido a nível do teste e permite inserir lógica SQL para filtrar os dados.
models:
- name: dataset_id__table_id
description: Table description
tests:
- custom_unique_combinations_of_columns:
combination_of_columns:
- column_1
- column_2
proportion_allowed_failures: 0.05
config:
where: "date_column = '2024-01-01'"
A macro custom_get_where_subquery detecta a presença de uma das keywords acima e executa uma consulta para determinar os valores mais recentes de ano e mês, data ou ano de uma tabela. Em seguida, substitui a keyword declarada pelos valores mais recentes encontrados, o que garante que o teste seja executado apenas nas linhas mais recentes da tabela.
__most_recent_year_month__
: a macro faz um query usando as colunas ano e mes para identificar a data mais recente;
__most_recent_date__
: a macro faz um query usando a coluna data para identificar a data mais recente;
__most_recent_year__
: a macro faz um query usando a coluna ano para identificar o ano;
ex.
models:
- name: dataset_id__table_id
description: Table description
tests:
- custom_unique_combinations_of_columns:
combination_of_columns:
- column_1
proportion_allowed_failures: 0.05
config:
where: __most_recent_year_month__
Ver implementação em br_bcb_estban