From 65f880e2ce4c541c6e92882ac50acfcd489f6151 Mon Sep 17 00:00:00 2001 From: folhesgabriel Date: Thu, 14 Mar 2024 14:34:43 -0300 Subject: [PATCH 01/18] feat: add dbt model and schema --- dbt_project.yml | 3 + models/br_ms_sia/br_ms_sia__dicionario.sql | 50 ++++ .../br_ms_sia__producao_ambulatorial.sql | 186 +++++++++++++ models/br_ms_sia/schema.yml | 254 ++++++++++++++++++ 4 files changed, 493 insertions(+) create mode 100644 models/br_ms_sia/br_ms_sia__dicionario.sql create mode 100644 models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql create mode 100644 models/br_ms_sia/schema.yml diff --git a/dbt_project.yml b/dbt_project.yml index e335af03..e999acd5 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -234,6 +234,9 @@ models: br_ms_cnes: +materialized: table +schema: br_ms_cnes + br_ms_sia: + +materialized: table + +schema: br_ms_sia br_ms_sim: +materialized: table +schema: br_ms_sim diff --git a/models/br_ms_sia/br_ms_sia__dicionario.sql b/models/br_ms_sia/br_ms_sia__dicionario.sql new file mode 100644 index 00000000..19056efd --- /dev/null +++ b/models/br_ms_sia/br_ms_sia__dicionario.sql @@ -0,0 +1,50 @@ +{{ + config( + alias="dicionario", + schema="br_ms_sia", + materialized="table", + ) +}} + + +with + dict as ( + select + id_tabela, + coluna, + cobertura_temporal, + valor, + case + when id_tabela = 'producao_ambulatorial' and coluna = 'tipo_unidade' + then lpad(chave, 2, '0') + when + id_tabela = 'producao_ambulatorial' + and coluna = 'tipo_financiamento_producao' + then lpad(chave, 2, '0') + when + id_tabela = 'producao_ambulatorial' + and coluna = 'carater_atendimento' + then lpad(chave, 2, '0') + when + id_tabela = 'producao_ambulatorial' and coluna = 'raca_cor_paciente' + then lpad(chave, 2, '0') + when + id_tabela = 'producao_ambulatorial' + and coluna = 'motivo_saida_paciente' + then lpad(chave, 2, '0') + when + id_tabela = 'producao_ambulatorial' + and coluna = 'subtipo_financiamento_producao' + then lpad(chave, 6, '0') + else chave + end as chave2 + from basedosdados - staging.br_ms_sia_staging.dicionario + ) + +select + safe_cast(id_tabela as string) id_tabela, + safe_cast(coluna as string) nome_coluna, + safe_cast(chave2 as string) chave, + safe_cast(replace(cobertura_temporal, '-1', '(1)') as string) cobertura_temporal, + safe_cast(valor as string) valor +from dict diff --git a/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql b/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql new file mode 100644 index 00000000..b66261f2 --- /dev/null +++ b/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql @@ -0,0 +1,186 @@ +{{ + config( + alias="producao_ambulatorial", + schema="br_ms_sia", + materialized="incremental", + partition_by={ + "field": "ano", + "data_type": "int64", + "range": {"start": 2005, "end": 2024, "interval": 1}, + }, + cluster_by=["mes", "sigla_uf"], + ) +}} + +with + sia_add_municipios as ( + -- Adicionar id_municipio de 7 dígitos + select * + from + `basedosdados-staging.br_ms_sia_staging.producao_ambulatorial` + as producao_ambulatorial + left join + ( + select id_municipio, id_municipio_6, + from `basedosdados.br_bd_diretorios_brasil.municipio` + ) as mun + on producao_ambulatorial.pa_ufmun = mun.id_municipio_6 + ) + +select + safe_cast(ano as int64) ano, + safe_cast(mes as int64) mes, + safe_cast(sigla_uf as string) sigla_uf, + safe_cast(id_municipio as string) id_municipio, + safe_cast(pa_coduni as string) id_estabelecimento_cnes, + -- seguintes colunas foram omitidas pois podem ser obtidas ao cruzar o + -- id_estabelecimento_cnes + -- com a tabela estabelecimento do conjunto br_ms_cnes + -- safe_cast(pa_nat_jur as string) natureza_juridica_estabelecimento, + -- safe_cast(pa_tpups as string) tipo_unidade, + -- safe_cast(pa_tippre as string) tipo_prestador, + -- safe_cast(pa_cnpjcpf as string) cnpj_estabelecimento_executante, + -- safe_cast( + -- regexp_replace(pa_cnpjmnt, '0{14}', '') as string + -- ) cnpj_mantenedora_estabalecimento, + -- safe_cast(regexp_replace(pa_cnpj_cc, '0{14}', '') as string) cnpj_orgao, + -- safe_cast(pa_mn_ind as string) tipo_mantenedor_estabelecimento, + safe_cast(pa_gestao as string) id_gestao, + safe_cast(pa_condic as string) tipo_gestao, + safe_cast(pa_regct as string) tipo_regra_contratual, + safe_cast(pa_ine as string) id_equipe, + safe_cast(pa_srv_c as string) id_servico_especializado, + safe_cast(pa_proc_id as string) id_processamento_ambulatorial, + safe_cast(regexp_replace(pa_cnsmed, '0{15}', '') as string) id_cns_executante, + safe_cast(replace(pa_cbocod, '', null) as string) id_cbo_2002, + safe_cast( + regexp_replace(pa_autoriz, '0{13}', '') as string + ) codigo_autorizacao_apac, + safe_cast(pa_codoco as string) codigo_ocorrencia, + safe_cast(pa_tpfin as string) tipo_financiamento_producao, + safe_cast(pa_subfin as string) subtipo_financiamento_producao, + -- - parse e criar ano mes data é yyyy-mm + safe_cast(substr(pa_mvm, 1, 4) as int64) as ano_processamento_procedimento, + safe_cast(substr(pa_mvm, 5, 2) as int64) as mes_processamento_procedimento, + safe_cast(substr(pa_cmp, 1, 4) as int64) as ano_realizacao_procedimento, + safe_cast(substr(pa_cmp, 5, 2) as int64) as mes_realizacao_procedimento, + safe_cast( + trim( + case when length(trim(pa_cidpri)) = 3 then pa_cidpri else null end + ) as string + ) as cid_principal_categoria, + safe_cast( + trim( + case + when length(trim(pa_cidpri)) = 4 and pa_cidpri != '0000' + then pa_cidpri + when + length(trim(pa_cidpri)) = 3 + and pa_cidpri in ( + select subcategoria + from `basedosdados-dev.br_bd_diretorios_brasil.cid_10` + where length(subcategoria) = 3 + ) + then pa_cidpri + else null + end + ) as string + ) as cid_principal_subcategoria, + safe_cast( + trim( + case when length(trim(pa_cidsec)) = 3 then pa_cidsec else null end + ) as string + ) as cid_secundario_categoria, + safe_cast( + trim( + case + when length(trim(pa_cidsec)) = 4 and pa_cidsec != '0000' + then pa_cidsec + when + length(trim(pa_cidsec)) = 3 + and pa_cidsec in ( + select subcategoria + from `basedosdados-dev.br_bd_diretorios_brasil.cid_10` + where length(subcategoria) = 3 + ) + then pa_cidsec + else null + end + ) as string + ) as cid_secundario_subcategoria, + safe_cast( + trim( + case when length(trim(pa_cidcas)) = 3 then pa_cidcas else null end + ) as string + ) as cid_causas_associadas_categoria, + safe_cast( + trim( + case + when length(trim(pa_cidcas)) = 4 and pa_cidcas != '0000' + then pa_cidcas + when + length(trim(pa_cidcas)) = 3 + and pa_cidcas in ( + select subcategoria + from `basedosdados-dev.br_bd_diretorios_brasil.cid_10` + where length(subcategoria) = 3 + ) + then pa_cidcas + else null + end + ) as string + ) as cid_causas_associadas_subcategoria, + safe_cast(pa_catend as string) carater_atendimento, + safe_cast(regexp_replace(pa_munpcn, '9{6}', '') as string) id_paciente_proto, + safe_cast(replace(pa_sexo, '0', '') as string) sexo_paciente, + safe_cast(regexp_replace(pa_idade, '9{3}', '') as int64) idade_paciente, + safe_cast(pa_racacor as string) raca_cor_paciente, + safe_cast(ltrim(pa_etnia, '0') as string) etnia_paciente, + safe_cast(idademin as int64) idade_minima_paciente, + safe_cast(idademax as int64) idade_maxima_paciente, + safe_cast(pa_flidade as string) compatibilidade_idade_procedimento, + safe_cast(pa_nivcpl as string) complexidade_procedimento, + safe_cast(pa_docorig as string) instrumento_registro, + safe_cast(pa_valapr as float64) valor_aprovado_procedimento, + safe_cast(pa_qtdapr as int64) quantidade_aprovada_procedimento, + safe_cast(pa_valpro as float64) valor_produzido_procedimento, + safe_cast(pa_qtdpro as int64) quantidade_produzida_procedimento, + safe_cast(nu_vpa_tot as float64) valor_unitario_procedimento_vpa, + safe_cast(nu_pa_tot as float64) valor_unitario_procedimento_sigtap, + safe_cast(pa_dif_val as float64) diferenca_valor_unitario, + safe_cast(pa_vl_cf as float64) valor_complemento_federal, + safe_cast(pa_vl_cl as float64) valor_complemento_local, + safe_cast(pa_vl_inc as float64) valor_incremento, + safe_cast(pa_motsai as string) motivo_saida_paciente, + -- - em uf e muicipio replace de + safe_cast( + regexp_replace(pa_ufdif, '9{1}', '') as int64 + ) indicador_uf_residencia_paciente, + safe_cast( + regexp_replace(pa_mndif, '9{1}', '') as int64 + ) indicador_municipio_residencia_paciente, + -- + safe_cast( + case + when pa_incout = '0000' then '0' else regexp_replace(pa_incout, '[^0]', '1') + end as int64 + ) as indicador_incrementos_outros, + safe_cast( + case + when pa_incurg = '0000' then '0' else regexp_replace(pa_incurg, '[^0]', '1') + end as int64 + ) as indicador_incrementos_urgencia, + safe_cast(pa_obito as int64) indicador_obito, + safe_cast(pa_encerr as int64) indicador_encerramento, + safe_cast(pa_perman as int64) indicador_permanencia, + safe_cast(pa_alta as int64) indicador_alta, + safe_cast(pa_transf as int64) indicador_transferencia, + safe_cast(pa_indica as string) tipo_situacao_produzida, + safe_cast(pa_flqt as string) tipo_erro_quantidade_produzida, + safe_cast(pa_fler as string) flag_erro_corpo_apac, +from sia_add_municipios +{% 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 %} diff --git a/models/br_ms_sia/schema.yml b/models/br_ms_sia/schema.yml new file mode 100644 index 00000000..668c3598 --- /dev/null +++ b/models/br_ms_sia/schema.yml @@ -0,0 +1,254 @@ +--- +version: 2 +models: + - 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. + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - ano + - mes + - id_estabelecimento_cnes + - instrumento_registro + - id_processamento_ambulatorial + - id_cbo_2002 + - not_null_proportion_multiple_columns: + at_least: 0.05 + columns: + - name: ano + description: Ano + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: mes + description: Mês + - name: sigla_uf + description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + - 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_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 + description: Tipo de Prestador + - name: cnpj_estabelecimento_executante + description: CNPJ do Estabelecimento executante + - name: cnpj_mantenedora_estabalecimento + description: CNPJ da Mantenedora do Estabelecimento + - name: cnpj_orgao + description: CNPJ do órgão que recebeu pela produção por cessão de crédito + - name: tipo_mantenedor_estabelecimento + description: Tipo de manutenção do estabelecimento + - name: id_gestao + description: ID do tipo de gestão do estabelecimento + - name: tipo_gestao + description: Tipo de gestão do estabelecimento + - name: tipo_regra_contratual + description: Código do tipo da regra contratual do estabalecimento + - name: id_equipe + description: Código de Identificação Nacional de Equipes10, para registrar + a atuação das equipes na execução de ações de saúde + - name: id_servico_especializado + description: Código do Serviço Especializado / Classificação CBO (de acordo + com o CNES) + - name: id_processamento_ambulatorial + description: Código de Procedimento Ambulatorial + - name: id_cns_executante + description: Identificador Cartão Nacional de Saúde (CNS) do profissional + de saúde executante + - name: id_cbo_2002 + description: Identificador da classificação de Ocupação Brasileira do Profissional + (OCB) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cbo_2002') + field: cbo_2002.cbo_2002 + - 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 + - name: codigo_ocorrencia + description: Código de ocorrência + - name: tipo_financiamento_producao + description: Tipo de Financiamento da produção + - name: subtipo_financiamento_producao + description: Subtipo de Financiamento da produção + - name: ano_processamento_procedimento + description: Ano de processamento/movimento + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: mes_processamento_procedimento + description: Mês de processamento/movimento + - name: ano_realizacao_procedimento + description: Ano da realização do procedimento/competência + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: mes_realizacao_procedimento + description: Mês da realização do procedimento/competência + - name: cid_principal_categoria + description: Identificador da categoria da Classificação Internacional de + Doenças (CID10) principal da Autorização de Procedimento Ambulatorial de + Alta complexidade (APAC) ou do Boletim de Produção Ambulatorial Individualizado + (BPA-I) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: categoria + - name: cid_principal_subcategoria + description: Identificador da subcategoria da Classificação Internacional + de Doenças (CID10) principal da Autorização de Procedimento Ambulatorial + de Alta complexidade (APAC) ou do Boletim de Produção Ambulatorial Individualizado + (BPA-I) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: subcategoria + - 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 + Alta complexidade (APAC) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: categoria + - name: cid_secundario_subcategoria + description: Identificador da subcategoria da Classificação Internacional + de Doenças (CID10) secundário da Autorização de Procedimento Ambulatorial + de Alta complexidade (APAC) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: subcategoria + - 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 + de Alta complexidade (APAC) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: categoria + - 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 + de Alta complexidade (APAC) + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__cid_10') + field: subcategoria + - name: carater_atendimento + description: Caráter de atendimento (APAC ou BPA-I) + - name: id_paciente_proto + description: Em casos como procedimento BPA em que não se tem identificação + do paciente a variável é uma concatenação da Unidade da Federação, do município + de residência do paciente ou do estabelecimento de saúde + - name: sexo_paciente + description: Sexo do paciente + - name: idade_paciente + description: Idade do paciente + - name: raca_cor_paciente + description: Raça/cor do paciente + - name: etnia_paciente + description: Etnia do paciente + - name: idade_minima_paciente + description: Idade mínima do paciente para realização do procedimento + - name: idade_maxima_paciente + description: Idade máxima do paciente para realização do procedimento + - name: compatibilidade_idade_procedimento + description: Compatibilidade entre a idade do paciênte e faixa de idade necessária + para realização do procedimento. As definições tem origem no SIGTAP - Sistema + de Gerenciamento da Tabela de Procedimentos, Medicamentos e OPM do SUS. + - name: complexidade_procedimento + description: Complexidade do Procedimento + - name: instrumento_registro + description: Tipo de Instrumento de registro + - name: valor_aprovado_procedimento + description: Valor aprovado do procedimento + - name: quantidade_aprovada_procedimento + description: Quantidade aprovada do procedimento + - name: valor_produzido_procedimento + description: Valor produzido (apresentado) do procedimento + - name: quantidade_produzida_procedimento + description: Quantidade produzida (apresentada) do procedimento + - name: valor_unitario_procedimento_vpa + description: Valor Unitário do Procedimento da Tabela VPA + - name: valor_unitario_procedimento_sigtap + description: Valor unitário do procedimento na tabela SIGTAP - Sistema de + Gerenciamento da Tabela de Procedimentos, Medicamentos e OPM do SUS. + - name: diferenca_valor_unitario + description: Diferença do Valor Unitário do procedimento praticado na Tabela + Unificada com Valor Unitário praticado pelo Gestor da Produção multiplicado + pela Quantidade Aprovada + - name: valor_complemento_federal + description: Valor do complemento federal + - name: valor_complemento_local + description: Valor do complemento local + - name: valor_incremento + description: Valor do Incremento + - name: motivo_saida_paciente + description: Motivo de saída do paciente + - name: indicador_uf_residencia_paciente + description: Indica se a UF de residência do paciente é diferente da UF de + localização do estabelecimento + - name: indicador_municipio_residencia_paciente + description: Indica se o município de residência do paciente é diferente do + município de localização do estabelecimento + - name: indicador_incrementos_outros + description: Indica a ocorrência de outros incrementos + - name: indicador_incrementos_urgencia + description: Indica a ocorrência de incrementos de urgência + - name: indicador_obito + description: Indicador de óbito relativo ao Procedimento Ambulatorial de Alta + complexidade e/ou custo (APAC) + - name: indicador_encerramento + description: Indicador de encerramento relativo ao Procedimento Ambulatorial + de Alta complexidade e/ou custo (APAC) + - name: indicador_permanencia + description: Indicador de permanência relativo ao Procedimento Ambulatorial + de Alta complexidade e/ou custo (APAC) + - name: indicador_alta + description: Indicador de alta relativo ao Procedimento Ambulatorial de Alta + complexidade e/ou custo (APAC) + - name: indicador_transferencia + description: Indicador de transferência relativo ao Procedimento Ambulatorial + de Alta complexidade e/ou custo (APAC) + - name: tipo_situacao_produzida + description: Indicativo de situação da produção produzida + - name: tipo_erro_quantidade_produzida + 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 From a36e5eacfcbe12ccdb159ced5a7b6959176ecf35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20Gusm=C3=A3o?= Date: Thu, 14 Mar 2024 16:29:00 -0300 Subject: [PATCH 02/18] fix: fix idade column --- .../br_ibge_censo_2022__populacao_residente_municipio.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql index f9d473a7..ef3abafe 100644 --- a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql +++ b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql @@ -21,3 +21,4 @@ from ibge left join `basedosdados-dev.br_ibge_censo_2022_staging.auxiliary_table` t2 on ibge.municipio = t2.municipio +where (idade like '% a %' or idade like '100 anos ou mais') From 9a506da5716959cd84de429515e475d26df46763 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20Gusm=C3=A3o?= Date: Thu, 14 Mar 2024 16:59:31 -0300 Subject: [PATCH 03/18] fix: add complete refact & add grupo_idade column --- ...so_2022__populacao_residente_municipio.sql | 62 ++++++++++++++++++- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql index ef3abafe..6d63a4e3 100644 --- a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql +++ b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql @@ -12,13 +12,71 @@ with safe_cast(forma_de_declaracao_da_idade as string) forma_declaracao_idade, safe_cast(sexo as string) sexo, safe_cast(idade as string) idade, + case + when idade = 'Menos de 1 mês' + then 0 + when idade = 'Menos de 1 ano' + then 0 + when regexp_contains(idade, r'[0-9]+ mês') + then 0 + when regexp_contains(idade, r'[0-9]+ meses') + then 0 + when regexp_contains(idade, r'[0-9]+ anos') + then cast(regexp_extract(idade, r'([0-9]+) anos') as int64) + when regexp_contains(idade, r'[0-9]+ ano') + then cast(regexp_extract(idade, r'([0-9]+) ano') as int64) + end as idade_num, safe_cast(populacao_residente_pessoas_ as int64) populacao_residente, from `basedosdados-staging.br_ibge_censo_2022_staging.populacao_residente_municipio` t ) -select t2.cod as id_municipio, ibge.* except (municipio, nome_municipio, sigla_uf) +select + t2.cod as id_municipio, + ibge.* except (municipio, nome_municipio, sigla_uf, idade_num), + case + when idade_num between 0 and 4 + then '0 a 4 anos' + when idade_num between 5 and 9 + then '5 a 9 anos' + when idade_num between 10 and 14 + then '10 a 14 anos' + when idade_num between 15 and 19 + then '15 a 19 anos' + when idade_num between 20 and 24 + then '20 a 24 anos' + when idade_num between 25 and 29 + then '25 a 29 anos' + when idade_num between 30 and 34 + then '30 a 34 anos' + when idade_num between 35 and 39 + then '35 a 39 anos' + when idade_num between 40 and 44 + then '40 a 44 anos' + when idade_num between 45 and 49 + then '45 a 49 anos' + when idade_num between 50 and 54 + then '50 a 54 anos' + when idade_num between 55 and 59 + then '55 a 59 anos' + when idade_num between 60 and 64 + then '60 a 64 anos' + when idade_num between 65 and 69 + then '65 a 69 anos' + when idade_num between 70 and 74 + then '70 a 74 anos' + when idade_num between 75 and 79 + then '75 a 79 anos' + when idade_num between 80 and 84 + then '80 a 84 anos' + when idade_num between 85 and 89 + then '85 a 89 anos' + when idade_num between 90 and 94 + then '90 a 94 anos' + when idade_num between 95 and 99 + then '95 a 99 anos' + else '100 anos ou mais' + end as grupo_idade from ibge left join `basedosdados-dev.br_ibge_censo_2022_staging.auxiliary_table` t2 on ibge.municipio = t2.municipio -where (idade like '% a %' or idade like '100 anos ou mais') From f17be400247e2c1366c2b0c92df80ff1c42bc8f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20Gusm=C3=A3o?= Date: Thu, 14 Mar 2024 17:03:15 -0300 Subject: [PATCH 04/18] fix: rm age group observations from idade column --- .../br_ibge_censo_2022__populacao_residente_municipio.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql index 6d63a4e3..107c8f0c 100644 --- a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql +++ b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql @@ -80,3 +80,4 @@ from ibge left join `basedosdados-dev.br_ibge_censo_2022_staging.auxiliary_table` t2 on ibge.municipio = t2.municipio +where not (idade like '% a %' or idade like '100 anos ou mais') From 383ad0e56d543f1a9856d69284b0e4cb7342d00a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20Gusm=C3=A3o?= Date: Tue, 19 Mar 2024 10:31:47 -0300 Subject: [PATCH 05/18] fix: make requested changes --- .../br_ibge_censo_2022__populacao_residente_municipio.sql | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql index 107c8f0c..c9bb15de 100644 --- a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql +++ b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql @@ -15,12 +15,10 @@ with case when idade = 'Menos de 1 mês' then 0 - when idade = 'Menos de 1 ano' - then 0 when regexp_contains(idade, r'[0-9]+ mês') - then 0 + then safe_cast(regexp_extract(idade, r'[0-9]+ mês') as int64) / 12 when regexp_contains(idade, r'[0-9]+ meses') - then 0 + then safe_cast(regexp_extract(idade, r'([0-9])+ meses') as int64) / 12 when regexp_contains(idade, r'[0-9]+ anos') then cast(regexp_extract(idade, r'([0-9]+) anos') as int64) when regexp_contains(idade, r'[0-9]+ ano') @@ -33,6 +31,7 @@ with select t2.cod as id_municipio, ibge.* except (municipio, nome_municipio, sigla_uf, idade_num), + idade_num as idade_anos, case when idade_num between 0 and 4 then '0 a 4 anos' From 9fa3c2819a1132e982b22149511cb6f88257edb6 Mon Sep 17 00:00:00 2001 From: folhesgabriel Date: Wed, 20 Mar 2024 15:24:37 -0300 Subject: [PATCH 06/18] fix: fix dictionario and producao_ambulatorial left zeros --- models/br_ms_sia/br_ms_sia__dicionario.sql | 40 ++--------------- .../br_ms_sia__producao_ambulatorial.sql | 43 +++++++++++++------ 2 files changed, 33 insertions(+), 50 deletions(-) diff --git a/models/br_ms_sia/br_ms_sia__dicionario.sql b/models/br_ms_sia/br_ms_sia__dicionario.sql index 19056efd..4e238467 100644 --- a/models/br_ms_sia/br_ms_sia__dicionario.sql +++ b/models/br_ms_sia/br_ms_sia__dicionario.sql @@ -7,44 +7,10 @@ }} -with - dict as ( - select - id_tabela, - coluna, - cobertura_temporal, - valor, - case - when id_tabela = 'producao_ambulatorial' and coluna = 'tipo_unidade' - then lpad(chave, 2, '0') - when - id_tabela = 'producao_ambulatorial' - and coluna = 'tipo_financiamento_producao' - then lpad(chave, 2, '0') - when - id_tabela = 'producao_ambulatorial' - and coluna = 'carater_atendimento' - then lpad(chave, 2, '0') - when - id_tabela = 'producao_ambulatorial' and coluna = 'raca_cor_paciente' - then lpad(chave, 2, '0') - when - id_tabela = 'producao_ambulatorial' - and coluna = 'motivo_saida_paciente' - then lpad(chave, 2, '0') - when - id_tabela = 'producao_ambulatorial' - and coluna = 'subtipo_financiamento_producao' - then lpad(chave, 6, '0') - else chave - end as chave2 - from basedosdados - staging.br_ms_sia_staging.dicionario - ) - select safe_cast(id_tabela as string) id_tabela, - safe_cast(coluna as string) nome_coluna, - safe_cast(chave2 as string) chave, + safe_cast(nome_coluna as string) nome_coluna, + safe_cast(chave as string) chave, safe_cast(replace(cobertura_temporal, '-1', '(1)') as string) cobertura_temporal, safe_cast(valor as string) valor -from dict +from `basedosdados-staging.br_ms_sia_staging.dicionario` 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 b66261f2..af66a9b4 100644 --- a/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql +++ b/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql @@ -19,6 +19,7 @@ with from `basedosdados-staging.br_ms_sia_staging.producao_ambulatorial` as producao_ambulatorial + left join ( select id_municipio, id_municipio_6, @@ -45,8 +46,8 @@ select -- ) cnpj_mantenedora_estabalecimento, -- safe_cast(regexp_replace(pa_cnpj_cc, '0{14}', '') as string) cnpj_orgao, -- safe_cast(pa_mn_ind as string) tipo_mantenedor_estabelecimento, - safe_cast(pa_gestao as string) id_gestao, - safe_cast(pa_condic as string) tipo_gestao, + -- safe_cast(pa_gestao as string) id_gestao, + -- safe_cast(pa_condic as string) tipo_gestao, safe_cast(pa_regct as string) tipo_regra_contratual, safe_cast(pa_ine as string) id_equipe, safe_cast(pa_srv_c as string) id_servico_especializado, @@ -57,8 +58,12 @@ select regexp_replace(pa_autoriz, '0{13}', '') as string ) codigo_autorizacao_apac, safe_cast(pa_codoco as string) codigo_ocorrencia, - safe_cast(pa_tpfin as string) tipo_financiamento_producao, - safe_cast(pa_subfin as string) subtipo_financiamento_producao, + case + when pa_tpfin = '00' then '0' else cast(ltrim(pa_tpfin, '0') as string) + end as tipo_financiamento_producao, + case + when pa_subfin = '0000' then '0' else cast(ltrim(pa_subfin, '0') as string) + end as subtipo_financiamento_producao, -- - parse e criar ano mes data é yyyy-mm safe_cast(substr(pa_mvm, 1, 4) as int64) as ano_processamento_procedimento, safe_cast(substr(pa_mvm, 5, 2) as int64) as mes_processamento_procedimento, @@ -78,7 +83,7 @@ select length(trim(pa_cidpri)) = 3 and pa_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 pa_cidpri @@ -100,7 +105,7 @@ select length(trim(pa_cidsec)) = 3 and pa_cidsec 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 pa_cidsec @@ -122,7 +127,7 @@ select length(trim(pa_cidcas)) = 3 and pa_cidcas 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 pa_cidcas @@ -130,17 +135,27 @@ select end ) as string ) as cid_causas_associadas_subcategoria, - safe_cast(pa_catend as string) carater_atendimento, + case + when pa_catend = '00' then '0' else cast(ltrim(pa_catend, '0') as string) + end as carater_atendimento, safe_cast(regexp_replace(pa_munpcn, '9{6}', '') as string) id_paciente_proto, safe_cast(replace(pa_sexo, '0', '') as string) sexo_paciente, safe_cast(regexp_replace(pa_idade, '9{3}', '') as int64) idade_paciente, - safe_cast(pa_racacor as string) raca_cor_paciente, + case + when pa_racacor = '00' then '0' else cast(ltrim(pa_racacor, '0') as string) + end as raca_cor_paciente, safe_cast(ltrim(pa_etnia, '0') as string) etnia_paciente, safe_cast(idademin as int64) idade_minima_paciente, safe_cast(idademax as int64) idade_maxima_paciente, - safe_cast(pa_flidade as string) compatibilidade_idade_procedimento, - safe_cast(pa_nivcpl as string) complexidade_procedimento, - safe_cast(pa_docorig as string) instrumento_registro, + case + when pa_flidade = '00' then '0' else cast(ltrim(pa_flidade, '0') as string) + end as compatibilidade_idade_procedimento, + case + when pa_nivcpl = '00' then '0' else cast(ltrim(pa_nivcpl, '0') as string) + end as complexidade_procedimento, + case + when pa_docorig = '00' then '0' else cast(ltrim(pa_docorig, '0') as string) + end as instrumento_registro, safe_cast(pa_valapr as float64) valor_aprovado_procedimento, safe_cast(pa_qtdapr as int64) quantidade_aprovada_procedimento, safe_cast(pa_valpro as float64) valor_produzido_procedimento, @@ -151,7 +166,9 @@ select safe_cast(pa_vl_cf as float64) valor_complemento_federal, safe_cast(pa_vl_cl as float64) valor_complemento_local, safe_cast(pa_vl_inc as float64) valor_incremento, - safe_cast(pa_motsai as string) motivo_saida_paciente, + case + when pa_motsai = '00' then '0' else cast(ltrim(pa_motsai, '0') as string) + end as motivo_saida_paciente, -- - em uf e muicipio replace de safe_cast( regexp_replace(pa_ufdif, '9{1}', '') as int64 From 2eb40945564b42f9ee64e572e289d1a5e6bebaeb Mon Sep 17 00:00:00 2001 From: tricktx Date: Thu, 21 Mar 2024 14:36:08 -0300 Subject: [PATCH 07/18] update and fix data about electrical energy consumption --- .../br_mme_consumo_energia_eletrica__uf.sql | 15 ++ .../code/energia_eletrica.ipynb | 218 ++++++++++++++++++ .../schema.yml | 25 ++ 3 files changed, 258 insertions(+) create mode 100644 models/br_mme_consumo_energia_eletrica/br_mme_consumo_energia_eletrica__uf.sql create mode 100644 models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb create mode 100644 models/br_mme_consumo_energia_eletrica/schema.yml diff --git a/models/br_mme_consumo_energia_eletrica/br_mme_consumo_energia_eletrica__uf.sql b/models/br_mme_consumo_energia_eletrica/br_mme_consumo_energia_eletrica__uf.sql new file mode 100644 index 00000000..40f57531 --- /dev/null +++ b/models/br_mme_consumo_energia_eletrica/br_mme_consumo_energia_eletrica__uf.sql @@ -0,0 +1,15 @@ +{{ + config( + alias="uf", + schema="br_mme_consumo_energia_eletrica", + materialized="table", + ) +}} +select + safe_cast(ano as int64) ano, + safe_cast(mes as int64) mes, + safe_cast(sigla_uf as string) sigla_uf, + safe_cast(tipo_consumo as string) tipo_consumo, + safe_cast(numero_consumidores as float64) numero_consumidores, + safe_cast(consumo as float64) consumo +from `basedosdados-staging.br_mme_consumo_energia_eletrica_staging.uf` as t diff --git a/models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb b/models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb new file mode 100644 index 00000000..7706f9be --- /dev/null +++ b/models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb @@ -0,0 +1,218 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def tratamento_consumo(sheet_name):\n", + " meses = {\n", + " \"JAN\": 1,\n", + " \"FEV\": 2,\n", + " \"MAR\": 3,\n", + " \"ABR\": 4,\n", + " \"MAI\": 5,\n", + " \"JUN\": 6,\n", + " \"JUL\": 7,\n", + " \"AGO\": 8,\n", + " \"SET\": 9,\n", + " \"OUT\": 10,\n", + " \"NOV\": 11,\n", + " \"DEZ\": 12\n", + " }\n", + " ufs = {'Acre':'AC', 'Alagoas':'AL', 'Amazonas':'AM', 'Amapá':'AP', 'Bahia':'BA', 'Ceará':'CE', 'Distrito Federal':'DF', 'Espírito Santo':'ES', 'Goiás':'GO', \n", + " 'Maranhão':'MA', 'Minas Gerais':'MG', 'Mato Grosso do Sul':'MS', 'Mato Grosso':'MT', 'Pará':'PA', 'Paraíba':'PB', 'Pernambuco':'PE', 'Piauí':'PI', \n", + " 'Paraná':'PR', 'Rio de Janeiro':'RJ', 'Rio Grande do Norte':'RN', 'Rondônia':'RO', 'Roraima':'RR', 'Rio Grande do Sul':'RS', \n", + " 'Santa Catarina':'SC', 'Sergipe':'SE', 'São Paulo':'SP', 'Tocantins':'TO'}\n", + " \n", + " df = pd.read_excel('/mnt/x/dados/consumo_energia_eletrica/dados.xls', sheet_name, skiprows=4, skipfooter=1, usecols='A:IG')\n", + " df_transposta = df.T\n", + " df_transposta.reset_index(inplace=True)\n", + " df_transposta.drop(df_transposta[['index', 2]], inplace=True, axis=1)\n", + " df_transposta.columns = df_transposta.iloc[0]\n", + " df_transposta = df_transposta[1:]\n", + " df_transposta.columns = ['ano', 'mes', 'Rondônia', 'Acre', 'Amazonas', 'Roraima', 'Pará',\n", + " 'Amapá', 'Tocantins', 'Maranhão', 'Piauí', 'Ceará',\n", + " 'Rio Grande do Norte', 'Paraíba', 'Pernambuco', 'Alagoas', 'Sergipe',\n", + " 'Bahia', 'Minas Gerais', 'Espírito Santo', 'Rio de Janeiro',\n", + " 'São Paulo', 'Paraná', 'Santa Catarina', 'Rio Grande do Sul',\n", + " 'Mato Grosso do Sul', 'Mato Grosso', 'Goiás', 'Distrito Federal']\n", + " df_transposta_melted = pd.melt(df_transposta, id_vars=[\"ano\", 'mes'], var_name=\"Estado\", value_name=\"Valor\")\n", + " df_transposta_melted['ano'].ffill(inplace=True)\n", + " df_transposta_melted['mes'] = df_transposta_melted['mes'].map(meses)\n", + "\n", + " df_transposta_melted.rename(columns={'Estado' : 'sigla_uf', 'Valor':'consumo'}, inplace=True) \n", + " df_transposta_melted['sigla_uf'] = df_transposta_melted['sigla_uf'].map(ufs)\n", + " return df_transposta_melted\n", + "\n", + "tipos_consumo = [\"Total\", \"Cativo\", \"Residencial\", \"Industrial\", \"Comercial\", \"Outros\"]\n", + "dfs_consumo = []\n", + "\n", + "# Realizando o tratamento para cada tipo de consumo\n", + "for i, tipo in enumerate(tipos_consumo):\n", + " if i < 6:\n", + " df = tratamento_consumo(i + 9)\n", + " df['tipo_consumo'] = tipo\n", + " dfs_consumo.append(df)\n", + "\n", + "# Concatenando todos os DataFrames\n", + "df_consumo = pd.concat(dfs_consumo)\n", + "df_consumo = df_consumo[['ano', 'mes', 'sigla_uf','tipo_consumo', 'consumo']]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(38880, 5)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_consumo.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def tratamento_consumidores(sheet_name):\n", + " meses = {\n", + " \"JAN\": 1,\n", + " \"FEV\": 2,\n", + " \"MAR\": 3,\n", + " \"ABR\": 4,\n", + " \"MAI\": 5,\n", + " \"JUN\": 6,\n", + " \"JUL\": 7,\n", + " \"AGO\": 8,\n", + " \"SET\": 9,\n", + " \"OUT\": 10,\n", + " \"NOV\": 11,\n", + " \"DEZ\": 12\n", + " }\n", + " ufs = {'Acre':'AC', 'Alagoas':'AL', 'Amazonas':'AM', 'Amapá':'AP', 'Bahia':'BA', 'Ceará':'CE', 'Distrito Federal':'DF', 'Espírito Santo':'ES', 'Goiás':'GO', \n", + " 'Maranhão':'MA', 'Minas Gerais':'MG', 'Mato Grosso do Sul':'MS', 'Mato Grosso':'MT', 'Pará':'PA', 'Paraíba':'PB', 'Pernambuco':'PE', 'Piauí':'PI', \n", + " 'Paraná':'PR', 'Rio de Janeiro':'RJ', 'Rio Grande do Norte':'RN', 'Rondônia':'RO', 'Roraima':'RR', 'Rio Grande do Sul':'RS', \n", + " 'Santa Catarina':'SC', 'Sergipe':'SE', 'São Paulo':'SP', 'Tocantins':'TO'}\n", + " \n", + " df = pd.read_excel('/mnt/x/dados/consumo_energia_eletrica/dados.xls', sheet_name, skiprows=4, skipfooter=1, usecols='A:IG')\n", + " df_transposta = df.T\n", + " df_transposta.reset_index(inplace=True)\n", + " df_transposta.drop(df_transposta[['index', 2]], inplace=True, axis=1)\n", + " df_transposta.columns = df_transposta.iloc[0]\n", + " df_transposta = df_transposta[1:]\n", + " df_transposta.columns = ['ano', 'mes', 'Rondônia', 'Acre', 'Amazonas', 'Roraima', 'Pará',\n", + " 'Amapá', 'Tocantins', 'Maranhão', 'Piauí', 'Ceará',\n", + " 'Rio Grande do Norte', 'Paraíba', 'Pernambuco', 'Alagoas', 'Sergipe',\n", + " 'Bahia', 'Minas Gerais', 'Espírito Santo', 'Rio de Janeiro',\n", + " 'São Paulo', 'Paraná', 'Santa Catarina', 'Rio Grande do Sul',\n", + " 'Mato Grosso do Sul', 'Mato Grosso', 'Goiás', 'Distrito Federal']\n", + " df_transposta_melted = pd.melt(df_transposta, id_vars=[\"ano\", 'mes'], var_name=\"Estado\", value_name=\"Valor\")\n", + " df_transposta_melted['ano'].ffill(inplace=True)\n", + " df_transposta_melted['mes'] = df_transposta_melted['mes'].map(meses)\n", + "\n", + " df_transposta_melted.rename(columns={'Estado' : 'sigla_uf', 'Valor':'numero_consumidores'}, inplace=True) \n", + " df_transposta_melted['sigla_uf'] = df_transposta_melted['sigla_uf'].map(ufs)\n", + " return df_transposta_melted\n", + "\n", + "tipos_consumidores = ['Residencial', 'Industrial', 'Comercial', 'Outros']\n", + "dfs_consumidores = []\n", + "\n", + "# Realizando o tratamento para cada tipo de consumidores\n", + "for i, tipo in enumerate(tipos_consumidores):\n", + " if i < 6:\n", + " df = tratamento_consumidores(i + 15)\n", + " df['tipo_consumo'] = tipo\n", + " dfs_consumidores.append(df)\n", + "\n", + "# Concatenando todos os DataFrames\n", + "df_consumidores = pd.concat(dfs_consumidores)\n", + "df_consumidores = df_consumidores[['ano', 'mes', 'sigla_uf','tipo_consumo', 'numero_consumidores']]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(25920, 5)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_consumidores.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "df_total = pd.merge(df_consumo, df_consumidores, how= 'left', on=['ano', 'mes', 'sigla_uf', 'tipo_consumo'])\n", + "df_total = df_total[['ano', 'mes', 'sigla_uf', 'tipo_consumo', 'numero_consumidores', 'consumo']]\n", + "df_total['consumo'] = df_total['consumo'].astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "df_total.to_csv(\"/mnt/x/dados/consumo_energia_eletrica/consumo_energia.csv\", sep=',', index=False, encoding='utf-8')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/models/br_mme_consumo_energia_eletrica/schema.yml b/models/br_mme_consumo_energia_eletrica/schema.yml new file mode 100644 index 00000000..10e0124b --- /dev/null +++ b/models/br_mme_consumo_energia_eletrica/schema.yml @@ -0,0 +1,25 @@ +--- +version: 2 +models: + - name: br_mme_consumo_energia_eletrica__uf + description: Consumo de energia elétrica em nível nacional e segmentado pelas + classes residencial, industrial, comercial e outros (rural, serviço público + e iluminação pública). + tests: + - not_null_proportion_multiple_columns: + at_least: 0.05 + - dbt_utils.unique_combination_of_columns: + combination_of_columns: [ano, mes, sigla_uf, tipo_consumo] + columns: + - name: ano + description: Ano + - name: mes + description: Mês + - name: sigla_uf + description: Sigla da Unidade da Federação + - name: tipo_consumo + description: Tipo de Consumo + - name: numero_consumidores + description: Número de consumidores de energia elétrica atendidos pela rede + - name: consumo + description: Consumo de energia elétrica na rede (MWh) From 7476c37cc9640223145a400fbfcfcce166614bf8 Mon Sep 17 00:00:00 2001 From: tricktx Date: Thu, 21 Mar 2024 14:42:08 -0300 Subject: [PATCH 08/18] add dbt_project --- dbt_project.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dbt_project.yml b/dbt_project.yml index 02fcfc26..6754974a 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -228,6 +228,9 @@ models: +post-hook: - REVOKE `roles/bigquery.dataViewer` ON TABLE {{ this }} FROM "specialGroup:allUsers" - GRANT `roles/bigquery.dataViewer` ON TABLE {{ this }} TO "group:bd-pro@basedosdados.org" + br_mme_consumo_energia_eletrica: + +materialized: table + +schema: br_mme_consumo_energia_eletrica br_mp_pep: +materialized: table +schema: br_mp_pep From 2d6a0a0219b0c877cfa223f0ee89567bdf19e690 Mon Sep 17 00:00:00 2001 From: tricktx Date: Thu, 21 Mar 2024 18:03:02 -0300 Subject: [PATCH 09/18] fix max data --- ...a_dados_abertos__proposicao_microdados.sql | 116 ++++++++++++------ 1 file changed, 80 insertions(+), 36 deletions(-) diff --git a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql index f99989ff..402e472e 100644 --- a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql +++ b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql @@ -6,43 +6,87 @@ partition_by={ "field": "ano", "data_type": "INT64", - "range": {"start": 1935, "end": 2023, "interval": 1}, + "range": {"start": 1935, "end": 2024, "interval": 1}, }, ) }} -select - safe_cast(ano as int64) ano, - safe_cast( - split( - format_timestamp('%Y-%m-%dT%H:%M:%E*S', timestamp(dataapresentacao)), 'T' - )[offset(0)] as date - ) data, - safe_cast( - split( - format_timestamp('%Y-%m-%dT%H:%M:%E*S', timestamp(dataapresentacao)), 'T' - )[offset(1)] as time - ) horario, - safe_cast(id as string) id_proposicao, - safe_cast(uri as string) url, - safe_cast(numero as string) numero, - safe_cast(siglatipo as string) sigla, - safe_cast(descricaotipo as string) tipo, - safe_cast(ementa as string) ementa, - safe_cast(ementadetalhada as string) ementa_detalhada, - safe_cast(keywords as string) palavra_chave, - safe_cast(uriorgaonumerador as string) url_orgao_numerador, - safe_cast(uripropprincipal as string) url_principal, - safe_cast(uripropposterior as string) url_posterior, - safe_cast(urlinteiroteor as string) url_teor_proposicao, - safe_cast(ultimostatus_datahora as string) data_hora_ultimo_status, - safe_cast(ultimostatus_urirelator as string) url_relator_ultimo_status, - safe_cast(ultimostatus_siglaorgao as string) sigla_orgao_ultimo_status, - safe_cast(ultimostatus_regime as string) regime_ultimo_status, - safe_cast(ultimostatus_descricaotramitacao as string) tramitacao_ultimo_status, - safe_cast(ultimostatus_descricaosituacao as string) situacao_ultimo_status, - safe_cast(ultimostatus_despacho as string) despacho_ultimo_status, - safe_cast(ultimostatus_apreciacao as string) apreciacao_ultimo_status, - safe_cast(ultimostatus_sequencia as string) sequencia_ultimo_status, - safe_cast(ultimostatus_url as string) url_ultimo_status, -from `basedosdados-staging.br_camara_dados_abertos_staging.proposicao_microdados` as t +with + table as ( + select + safe_cast(ano as int64) ano, + safe_cast( + split( + format_timestamp( + '%Y-%m-%dT%H:%M:%E*S', timestamp(dataapresentacao) + ), + 'T' + )[offset (0)] as date + ) data, + safe_cast( + split( + format_timestamp( + '%Y-%m-%dT%H:%M:%E*S', timestamp(dataapresentacao) + ), + 'T' + )[offset (1)] as time + ) horario, + safe_cast(id as string) id_proposicao, + safe_cast(uri as string) url, + safe_cast(numero as string) numero, + safe_cast(siglatipo as string) sigla, + safe_cast(descricaotipo as string) tipo, + safe_cast(ementa as string) ementa, + safe_cast(ementadetalhada as string) ementa_detalhada, + safe_cast(keywords as string) palavra_chave, + safe_cast(uriorgaonumerador as string) url_orgao_numerador, + safe_cast(uripropprincipal as string) url_principal, + safe_cast(uripropposterior as string) url_posterior, + safe_cast(urlinteiroteor as string) url_teor_proposicao, + safe_cast(ultimostatus_datahora as string) data_hora_ultimo_status, + safe_cast(ultimostatus_urirelator as string) url_relator_ultimo_status, + safe_cast(ultimostatus_siglaorgao as string) sigla_orgao_ultimo_status, + safe_cast(ultimostatus_regime as string) regime_ultimo_status, + safe_cast( + ultimostatus_descricaotramitacao as string + ) tramitacao_ultimo_status, + safe_cast(ultimostatus_descricaosituacao as string) situacao_ultimo_status, + safe_cast(ultimostatus_despacho as string) despacho_ultimo_status, + safe_cast(ultimostatus_apreciacao as string) apreciacao_ultimo_status, + safe_cast(ultimostatus_sequencia as string) sequencia_ultimo_status, + safe_cast(ultimostatus_url as string) url_ultimo_status, + from + `basedosdados-dev.br_camara_dados_abertos_staging.proposicao_microdados` + as t + ), + query_total as ( + select + ano, + case when data >= current_date() then null else data end as data, + horario, + id_proposicao, + url, + numero, + sigla, + tipo, + ementa, + ementa_detalhada, + palavra_chave, + url_orgao_numerador, + url_principal, + url_posterior, + url_teor_proposicao, + data_hora_ultimo_status, + url_relator_ultimo_status, + sigla_orgao_ultimo_status, + regime_ultimo_status, + tramitacao_ultimo_status, + situacao_ultimo_status, + despacho_ultimo_status, + apreciacao_ultimo_status, + sequencia_ultimo_status, + url_ultimo_status, + from table + ) +select * +from query_total From 4754ca8c19b789bf89b2c507814fbc3f67b99e53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20Gusm=C3=A3o?= Date: Fri, 22 Mar 2024 10:01:27 -0300 Subject: [PATCH 10/18] fix: rm `menos de 1 ano` age group --- .../br_ibge_censo_2022__populacao_residente_municipio.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql index c9bb15de..883dd155 100644 --- a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql +++ b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql @@ -79,4 +79,4 @@ from ibge left join `basedosdados-dev.br_ibge_censo_2022_staging.auxiliary_table` t2 on ibge.municipio = t2.municipio -where not (idade like '% a %' or idade like '100 anos ou mais') +where not (idade like '% a %' or idade like '100 anos ou mais' or idade like 'Menos de 1 ano') From 31882e584ad09bab907859baad95cfdc5472939d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20Gusm=C3=A3o?= Date: Fri, 22 Mar 2024 10:11:13 -0300 Subject: [PATCH 11/18] fix: lint sql --- .../br_ibge_censo_2022__populacao_residente_municipio.sql | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql index 883dd155..e99637fd 100644 --- a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql +++ b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql @@ -79,4 +79,9 @@ from ibge left join `basedosdados-dev.br_ibge_censo_2022_staging.auxiliary_table` t2 on ibge.municipio = t2.municipio -where not (idade like '% a %' or idade like '100 anos ou mais' or idade like 'Menos de 1 ano') +where + not ( + idade like '% a %' + or idade like '100 anos ou mais' + or idade like 'Menos de 1 ano' + ) From 62b81763564baf0006baa270892073879b747859 Mon Sep 17 00:00:00 2001 From: tricktx Date: Fri, 22 Mar 2024 13:02:37 -0300 Subject: [PATCH 12/18] fix colum numero_consumidores --- .user.yml | 2 + .../br_mme_consumo_energia_eletrica__uf.sql | 16 +- .../code/energia_eletrica.ipynb | 196 ++++++++++++++++-- .../schema.yml | 13 ++ 4 files changed, 200 insertions(+), 27 deletions(-) create mode 100644 .user.yml mode change 100644 => 100755 models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb diff --git a/.user.yml b/.user.yml new file mode 100644 index 00000000..416339dd --- /dev/null +++ b/.user.yml @@ -0,0 +1,2 @@ +--- +id: cc3f54e0-fd01-4495-bd12-aa41f3b24444 diff --git a/models/br_mme_consumo_energia_eletrica/br_mme_consumo_energia_eletrica__uf.sql b/models/br_mme_consumo_energia_eletrica/br_mme_consumo_energia_eletrica__uf.sql index 40f57531..620f7a43 100644 --- a/models/br_mme_consumo_energia_eletrica/br_mme_consumo_energia_eletrica__uf.sql +++ b/models/br_mme_consumo_energia_eletrica/br_mme_consumo_energia_eletrica__uf.sql @@ -6,10 +6,14 @@ ) }} select - safe_cast(ano as int64) ano, - safe_cast(mes as int64) mes, - safe_cast(sigla_uf as string) sigla_uf, - safe_cast(tipo_consumo as string) tipo_consumo, - safe_cast(numero_consumidores as float64) numero_consumidores, - safe_cast(consumo as float64) consumo + safe_cast(ano as int64) as ano, + safe_cast(mes as int64) as mes, + safe_cast(sigla_uf as string) as sigla_uf, + safe_cast(tipo_consumo as string) as tipo_consumo, + case + when numero_consumidores = '0' + then null + else safe_cast(numero_consumidores as int64) + end as numero_consumidores, + safe_cast(consumo as int64) as consumo from `basedosdados-staging.br_mme_consumo_energia_eletrica_staging.uf` as t diff --git a/models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb b/models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb old mode 100644 new mode 100755 index 7706f9be..0aff9a8c --- a/models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb +++ b/models/br_mme_consumo_energia_eletrica/code/energia_eletrica.ipynb @@ -2,18 +2,19 @@ "cells": [ { "cell_type": "code", - "execution_count": 41, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import warnings\n", - "warnings.filterwarnings('ignore')" + "warnings.filterwarnings('ignore')\n", + "import numpy as np" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -74,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -83,7 +84,7 @@ "(38880, 5)" ] }, - "execution_count": 13, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -94,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -155,33 +156,186 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "df_total = pd.merge(df_consumo, df_consumidores, how= 'left', on=['ano', 'mes', 'sigla_uf', 'tipo_consumo'])\n", + "df_total = df_total[['ano', 'mes', 'sigla_uf', 'tipo_consumo', 'numero_consumidores', 'consumo']]\n", + "df_total['consumo'] = df_total['consumo'].astype(int)\n", + "df_total['numero_consumidores'] = df_total['numero_consumidores'].fillna(0).astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
anomessigla_uftipo_consumonumero_consumidoresconsumo
1584020041PEResidencial2001833228466
1584120042PEResidencial2004750217764
1584220043PEResidencial2018407225066
1584320044PEResidencial2026995232170
1584420045PEResidencial1972048210365
1584520046PEResidencial1963599198030
1584620047PEResidencial1954839192699
1584720048PEResidencial1949125189991
1584820049PEResidencial1989788224208
15849200410PEResidencial2022621212547
15850200411PEResidencial2046330226619
15851200412PEResidencial2040413240852
\n", + "
" + ], "text/plain": [ - "(25920, 5)" + " ano mes sigla_uf tipo_consumo numero_consumidores consumo\n", + "15840 2004 1 PE Residencial 2001833 228466\n", + "15841 2004 2 PE Residencial 2004750 217764\n", + "15842 2004 3 PE Residencial 2018407 225066\n", + "15843 2004 4 PE Residencial 2026995 232170\n", + "15844 2004 5 PE Residencial 1972048 210365\n", + "15845 2004 6 PE Residencial 1963599 198030\n", + "15846 2004 7 PE Residencial 1954839 192699\n", + "15847 2004 8 PE Residencial 1949125 189991\n", + "15848 2004 9 PE Residencial 1989788 224208\n", + "15849 2004 10 PE Residencial 2022621 212547\n", + "15850 2004 11 PE Residencial 2046330 226619\n", + "15851 2004 12 PE Residencial 2040413 240852" ] }, - "execution_count": 18, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_consumidores.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [], - "source": [ - "df_total = pd.merge(df_consumo, df_consumidores, how= 'left', on=['ano', 'mes', 'sigla_uf', 'tipo_consumo'])\n", - "df_total = df_total[['ano', 'mes', 'sigla_uf', 'tipo_consumo', 'numero_consumidores', 'consumo']]\n", - "df_total['consumo'] = df_total['consumo'].astype(int)" + "df_total[(df_total['ano'] == 2004) & (df_total['sigla_uf'] == 'PE') & (df_total['tipo_consumo'] == 'Residencial')]" ] }, { diff --git a/models/br_mme_consumo_energia_eletrica/schema.yml b/models/br_mme_consumo_energia_eletrica/schema.yml index 10e0124b..c20bb4e3 100644 --- a/models/br_mme_consumo_energia_eletrica/schema.yml +++ b/models/br_mme_consumo_energia_eletrica/schema.yml @@ -13,13 +13,26 @@ models: columns: - name: ano description: Ano + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano - name: mes description: Mês + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__mes') + field: mes.mes - name: sigla_uf description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla - name: tipo_consumo description: Tipo de Consumo - name: numero_consumidores description: Número de consumidores de energia elétrica atendidos pela rede - name: consumo description: Consumo de energia elétrica na rede (MWh) + tests: [not_null] From 7c21c2c43e1610708e2042373d74dba38b68994a Mon Sep 17 00:00:00 2001 From: tricktx Date: Fri, 22 Mar 2024 15:41:15 -0300 Subject: [PATCH 13/18] fix wrong line --- ...r_camara_dados_abertos__orgao_deputado.sql | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/models/br_camara_dados_abertos/br_camara_dados_abertos__orgao_deputado.sql b/models/br_camara_dados_abertos/br_camara_dados_abertos__orgao_deputado.sql index f5f82eda..a1770fe0 100644 --- a/models/br_camara_dados_abertos/br_camara_dados_abertos__orgao_deputado.sql +++ b/models/br_camara_dados_abertos/br_camara_dados_abertos__orgao_deputado.sql @@ -1,12 +1,25 @@ {{ config(alias="orgao_deputado", schema="br_camara_dados_abertos") }} -select distinct - regexp_extract(uriorgao, r'/orgaos/(\d+)') as id_orgao, - safe_cast(nomeorgao as string) nome, - safe_cast(siglaorgao as string) sigla, - safe_cast(nomedeputado as string) nome_deputado, - safe_cast(cargo as string) cargo, - safe_cast(siglauf as string) sigla_uf, - safe_cast(datainicio as date) data_inicio, - safe_cast(datafim as date) data_final, - safe_cast(siglapartido as string) sigla_partido, -from `basedosdados-staging.br_camara_dados_abertos_staging.orgao_deputado` as t +with + orgao_deputado as ( + select distinct + regexp_extract(uriorgao, r'/orgaos/(\d+)') as id_orgao, + safe_cast(nomeorgao as string) nome, + safe_cast(siglaorgao as string) sigla, + safe_cast(nomedeputado as string) nome_deputado, + safe_cast(cargo as string) cargo, + safe_cast(siglauf as string) sigla_uf, + safe_cast(datainicio as date) data_inicio, + safe_cast(datafim as date) data_final, + safe_cast(siglapartido as string) sigla_partido, + from `basedosdados-staging.br_camara_dados_abertos_staging.orgao_deputado` + ) +select * +from orgao_deputado +where + not ( + nome_deputado = 'Hélio Leite' + and cargo = 'Titular' + and sigla_uf is null + and data_inicio = '2022-05-03' + and data_final = '2023-02-01' + ) From 375aafe50c30836ec8d2b7c147dbe4ea8a640c01 Mon Sep 17 00:00:00 2001 From: tricktx Date: Fri, 22 Mar 2024 16:40:53 -0300 Subject: [PATCH 14/18] fix dev --- .../br_camara_dados_abertos__proposicao_microdados.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql index 402e472e..359ae7c5 100644 --- a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql +++ b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql @@ -56,7 +56,7 @@ with safe_cast(ultimostatus_sequencia as string) sequencia_ultimo_status, safe_cast(ultimostatus_url as string) url_ultimo_status, from - `basedosdados-dev.br_camara_dados_abertos_staging.proposicao_microdados` + `basedosdados-staging.br_camara_dados_abertos_staging.proposicao_microdados` as t ), query_total as ( From 60c9bb8e7af03680cc0cae18c56220ed6e8f69b6 Mon Sep 17 00:00:00 2001 From: tricktx Date: Mon, 25 Mar 2024 11:53:54 -0300 Subject: [PATCH 15/18] fix tables proposicao --- ...camara_dados_abertos__proposicao_autor.sql | 4 ++-- ...a_dados_abertos__proposicao_microdados.sql | 3 ++- ..._camara_dados_abertos__proposicao_tema.sql | 22 ++++++++++++------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql index c6214862..05cb9fdf 100644 --- a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql +++ b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql @@ -1,6 +1,6 @@ {{ config(alias="proposicao_autor", schema="br_camara_dados_abertos") }} -select +select distinct safe_cast(idproposicao as string) id_proposicao, replace(safe_cast(iddeputadoautor as string), ".0", "") id_deputado, initcap(safe_cast(tipoautor as string)) tipo_autor, @@ -9,4 +9,4 @@ select upper(safe_cast(siglaufautor as string)) sigla_uf_autor, safe_cast(ordemassinatura as string) ordem_assinatura, safe_cast(proponente as string) proponente, -from `basedosdados-staging.br_camara_dados_abertos_staging.proposicao_autor` as t +from `basedosdados-dev.br_camara_dados_abertos_staging.proposicao_autor` as t diff --git a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql index 359ae7c5..44f0c262 100644 --- a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql +++ b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_microdados.sql @@ -88,5 +88,6 @@ with url_ultimo_status, from table ) -select * +select distinct * from query_total +where not (ano = 2011 and id_proposicao = '510035') diff --git a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_tema.sql b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_tema.sql index 10d0cc64..63bb9148 100644 --- a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_tema.sql +++ b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_tema.sql @@ -11,11 +11,17 @@ ) }} -select - safe_cast(replace(ano, ".0", "") as int64) ano, - regexp_extract(uriproposicao, r'/proposicoes/(\d+)') as id_proposicao, - safe_cast(siglatipo as string) tipo_proposicao, - safe_cast(numero as string) numero, - safe_cast(codtema as string) tema, - safe_cast(relevancia as int64) relevancia, -from `basedosdados-staging.br_camara_dados_abertos_staging.proposicao_tema` as t +with + tables as ( + select + safe_cast(replace(ano, ".0", "") as int64) as ano, + regexp_extract(uriproposicao, r'/proposicoes/(\d+)') as id_proposicao, + safe_cast(siglatipo as string) as tipo_proposicao, + safe_cast(numero as string) as numero, + safe_cast(tema as string) as tema, + safe_cast(relevancia as int64) as relevancia + from `basedosdados-staging.br_camara_dados_abertos_staging.proposicao_tema` + ) +select * +from tables +where not (ano = 2011 and id_proposicao = '510035') From bd3b159bf3434afce345f98187c05a9cc4371461 Mon Sep 17 00:00:00 2001 From: tricktx Date: Mon, 25 Mar 2024 11:54:16 -0300 Subject: [PATCH 16/18] fix tables proposicao --- .../br_camara_dados_abertos__proposicao_autor.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql index 05cb9fdf..71387eca 100644 --- a/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql +++ b/models/br_camara_dados_abertos/br_camara_dados_abertos__proposicao_autor.sql @@ -9,4 +9,4 @@ select distinct upper(safe_cast(siglaufautor as string)) sigla_uf_autor, safe_cast(ordemassinatura as string) ordem_assinatura, safe_cast(proponente as string) proponente, -from `basedosdados-dev.br_camara_dados_abertos_staging.proposicao_autor` as t +from `basedosdados-staging.br_camara_dados_abertos_staging.proposicao_autor` as t From 74c5abd0019a22e2fc8ee097d0f16a619d479847 Mon Sep 17 00:00:00 2001 From: folhesgabriel Date: Mon, 25 Mar 2024 12:09:36 -0300 Subject: [PATCH 17/18] feat: remove ltrim from etnia_paciente column --- models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 af66a9b4..62433139 100644 --- a/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql +++ b/models/br_ms_sia/br_ms_sia__producao_ambulatorial.sql @@ -144,7 +144,7 @@ select case when pa_racacor = '00' then '0' else cast(ltrim(pa_racacor, '0') as string) end as raca_cor_paciente, - safe_cast(ltrim(pa_etnia, '0') as string) etnia_paciente, + safe_cast(pa_etnia as string) etnia_paciente, safe_cast(idademin as int64) idade_minima_paciente, safe_cast(idademax as int64) idade_maxima_paciente, case From ecaa5d050f4603beaa63dfcc4b8c990c0e127923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20Gusm=C3=A3o?= Date: Mon, 25 Mar 2024 15:44:51 -0300 Subject: [PATCH 18/18] fix: reorder column --- .../br_ibge_censo_2022__populacao_residente_municipio.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql index e99637fd..386f6a00 100644 --- a/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql +++ b/models/br_ibge_censo_2022/br_ibge_censo_2022__populacao_residente_municipio.sql @@ -30,7 +30,7 @@ with ) select t2.cod as id_municipio, - ibge.* except (municipio, nome_municipio, sigla_uf, idade_num), + ibge.* except (municipio, nome_municipio, sigla_uf, idade_num, populacao_residente), idade_num as idade_anos, case when idade_num between 0 and 4 @@ -74,7 +74,8 @@ select when idade_num between 95 and 99 then '95 a 99 anos' else '100 anos ou mais' - end as grupo_idade + end as grupo_idade, + populacao_residente from ibge left join `basedosdados-dev.br_ibge_censo_2022_staging.auxiliary_table` t2