diff --git a/macros/custom_get_where_subquery.sql b/macros/custom_get_where_subquery.sql new file mode 100644 index 00000000..1dac0fd3 --- /dev/null +++ b/macros/custom_get_where_subquery.sql @@ -0,0 +1,47 @@ +-- This macro is used to get a subquery with a where clause that can be used in a test +-- to filter the data to be tested. The macro looks for a where clause in the model's +-- config (schema.yml) and replaces the placeholder "__most_recent_year_month__" with +-- the maximum +-- year and month found in the relation. The macro returns a subquery with the where +-- thats used +-- to filter the data to be tested +{% macro get_where_subquery(relation) -%} + {% set where = config.get("where", "") %} + + {% if where %} + {% if "__most_recent_year_month__" in where %} + {# Construct a query to find the maximum date using ano and mes columns #} + {% set max_date_query = ( + "select format_date('%Y-%m', max(date(cast(ano as int64), cast(mes as int64), 1))) as max_date from " + ~ relation + ) %} + {% set max_date_result = run_query(max_date_query) %} + + {% if execute %} + {# % do log(max_date_query, info=True) %#} + {# % do log(max_date_result, info=True) %#} + {# Extract the maximum year and month from the max_date #} + {% set max_date = max_date_result.rows[0][0] %} + {% set max_year = max_date[:4] %} + {% set max_month = max_date[5:7] %} + + {# Replace placeholder in the where config with actual maximum year and month #} + {% set where = where | replace( + "__most_recent_year_month__", + "ano = " ~ max_year ~ " and mes = " ~ max_month, + ) %} + {% do log( + "----- The test will be performed for: " ~ where, info=True + ) %} + + {% endif %} + {% endif %} + + {%- set filtered -%} + (select * from {{ relation }} where {{ where }}) dbt_subquery + {%- endset -%} + + {% do return(filtered) %} + {% else %} {% do return(relation) %} + {% endif %} +{%- endmacro %} diff --git a/models/br_bcb_estban/schema.yml b/models/br_bcb_estban/schema.yml index b829f966..63f5c3d4 100644 --- a/models/br_bcb_estban/schema.yml +++ b/models/br_bcb_estban/schema.yml @@ -14,8 +14,8 @@ models: - id_municipio - cnpj_basico - id_verbete - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ columns: - name: ano description: Ano @@ -23,19 +23,36 @@ models: description: Mês - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - dbt_utils.not_null_proportion: + at_least: 0.01 + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município - IBGE 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.01 + config: + where: __most_recent_year_month__ - name: cnpj_basico description: Cadastro Nacional de Pessoa Jurídica (CNPJ) básico (8 primeiros dígitos) tests: + - dbt_utils.not_null_proportion: + at_least: 0.01 + config: + where: __most_recent_year_month__ - relationships: to: ref('br_bd_diretorios_brasil__empresa') field: cnpj_basico + config: + where: __most_recent_year_month__ - name: instituicao description: Nome da Instituição Financeira (IF) - name: agencias_esperadas @@ -44,6 +61,11 @@ models: description: Quantidade de agências processadas da IF no município - name: id_verbete description: Código do verbete + tests: + - dbt_utils.not_null_proportion: + at_least: 0.01 + config: + where: __most_recent_year_month__ - name: valor description: Valores - name: br_bcb_estban__agencia @@ -59,8 +81,8 @@ models: - id_municipio - cnpj_agencia - id_verbete - - not_null_proportion_multiple_columns: - at_least: 0.05 + config: + where: __most_recent_year_month__ columns: - name: ano description: Ano @@ -68,12 +90,23 @@ models: description: Mês - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - dbt_utils.not_null_proportion: + at_least: 0.01 + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município - IBGE 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ + - dbt_utils.not_null_proportion: + at_least: 0.01 + config: + where: __most_recent_year_month__ - name: cnpj_basico description: Cadastro Nacional de Pessoa Jurídica (CNPJ) básico (8 primeiros dígitos) @@ -82,10 +115,21 @@ models: - name: cnpj_agencia description: CNPJ da agência bancária tests: + - dbt_utils.not_null_proportion: + at_least: 0.01 + config: + where: __most_recent_year_month__ - relationships: to: ref('br_bd_diretorios_brasil__empresa') field: cnpj + config: + where: __most_recent_year_month__ - name: id_verbete description: Código do verbete + tests: + - dbt_utils.not_null_proportion: + at_least: 0.01 + config: + where: __most_recent_year_month__ - name: valor description: Valores diff --git a/models/br_ibge_pam/schema.yml b/models/br_ibge_pam/schema.yml index 5937dc0f..fbda6b72 100644 --- a/models/br_ibge_pam/schema.yml +++ b/models/br_ibge_pam/schema.yml @@ -6,11 +6,7 @@ models: e valor da produção das lavouras temporárias tests: - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - ano - - sigla_uf - - id_municipio - - produto + combination_of_columns: [ano, sigla_uf, id_municipio, produto] - not_null_proportion_multiple_columns: at_least: 0.05 columns: @@ -49,11 +45,7 @@ models: médio e valor da produção das lavouras permanentes tests: - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - ano - - sigla_uf - - id_municipio - - produto + combination_of_columns: [ano, sigla_uf, id_municipio, produto] - not_null_proportion_multiple_columns: at_least: 0.05 columns: diff --git a/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql b/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql index 006eff6d..2cde1aa8 100644 --- a/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql +++ b/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql @@ -31,6 +31,13 @@ with from `basedosdados.br_bd_diretorios_brasil.municipio` ) as mun on producao_ambulatorial.pa_ufmun = mun.id_municipio_6 + {% if is_incremental() %} + where + date(cast(ano as int64), cast(mes as int64), 1) not in ( + select distinct (date(cast(ano as int64), cast(mes as int64), 1)) + from {{ this }} + ) + {% endif %} ), sia as ( diff --git a/models/br_ms_sia/br_ms_sia__psicossocial.sql b/models/br_ms_sia/br_ms_sia__psicossocial.sql index 309bac71..920be430 100644 --- a/models/br_ms_sia/br_ms_sia__psicossocial.sql +++ b/models/br_ms_sia/br_ms_sia__psicossocial.sql @@ -2,7 +2,7 @@ config( alias="psicossocial", schema="br_ms_sia", - materialized="incremental", + materialized="table", partition_by={ "field": "ano", "data_type": "int64", @@ -33,7 +33,13 @@ with from `basedosdados.br_bd_diretorios_brasil.municipio` ) as mun_res on psicossocial.munpac = mun_res.id_municipio_6 - + {% if is_incremental() %} + where + date(cast(ano as int64), cast(mes as int64), 1) > ( + select max(date(cast(ano as int64), cast(mes as int64), 1)) + from {{ this }} + ) + {% endif %} ) select @@ -51,7 +57,7 @@ select -- safe_cast(tippre__ as string) tipo_prestador, -- safe_cast(mn_ind as string) tipo_mantenedor_estabelecimento, -- safe_cast(cnpjcpf as string) cnpj_estabelecimento_executante, - -- safe_cast(cnpjmnt as string) cnpj_mantenedora_estabalecimento, + -- safe_cast(cnpjmnt as string) cnpj_mantenedora_estabelecimento, -- safe_cast(nat_jur as string) natureza_juridica_estabelecimento, safe_cast(pa_proc_id as string) id_procedimento_ambulatorial, safe_cast(pa_srv as string) id_servico_especializado, @@ -99,7 +105,7 @@ select length(trim(cidpri)) = 3 and cidpri in ( select subcategoria - from `basedosdados-dev.br_bd_diretorios_brasil.cid_10` + from `basedosdados.br_bd_diretorios_brasil.cid_10` where length(subcategoria) = 3 ) then cidpri @@ -119,7 +125,7 @@ select length(trim(cidassoc)) = 3 and cidassoc in ( select subcategoria - from `basedosdados-dev.br_bd_diretorios_brasil.cid_10` + from `basedosdados.br_bd_diretorios_brasil.cid_10` where length(subcategoria) = 3 ) then cidassoc diff --git a/models/br_ms_sia/schema.yml b/models/br_ms_sia/schema.yml index 61b1f483..900ee73a 100644 --- a/models/br_ms_sia/schema.yml +++ b/models/br_ms_sia/schema.yml @@ -1,19 +1,6 @@ --- version: 2 models: - - name: br_ms_sia__dicionario - description: Dicionário - columns: - - name: id_tabela - description: ID Tabela - - name: nome_coluna - description: Nome da coluna - - name: chave - description: Chave - - name: cobertura_temporal - description: Cobertura temporal - - name: valor - description: Valor - name: br_ms_sia__producao_ambulatorial description: Esta tabela contém o registro de processos ambulatorias realizados em todo sistema de saúde nacional - público e privado. @@ -24,6 +11,8 @@ models: - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano + config: + where: __most_recent_year_month__ - name: mes description: Mês - name: sigla_uf @@ -32,20 +21,20 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__uf') field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município - IBGE 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES - name: natureza_juridica_estabelecimento description: Natureza jurídica do operador do estabelecimento - tests: - - relationships: - to: ref('br_bd_diretorios_brasil__natureza_juridica') - field: natureza_juridica.id_natureza_juridica - name: tipo_unidade description: Tipo de estabelecimento - name: tipo_prestador @@ -82,11 +71,13 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__cbo_2002') field: cbo_2002.cbo_2002 + config: + where: __most_recent_year_month__ - name: codigo_autorizacao_apac description: Código da Autorização de Procedimento Ambulatorial de Alta complexidade (APAC) e/ou custo ou número de autorização do Boletim de Produção Ambulatorial Individualizado (BPA-I), conforme o caso. No BPA-I não é obrigatório, portanto, - não é criticado + não é criticado. - name: codigo_ocorrencia description: Código de ocorrência - name: tipo_financiamento_producao @@ -99,6 +90,8 @@ models: - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano + config: + where: __most_recent_year_month__ - name: mes_processamento_procedimento description: Mês de processamento/movimento - name: ano_realizacao_procedimento @@ -107,6 +100,8 @@ models: - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano + config: + where: __most_recent_year_month__ - name: mes_realizacao_procedimento description: Mês da realização do procedimento/competência - name: cid_principal_categoria @@ -118,6 +113,8 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__cid_10') field: categoria + config: + where: __most_recent_year_month__ - name: cid_principal_subcategoria description: Identificador da subcategoria da Classificação Internacional de Doenças (CID10) principal da Autorização de Procedimento Ambulatorial @@ -127,6 +124,8 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__cid_10') field: subcategoria + config: + where: __most_recent_year_month__ - name: cid_secundario_categoria description: Identificador da categoria da Classificação Internacional de Doenças (CID10) secundário da Autorização de Procedimento Ambulatorial de @@ -135,6 +134,8 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__cid_10') field: categoria + config: + where: __most_recent_year_month__ - name: cid_secundario_subcategoria description: Identificador da subcategoria da Classificação Internacional de Doenças (CID10) secundário da Autorização de Procedimento Ambulatorial @@ -143,6 +144,8 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__cid_10') field: subcategoria + config: + where: __most_recent_year_month__ - name: cid_causas_associadas_categoria description: Identificador da categoria da Classificação Internacional de Doenças (CID10) causas associadas a Autorização de Procedimento Ambulatorial @@ -151,6 +154,8 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__cid_10') field: categoria + config: + where: __most_recent_year_month__ - name: cid_causas_associadas_subcategoria description: Identificador da subcategoria da Classificação Internacional de Doenças (CID10) causas associadas a Autorização de Procedimento Ambulatorial @@ -159,6 +164,8 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__cid_10') field: subcategoria + config: + where: __most_recent_year_month__ - name: carater_atendimento description: Caráter de atendimento (APAC ou BPA-I) - name: id_paciente_proto @@ -241,6 +248,19 @@ models: description: Tipo de erro de Quantidade Produzida - name: flag_erro_corpo_apac description: FLAG de erro de corpo da APAC + - name: br_ms_sia__dicionario + description: Dicionário + columns: + - name: id_tabela + description: ID Tabela + - name: nome_coluna + description: Nome da coluna + - name: chave + description: Chave + - name: cobertura_temporal + description: Cobertura temporal + - name: valor + description: Valor - name: br_ms_sia__psicossocial description: Esta tabela contém o registro de processos ambulatorias de atendimento psicossial no sistema público de saúde nacional. @@ -251,24 +271,32 @@ models: - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano + config: + where: __most_recent_year_month__ - name: mes description: Mês tests: - relationships: to: ref('br_bd_diretorios_data_tempo__mes') field: mes.mes + config: + where: __most_recent_year_month__ - name: sigla_uf description: Sigla da Unidade da Federação tests: - relationships: to: ref('br_bd_diretorios_brasil__uf') field: sigla + config: + where: __most_recent_year_month__ - name: id_municipio description: ID Município - IBGE 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ - name: id_estabelecimento_cnes description: ID Estabelecimento - CNES - name: id_estabelecimento_cnes_familia @@ -305,12 +333,16 @@ models: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data + config: + where: __most_recent_year_month__ - name: data_termino_atendimento description: Data de Fim do Atendimento tests: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data + config: + where: __most_recent_year_month__ - name: permanencia_atendimento description: Permanência em Atendimento - name: motivo_saida_permanencia @@ -321,42 +353,56 @@ models: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data + config: + where: __most_recent_year_month__ - name: ano_processamento description: Ano do processamento tests: - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano + config: + where: __most_recent_year_month__ - name: mes_processamento description: Mês do processamento tests: - relationships: to: ref('br_bd_diretorios_data_tempo__mes') field: mes.mes + config: + where: __most_recent_year_month__ - name: ano_atendimento description: Ano do atendimento tests: - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano + config: + where: __most_recent_year_month__ - name: mes_atendimento description: Mês do atendimento tests: - relationships: to: ref('br_bd_diretorios_data_tempo__mes') field: mes.mes + config: + where: __most_recent_year_month__ - name: data_nascimento_paciente description: Data de nascimento do paciente tests: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data + config: + where: __most_recent_year_month__ - name: id_municipio_residencia_paciente description: ID Município - IBGE 7 Dígitos tests: - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio + config: + where: __most_recent_year_month__ - name: origem_paciente description: Origem do paciente - name: nacionalidade_paciente @@ -383,6 +429,8 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__cid_10') field: categoria + config: + where: __most_recent_year_month__ - name: cid_principal_subcategoria description: Identificador da subcategoria da Classificação Internacional de Doenças (CID10) principal da Autorização de Procedimento Ambulatorial @@ -392,6 +440,8 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__cid_10') field: subcategoria + config: + where: __most_recent_year_month__ - name: cid_causas_associadas_categoria description: Identificador da categoria da Classificação Internacional de Doenças (CID10) causas associadas a Autorização de Procedimento Ambulatorial @@ -400,6 +450,8 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__cid_10') field: categoria + config: + where: __most_recent_year_month__ - name: cid_causas_associadas_subcategoria description: Identificador da subcategoria da Classificação Internacional de Doenças (CID10) causas associadas a Autorização de Procedimento Ambulatorial @@ -408,6 +460,8 @@ models: - relationships: to: ref('br_bd_diretorios_brasil__cid_10') field: subcategoria + config: + where: __most_recent_year_month__ - name: tipo_droga description: Tipo de Droga - name: destino_paciente diff --git a/models/mundo_transfermarkt_competicoes/schema.yml b/models/mundo_transfermarkt_competicoes/schema.yml index 8c8c9ba9..e327850a 100644 --- a/models/mundo_transfermarkt_competicoes/schema.yml +++ b/models/mundo_transfermarkt_competicoes/schema.yml @@ -18,14 +18,13 @@ models: \ https://www.transfermarkt.com/campeonato-brasileiro-serie-a/startseite/wettbewerb/BRA1" tests: - not_null_proportion_multiple_columns: - at_least: 0.20 + at_least: 0.20 columns: - name: ano_campeonato - description: Ano do campeonato + description: Ano do campeonato - name: data description: Data da partida - tests: - - not_null + tests: [not_null] - name: rodada description: Rodada - name: estadio @@ -38,12 +37,10 @@ models: description: Público máximo - name: time_mandante description: Time mandante - tests: - - not_null + tests: [not_null] - name: time_visitante description: Time visitante - tests: - - not_null + tests: [not_null] - name: tecnico_mandante description: Técnico do time mandante - name: tecnico_visitante @@ -56,12 +53,12 @@ models: description: Valor da equipe titular do time mandante tests: - dbt_utils.expression_is_true: - expression: '>= 1' + expression: '>= 1' - name: valor_equipe_titular_visitante description: Valor da equipe titular do time visitante tests: - dbt_utils.expression_is_true: - expression: '>= 1' + expression: '>= 1' - name: idade_media_titular_mandante description: Idade média da equipe titular do time mandante tests: @@ -73,19 +70,19 @@ models: tests: - dbt_utils.accepted_range: min_value: 0 - max_value: 80 + max_value: 80 - name: gols_mandante description: Gols do time mandante tests: - dbt_utils.accepted_range: min_value: 0 - max_value: 20 + max_value: 20 - name: gols_visitante description: Gols do time visitante tests: - dbt_utils.accepted_range: min_value: 0 - max_value: 20 + max_value: 20 - name: gols_1_tempo_mandante description: Gols no primeiro tempo do time mandante - name: gols_1_tempo_visitante @@ -127,14 +124,13 @@ models: variável da fonte de dados. tests: - not_null_proportion_multiple_columns: - at_least: 0.10 + at_least: 0.10 columns: - name: ano_campeonato - description: Ano do campeonato + description: Ano do campeonato - name: data description: Data da partida - tests: - - not_null + tests: [not_null] - name: horario description: Horário da partida - name: fase @@ -151,12 +147,10 @@ models: description: Público máximo - name: time_mandante description: Time mandante - tests: - - not_null + tests: [not_null] - name: time_visitante description: Time visitante - tests: - - not_null + tests: [not_null] - name: tecnico_mandante description: Técnico do time mandante - name: tecnico_visitante @@ -165,36 +159,36 @@ models: description: Valor da equipe titular do time mandante tests: - dbt_utils.expression_is_true: - expression: '>= 1' + expression: '>= 1' - name: valor_equipe_titular_visitante description: Valor da equipe titular do time visitante tests: - dbt_utils.expression_is_true: - expression: '>= 1' + expression: '>= 1' - name: idade_media_titular_mandante description: Idade média da equipe titular do time mandante tests: - dbt_utils.accepted_range: min_value: 0 - max_value: 80 + max_value: 80 - name: idade_media_titular_visitante description: Idade média da equipe titular do time visitante tests: - dbt_utils.accepted_range: min_value: 0 - max_value: 80 + max_value: 80 - name: gols_mandante description: Gols do time mandante tests: - dbt_utils.accepted_range: min_value: 0 - max_value: 20 + max_value: 20 - name: gols_visitante description: Gols do time visitante tests: - dbt_utils.accepted_range: min_value: 0 - max_value: 20 + max_value: 20 - name: gols_1_tempo_mandante description: Gols no primeiro tempo do time mandante - name: gols_1_tempo_visitante diff --git a/models/mundo_transfermarkt_competicoes_internacionais/schema.yml b/models/mundo_transfermarkt_competicoes_internacionais/schema.yml index 08bde5be..3ae8b547 100644 --- a/models/mundo_transfermarkt_competicoes_internacionais/schema.yml +++ b/models/mundo_transfermarkt_competicoes_internacionais/schema.yml @@ -13,7 +13,7 @@ models: variável da fonte de dados e as diferentes edições do torneio. tests: - not_null_proportion_multiple_columns: - at_least: 0.20 + at_least: 0.20 columns: - name: temporada description: Anos da temporada do campeonato @@ -40,12 +40,10 @@ models: description: Público máximo - name: time_mandante description: Time mandante - tests: - - not_null + tests: [not_null] - name: time_visitante description: Time visitante - tests: - - not_null + tests: [not_null] - name: tecnico_mandante description: Técnico do time mandante - name: tecnico_visitante @@ -55,13 +53,13 @@ models: tests: - dbt_utils.accepted_range: min_value: 0 - max_value: 110 + max_value: 110 - name: idade_tecnico_visitante description: Idade do técnico visitante tests: - dbt_utils.accepted_range: min_value: 0 - max_value: 110 + max_value: 110 - name: data_final_tecnico_mandante description: Data final do contrato técnico mandante - name: data_final_tecnico_visitante @@ -74,12 +72,12 @@ models: description: Valor de mercado total mandante tests: - dbt_utils.expression_is_true: - expression: '>= 1' + expression: '>= 1' - name: valor_equipe_titular_visitante description: Valor de mercado total visitante tests: - dbt_utils.expression_is_true: - expression: '>= 1' + expression: '>= 1' - name: valor_medio_equipe_titular_mandante description: Valor de compra do time mandante - name: valor_medio_equipe_titular_visitante @@ -109,13 +107,13 @@ models: tests: - dbt_utils.accepted_range: min_value: 0 - max_value: 20 + max_value: 20 - name: gols_visitante description: Gols do time visitante tests: - dbt_utils.accepted_range: min_value: 0 - max_value: 20 + max_value: 20 - name: prorrogacao description: Indicador se o jogo foi vencido na prorrogação - name: penalti