diff --git a/models/br_rf_arrecadacao/br_rf_arrecadacao__itr.sql b/models/br_rf_arrecadacao/br_rf_arrecadacao__itr.sql index 61524bce..1199fb2a 100644 --- a/models/br_rf_arrecadacao/br_rf_arrecadacao__itr.sql +++ b/models/br_rf_arrecadacao/br_rf_arrecadacao__itr.sql @@ -11,12 +11,14 @@ cluster_by=["mes"], ) }} - select - safe_cast(ano as int64) ano, - safe_cast(mes as int64) mes, - safe_cast(sigla_uf as string) sigla_uf, - safe_cast(sigla_regiao as string) sigla_regiao, - safe_cast(cidade as string) cidade, - safe_cast(valor_arrecadado as float64) valor_arrecadado, -from `basedosdados-staging.br_rf_arrecadacao_staging.itr` as t + safe_cast(itr.ano as int64) ano, + safe_cast(itr.mes as int64) mes, + safe_cast(itr.sigla_uf as string) sigla_uf, + safe_cast(m.id_municipio as string) id_municipio, + safe_cast(itr.valor_arrecadado as float64) valor_arrecadado, +from `basedosdados-staging.br_rf_arrecadacao_staging.itr` itr +left join + `basedosdados.br_bd_diretorios_brasil.municipio` m + on itr.cidade = m.nome + and itr.sigla_uf = m.sigla_uf diff --git a/models/br_rf_arrecadacao/schema.yml b/models/br_rf_arrecadacao/schema.yml index f9d55e16..e28167cc 100644 --- a/models/br_rf_arrecadacao/schema.yml +++ b/models/br_rf_arrecadacao/schema.yml @@ -448,7 +448,7 @@ models: fiscalizar e cobrar o ITR, de acordo com dispositivo constitucional. tests: - dbt_utils.unique_combination_of_columns: - combination_of_columns: [ano, mes, sigla_uf, sigla_regiao, cidade] + combination_of_columns: [ano, mes, sigla_uf, id_municipio] - not_null_proportion_multiple_columns: at_least: 0.95 columns: @@ -471,14 +471,11 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__uf') field: sigla - - name: sigla_regiao - description: Sigla da Região Política onde se localiza o município conveniado - ou não conveniado. + - name: id_municipio + description: ID do município conveniado ou não conveniado. tests: - relationships: - to: ref('br_bd_diretorios_brasil__regiao') - field: sigla - - name: cidade - description: Nome do município conveniado ou não conveniado. + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio - name: valor_arrecadado description: Valor arrecadado. diff --git a/models/br_tse_eleicoes/br_tse_eleicoes__bens_candidato.sql b/models/br_tse_eleicoes/br_tse_eleicoes__bens_candidato.sql index 2e5d0bef..9750890c 100644 --- a/models/br_tse_eleicoes/br_tse_eleicoes__bens_candidato.sql +++ b/models/br_tse_eleicoes/br_tse_eleicoes__bens_candidato.sql @@ -17,9 +17,8 @@ select safe_cast(id_eleicao as string) id_eleicao, safe_cast(tipo_eleicao as string) tipo_eleicao, safe_cast(data_eleicao as date) data_eleicao, + safe_cast(titulo_eleitoral_candidato as string) titulo_eleitoral_candidato, safe_cast(sequencial_candidato as string) sequencial_candidato, - safe_cast(id_candidato_bd as string) id_candidato_bd, - safe_cast(id_tipo_item as string) id_tipo_item, safe_cast(tipo_item as string) tipo_item, safe_cast(descricao_item as string) descricao_item, safe_cast(valor_item as float64) valor_item diff --git a/models/br_tse_eleicoes/br_tse_eleicoes__candidatos.sql b/models/br_tse_eleicoes/br_tse_eleicoes__candidatos.sql index f07fff4c..fae35de6 100644 --- a/models/br_tse_eleicoes/br_tse_eleicoes__candidatos.sql +++ b/models/br_tse_eleicoes/br_tse_eleicoes__candidatos.sql @@ -19,9 +19,8 @@ select safe_cast(sigla_uf as string) sigla_uf, safe_cast(id_municipio as string) id_municipio, safe_cast(id_municipio_tse as string) id_municipio_tse, - cast(split(id_candidato_bd, '.')[offset(0)] as string) id_candidato_bd, - cast(split(cpf, '.')[offset(0)] as string) cpf, safe_cast(titulo_eleitoral as string) titulo_eleitoral, + cast(split(cpf, '.')[offset(0)] as string) cpf, safe_cast(sequencial as string) sequencial, safe_cast(numero as string) numero, safe_cast(nome as string) nome, @@ -30,11 +29,11 @@ select safe_cast(sigla_partido as string) sigla_partido, safe_cast(cargo as string) cargo, safe_cast(situacao as string) situacao, - safe_cast(ocupacao as string) ocupacao, safe_cast(data_nascimento as date) data_nascimento, cast(split(idade, '.')[offset(0)] as int64) idade, safe_cast(genero as string) genero, safe_cast(instrucao as string) instrucao, + safe_cast(ocupacao as string) ocupacao, safe_cast(estado_civil as string) estado_civil, safe_cast(nacionalidade as string) nacionalidade, safe_cast(sigla_uf_nascimento as string) sigla_uf_nascimento, diff --git a/models/br_tse_eleicoes/br_tse_eleicoes__despesas_candidato.sql b/models/br_tse_eleicoes/br_tse_eleicoes__despesas_candidato.sql index cccc5cf7..a89f3689 100644 --- a/models/br_tse_eleicoes/br_tse_eleicoes__despesas_candidato.sql +++ b/models/br_tse_eleicoes/br_tse_eleicoes__despesas_candidato.sql @@ -20,15 +20,12 @@ select safe_cast(sigla_uf as string) sigla_uf, safe_cast(id_municipio as string) id_municipio, safe_cast(id_municipio_tse as string) id_municipio_tse, - safe_cast(numero_candidato as string) numero_candidato, - safe_cast(cpf_candidato as string) cpf_candidato, + safe_cast(titulo_eleitoral_candidato as string) titulo_eleitoral_candidato, safe_cast(sequencial_candidato as string) sequencial_candidato, - safe_cast(id_candidato_bd as string) id_candidato_bd, - safe_cast(nome_candidato as string) nome_candidato, - safe_cast(cpf_vice_suplente as string) cpf_vice_suplente, + safe_cast(numero_candidato as string) numero_candidato, + safe_cast(cnpj_candidato as string) cnpj_candidato, safe_cast(numero_partido as string) numero_partido, safe_cast(sigla_partido as string) sigla_partido, - safe_cast(nome_partido as string) nome_partido, safe_cast(cargo as string) cargo, safe_cast(sequencial_despesa as string) sequencial_despesa, safe_cast(data_despesa as date) data_despesa, @@ -40,7 +37,6 @@ select safe_cast(data_prestacao_contas as date) data_prestacao_contas, safe_cast(sequencial_prestador_contas as string) sequencial_prestador_contas, safe_cast(cnpj_prestador_contas as string) cnpj_prestador_contas, - safe_cast(cnpj_candidato as string) cnpj_candidato, safe_cast(tipo_documento as string) tipo_documento, safe_cast(numero_documento as string) numero_documento, safe_cast(especie_recurso as string) especie_recurso, @@ -70,6 +66,5 @@ select safe_cast(numero_candidato_fornecedor as string) numero_candidato_fornecedor, safe_cast(numero_partido_fornecedor as string) numero_partido_fornecedor, safe_cast(sigla_partido_fornecedor as string) sigla_partido_fornecedor, - safe_cast(nome_partido_fornecedor as string) nome_partido_fornecedor, safe_cast(cargo_fornecedor as string) cargo_fornecedor from `basedosdados-staging.br_tse_eleicoes_staging.despesas_candidato` as t diff --git a/models/br_tse_eleicoes/br_tse_eleicoes__receitas_candidato.sql b/models/br_tse_eleicoes/br_tse_eleicoes__receitas_candidato.sql index 8f237f18..a6bd7ae1 100644 --- a/models/br_tse_eleicoes/br_tse_eleicoes__receitas_candidato.sql +++ b/models/br_tse_eleicoes/br_tse_eleicoes__receitas_candidato.sql @@ -19,20 +19,16 @@ select safe_cast(sigla_uf as string) sigla_uf, safe_cast(id_municipio as string) id_municipio, safe_cast(id_municipio_tse as string) id_municipio_tse, + safe_cast(titulo_eleitoral_candidato as string) titulo_eleitoral_candidato, + safe_cast(sequencial_candidato as string) sequencial_candidato, safe_cast(numero_candidato as string) numero_candidato, - safe_cast(cpf_candidato as string) cpf_candidato, safe_cast(cnpj_candidato as string) cnpj_candidato, - safe_cast(titulo_eleitor_candidato as string) titulo_eleitor_candidato, - safe_cast(sequencial_candidato as string) sequencial_candidato, - safe_cast(id_candidato_bd as string) id_candidato_bd, - safe_cast(nome_candidato as string) nome_candidato, - safe_cast(cpf_vice_suplente as string) cpf_vice_suplente, safe_cast(numero_partido as string) numero_partido, - safe_cast(nome_partido as string) nome_partido, safe_cast(sigla_partido as string) sigla_partido, safe_cast(cargo as string) cargo, safe_cast(sequencial_receita as string) sequencial_receita, - safe_cast(data_receita as date) data_receita, + {{ validate_date_range("data_receita", "1900-01-01", "2100-01-01") }} + as data_receita, safe_cast(fonte_receita as string) fonte_receita, safe_cast(origem_receita as string) origem_receita, safe_cast(natureza_receita as string) natureza_receita, @@ -49,7 +45,6 @@ select safe_cast(cargo_candidato_doador as string) cargo_candidato_doador, safe_cast(numero_partido_doador as string) numero_partido_doador, safe_cast(sigla_partido_doador as string) sigla_partido_doador, - safe_cast(nome_partido_doador as string) nome_partido_doador, safe_cast(esfera_partidaria_doador as string) esfera_partidaria_doador, safe_cast(numero_candidato_doador as string) numero_candidato_doador, safe_cast(cnae_2_doador as string) cnae_2_doador, diff --git a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato.sql b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato.sql index 6be9f640..ac5418d8 100644 --- a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato.sql +++ b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato.sql @@ -1,31 +1,30 @@ -{{ - config( - schema="br_tse_eleicoes", - alias="resultados_candidato", - materialized="table", - partition_by={ - "field": "ano", - "data_type": "int64", - "range": {"start": 1945, "end": 2024, "interval": 1}, - }, - ) -}} -select - safe_cast(ano as int64) ano, - safe_cast(turno as int64) turno, - safe_cast(id_eleicao as string) id_eleicao, - safe_cast(tipo_eleicao as string) tipo_eleicao, - safe_cast(data_eleicao as date) data_eleicao, - safe_cast(sigla_uf as string) sigla_uf, - safe_cast(id_municipio as string) id_municipio, - safe_cast(id_municipio_tse as string) id_municipio_tse, - safe_cast(cargo as string) cargo, - safe_cast(numero_partido as string) numero_partido, - safe_cast(sigla_partido as string) sigla_partido, - safe_cast(numero_candidato as string) numero_candidato, - safe_cast(sequencial_candidato as string) sequencial_candidato, - safe_cast(id_candidato_bd as string) id_candidato_bd, - safe_cast(nome_candidato as string) nome_candidato, - safe_cast(resultado as string) resultado, - safe_cast(votos as int64) votos -from `basedosdados-staging.br_tse_eleicoes_staging.resultados_candidato` as t +{{ + config( + schema="br_tse_eleicoes", + alias="resultados_candidato", + materialized="table", + partition_by={ + "field": "ano", + "data_type": "int64", + "range": {"start": 1945, "end": 2024, "interval": 1}, + }, + ) +}} +select + safe_cast(ano as int64) ano, + safe_cast(turno as int64) turno, + safe_cast(id_eleicao as string) id_eleicao, + safe_cast(tipo_eleicao as string) tipo_eleicao, + safe_cast(data_eleicao as date) data_eleicao, + safe_cast(sigla_uf as string) sigla_uf, + safe_cast(id_municipio as string) id_municipio, + safe_cast(id_municipio_tse as string) id_municipio_tse, + safe_cast(cargo as string) cargo, + safe_cast(numero_partido as string) numero_partido, + safe_cast(sigla_partido as string) sigla_partido, + safe_cast(titulo_eleitoral_candidato as string) titulo_eleitoral_candidato, + safe_cast(sequencial_candidato as string) sequencial_candidato, + safe_cast(numero_candidato as string) numero_candidato, + safe_cast(resultado as string) resultado, + safe_cast(votos as int64) votos +from `basedosdados-staging.br_tse_eleicoes_staging.resultados_candidato` as t diff --git a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_municipio.sql b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_municipio.sql index e6d6f982..594f6372 100644 --- a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_municipio.sql +++ b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_municipio.sql @@ -23,9 +23,9 @@ select safe_cast(cargo as string) cargo, safe_cast(numero_partido as string) numero_partido, safe_cast(sigla_partido as string) sigla_partido, - safe_cast(numero_candidato as string) numero_candidato, + safe_cast(titulo_eleitoral_candidato as string) titulo_eleitoral_candidato, safe_cast(sequencial_candidato as string) sequencial_candidato, - safe_cast(id_candidato_bd as string) id_candidato_bd, + safe_cast(numero_candidato as string) numero_candidato, safe_cast(resultado as string) resultado, safe_cast(votos as int64) votos from `basedosdados-staging.br_tse_eleicoes_staging.resultados_candidato_municipio` as t diff --git a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_municipio_zona.sql b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_municipio_zona.sql index b2b14d25..ce7e062c 100644 --- a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_municipio_zona.sql +++ b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_municipio_zona.sql @@ -24,9 +24,9 @@ select safe_cast(cargo as string) cargo, safe_cast(numero_partido as string) numero_partido, safe_cast(sigla_partido as string) sigla_partido, - safe_cast(numero_candidato as string) numero_candidato, + safe_cast(titulo_eleitoral_candidato as string) titulo_eleitoral_candidato, safe_cast(sequencial_candidato as string) sequencial_candidato, - safe_cast(id_candidato_bd as string) id_candidato_bd, + safe_cast(numero_candidato as string) numero_candidato, safe_cast(resultado as string) resultado, safe_cast(votos as int64) votos from diff --git a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_secao.sql b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_secao.sql index 69638532..828a9a64 100644 --- a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_secao.sql +++ b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_candidato_secao.sql @@ -6,7 +6,7 @@ partition_by={ "field": "ano", "data_type": "int64", - "range": {"start": 1994, "end": 2022, "interval": 2}, + "range": {"start": 1994, "end": 2024, "interval": 2}, }, cluster_by=["sigla_uf"], ) @@ -17,7 +17,7 @@ select safe_cast(turno as int64) turno, safe_cast(id_eleicao as string) id_eleicao, safe_cast(tipo_eleicao as string) tipo_eleicao, - safe_cast(data_eleicao as string) data_eleicao, + safe_cast(data_eleicao as date) data_eleicao, safe_cast(sigla_uf as string) sigla_uf, safe_cast(id_municipio as string) id_municipio, safe_cast(id_municipio_tse as string) id_municipio_tse, @@ -26,8 +26,8 @@ select safe_cast(cargo as string) cargo, safe_cast(numero_partido as string) numero_partido, safe_cast(sigla_partido as string) sigla_partido, + safe_cast(titulo_eleitoral_candidato as string) titulo_eleitoral_candidato, safe_cast(sequencial_candidato as string) sequencial_candidato, safe_cast(numero_candidato as string) numero_candidato, - safe_cast(id_candidato_bd as string) id_candidato_bd, safe_cast(votos as int64) votos from `basedosdados-staging.br_tse_eleicoes_staging.resultados_candidato_secao` as t diff --git a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_municipio.sql b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_municipio.sql index f93eb9fd..6f847373 100644 --- a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_municipio.sql +++ b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_municipio.sql @@ -11,7 +11,6 @@ cluster_by=["sigla_uf"], ) }} - select safe_cast(ano as int64) ano, safe_cast(turno as int64) turno, diff --git a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_municipio_zona.sql b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_municipio_zona.sql index 16fe21e2..d79ace6b 100644 --- a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_municipio_zona.sql +++ b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_municipio_zona.sql @@ -11,7 +11,6 @@ cluster_by=["sigla_uf"], ) }} - select safe_cast(ano as int64) ano, safe_cast(turno as int64) turno, diff --git a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_secao.sql b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_secao.sql index 652272ef..fe4dcc0b 100644 --- a/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_secao.sql +++ b/models/br_tse_eleicoes/br_tse_eleicoes__resultados_partido_secao.sql @@ -6,7 +6,7 @@ partition_by={ "field": "ano", "data_type": "int64", - "range": {"start": 1994, "end": 2022, "interval": 2}, + "range": {"start": 1994, "end": 2024, "interval": 2}, }, cluster_by=["sigla_uf"], ) @@ -16,7 +16,7 @@ select safe_cast(turno as int64) turno, safe_cast(id_eleicao as string) id_eleicao, safe_cast(tipo_eleicao as string) tipo_eleicao, - safe_cast(data_eleicao as string) data_eleicao, + safe_cast(data_eleicao as date) data_eleicao, safe_cast(sigla_uf as string) sigla_uf, safe_cast(id_municipio as string) id_municipio, safe_cast(id_municipio_tse as string) id_municipio_tse, diff --git a/models/br_tse_eleicoes/schema.yml b/models/br_tse_eleicoes/schema.yml index a4a2015b..451849c8 100644 --- a/models/br_tse_eleicoes/schema.yml +++ b/models/br_tse_eleicoes/schema.yml @@ -5,7 +5,8 @@ models: description: Declaração de bens de candidatos em eleições brasileiras. tests: - not_null_proportion_multiple_columns: - at_least: 0.55 + at_least: 0.70 + ignore_values: [tipo_item, data_eleicao, id_eleicao] columns: - name: ano description: Ano @@ -13,30 +14,28 @@ models: - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano - - name: data_eleicao - description: Data da eleição - tests: - - relationships: - to: ref('br_bd_diretorios_data_tempo__data') - field: data.data - - name: descricao_item - description: Descrição do item - - name: id_candidato_bd - description: ID Candidato - Base dos Dados - - name: id_eleicao - description: ID Eleição - - name: id_tipo_item - description: ID Tipo Item - - name: sequencial_candidato - description: Sequencial do Candidato - name: sigla_uf description: Sigla da Unidade da Federação tests: - relationships: to: ref('br_bd_diretorios_brasil__uf') field: sigla + - name: id_eleicao + description: ID Eleição - name: tipo_eleicao description: Tipo da eleição + - name: data_eleicao + description: Data da eleição + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__data') + field: data.data + - name: titulo_eleitoral_candidato + description: Título eleitoral + - name: sequencial_candidato + description: Sequencial do Candidato + - name: descricao_item + description: Descrição do item - name: tipo_item description: Tipo do item - name: valor_item @@ -46,6 +45,7 @@ models: tests: - not_null_proportion_multiple_columns: at_least: 0.05 + ignore_values: [email, raca] - dbt_utils.unique_combination_of_columns: combination_of_columns: - ano @@ -55,7 +55,6 @@ models: - sequencial - numero - cpf - - id_candidato_bd columns: - name: ano description: Ano @@ -99,8 +98,6 @@ models: description: Gênero - name: idade description: Idade - - name: id_candidato_bd - description: ID Candidato - Base dos Dados - name: id_eleicao description: ID Eleição - name: id_municipio @@ -141,16 +138,17 @@ models: - name: sigla_uf description: Sigla da unidade da federação tests: - - relationships: + - custom_relationships: to: ref('br_bd_diretorios_brasil__uf') field: sigla + ignore_values: [ZZ] - name: sigla_uf_nascimento description: Sigla da unidade da federação de nascimento tests: - custom_relationships: to: ref('br_bd_diretorios_brasil__uf') field: sigla - ignore_values: [ZZ, Não divulgável, BH, LB] + ignore_values: [ZZ] - name: situacao description: Situação - name: tipo_eleicao @@ -159,6 +157,18 @@ models: description: Título eleitoral - name: br_tse_eleicoes__despesas_candidato description: Dados de despesas em campanhas eleitorais a nível de despesa. + tests: + - not_null_proportion_multiple_columns: + at_least: 0.05 + ignore_values: + - esfera_partidaria_fornecedor + - id_municipio_tse_fornecedor + - sequencial_candidato_fornecedor + - cargo_fornecedor + - numero_candidato_fornecedor + - sigla_partido_fornecedor + - numero_partido_fornecedor + - sigla_uf_fornecedor columns: - name: ano description: Ano @@ -188,12 +198,8 @@ models: description: CNPJ do candidato - name: cnpj_prestador_contas description: CNPJ do prestador de contas - - name: cpf_candidato - description: CPF do candidato - name: cpf_cnpj_fornecedor description: CPF ou CNPJ do fornecedor - - name: cpf_vice_suplente - description: CPF do vice ou suplente - name: data_despesa description: Data da despesa tests: @@ -233,8 +239,6 @@ models: description: Espécie do recurso - name: fonte_recurso description: Fonte do recurso - - name: id_candidato_bd - description: ID Candidato - Base dos Dados - name: id_eleicao description: ID Eleição - name: id_municipio @@ -257,16 +261,10 @@ models: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio_tse ignore_values: ['73709'] - - name: nome_candidato - description: Nome do candidato - name: nome_fornecedor description: Nome do fornecedor - name: nome_fornecedor_rf description: Nome do fornecedor - Receita Federal - - name: nome_partido - description: Nome do partido - - name: nome_partido_fornecedor - description: Nome do partido do fornecedor - name: numero_candidato description: Número do candidato - name: numero_candidato_fornecedor @@ -314,6 +312,8 @@ models: description: Tipo do fornecedor - name: tipo_prestacao_contas description: Tipo de prestação de contas + - name: titulo_eleitoral_candidato + description: Título eleitoral do candidato - name: turno description: Turno - name: valor_despesa @@ -350,12 +350,25 @@ models: description: Número de Comparecimentos - name: data_eleicao description: Data da eleição + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__data') + field: data.data - name: id_eleicao description: ID Eleição - name: id_municipio description: ID Município - IBGE 7 Dígitos + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio - name: id_municipio_tse description: ID Município - TSE + tests: + - custom_relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio_tse + ignore_values: ['73709'] - name: proporcao_comparecimento description: Proporção de comparecimento - name: proporcao_votos_brancos @@ -372,6 +385,11 @@ models: description: Número de seções eleitorais totalizadas - name: sigla_uf description: Sigla da unidade da federação + tests: + - custom_relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + ignore_values: [ZZ] - name: tipo_eleicao description: Tipo da eleição - name: turno @@ -419,12 +437,25 @@ models: description: Número de Comparecimentos - name: data_eleicao description: Data da eleição + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__data') + field: data.data - name: id_eleicao description: ID Eleição - name: id_municipio description: ID Município - IBGE 7 Dígitos + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio - name: id_municipio_tse description: ID Município - TSE + tests: + - custom_relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio_tse + ignore_values: ['73709'] - name: proporcao_comparecimento description: Proporção de comparecimento - name: proporcao_votos_brancos @@ -441,6 +472,11 @@ models: description: Número de seções eleitorais totalizadas - name: sigla_uf description: Sigla da unidade da federação + tests: + - custom_relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + ignore_values: [ZZ] - name: tipo_eleicao description: Tipo da eleição - name: turno @@ -741,6 +777,16 @@ models: description: Zona eleitoral - name: br_tse_eleicoes__receitas_candidato description: Dados de financiamento de campanha de receita para candidatos. + tests: + - not_null_proportion_multiple_columns: + at_least: 0.05 + ignore_values: + - descricao_cnae_2_doador_orig + - nome_doador_orig_rf + - nome_doador_orig + - cpf_cnpj_doador_orig + - tipo_doador_orig + - entrega_conjunto columns: - name: ano description: Ano @@ -772,14 +818,10 @@ models: description: CNPJ do prestador de contas - name: cpf_administrador description: CPF do administrador - - name: cpf_candidato - description: CPF do candidato - name: cpf_cnpj_doador description: CPF ou CNPJ do doador - name: cpf_cnpj_doador_orig description: CPF ou CNPJ do doador originário - - name: cpf_vice_suplente - description: CPF do vice ou suplente - name: data_eleicao description: Data da eleição tests: @@ -794,6 +836,10 @@ models: field: data.data - name: data_receita description: Data da receita + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__data') + field: data.data - name: descricao_cnae_2_doador description: Descrição da Classificação Nacional de Atividades Econômicas 2.0 do doador @@ -810,8 +856,6 @@ models: description: Espécie da receita - name: fonte_receita description: Fonte da receita - - name: id_candidato_bd - description: ID Candidato - Base dos Dados - name: id_eleicao description: ID Eleição - name: id_municipio @@ -838,8 +882,6 @@ models: description: Natureza da receita - name: nome_administrador description: Nome do administrador - - name: nome_candidato - description: Nome do candidato - name: nome_doador description: Nome do doador - name: nome_doador_orig @@ -848,10 +890,6 @@ models: description: Nome do doador originário - Receita Federal - name: nome_doador_rf description: Nome do doador - Receita Federal - - name: nome_partido - description: Nome do partido - - name: nome_partido_doador - description: Nome do partido do doador - name: numero_candidato description: Número do candidato - name: numero_candidato_doador @@ -898,8 +936,8 @@ models: description: Tipo da eleição - name: tipo_prestacao_contas description: Tipo de prestação de contas - - name: titulo_eleitor_candidato - description: Título de eleitor do candidato + - name: titulo_eleitoral_candidato + description: Título eleitoral do candidato - name: turno description: Turno - name: valor_receita @@ -1162,19 +1200,8 @@ models: - name: br_tse_eleicoes__resultados_candidato description: Dados de resultados eleitorais a nível de candidato. tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - ano - - turno - - id_eleicao - - sigla_uf - - id_municipio_tse - - cargo - - sequencial_candidato - - numero_candidato - - nome_candidato - not_null_proportion_multiple_columns: - at_least: 0.80 + at_least: 0.85 columns: - name: ano description: Ano @@ -1190,8 +1217,6 @@ models: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - - name: id_candidato_bd - description: ID Candidato - Base dos Dados - name: id_eleicao description: ID Eleição - name: id_municipio @@ -1207,8 +1232,6 @@ models: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio_tse ignore_values: ['73709'] - - name: nome_candidato - description: Nome do candidato - name: numero_candidato description: Número do candidato - name: numero_partido @@ -1228,6 +1251,8 @@ models: ignore_values: [GB, GP, RB] - name: tipo_eleicao description: Tipo da eleição + - name: titulo_eleitoral_candidato + description: Título eleitoral do candidato - name: turno description: Turno - name: votos @@ -1245,8 +1270,9 @@ models: - cargo - sequencial_candidato - numero_candidato + - titulo_eleitoral_candidato - not_null_proportion_multiple_columns: - at_least: 0.80 + at_least: 0.90 columns: - name: ano description: Ano @@ -1262,8 +1288,6 @@ models: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - - name: id_candidato_bd - description: ID Candidato - Base dos Dados - name: id_eleicao description: ID Eleição - name: id_municipio @@ -1298,6 +1322,8 @@ models: ignore_values: [GB, GP, RB] - name: tipo_eleicao description: Tipo da eleição + - name: titulo_eleitoral_candidato + description: Título eleitoral do candidato - name: turno description: Turno - name: votos @@ -1316,8 +1342,9 @@ models: - zona - sequencial_candidato - numero_candidato + - titulo_eleitoral_candidato - not_null_proportion_multiple_columns: - at_least: 0.80 + at_least: 0.95 columns: - name: ano description: Ano @@ -1333,8 +1360,6 @@ models: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - - name: id_candidato_bd - description: ID Candidato - Base dos Dados - name: id_eleicao description: ID Eleição - name: id_municipio @@ -1369,6 +1394,8 @@ models: ignore_values: [GB, GP, RB] - name: tipo_eleicao description: Tipo da eleição + - name: titulo_eleitoral_candidato + description: Título eleitoral do candidato - name: turno description: Turno - name: votos @@ -1377,19 +1404,6 @@ models: description: Zona eleitoral - name: br_tse_eleicoes__resultados_candidato_secao description: Dados de resultados eleitorais a nível de candidato-seção. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - ano - - turno - - id_eleicao - - id_municipio_tse - - zona - - secao - - sequencial_candidato - - numero_candidato - - not_null_proportion_multiple_columns: - at_least: 0.95 columns: - name: ano description: Ano @@ -1401,8 +1415,6 @@ models: description: Cargo - name: data_eleicao description: Data da eleição - - name: id_candidato_bd - description: ID Candidato - Base dos Dados - name: id_eleicao description: ID Eleição - name: id_municipio @@ -1420,9 +1432,16 @@ models: - name: sigla_partido description: Sigla do partido - name: sigla_uf - description: Sigla da unidade da federação + description: Sigla da Unidade da Federação + tests: + - custom_relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + ignore_values: [ZZ] - name: tipo_eleicao description: Tipo da eleição + - name: titulo_eleitoral_candidato + description: Título eleitoral do candidato - name: turno description: Turno - name: votos @@ -1558,19 +1577,6 @@ models: description: Zona eleitoral - name: br_tse_eleicoes__resultados_partido_secao description: Dados de resultados em eleições brasileiras a nível de partido-seção. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - ano - - turno - - id_eleicao - - id_municipio_tse - - zona - - secao - - cargo - - numero_partido - - not_null_proportion_multiple_columns: - at_least: 0.95 columns: - name: ano description: Ano @@ -1582,6 +1588,10 @@ models: description: Cargo - name: data_eleicao description: Data da eleição + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__data') + field: data.data - name: id_eleicao description: ID Eleição - name: id_municipio @@ -1595,7 +1605,12 @@ models: - name: sigla_partido description: Sigla do partido - name: sigla_uf - description: Sigla da unidade da federação + description: Sigla da Unidade da Federação + tests: + - custom_relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + ignore_values: [ZZ] - name: tipo_eleicao description: Tipo da eleição - name: turno diff --git a/tests/generic/custom_dictionary_coverage.sql b/tests/generic/custom_dictionary_coverage.sql index 9bace9a8..614ebb82 100644 --- a/tests/generic/custom_dictionary_coverage.sql +++ b/tests/generic/custom_dictionary_coverage.sql @@ -6,7 +6,13 @@ {%- set combined_query_parts = [] -%} {%- set union_parts = [] -%} - {% set table_id = model.identifier %} + + {% set model_sql = model | string %} + {% set start = model_sql.find("`") + 1 %} + {% set end = model_sql.rfind("`") %} + {% set full_path = model_sql[start:end] %} + {% set path_parts = full_path.split(".") %} + {% set table_id = path_parts[2].replace("`", "").strip() %} {%- for column_name in columns_covered_by_dictionary %} {% set subquery_name = "exceptions_" ~ loop.index %} diff --git a/tests/generic/custom_null_proportion_multiple_columns.sql b/tests/generic/custom_null_proportion_multiple_columns.sql deleted file mode 100644 index e3a3bde2..00000000 --- a/tests/generic/custom_null_proportion_multiple_columns.sql +++ /dev/null @@ -1,71 +0,0 @@ -{% test custom_not_null_proportion_multiple_columns( - model, ignore_values, at_least=0.05 -) %} - - {%- set columns = adapter.get_columns_in_relation(model) -%} - {% set suffix = "_nulls" %} - {% set pivot_columns_query %} - - with null_counts as( - - select - {% for column in columns -%} - {% if column.name not in ignore_values %} - SUM(CASE WHEN {{ column.name }} IS NULL THEN 1 ELSE 0 END) AS {{ column.name }}{{ suffix }}, - {% endif %} - {%- endfor %} - count(*) as total_records - from {{ model }} - ), - - pivot_columns as ( - - {% for column in columns -%} - {% if column.name not in ignore_values %} - select '{{ column.name }}' as column_name, {{ column.name }}{{ suffix }} as quantity, total_records - from null_counts - {% if not loop.last %}union all {% endif %} - {% endif %} - {%- endfor %} - ), - - faulty_columns as ( - select - * - from pivot_columns - where - quantity / total_records > (1 - {{ at_least }}) - - - ) - select * from faulty_columns - {% endset %} - with - validation_errors as ( - {%- set errors = dbt_utils.get_query_results_as_dict( - pivot_columns_query - ) -%} - {% if errors["column_name"] != () %} - {% for e in errors["column_name"] | unique %} - {{ - log( - "LOG: Coluna com preenchimento menor que " - ~ at_least * 100 - ~ "% ---> " - ~ e - ~ " [FAIL]", - info=True, - ) - }} - select '{{e}}' as column - {% if not loop.last %} - union all - {% endif %} - {% endfor %} - ) - select * - from validation_errors - {% else %}select 1 as column) select * from validation_errors where column != 1 - {% endif %} - -{% endtest %} diff --git a/tests/generic/not_null_proportion_multiple_columns.sql b/tests/generic/not_null_proportion_multiple_columns.sql index 80a6202a..6ba15fbc 100644 --- a/tests/generic/not_null_proportion_multiple_columns.sql +++ b/tests/generic/not_null_proportion_multiple_columns.sql @@ -1,4 +1,4 @@ -{% test not_null_proportion_multiple_columns(model, at_least=0.05) %} +{% test not_null_proportion_multiple_columns(model, ignore_values="", at_least=0.05) %} {%- set columns = adapter.get_columns_in_relation(model) -%} {% set suffix = "_nulls" %} @@ -28,8 +28,7 @@ * from pivot_columns where - quantity / total_records > (1 - {{ at_least }}) - + quantity / total_records > (1 - {{ at_least }}) and column_name not in ('{{ ignore_values | join("', '") }}') ) select * from faulty_columns @@ -41,16 +40,20 @@ ) -%} {% if errors["column_name"] != () %} {% for e in errors["column_name"] | unique %} + + {% set proc_err = ( + errors["quantity"][loop.index0] + / errors["total_records"][loop.index0] + ) * 100 %} + {{ log( - "LOG: Coluna com preenchimento menor que " - ~ at_least * 100 - ~ "% ---> " - ~ e - ~ " [FAIL]", + "Coluna: " ~ e ~ " - Preenchimento de: " ~ "%0.2f" + | format(proc_err | float) ~ "% - Resultado: FAIL", info=True, ) }} + select '{{e}}' as column {% if not loop.last %} union all