diff --git a/dbt_project.yml b/dbt_project.yml index 0ad0c38a..d13be584 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -69,7 +69,10 @@ models: +schema: br_bcb_agencia br_bcb_estban: +materialized: table - +schema: br_bcb_estban + +schema: br_bcb_estban + br_bcb_sicor: + +materialized: table + +schema: br_bcb_sicor br_bcb_taxa_cambio: +materialized: table +schema: br_bcb_taxa_cambio @@ -118,12 +121,18 @@ models: br_cvm_oferta_publica_distribuicao: +materialized: table +schema: br_cvm_oferta_publica_distribuicao + br_fbsp_absp: + +materialized: table + +schema: br_fbsp_absp br_fgv_igp: +materialized: table +schema: br_fgv_igp br_ibge_inpc: +materialized: table +schema: br_ibge_inpc + br_geobr_mapas: + +materialized: table + +schema: br_geobr_mapas br_ibge_ipca: +materialized: table +schema: br_ibge_ipca diff --git a/metadata.json b/metadata.json index 7ed17dc0..71c50f44 100644 --- a/metadata.json +++ b/metadata.json @@ -5314,6 +5314,505 @@ "description": "Valor do reforço, caso haja incrementos" } ] + }, + { + "slug": "dicionario", + "name": "dicionario", + "description": "Dicionário", + "cloudTables": [ + { + "gcpProjectId": "basedosdados-dev", + "gcpDatasetId": "world_wb_mides", + "gcpTableId": "dicionario" + } + ], + "status": { + "name": "Em revisão", + "slug": "under_review" + }, + "license": null, + "pipeline": null, + "publishedBy": { + "firstName": "Ricardo", + "lastName": "Dahis", + "email": "rdahis@basedosdados.org" + }, + "dataCleanedBy": null, + "dataCleaningDescription": "", + "dataCleaningCodeUrl": null, + "rawDataUrl": null, + "auxiliaryFilesUrl": null, + "architectureUrl": "https://docs.google.com/spreadsheets/d/1u9WCJHFFT5U1ZBlhR0TsiNke7wou4p_GaDsjTkhE33Q/edit#gid=0", + "columns": [ + { + "name": "chave", + "description": "Chave" + }, + { + "name": "cobertura_temporal", + "description": "Cobertura Temporal" + }, + { + "name": "coluna", + "description": "Coluna" + }, + { + "name": "id_tabela", + "description": "ID Tabela" + }, + { + "name": "valor", + "description": "Valor" + } + ] + }, + { + "slug": "licitacao", + "name": "licitacao", + "description": "Dados a nível de licitação.", + "cloudTables": [ + { + "gcpProjectId": "basedosdados-dev", + "gcpDatasetId": "world_wb_mides", + "gcpTableId": "licitacao" + } + ], + "status": { + "name": "Publicado", + "slug": "published" + }, + "license": null, + "pipeline": null, + "publishedBy": { + "firstName": "Ricardo", + "lastName": "Dahis", + "email": "rdahis@basedosdados.org" + }, + "dataCleanedBy": null, + "dataCleaningDescription": "", + "dataCleaningCodeUrl": null, + "rawDataUrl": null, + "auxiliaryFilesUrl": null, + "architectureUrl": "https://docs.google.com/spreadsheets/d/1TEndIhxUmHeSadsSOFVI0ejyr-gqUIIZPsLVDqqOtxU/edit#gid=0", + "columns": [ + { + "name": "ano", + "description": "Ano" + }, + { + "name": "ano_processo", + "description": "Ano do processo" + }, + { + "name": "carona", + "description": "Licitação Carona" + }, + { + "name": "contratacao", + "description": "Contratação por Itens ou Lotes" + }, + { + "name": "covid_19", + "description": "Licitação ou dispensa no âmbito da COVID-19" + }, + { + "name": "data_abertura", + "description": "Data de Abertura" + }, + { + "name": "data_edital", + "description": "Data de Emissão do Edital" + }, + { + "name": "data_homologacao", + "description": "Data de Publicação da Homologação" + }, + { + "name": "data_publicacao_dispensa", + "description": "Data de Publicação da Dispensa" + }, + { + "name": "descricao_objeto", + "description": "Especificação do Objeto Licitado" + }, + { + "name": "estagio", + "description": "Estágio da Licitação" + }, + { + "name": "exclusiva_micro_pequena", + "description": "Destinação exclusiva a Microempresas e empresas de pequeno porte" + }, + { + "name": "forma_pagamento", + "description": "Forma de Pagamento" + }, + { + "name": "id_dispensa", + "description": "Código da Dispensa" + }, + { + "name": "id_licitacao", + "description": "Código da Licitação" + }, + { + "name": "id_licitacao_bd", + "description": "ID Licitação" + }, + { + "name": "id_municipio", + "description": "ID Município - IBGE 7 Dígitos" + }, + { + "name": "id_unidade_gestora", + "description": "ID Unidade Gestora" + }, + { + "name": "mes", + "description": "Mês" + }, + { + "name": "modalidade", + "description": "Modalidade da Licitação" + }, + { + "name": "natureza_objeto", + "description": "Natureza do Objeto" + }, + { + "name": "natureza_processo", + "description": "Natureza do Processo" + }, + { + "name": "orgao", + "description": "Órgão" + }, + { + "name": "preferencia_micro_pequena", + "description": "Preferência de contratação para as microempresas e empresas de pequeno porte" + }, + { + "name": "quantidade_convidados", + "description": "Número de convidados (modalidade convite)" + }, + { + "name": "sigla_uf", + "description": "Sigla da Unidade de Federação" + }, + { + "name": "situacao", + "description": "Situação da Licitação" + }, + { + "name": "tipo", + "description": "Tipo de Licitação - Critério de Julgamento" + }, + { + "name": "tipo_cadastro", + "description": "Tipo Cadastro (inicial ou retificação)" + }, + { + "name": "valor", + "description": "Valor da Licitação" + }, + { + "name": "valor_corrigido", + "description": "Valor Corrigido" + }, + { + "name": "valor_orcamento", + "description": "Valor do Orçamento" + } + ] + }, + { + "slug": "licitacao_item", + "name": "licitacao_item", + "description": "Dados a nível de licitação-item.", + "cloudTables": [ + { + "gcpProjectId": "basedosdados-dev", + "gcpDatasetId": "world_wb_mides", + "gcpTableId": "licitacao_item" + } + ], + "status": { + "name": "Publicado", + "slug": "published" + }, + "license": null, + "pipeline": null, + "publishedBy": { + "firstName": "Ricardo", + "lastName": "Dahis", + "email": "rdahis@basedosdados.org" + }, + "dataCleanedBy": null, + "dataCleaningDescription": "", + "dataCleaningCodeUrl": null, + "rawDataUrl": null, + "auxiliaryFilesUrl": null, + "architectureUrl": "https://docs.google.com/spreadsheets/d/130eUmTWz4hm1v5QyY47j4JVQ5KQfMXOtOun5Mo1GeJU/edit#gid=0", + "columns": [ + { + "name": "ano", + "description": "Ano" + }, + { + "name": "descricao", + "description": "Descrição do Item" + }, + { + "name": "documento", + "description": "CPF/CNPJ do vencedor" + }, + { + "name": "id_dispensa", + "description": "Código da Dispensa" + }, + { + "name": "id_item", + "description": "Código do Item" + }, + { + "name": "id_item_bd", + "description": "ID Item" + }, + { + "name": "id_licitacao", + "description": "Código da Licitação" + }, + { + "name": "id_licitacao_bd", + "description": "ID Licitação" + }, + { + "name": "id_municipio", + "description": "ID Município - IBGE 7 Dígitos" + }, + { + "name": "id_unidade_gestora", + "description": "ID Unidade Gestora" + }, + { + "name": "nome_vencedor", + "description": "Nome do vencedor" + }, + { + "name": "numero", + "description": "Número do item" + }, + { + "name": "numero_lote", + "description": "Número do lote" + }, + { + "name": "orgao", + "description": "ID Órgão" + }, + { + "name": "quantidade", + "description": "Quantidade Homologada" + }, + { + "name": "quantidade_cotada", + "description": "Quantidade Cotada" + }, + { + "name": "quantidade_proposta", + "description": "Quantidade da proposta" + }, + { + "name": "sigla_uf", + "description": "Sigla da Unidade de Federação" + }, + { + "name": "unidade_medida", + "description": "Unidade de medida" + }, + { + "name": "valor_proposta", + "description": "Valor unitário da proposta" + }, + { + "name": "valor_total", + "description": "Valor Total" + }, + { + "name": "valor_unitario", + "description": "Valor Unitário Homologado" + }, + { + "name": "valor_unitario_cotacao", + "description": "Valor Unitário Cotação" + }, + { + "name": "valor_vencedor", + "description": "Valor Homologado" + } + ] + }, + { + "slug": "licitacao_participante", + "name": "licitacao_participante", + "description": "Dados a nível de licitação-participante.", + "cloudTables": [ + { + "gcpProjectId": "basedosdados-dev", + "gcpDatasetId": "world_wb_mides", + "gcpTableId": "licitacao_participante" + } + ], + "status": { + "name": "Publicado", + "slug": "published" + }, + "license": null, + "pipeline": null, + "publishedBy": { + "firstName": "Ricardo", + "lastName": "Dahis", + "email": "rdahis@basedosdados.org" + }, + "dataCleanedBy": null, + "dataCleaningDescription": "", + "dataCleaningCodeUrl": null, + "rawDataUrl": null, + "auxiliaryFilesUrl": null, + "architectureUrl": "https://docs.google.com/spreadsheets/d/1vN4wnDt7lMA_osNLFe6C3mxGaDprg8fLemoxnLOYc9s/edit#gid=0", + "columns": [ + { + "name": "ano", + "description": "Ano" + }, + { + "name": "cep", + "description": "CEP" + }, + { + "name": "classificado", + "description": "Participante classificado" + }, + { + "name": "documento", + "description": "CPF/CNPJ do participante" + }, + { + "name": "endereco", + "description": "Endereço" + }, + { + "name": "habilitado", + "description": "Participante habilitado" + }, + { + "name": "id_dispensa", + "description": "Código da Dispensa" + }, + { + "name": "id_licitacao", + "description": "Código da Licitação" + }, + { + "name": "id_licitacao_bd", + "description": "ID Licitação" + }, + { + "name": "id_municipio", + "description": "ID Município - IBGE 7 Dígitos" + }, + { + "name": "id_unidade_gestora", + "description": "ID Unidade Gestora" + }, + { + "name": "municipio_participante", + "description": "Município do Participante" + }, + { + "name": "orgao", + "description": "Órgão" + }, + { + "name": "razao_social", + "description": "Razão Social" + }, + { + "name": "sigla_uf", + "description": "Sigla da Unidade de Federação" + }, + { + "name": "tipo", + "description": "PF ou PJ" + }, + { + "name": "vencedor", + "description": "Participante Vencedor" + } + ] + }, + { + "slug": "orgao_unidade_gestora", + "name": "orgao_unidade_gestora", + "description": "Dados auxiliares a nível de órgão e unidade gestora.", + "cloudTables": [ + { + "gcpProjectId": "basedosdados-dev", + "gcpDatasetId": "world_wb_mides", + "gcpTableId": "orgao_unidade_gestora" + } + ], + "status": { + "name": "Em revisão", + "slug": "under_review" + }, + "license": null, + "pipeline": null, + "publishedBy": { + "firstName": "Ricardo", + "lastName": "Dahis", + "email": "rdahis@basedosdados.org" + }, + "dataCleanedBy": null, + "dataCleaningDescription": "", + "dataCleaningCodeUrl": null, + "rawDataUrl": null, + "auxiliaryFilesUrl": null, + "architectureUrl": "https://docs.google.com/spreadsheets/d/18LUGzMtU0qxQ1CKAR0LJn9DbMpUI0tJsgNRMXumtg28/edit#gid=0", + "columns": [ + { + "name": "ano", + "description": "Ano" + }, + { + "name": "esfera", + "description": "Esfera (e.g. municipal, intermunicipal, estadual, federal)" + }, + { + "name": "id_municipio", + "description": "ID Município - IBGE 7 Dígitos" + }, + { + "name": "id_unidade_gestora", + "description": "Código da unidade gestora a qual a operação está vinculada" + }, + { + "name": "nome_orgao", + "description": "Nome do órgão" + }, + { + "name": "nome_unidade_gestora", + "description": "Nome da unidade gestora" + }, + { + "name": "orgao", + "description": "Código do órgão ao qual a operação (empenho, liquidação, pagamento ou licitação) está vinculada" + }, + { + "name": "sigla_uf", + "description": "Sigla da Unidade da Federação" + } + ] } ] }, diff --git a/models/br_bcb_sicor/br_bcb_sicor__dicionario.sql b/models/br_bcb_sicor/br_bcb_sicor__dicionario.sql new file mode 100644 index 00000000..0a35381a --- /dev/null +++ b/models/br_bcb_sicor/br_bcb_sicor__dicionario.sql @@ -0,0 +1,14 @@ +{{ + config( + alias = 'dicionario', + schema='br_bcb_sicor', + materialized='table', + ) +}} +SELECT +SAFE_CAST(id_tabela AS STRING) id_tabela, +SAFE_CAST(nome_coluna AS STRING) nome_coluna, +SAFE_CAST(chave AS STRING) chave, +SAFE_CAST(cobertura_temporal AS STRING) cobertura_temporal, +SAFE_CAST(valor AS STRING) valor +FROM basedosdados-staging.br_bcb_sicor_staging.dicionario AS t \ No newline at end of file diff --git a/models/br_bcb_sicor/br_bcb_sicor__empreendimento.sql b/models/br_bcb_sicor/br_bcb_sicor__empreendimento.sql new file mode 100644 index 00000000..df0191b1 --- /dev/null +++ b/models/br_bcb_sicor/br_bcb_sicor__empreendimento.sql @@ -0,0 +1,24 @@ +{{ + config( + alias = 'empreendimento', + schema='br_bcb_sicor', + materialized='table', + ) +}} +SELECT +SAFE_CAST(id_empreendimento AS STRING) id_empreendimento, +SAFE_CAST(data_inicio_empreendimento AS DATE) data_inicio, +SAFE_CAST(data_fim_empreendimento AS DATE) data_fim, +SAFE_CAST(finalidade AS STRING) finalidade, +SAFE_CAST(atividade AS STRING) atividade, +SAFE_CAST(modalidade AS STRING) modalidade, +SAFE_CAST(produto AS STRING) produto, +SAFE_CAST(variedade AS STRING) variedade, +SAFE_CAST(cesta_safra AS STRING) cesta_safra, +SAFE_CAST(zoneamento AS STRING) zoneamento, +SAFE_CAST(unidade_medida AS STRING) unidade_medida, +SAFE_CAST(unidade_medida_previsao_producao AS STRING) unidade_medida_previsao_producao, +SAFE_CAST(consorcio AS STRING) consorcio, +SAFE_CAST(cedula_mae AS STRING) cedula_mae, +SAFE_CAST(id_tipo_cultura AS STRING) id_tipo_cultura +FROM basedosdados-staging.br_bcb_sicor_staging.empreendimento AS t \ No newline at end of file diff --git a/models/br_bcb_sicor/br_bcb_sicor__microdados_liberacao.sql b/models/br_bcb_sicor/br_bcb_sicor__microdados_liberacao.sql new file mode 100644 index 00000000..a1ef4a27 --- /dev/null +++ b/models/br_bcb_sicor/br_bcb_sicor__microdados_liberacao.sql @@ -0,0 +1,26 @@ +{{ + config( + alias = 'microdados_liberacao', + schema='br_bcb_sicor', + materialized='table', + partition_by={ + "field": "ano", + "data_type": "int64", + "range": { + "start": 2013, + "end": 2024, + "interval": 1} + }, + cluster_by = ["mes"] + ) +}} + + +SELECT +SAFE_CAST(ano AS INT64) ano, +SAFE_CAST(mes AS INT64) mes, +SAFE_CAST(data_liberacao AS DATE) data_liberacao, +SAFE_CAST(id_referencia_bacen AS STRING) id_referencia_bacen, +SAFE_CAST(numero_ordem AS STRING) numero_ordem, +SAFE_CAST(valor_liberado AS FLOAT64) valor_liberado +FROM basedosdados-staging.br_bcb_sicor_staging.microdados_liberacao AS t \ No newline at end of file diff --git a/models/br_bcb_sicor/br_bcb_sicor__microdados_operacao.sql b/models/br_bcb_sicor/br_bcb_sicor__microdados_operacao.sql new file mode 100644 index 00000000..9b0112e7 --- /dev/null +++ b/models/br_bcb_sicor/br_bcb_sicor__microdados_operacao.sql @@ -0,0 +1,68 @@ +{{ + config( + alias = 'microdados_operacao', + schema='br_bcb_sicor', + materialized='table', + partition_by={ + "field": "ano", + "data_type": "int64", + "range": { + "start": 2013, + "end": 2024, + "interval": 1} + }, + cluster_by = ["sigla_uf", "plano_safra_emissao"] + ) +}} + +SELECT +SAFE_CAST(ano AS INT64) ano, +SAFE_CAST(mes AS INT64) mes, +SAFE_CAST(data_emissao AS DATE) data_emissao, +SAFE_CAST(ano_vencimento AS INT64) ano_vencimento, +SAFE_CAST(mes_vencimento AS INT64) mes_vencimento, +SAFE_CAST(data_vencimento AS DATE) data_vencimento, +SAFE_CAST(plano_safra_emissao AS STRING) plano_safra_emissao, +SAFE_CAST(plano_safra_vencimento AS STRING) plano_safra_vencimento, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE_CAST(id_referencia_bacen AS STRING) id_referencia_bacen, +SAFE_CAST(numero_ordem AS STRING) numero_ordem, +SAFE_CAST(id_categoria_emitente AS STRING) id_categoria_emitente, +SAFE_CAST(id_empreendimento AS STRING) id_empreendimento, +SAFE_CAST(id_fase_ciclo_producao AS STRING) id_fase_ciclo_producao, +SAFE_CAST(id_fonte_recurso AS STRING) id_fonte_recurso, +SAFE_CAST(id_instrumento_credito AS STRING) id_instrumento_credito, +SAFE_CAST(id_programa AS STRING) id_programa, +SAFE_CAST(id_referencia_bacen_investimento AS STRING) id_referencia_bacen_investimento, +SAFE_CAST(id_subprograma AS STRING) id_subprograma, +SAFE_CAST(id_tipo_agricultura AS STRING) id_tipo_agricultura, +SAFE_CAST(id_tipo_cultivo AS STRING) id_tipo_cultivo, +SAFE_CAST(id_tipo_encargo_financeiro AS STRING) id_tipo_encargo_financeiro, +SAFE_CAST(id_tipo_grao_semente AS STRING) id_tipo_grao_semente, +SAFE_CAST(id_tipo_integracao_consorcio AS STRING) id_tipo_integracao_consorcio, +SAFE_CAST(id_tipo_irrigacao AS STRING) id_tipo_irrigacao, +SAFE_CAST(id_tipo_seguro AS STRING) id_tipo_seguro, +SAFE_CAST(cnpj_agente_investimento AS STRING) cnpj_agente_investimento, +SAFE_CAST(cnpj_basico_instituicao_financeira AS STRING) cnpj_basico_instituicao_financeira, +SAFE_CAST(id_contrato_sistema_tesouro_nacional AS STRING) id_contrato_sistema_tesouro_nacional, +SAFE_CAST(cnpj_cadastrante AS STRING) cnpj_cadastrante, +SAFE_CAST(data_fim_colheita AS DATE) data_fim_colheita, +SAFE_CAST(data_fim_plantio AS DATE) data_fim_plantio, +SAFE_CAST(data_inicio_colheita AS DATE) data_inicio_colheita, +SAFE_CAST(data_inicio_plantio AS DATE) data_inicio_plantio, +SAFE_CAST(area_financiada AS FLOAT64) area_financiada, +SAFE_CAST(valor_aliquota_proagro AS FLOAT64) valor_aliquota_proagro, +SAFE_CAST(valor_parcela_credito AS FLOAT64) valor_parcela_credito, +SAFE_CAST(valor_prestacao_investimento AS FLOAT64) valor_prestacao_investimento, +SAFE_CAST(valor_recurso_proprio AS FLOAT64) valor_recurso_proprio, +SAFE_CAST(valor_receita_bruta_esperada AS FLOAT64) valor_receita_bruta_esperada, +SAFE_CAST(valor_recurso_proprio_srv AS FLOAT64) valor_recurso_proprio_srv, +SAFE_CAST(valor_quantidade_itens_financiados AS FLOAT64) valor_quantidade_itens_financiados, +SAFE_CAST(valor_produtividade_obtida AS FLOAT64) valor_produtividade_obtida, +SAFE_CAST(valor_previsao_producao AS FLOAT64) valor_previsao_producao, +SAFE_CAST(taxa_juro AS FLOAT64) taxa_juro, +SAFE_CAST(taxa_juro_encargo_financeiro_posfixado AS FLOAT64) taxa_juro_encargo_financeiro_posfixado, +SAFE_CAST(valor_percentual_custo_efetivo_total AS FLOAT64) valor_percentual_custo_efetivo_total, +SAFE_CAST(valor_percentual_risco_fundo_constitucional AS FLOAT64) valor_percentual_risco_fundo_constitucional, +SAFE_CAST(valor_percentual_risco_stn AS FLOAT64) valor_percentual_risco_stn +FROM basedosdados-staging.br_bcb_sicor_staging.microdados_operacao AS t \ No newline at end of file diff --git a/models/br_bcb_sicor/br_bcb_sicor__microdados_saldo.sql b/models/br_bcb_sicor/br_bcb_sicor__microdados_saldo.sql new file mode 100644 index 00000000..08609d9e --- /dev/null +++ b/models/br_bcb_sicor/br_bcb_sicor__microdados_saldo.sql @@ -0,0 +1,27 @@ +{{ + config( + alias = 'microdados_saldo', + schema='br_bcb_sicor', + materialized='table', + partition_by={ + "field": "ano", + "data_type": "int64", + "range": { + "start": 2013, + "end": 2024, + "interval": 1} + }, + cluster_by = ["mes"] + ) +}} + +SELECT +SAFE_CAST(ano AS INT64) ano, +SAFE_CAST(mes AS INT64) mes, +SAFE_CAST(id_referencia_bacen AS STRING) id_referencia_bacen, +SAFE_CAST(numero_ordem AS STRING) numero_ordem, +SAFE_CAST(id_situacao_operacao AS STRING) id_situacao_operacao, +SAFE_CAST(valor_medio_diario AS FLOAT64) valor_medio_diario, +SAFE_CAST(valor_medio_diario_vincendo AS FLOAT64) valor_medio_diario_vincendo, +SAFE_CAST(valor_ultimo_dia AS FLOAT64) valor_ultimo_dia +FROM basedosdados-staging.br_bcb_sicor_staging.microdados_saldo AS t \ No newline at end of file diff --git a/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_complemento_operacao.sql b/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_complemento_operacao.sql new file mode 100644 index 00000000..f06980fa --- /dev/null +++ b/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_complemento_operacao.sql @@ -0,0 +1,19 @@ +{{ + config( + alias = 'recurso_publico_complemento_operacao', + schema='br_bcb_sicor', + materialized='table', + partition_by = { + "field": "id_municipio", + "data_type": "string" + } + ) +}} + +SELECT +SAFE_CAST(id_referencia_bacen AS STRING) id_referencia_bacen, +SAFE_CAST(id_municipio AS STRING) id_municipio, +SAFE_CAST(numero_ordem AS STRING) numero_ordem, +SAFE_CAST(id_referencia_bacen_efetivo AS STRING) id_referencia_bacen_efetivo, +SAFE_CAST(id_agencia AS STRING) id_agencia +FROM basedosdados-staging.br_bcb_sicor_staging.recurso_publico_complemento_operacao AS t \ No newline at end of file diff --git a/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_cooperado.sql b/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_cooperado.sql new file mode 100644 index 00000000..1bb3fbed --- /dev/null +++ b/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_cooperado.sql @@ -0,0 +1,15 @@ +{{ + config( + alias = 'recurso_publico_cooperado', + schema='br_bcb_sicor', + materialized='table', + ) +}} + +SELECT +SAFE_CAST(id_referencia_bacen AS STRING) id_referencia_bacen, +SAFE_CAST(numero_ordem AS STRING) numero_ordem, +SAFE_CAST(tipo_cpf_cnpj AS STRING) tipo_cpf_cnpj, +SAFE_CAST(tipo_pessoa AS STRING) tipo_pessoa, +SAFE_CAST(valor_parcela AS FLOAT64) valor_parcela +FROM basedosdados-staging.br_bcb_sicor_staging.recurso_publico_cooperado AS t \ No newline at end of file diff --git a/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_gleba.sql b/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_gleba.sql new file mode 100644 index 00000000..069a3e03 --- /dev/null +++ b/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_gleba.sql @@ -0,0 +1,16 @@ +{{ + config( + alias = 'recurso_publico_gleba', + schema='br_bcb_sicor', + materialized='table' + ) +}} +SELECT +SAFE_CAST(id_referencia_bacen AS STRING) id_referencia_bacen, +SAFE_CAST(numero_ordem AS STRING) numero_ordem, +SAFE_CAST(numero_identificador_gleba AS STRING) numero_identificador_gleba, +SAFE_CAST(indice_indice_gleba AS INT64) indice_gleba, +SAFE_CAST(indice_indice_ponto AS INT64) indice_ponto, +ST_GEOGPOINT(SAFE_CAST(longitude AS FLOAT64),SAFE_CAST(latitude AS FLOAT64)) ponto, +SAFE_CAST(altitude AS FLOAT64) altitude +FROM basedosdados-staging.br_bcb_sicor_staging.recurso_publico_gleba AS t \ No newline at end of file diff --git a/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_mutuario.sql b/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_mutuario.sql new file mode 100644 index 00000000..36023f6c --- /dev/null +++ b/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_mutuario.sql @@ -0,0 +1,16 @@ +{{ + config( + alias = 'recurso_publico_mutuario', + schema='br_bcb_sicor', + materialized='table', + ) +}} + + +SELECT +SAFE_CAST(id_referencia_bacen AS STRING) id_referencia_bacen, +SAFE_CAST(indicador_sexo AS INT64) indicador_sexo, +SAFE_CAST(tipo_cpf_cnpj AS STRING) tipo_cpf_cnpj, +SAFE_CAST(tipo_beneficiario AS STRING) tipo_beneficiario, +SAFE_CAST(id_dap AS STRING) id_dap +FROM basedosdados-staging.br_bcb_sicor_staging.recurso_publico_mutuario AS t \ No newline at end of file diff --git a/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_propriedade.sql b/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_propriedade.sql new file mode 100644 index 00000000..553e0e1f --- /dev/null +++ b/models/br_bcb_sicor/br_bcb_sicor__recurso_publico_propriedade.sql @@ -0,0 +1,16 @@ +{{ + config( + alias = 'recurso_publico_propriedade', + schema='br_bcb_sicor', + materialized='table', + ) +}} + +SELECT +SAFE_CAST(id_referencia_bacen AS STRING) id_referencia_bacen, +SAFE_CAST(numero_ordem AS STRING) numero_ordem, +SAFE_CAST(tipo_cpf_cnpj AS STRING) tipo_cpf_cnpj, +SAFE_CAST(id_sncr AS STRING) id_sncr, +SAFE_CAST(id_nirf AS STRING) id_nirf, +SAFE_CAST(id_car AS STRING) id_car +FROM basedosdados-staging.br_bcb_sicor_staging.recurso_publico_propriedade AS t \ No newline at end of file diff --git a/models/br_bcb_sicor/schema.yml b/models/br_bcb_sicor/schema.yml new file mode 100644 index 00000000..01a52a5d --- /dev/null +++ b/models/br_bcb_sicor/schema.yml @@ -0,0 +1,254 @@ +version: 2 + +models: + - name: br_bcb_sicor__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_bcb_sicor__microdados_operacao + description: A tabela de Operações contém os microdados das contratações de crédito de cada estado brasileiro. Nela, estão presentes principais informações (categoria de produtor; fonte de recursos; instituição credora; produto financiado e etc) das mais de 19 milhôes de operações de crédito rural registradas no SICOR no período. É importante salientar que cada linha não necessariamente representa uma operação completa. É possível que uma unica operação (identificada pelo id_referencia_bacen) contenha diversos itens e, portanto, seja subdividida em ordens. + columns: + - name: ano + description: Ano da emissão da operação + - name: mes + description: Mês de emissão da operação + - name: data_emissao + description: Data de emissão da operação + - name: ano_vencimento + description: Ano de vencimento da operação + - name: mes_vencimento + description: Mês de vencimento da operação + - name: data_vencimento + description: Data de vencimento da operação + - name: plano_safra_emissao + description: Plano safra de emissao da operação + - name: plano_safra_vencimento + description: Plano safra de vencimento da operação + - name: sigla_uf + description: Sigla da Unidade da Federação + - name: id_referencia_bacen + description: Identificador único de cada operação de crédito + - name: numero_ordem + description: Identificador da quantidade de ordens que compõem uma operação de crédito + - name: id_categoria_emitente + description: Identificador da categoria do emitente + - name: id_empreendimento + description: Identificador do empreendimento + - name: id_fase_ciclo_producao + description: Identificador da fase ciclo de produção + - name: id_fonte_recurso + description: Identificador da fonte de recursos + - name: id_instrumento_credito + description: Identificador do instrumento de crédito + - name: id_programa + description: Identificador do programa cujo crédito concedido está relacionado + - name: id_referencia_bacen_investimento + description: Identificador do refbacen de investimento + - name: id_subprograma + description: Identificador do subprograma + - name: id_tipo_agricultura + description: Identificador do tipo de agricultura + - name: id_tipo_cultivo + description: Identificador do tipo de cultivo + - name: id_tipo_encargo_financeiro + description: Identificador do tipo de encargos financeiros + - name: id_tipo_grao_semente + description: Identificador do tipo de grão/semente + - name: id_tipo_integracao_consorcio + description: Identificador do tipo de integração/consórcio + - name: id_tipo_irrigacao + description: Identificador de tipo de irrigação + - name: id_tipo_seguro + description: Identificador do tipo de seguro + - name: cnpj_agente_investimento + description: Concedente da operação de investimento + - name: cnpj_basico_instituicao_financeira + description: CNPJ da instituição financeira concedente do crédito + - name: id_contrato_sistema_tesouro_nacional + description: Código da Secretaria do Tesouro Nacional + - name: cnpj_cadastrante + description: O BACEN não fornece descrição dessa variável nos metadados + - name: data_fim_colheita + description: Data do fim de colheita + - name: data_fim_plantio + description: Data do fim de plantio + - name: data_inicio_colheita + description: Data do início de colheita + - name: data_inicio_plantio + description: Data do início de plantio + - name: area_financiada + description: Área financiada + - name: valor_aliquota_proagro + description: Valor da alíquota do Proagro + - name: valor_parcela_credito + description: Valor da parcela de crédito + - name: valor_prestacao_investimento + description: Valor da prestação de investimento + - name: valor_recurso_proprio + description: Valor do recurso próprio + - name: valor_receita_bruta_esperada + description: Valor da receita bruta esperada + - name: valor_recurso_proprio_srv + description: Garantia de renda mínima do Sistema de Valores a Receber (SRV) + - name: valor_quantidade_itens_financiados + description: Valor da quantidade de itens financiados + - name: valor_produtividade_obtida + description: Valor da produtividade obtida + - name: valor_previsao_producao + description: Valor da previsão de produção + - name: taxa_juro + description: Taxa de juros + - name: taxa_juro_encargo_financeiro_posfixado + description: Taxa de juros do encargo financeiro + - name: valor_percentual_custo_efetivo_total + description: Valor percentual do custo efetivo total + - name: valor_percentual_risco_fundo_constitucional + description: Valor percentual do risco do fundo constitucional + - name: valor_percentual_risco_stn + description: Valor percentual risco da Secretaria do Tesouro Nacional (STN) + - name: br_bcb_sicor__microdados_saldo + description: Esta tabela contém microdados sobre a evolução contábil mensal das operações de crédito rural em curso e já quitadas. Para o aproveitamento completo, sugere-se que esta seja utilizada em conjunto com as tabelas de Operações (microdados_operacao) e liberações (microdados_liberacao) a depender das necessidades de análise. + columns: + - name: ano + description: Ano de referência do saldo + - name: mes + description: Mês de referência do saldo + - name: id_referencia_bacen + description: Identificador único de cada operação de crédito + - name: numero_ordem + description: Identificador da quantidade de ordens que compõem uma operação de crédito + - name: id_situacao_operacao + description: Situação da operação + - name: valor_medio_diario + description: Saldo médio diário + - name: valor_medio_diario_vincendo + description: Saldo médio diário vincendo + - name: valor_ultimo_dia + description: Saldo do último dia + - name: br_bcb_sicor__microdados_liberacao + description: Esta tabela contém o registro dos recursos liberados pelas instituições financeiras no decorrer de uma operação de crédito, durante 2013 a julho de 2022. A liberação obedece o cronograma de liberação de recursos estipulado no ato da assinatura do contrato que formaliza a operação de crédito rural. Por meio desta base é possível descobrir o montante de recursos efetivamente liberado bem como o status da operação de crédito. Recomenda-se que seja utilizado em conjunto com a tabela de Operações (microdados_operações) e de Saldos (microdados_saldos) a depender das necessidades de análise. + columns: + - name: ano + description: Ano de referência do valor liberado total ou parcial + - name: mes + description: Mês de referência do valor liberado total ou parcial + - name: data_liberacao + description: Data de liberação da parcela de crédito total ou parcial + - name: id_referencia_bacen + description: Identificador único de cada operação de crédito + - name: numero_ordem + description: Identificador da quantidade de ordens que compõem uma operação de crédito + - name: valor_liberado + description: Valor total ou parcial liberado na parcela de crédito + - name: br_bcb_sicor__empreendimento + description: A tabela de empreendimentos é um catálogo do que foi e do que é financiado. Recomenda-se que ela seja utilizada em conjunto com os microdadados de operações de crédito (microdados_operacao) para se ter uma visão completa dos produtos, atividades e demais atributos da operação de crédito que foram alvo de financiamento. + columns: + - name: id_empreendimento + description: Código do empreendimento + - name: data_inicio + description: Data de criação do empreendimento + - name: data_fim + description: Data de fim do empreendimento + - name: finalidade + description: Finalidade do empreendimento + - name: atividade + description: Atividade do empreendimento + - name: modalidade + description: Modalidade do empreendimento + - name: produto + description: Produto do empreendimento + - name: variedade + description: Variedade do empreendimento + - name: cesta_safra + description: Cesta de safras do empreendimento + - name: zoneamento + description: Zoneamento do empreendimento + - name: unidade_medida + description: Unidade de medida do produto financiado no empreendimento + - name: unidade_medida_previsao_producao + description: Unidade de medida de previsão de produção do produto financiado no empreendimento + - name: consorcio + description: Consórcio do empreendimento + - name: cedula_mae + description: Indica se o empreendimento refere-se a uma cédula mãe + - name: id_tipo_cultura + description: Código do tipo de cultura do empreendimento + - name: br_bcb_sicor__recurso_publico_complemento_operacao + description: Em 2023 o Banco Central do Brasil (BCB) liberou informações adicionais das operações de crédito que foram financiadas com recursos públicos. + columns: + - name: id_referencia_bacen + description: Identificador único de cada operação de crédito + - name: id_municipio + description: ID município 7 dígitos + - name: numero_ordem + description: Identificador da quantidade de ordens que compõem uma operação + de crédito + - name: id_referencia_bacen_efetivo + description: Identificador único de cada operação de crédito explícito + - name: id_agencia + description: Identificador da agência da Instituição Financeira + - name: br_bcb_sicor__recurso_publico_propriedade + description: Em 2023 o Banco Central do Brasil (BCB) liberou informações adicionais das operações de crédito que foram financiadas com recursos públicos. Esta tabela contém dados adicionais do imóvel rural de aplicação do crédito. + columns: + - name: id_referencia_bacen + description: Identificador único de cada operação de crédito + - name: numero_ordem + description: Identificador da quantidade de ordens que compõem uma operação de crédito + - name: tipo_cpf_cnpj + description: CPF ou CNPJ do proprietário + - name: id_sncr + description: Identificar do Imóvel no Sistema Nacional de Cadastro Rural (SNCR) + - name: id_nirf + description: Identificador do Imóvel na Receita Federal (NIRF) + - name: id_car + description: Identificador do Cadastro da Área Rural (CAR) + - name: br_bcb_sicor__recurso_publico_mutuario + description: Em 2023 o Banco Central do Brasil (BCB) liberou informações adicionais das operações de crédito que foram financiadas com recursos públicos. Esta tabela contém dados adicionais sobre o mutuário (tomador do empréstimo). + columns: + - name: id_referencia_bacen + description: Identificador único de cada operação de crédito + - name: indicador_sexo + description: Sexo + - name: tipo_cpf_cnpj + description: CPF ou CNPJ do beneficiário + - name: tipo_beneficiario + description: Tipo do Beneficiário + - name: id_dap + description: Identificador da Declaração de Aptidão ao PRONAF (DAP) + - name: br_bcb_sicor__recurso_publico_gleba + description: Em 2023 o Banco Central do Brasil (BCB) liberou informações adicionais das operações de crédito que foram financiadas com recursos públicos. Esta tabela contém dados adicionais sobre as coordenadas geográficas das glebas do imóvel do mutuário. + columns: + - name: id_referencia_bacen + description: Identificador único de cada operação de crédito + - name: numerio_ordem + description: Identificador da quantidade de ordens que compõem uma operação de crédito + - name: numero_identificador_gleba + description: Código identificador da gleba + - name: indice_gleba + description: Número da gleba + - name: indice_ponto + description: Número do ponto + - name: ponto + description: ponto + - name: br_bcb_sicor__recurso_publico_cooperado + description: Em 2023 o Banco Central do Brasil (BCB) liberou informações adicionais das operações de crédito que foram financiadas com recursos públicos. Esta tabela identifica o repasse do crédito a cada menbro de uma cooperativa, caso exista. + columns: + - name: id_referencia_bacen + description: Identificador único de cada operação de crédito + - name: numero_ordem + description: Identificador da quantidade de ordens que compõem uma operação de crédito + - name: tipo_cpf_cnpj + description: CPF ou CNPJ do cooperado + - name: tipo_pessoa + description: Tipo da pessoa jurídica + - name: valor_parcela + description: Valor da parcela de crédito do cooperado diff --git a/models/br_cvm_administradores_carteira/br_cvm_administradores_carteira__pessoa_fisica.sql b/models/br_cvm_administradores_carteira/br_cvm_administradores_carteira__pessoa_fisica.sql new file mode 100644 index 00000000..77616332 --- /dev/null +++ b/models/br_cvm_administradores_carteira/br_cvm_administradores_carteira__pessoa_fisica.sql @@ -0,0 +1,39 @@ +{{ + config( + alias = 'pessoa_fisica', + schema='br_cvm_administradores_carteira', + materialized='incremental', + partition_by = { + "field": "data_registro", + "data_type": "date", + "granularity": "day" + }, + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(data_registro), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(data_registro), MONTH) <= 6)'] + ) + }} +WITH tabela as( SELECT +SAFE_CAST(nome AS STRING) nome, +SAFE_CAST(data_registro AS DATE) data_registro, +SAFE_CAST(data_cancelamento AS DATE) data_cancelamento, +SAFE_CAST(motivo_cancelamento AS STRING) motivo_cancelamento, +SAFE_CAST(situacao AS STRING) situacao, +SAFE_CAST(data_inicio_situacao AS DATE) data_inicio_situacao, +SAFE_CAST(categoria_registro AS STRING) categoria_registro +FROM basedosdados-staging.br_cvm_administradores_carteira_staging.pessoa_fisica AS t) +select * +from tabela +{% if is_incremental() %} + + -- this filter will only be applied on an incremental run + -- (uses > to include records whose timestamp occurred since the last run of this model) + where data_registro > (select max(data_registro) from {{ this }}) + +{% endif %} \ No newline at end of file diff --git a/models/br_cvm_administradores_carteira/pessoa_juridica.sql b/models/br_cvm_administradores_carteira/br_cvm_administradores_carteira__pessoa_juridica.sql similarity index 50% rename from models/br_cvm_administradores_carteira/pessoa_juridica.sql rename to models/br_cvm_administradores_carteira/br_cvm_administradores_carteira__pessoa_juridica.sql index 9ba9e906..1758f79b 100644 --- a/models/br_cvm_administradores_carteira/pessoa_juridica.sql +++ b/models/br_cvm_administradores_carteira/br_cvm_administradores_carteira__pessoa_juridica.sql @@ -1,4 +1,26 @@ -SELECT +{{ + config( + alias = 'pessoa_juridica', + schema='br_cvm_administradores_carteira', + materialized='incremental', + partition_by = { + "field": "data_registro", + "data_type": "date", + "granularity": "day" + }, + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(data_registro), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(data_registro), MONTH) <= 6)' ] + ) + }} + +WITH tabela as(SELECT SAFE_CAST(cnpj AS STRING) cnpj, SAFE_CAST(denominacao_social AS STRING) denominacao_social, SAFE_CAST(denominacao_comercial AS STRING) denominacao_comercial, @@ -23,4 +45,13 @@ SAFE_CAST(valor_patrimonial_liquido AS STRING) valor_patrimonial_liquido, SAFE_CAST(data_patrimonio_liquido AS DATE) data_patrimonio_liquido, SAFE_CAST(email AS STRING) email, SAFE_CAST(website AS STRING) website -FROM basedosdados-staging.br_cvm_administradores_carteira_staging.pessoa_juridica AS t \ No newline at end of file +FROM basedosdados-staging.br_cvm_administradores_carteira_staging.pessoa_juridica AS t) +select * +from tabela +{% if is_incremental() %} + + -- this filter will only be applied on an incremental run + -- (uses > to include records whose timestamp occurred since the last run of this model) + where data_registro > (select max(data_registro) from {{ this }}) + +{% endif %} \ No newline at end of file diff --git a/models/br_cvm_administradores_carteira/responsavel.sql b/models/br_cvm_administradores_carteira/br_cvm_administradores_carteira__responsavel.sql similarity index 53% rename from models/br_cvm_administradores_carteira/responsavel.sql rename to models/br_cvm_administradores_carteira/br_cvm_administradores_carteira__responsavel.sql index 17a538d5..8b29e4e5 100644 --- a/models/br_cvm_administradores_carteira/responsavel.sql +++ b/models/br_cvm_administradores_carteira/br_cvm_administradores_carteira__responsavel.sql @@ -1,5 +1,12 @@ +{{ + config( + alias = 'responsavel', + schema='br_cvm_administradores_carteira', + materialized='table', + ) + }} SELECT SAFE_CAST(cnpj AS STRING) cnpj, SAFE_CAST(nome AS STRING) nome, SAFE_CAST(tipo AS STRING) tipo -FROM basedosdados-staging.br_cvm_administradores_carteira_staging.responsavel AS t \ No newline at end of file +FROM basedosdados-staging.br_cvm_administradores_carteira_staging.responsavel AS t diff --git a/models/br_cvm_administradores_carteira/pessoa_fisica.sql b/models/br_cvm_administradores_carteira/pessoa_fisica.sql deleted file mode 100644 index 5ff17cdb..00000000 --- a/models/br_cvm_administradores_carteira/pessoa_fisica.sql +++ /dev/null @@ -1,9 +0,0 @@ -SELECT -SAFE_CAST(nome AS STRING) nome, -SAFE_CAST(data_registro AS DATE) data_registro, -SAFE_CAST(data_cancelamento AS DATE) data_cancelamento, -SAFE_CAST(motivo_cancelamento AS STRING) motivo_cancelamento, -SAFE_CAST(situacao AS STRING) situacao, -SAFE_CAST(data_inicio_situacao AS DATE) data_inicio_situacao, -SAFE_CAST(categoria_registro AS STRING) categoria_registro -FROM basedosdados-staging.br_cvm_administradores_carteira_staging.pessoa_fisica AS t diff --git a/models/br_cvm_administradores_carteira/schema.yml b/models/br_cvm_administradores_carteira/schema.yml index bfe3771c..5c806e22 100644 --- a/models/br_cvm_administradores_carteira/schema.yml +++ b/models/br_cvm_administradores_carteira/schema.yml @@ -1,8 +1,8 @@ version: 2 models: - - name: pessoa_fisica - description: "dbt model for pessoa_fisica" + - name: br_cvm_administradores_carteira__pessoa_fisica + description: Dados Cadastrais de Administradores de Carteira da CVM (Pessoa Física) columns: - name: nome description: Nome @@ -18,8 +18,8 @@ models: description: Data de início da situação - name: categoria_registro description: Categoria de registro - - name: pessoa_juridica - description: "dbt model for pessoa_juridica" + - name: br_cvm_administradores_carteira__pessoa_juridica + description: Dados Cadastrais de Administradores de Carteira da CVM (Pessoa Jurídica) columns: - name: cnpj description: Cadastro Nacional de Pessoas Jurídicas (CNPJ) @@ -69,8 +69,8 @@ models: description: Email - name: website description: Website - - name: responsavel - description: "dbt model for responsavel" + - name: br_cvm_administradores_carteira__responsavel + description: Dados Cadastrais de Administradores de Carteira da CVM. columns: - name: cnpj description: Cadastro Nacional de Pessoas Jurídicas (CNPJ) diff --git a/models/br_cvm_oferta_publica_distribuicao/dia.sql b/models/br_cvm_oferta_publica_distribuicao/br_cvm_oferta_publica_distribuicao__dia.sql similarity index 67% rename from models/br_cvm_oferta_publica_distribuicao/dia.sql rename to models/br_cvm_oferta_publica_distribuicao/br_cvm_oferta_publica_distribuicao__dia.sql index 57996280..90fedc02 100644 --- a/models/br_cvm_oferta_publica_distribuicao/dia.sql +++ b/models/br_cvm_oferta_publica_distribuicao/br_cvm_oferta_publica_distribuicao__dia.sql @@ -1,4 +1,26 @@ -SELECT +{{ + config( + alias = 'dia', + schema='br_cvm_oferta_publica_distribuicao', + materialized='incremental', + partition_by = { + "field": "data_abertura_processo", + "data_type": "date", + "granularity": "day" + }, + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(data_abertura_processo), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(data_abertura_processo), MONTH) <= 6)'] + ) + }} + +WITH tabela as(SELECT SAFE_CAST(numero_processo AS STRING) numero_processo, SAFE_CAST(numero_registro_oferta AS STRING) numero_registro_oferta, SAFE_CAST(tipo_oferta AS STRING) tipo_oferta, @@ -43,4 +65,13 @@ SAFE_CAST(tipo_societario_emissor AS STRING) tipo_societario_emissor, SAFE_CAST(tipo_fundo_investimento AS STRING) tipo_fundo_investimento, SAFE_CAST(ultimo_comunicado AS STRING) ultimo_comunicado, SAFE_CAST(data_comunicado AS DATE) data_comunicado -FROM basedosdados-staging.br_cvm_oferta_publica_distribuicao_staging.dia AS t +FROM basedosdados-staging.br_cvm_oferta_publica_distribuicao_staging.dia AS t) +SELECT * +FROM tabela +{% if is_incremental() %} + + -- this filter will only be applied on an incremental run + -- (uses > to include records whose timestamp occurred since the last run of this model) + where data_abertura_processo > (select max(data_abertura_processo) from {{ this }}) + +{% endif %} \ No newline at end of file diff --git a/models/br_cvm_oferta_publica_distribuicao/schema.yml b/models/br_cvm_oferta_publica_distribuicao/schema.yml index 7d908b1b..a0f92c57 100644 --- a/models/br_cvm_oferta_publica_distribuicao/schema.yml +++ b/models/br_cvm_oferta_publica_distribuicao/schema.yml @@ -1,8 +1,8 @@ version: 2 models: - - name: dia - description: "dbt model for table dia" + - name: br_cvm_oferta_publica_distribuicao__dia + description: Ofertas de distribuição (ações, fundos, debêntures, CRI, etc) registradas ou dispensadas de registro. columns: - name: numero_processo description: Número do processo administrativo diff --git a/models/br_fbsp_absp/br_fbsp_absp__uf.sql b/models/br_fbsp_absp/br_fbsp_absp__uf.sql new file mode 100644 index 00000000..a27c36d6 --- /dev/null +++ b/models/br_fbsp_absp/br_fbsp_absp__uf.sql @@ -0,0 +1,37 @@ +{{ + config( + alias='uf', + schema='br_fbsp_absp' + ) +}} +SELECT +SAFE_CAST(ano AS INT64) ano, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE_CAST(quantidade_cvli AS INT64) quantidade_cvli, +SAFE_CAST(quantidade_feminicidio AS INT64) quantidade_feminicidio, +SAFE_CAST(quantidade_ocorrencia_homicidio_doloso AS INT64) quantidade_ocorrencia_homicidio_doloso, +SAFE_CAST(quantidade_vitima_homicidio_doloso AS INT64) quantidade_vitima_homicidio_doloso, +SAFE_CAST(quantidade_latrocinio AS INT64) quantidade_latrocinio, +SAFE_CAST(quantidade_lesao_corporal_seguida_de_morte AS INT64) quantidade_lesao_corporal_seguida_de_morte, +SAFE_CAST(quantidade_morte_a_esclarecer AS INT64) quantidade_morte_a_esclarecer, +SAFE_CAST(quantidade_morte_intervencao_policial_civil_servico AS INT64) quantidade_morte_intervencao_policial_civil_servico, +SAFE_CAST(quantidade_morte_intervencao_policial_civil_fora_servico AS INT64) quantidade_morte_intervencao_policial_civil_fora_servico, +SAFE_CAST(quantidade_morte_intervencao_policial_militar_servico AS INT64) quantidade_morte_intervencao_policial_militar_servico, +SAFE_CAST(quantidade_morte_intervencao_policial_militar_fora_servico AS INT64) quantidade_morte_intervencao_policial_militar_fora_servico, +SAFE_CAST(quantidade_morte_violenta_intencional AS INT64) quantidade_morte_violenta_intencional, +SAFE_CAST(quantidade_policial_civil_morto_confronto_servico AS INT64) quantidade_policial_civil_morto_confronto_servico, +SAFE_CAST(quantidade_policial_civil_morto_confronto_fora_servico AS INT64) quantidade_policial_civil_morto_confronto_fora_servico, +SAFE_CAST(quantidade_policial_militar_morto_confronto_servico AS INT64) quantidade_policial_militar_morto_confronto_servico, +SAFE_CAST(quantidade_policial_militar_morto_confronto_fora_servico AS INT64) quantidade_policial_militar_morto_confronto_fora_servico, +SAFE_CAST(quantidade_suicidio AS INT64) quantidade_suicidio, +SAFE_CAST(quantidade_estupro AS INT64) quantidade_estupro, +SAFE_CAST(quantidade_tentativa_estupro AS INT64) quantidade_tentativa_estupro, +SAFE_CAST(quantidade_furto_veiculo AS INT64) quantidade_furto_veiculo, +SAFE_CAST(quantidade_roubo_instituicao_financeira AS INT64) quantidade_roubo_instituicao_financeira, +SAFE_CAST(quantidade_roubo_carga AS INT64) quantidade_roubo_carga, +SAFE_CAST(quantidade_roubo_de_veiculo AS INT64) quantidade_roubo_de_veiculo, +SAFE_CAST(quantidade_arma_fogo_apreendida AS INT64) quantidade_arma_fogo_apreendida, +SAFE_CAST(quantidade_registro_pessoa_desaparecida AS INT64) quantidade_registro_pessoa_desaparecida, +SAFE_CAST(quantidade_populacao_sistema_penitenciario AS INT64) quantidade_populacao_sistema_penitenciario, +SAFE_CAST(despesa_empenhada_seguranca_publica AS FLOAT64) despesa_empenhada_seguranca_publica +FROM basedosdados-staging.br_fbsp_absp_staging.uf AS t diff --git a/models/br_fbsp_absp/code/clean_data.py b/models/br_fbsp_absp/code/clean_data.py new file mode 100644 index 00000000..a49fc1f0 --- /dev/null +++ b/models/br_fbsp_absp/code/clean_data.py @@ -0,0 +1,51 @@ +import os +import pandas as pd +from columns import columns_order, real_columns + + +def set_row(df): + keys = df.columns.tolist() + modelo_dict = {keys[n]: 0 for n in range(len(keys))} + return modelo_dict + + +def get_clean_data(): + + arquivos = os.listdir(os.getcwd().replace("code", "input")) + + dfs = [pd.read_excel(f"../input/{df}") for df in arquivos] + df = pd.concat(dfs) + + df_group = df.groupby(["ano", "uf"], group_keys=True).apply(lambda x: x)[["tipo_de_crime", "qtd"]] + df_raw = pd.DataFrame(columns=columns_order) + + modelo_dict = set_row(df_raw) + for ano in df["ano"].sort_values(ascending=False).unique(): + for uf in df["uf"].unique(): + condition = (df_group.index.get_level_values("uf") == uf) & (df_group.index.get_level_values("ano") == ano) + modelo_dict["ano"] = ano + modelo_dict["sigla_uf"] = uf + for dado in df_group[condition].iloc: + modelo_dict[dado[0]] = dado[1] + df_raw.loc[len(df_raw)] = modelo_dict + modelo_dict = set_row(df_raw) + + remove_list_colunas = [ + "Mortes decorrentes de intervenções policiais - Total (Policiais civis e militares em serviço e fora)", + "Roubo e furto de veículos"] + + for remove in remove_list_colunas: + df_raw = df_raw.drop(remove, axis=1) + + for column in df_raw.columns: + if column not in ["ano", "sigla_uf", "Despesas empenhadas na Função Segurança Pública"]: + df_raw[column] = df_raw[column].astype("Int64") + + df_raw.columns = real_columns + df_raw = df_raw[~df_raw["sigla_uf"].isin(["Brasil"])] + + df_raw.to_csv("../output/br_fbsp_absp_uf.csv", index=False) + + +if __name__ == '__main__': + get_clean_data() diff --git a/models/br_fbsp_absp/code/columns.py b/models/br_fbsp_absp/code/columns.py new file mode 100644 index 00000000..99441016 --- /dev/null +++ b/models/br_fbsp_absp/code/columns.py @@ -0,0 +1,61 @@ +columns_order = ['ano', + 'sigla_uf', + 'CVLI Crimes violentos letais intencionais', + 'Feminicídios', + 'Homicídio doloso - N° ocorrências', + 'Homicídio doloso - N° vítimas', + 'Latrocínio', + 'Lesão corporal seguida de morte', + 'Mortes a esclarecer', + 'Mortes decorrentes de intervenções de Policiais Civis em serviço', + 'Mortes decorrentes de intervenções de Policiais Civis fora de serviço', + 'Mortes decorrentes de intervenções de Policiais Militares em serviço', + 'Mortes decorrentes de intervenções de Policiais Militares fora de serviço', + 'Mortes decorrentes de intervenções policiais - Total (Policiais civis e militares em serviço e fora)', + 'Mortes Violentas Intencionais', + 'Policiais Civis mortos em confronto em serviço', + 'Policiais Civis mortos em confronto ou por lesão não natural fora de serviço', + 'Policiais Militares mortos em confronto em serviço', + 'Policiais Militares mortos em confronto ou por lesão não natural fora de serviço', + 'Suicídio', + 'Estupro (incluindo Estupro de Vulnerável)', + 'Tentativa de estupro', + 'Furto de veículo', + 'Roubo a instituição financeira', + 'Roubo de carga', + 'Roubo de veículo', + 'Roubo e furto de veículos', + 'Armas de fogo apreendidas', + 'Registros de pessoas desaparecidas', + 'População do sistema penitenciário', + 'Despesas empenhadas na Função Segurança Pública'] + +real_columns = ["ano", + "sigla_uf", + "quantidade_cvli", + "quantidade_feminicidio", + "quantidade_ocorrencia_homicidio_doloso", + "quantidade_vitima_homicidio_doloso", + "quantidade_latrocinio", + "quantidade_lesao_corporal_seguida_de_morte", + "quantidade_morte_a_esclarecer", + "quantidade_morte_intervencao_policial_civil_servico", + "quantidade_morte_intervencao_policial_civil_fora_servico", + "quantidade_morte_intervencao_policial_militar_servico", + "quantidade_morte_intervencao_policial_militar_fora_servico", + "quantidade_morte_violenta_intencional", + "quantidade_policial_civil_morto_confronto_servico", + "quantidade_policial_civil_morto_confronto_fora_servico", + "quantidade_policial_militar_morto_confronto_servico", + "quantidade_policial_militar_morto_confronto_fora_servico", + "quantidade_suicidio", + "quantidade_estupro", + "quantidade_tentativa_estupro", + "quantidade_furto_veiculo", + "quantidade_roubo_instituicao_financeira", + "quantidade_roubo_carga", + "quantidade_roubo_de_veiculo", + "quantidade_arma_fogo_apreendida", + "quantidade_registro_pessoa_desaparecida", + "quantidade_populacao_sistema_penitenciario", + "despesa_empenhada_seguranca_publica"] diff --git a/models/br_fbsp_absp/code/download_data.py b/models/br_fbsp_absp/code/download_data.py new file mode 100644 index 00000000..6f27cf80 --- /dev/null +++ b/models/br_fbsp_absp/code/download_data.py @@ -0,0 +1,74 @@ +from selenium import webdriver +from selenium.webdriver.firefox.options import Options +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.common.by import By +from selenium.webdriver.support import expected_conditions as EC +from time import sleep +import os + + +def select_selection_download(website): + + abas_dic = [[2, 18, 'tableau_mvi-downloadData'], + [7, 2, 'tableau_estupro-downloadData'], + [12, 5, 'tableau_patrimonial-downloadData'], + [17, 1, 'tableau_mvi_armas-downloadData'], + [22, 1, 'tableau_mvi_gastos-downloadData'], + [27, 1, 'tableau_mvi_desap-downloadData'], + [32, 1, 'tableau_mvi_pop_pris-downloadData']] + + click(website, By.CSS_SELECTOR, "a.dropdown-toggle") + dropdown = website.find_element(By.CSS_SELECTOR, "ul.dropdown-menu") + dropdown = dropdown.find_elements(By.CSS_SELECTOR, "li a") + + for aba_n, aba in enumerate(dropdown): + sleep(2) + website.execute_script("arguments[0].click();", aba) + + for n in range(abas_dic[aba_n][1]): + try: + + click(website, By.CSS_SELECTOR, f'[aria-owns="bs-select-{abas_dic[aba_n][0]}"]') + + click(website, By.ID, f'bs-select-{abas_dic[aba_n][0]}-{n}') + + click(website, By.ID, abas_dic[aba_n][2]) + + except Exception as Error: + print(Error) + break + + +def create_website(): + options = Options() + options.add_argument('-headless') + options.set_preference('browser.download.folderList', 2) + options.set_preference('browser.download.manager.showWhenStarting', False) + options.set_preference('browser.download.dir', os.getcwd().replace("code", "input")) + options.set_preference('browser.helperApps.neverAsk.saveToDisk', "application/x-gzip") + + website = webdriver.Firefox(options=options) + wait = WebDriverWait(website, 10) + + website.get( + f"http://forumseguranca.org.br:3838/") + wait.until(EC.visibility_of_element_located((By.ID, 'tableau_mvi-downloadData'))) + + return website + + +def click(website, by, match, time_sleep=2): + where_click = website.find_element(by, match) + sleep(time_sleep) + website.execute_script("arguments[0].click();", where_click) + + +def download_data(): + website = create_website() + select_selection_download(website) + sleep(5) + website.quit() + + +if __name__ == '__main__': + download_data() diff --git a/models/br_fbsp_absp/schema.yaml b/models/br_fbsp_absp/schema.yaml new file mode 100644 index 00000000..a87dfa2f --- /dev/null +++ b/models/br_fbsp_absp/schema.yaml @@ -0,0 +1,70 @@ +version: 2 + +models: + - name: br_fbsp_absp + description: A base contempla as informações do Anuário de Segurança Pública a partir de 2007 com as estatísticas criminais compatibilizadas entre anos, com informações acerca dos homicídios, tráfico, furto e roubo, além da força policial, entre outros ao nível das unidades da federação. + columns: + - name: ano + description: Ano + - name: sigla_uf + description: Sigla da Unidade da Federação + - name: quantidade_cvli + description: Quantidade de Crimes violentos letais intencionais (CVLI) + - name: quantidade_feminicidio + description: Quantidade de Feminicídios + - name: quantidade_ocorrencia_homicidio_doloso + description: Quantidade de Homicídio doloso - N° ocorrências + - name: quantidade_vitima_homicidio_doloso + description: Quantidade de Homicídio doloso - N° vítimas + - name: quantidade_latrocinio + description: Quantidade de Latrocínio + - name: quantidade_lesao_corporal_seguida_de_morte + description: Quantidade de Lesão corporal seguida de morte + - name: quantidade_morte_a_esclarecer + description: Quantidade de Mortes a esclarecer + - name: quantidade_morte_intervencao_policial_civil_servico + description: Quantidade de Mortes decorrentes de intervenções de Policiais + Civis em servico + - name: quantidade_morte_intervencao_policial_civil_fora_servico + description: Quantidade de Mortes decorrentes de intervenções de Policiais + Civis fora de servico + - name: quantidade_morte_intervencao_policial_militar_servico + description: Quantidade de Mortes decorrentes de intervenções de Policiais + Militares em servico + - name: quantidade_morte_intervencao_policial_militar_fora_servico + description: Quantidade de Mortes decorrentes de intervenções de Policiais + Militares fora de servico + - name: quantidade_morte_violenta_intencional + description: Quantidade de Mortes Violentas Intencionais + - name: quantidade_policial_civil_morto_confronto_servico + description: Quantidade de Policiais Civis mortos em confronto em servico + - name: quantidade_policial_civil_morto_confronto_fora_servico + description: Quantidade de Policiais Civis mortos em confronto ou por lesão + não natural fora de servico + - name: quantidade_policial_militar_morto_confronto_servico + description: Quantidade de Policiais Militares mortos em confronto em servico + - name: quantidade_policial_militar_morto_confronto_fora_servico + description: Quantidade de Policiais Militares mortos em confronto ou por + lesão não natural fora de servico + - name: quantidade_suicidio + description: Quantidade de Suicídio + - name: quantidade_estupro + description: Quantidade de Estupro (incluindo Estupro de Vulnerável) + - name: quantidade_tentativa_estupro + description: Quantidade de Tentativa de estupro + - name: quantidade_furto_veiculo + description: Quantidade de Furto de veículo + - name: quantidade_roubo_instituicao_financeira + description: Quantidade de Roubo a instituição financeira + - name: quantidade_roubo_carga + description: Quantidade de Roubo de carga + - name: quantidade_roubo_de_veiculo + description: Quantidade de Roubo de veículo + - name: quantidade_arma_fogo_apreendida + description: Quantidade de Armas de fogo apreendidas + - name: quantidade_registro_pessoa_desaparecida + description: Quantidade de Registros de pessoas desaparecidas + - name: quantidade_populacao_sistema_penitenciario + description: Quantidade de População do sistema penitenciário + - name: despesa_empenhada_seguranca_publica + description: Quantidade de Despesas empenhadas na Função Segurança Pública diff --git a/models/br_geobr_mapas/br_geobr_mapas__bioma.sql b/models/br_geobr_mapas/br_geobr_mapas__bioma.sql new file mode 100644 index 00000000..34ef972d --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__bioma.sql @@ -0,0 +1,21 @@ +{{ + config( + alias='bioma', + schema='br_geobr_mapas', + materialized='table', + partition_by={ + "field": "ano", + "data_type": "int64", + "range": { + "start": 2004, + "end": 2019, + "interval": 15} + }, + ) + }} +SELECT +SAFE_CAST(year AS INT64) ano, +SAFE_CAST(id_bioma AS STRING) id_bioma, +SAFE_CAST(nome_bioma AS STRING) nome_bioma, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +from basedosdados-staging.br_geobr_mapas_staging.bioma as t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__escola.sql b/models/br_geobr_mapas/br_geobr_mapas__escola.sql new file mode 100644 index 00000000..657b10fc --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__escola.sql @@ -0,0 +1,13 @@ +{{ + config( + alias='escola', + schema='br_geobr_mapas', + materialized='table', + ) + }} + +SELECT +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE_CAST(id_escola AS STRING) id_escola, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +FROM basedosdados-staging.br_geobr_mapas_staging.escola AS t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__estabelecimentos_saude.sql b/models/br_geobr_mapas/br_geobr_mapas__estabelecimentos_saude.sql new file mode 100644 index 00000000..9be46055 --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__estabelecimentos_saude.sql @@ -0,0 +1,14 @@ +{{ + config( + alias='estabelecimentos_saude', + schema='br_geobr_mapas', + materialized='table', + ) + }} +SELECT +SAFE_CAST(ano AS INT64) ano, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE_CAST(id_municipio AS STRING) id_municipio, +SAFE_CAST(id_cnes AS STRING) id_cnes, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +FROM basedosdados-staging.br_geobr_mapas_staging.estabelecimentos_saude AS t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__mesorregiao.sql b/models/br_geobr_mapas/br_geobr_mapas__mesorregiao.sql new file mode 100644 index 00000000..a0522618 --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__mesorregiao.sql @@ -0,0 +1,13 @@ +{{ + config( + alias='mesorregiao', + schema='br_geobr_mapas', + materialized='table', + ) + }} +SELECT +SAFE_CAST(id_uf AS STRING) id_uf, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE_CAST(id_mesorregiao AS STRING) id_mesorregiao, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +FROM basedosdados-staging.br_geobr_mapas_staging.mesorregiao AS t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__microrregiao.sql b/models/br_geobr_mapas/br_geobr_mapas__microrregiao.sql new file mode 100644 index 00000000..a18cb996 --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__microrregiao.sql @@ -0,0 +1,14 @@ +{{ + config( + alias='microrregiao', + schema='br_geobr_mapas', + materialized='table', + ) + }} + +SELECT +SAFE_CAST(id_uf AS STRING) id_uf, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE_CAST(id_microrregiao AS STRING) id_microrregiao, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +FROM basedosdados-staging.br_geobr_mapas_staging.microrregiao AS t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__municipio.sql b/models/br_geobr_mapas/br_geobr_mapas__municipio.sql new file mode 100644 index 00000000..50bafa1c --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__municipio.sql @@ -0,0 +1,13 @@ +{{ + config( + alias='municipio', + schema='br_geobr_mapas', + materialized='table', + ) + }} + +SELECT +SAFE_CAST(id_municipio AS STRING ) id_municipio, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +FROM basedosdados-staging.br_geobr_mapas_staging.municipio AS t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__regiao.sql b/models/br_geobr_mapas/br_geobr_mapas__regiao.sql new file mode 100644 index 00000000..2fbad9b0 --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__regiao.sql @@ -0,0 +1,12 @@ +{{ + config( + alias='regiao', + schema='br_geobr_mapas', + materialized='table', + ) + }} +SELECT +SAFE_CAST(id_regiao AS STRING) id_regiao, +SAFE_CAST(nome_regiao AS STRING) nome_regiao, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +FROM basedosdados-staging.br_geobr_mapas_staging.regiao AS t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__regiao_imediata.sql b/models/br_geobr_mapas/br_geobr_mapas__regiao_imediata.sql new file mode 100644 index 00000000..f5010a52 --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__regiao_imediata.sql @@ -0,0 +1,13 @@ +{{ + config( + alias='regiao_imediata', + schema='br_geobr_mapas', + materialized='table', + ) + }} +SELECT +SAFE_CAST(id_uf AS STRING) id_uf, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE_CAST(id_regiao_imediata AS STRING) id_regiao_imediata, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +FROM basedosdados-staging.br_geobr_mapas_staging.regiao_imediata AS t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__regiao_intermediaria.sql b/models/br_geobr_mapas/br_geobr_mapas__regiao_intermediaria.sql new file mode 100644 index 00000000..ae99acc7 --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__regiao_intermediaria.sql @@ -0,0 +1,13 @@ +{{ + config( + alias='regiao_intermediaria', + schema='br_geobr_mapas', + materialized='table', + ) + }} +SELECT +SAFE_CAST(id_uf AS STRING) id_uf, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE_CAST(id_regiao_intermediaria AS STRING) id_regiao_intermediaria, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +FROM basedosdados-staging.br_geobr_mapas_staging.regiao_intermediaria AS t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__saude.sql b/models/br_geobr_mapas/br_geobr_mapas__saude.sql new file mode 100644 index 00000000..13f204e9 --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__saude.sql @@ -0,0 +1,13 @@ +{{ + config( + alias='saude', + schema='br_geobr_mapas', + materialized='table', + ) + }} +SELECT +SAFE_CAST(id_regiao_saude AS STRING) id_regiao_saude, +SAFE_CAST(id_uf AS STRING) id_uf, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +FROM basedosdados-staging.br_geobr_mapas_staging.saude AS t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__semiarido.sql b/models/br_geobr_mapas/br_geobr_mapas__semiarido.sql new file mode 100644 index 00000000..7087d9f6 --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__semiarido.sql @@ -0,0 +1,12 @@ +{{ + config( + alias='semiarido', + schema='br_geobr_mapas', + materialized='table', + ) + }} +SELECT +SAFE_CAST(id_municipio AS STRING) id_municipio, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +FROM basedosdados-staging.br_geobr_mapas_staging.semiarido AS t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__setor_censitario_2010.sql b/models/br_geobr_mapas/br_geobr_mapas__setor_censitario_2010.sql new file mode 100644 index 00000000..22e79484 --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__setor_censitario_2010.sql @@ -0,0 +1,27 @@ +{{ + config( + alias='setor_censitario_2010', + schema='br_geobr_mapas', + materialized='table', + partition_by={ + "field": "sigla_uf", + "data_type": "string", + }, + ) + }} + +SELECT +SAFE_CAST(id_uf AS STRING) id_uf, +SAFE_CAST(estado_abrev AS STRING) sigla_uf, +SAFE_CAST( SAFE_CAST( SAFE_CAST(id_municipio AS FLOAT64) AS INT64) AS STRING) id_municipio, -- corrige ponto decimal +SAFE_CAST(nome_municipio AS STRING) nome_municipio, +SAFE_CAST(id_distrito AS STRING) id_distrito, +SAFE_CAST(nome_distrito AS STRING) nome_distrito, +SAFE_CAST(id_subdistrito AS STRING) id_subdistrito, +SAFE_CAST(nome_subdistrito AS STRING) nome_subdistrito, +SAFE_CAST(id_vizinhanca AS STRING) nome_vizinhanca, -- invertida com nome_vizinhanca +SAFE_CAST( SAFE_CAST( SAFE_CAST(nome_vizinhanca AS FLOAT64) AS INT64) AS STRING) id_vizinhanca, -- invertida com id_vizinhanca e corrige ponto decimal +SAFE_CAST(id_setor_censitario AS STRING) id_setor_censitario, +SAFE_CAST(zona AS STRING) zona, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +from basedosdados-staging.br_geobr_mapas_staging.setor_censitario_2010 as t \ No newline at end of file diff --git a/models/br_geobr_mapas/br_geobr_mapas__uf.sql b/models/br_geobr_mapas/br_geobr_mapas__uf.sql new file mode 100644 index 00000000..789b1496 --- /dev/null +++ b/models/br_geobr_mapas/br_geobr_mapas__uf.sql @@ -0,0 +1,12 @@ +{{ + config( + alias='uf', + schema='br_geobr_mapas', + materialized='table', + ) + }} +SELECT +SAFE_CAST(id_uf AS STRING) id_uf, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE.ST_GEOGFROMTEXT(geometria) geometria +FROM basedosdados-staging.br_geobr_mapas_staging.uf AS t \ No newline at end of file diff --git a/models/br_geobr_mapas/schema.yml b/models/br_geobr_mapas/schema.yml new file mode 100644 index 00000000..2fd10a8a --- /dev/null +++ b/models/br_geobr_mapas/schema.yml @@ -0,0 +1,168 @@ +version: 2 + +models: + - name: br_geobr_mapas__municipio + description: O geobr é um pacote R e Python que permite que os usuários acessem facilmente os shapefiles do Instituto Brasileiro de Geografia e Estatística (IBGE) e outros conjuntos oficiais de dados espaciais do Brasil. O pacote inclui uma ampla variedade de conjuntos de dados geográficos como recursos simples, disponíveis em várias escalas geográficas e por vários anos. + columns: + - name: id_municipio + description: ID Município IBGE - 7 Dígitos + - name: sigla_uf + description: Sigla da Unidade de Federação + - name: geometria + description: Multipoligono + + - name: br_geobr_mapas__microrregiao + description: O geobr é um pacote R e Python que permite que os usuários acessem facilmente os shapefiles do Instituto Brasileiro de Geografia e Estatística (IBGE) e outros conjuntos oficiais de dados espaciais do Brasil. O pacote inclui uma ampla variedade de conjuntos de dados geográficos como recursos simples, disponíveis em várias escalas geográficas e por vários anos. + columns: + - name: id_uf + description: ID da Unidade de Federação + - name: sigla_uf + description: Sigla da Unidade de Federação + - name: id_microrregiao + description: ID da Microrregião - IBGE + - name: geometria + description: Polígono da microrregião + + - name: br_geobr_mapas__estabelecimentos_saude + description: O geobr é um pacote R e Python que permite que os usuários acessem facilmente os shapefiles do Instituto Brasileiro de Geografia e Estatística (IBGE) e outros conjuntos oficiais de dados espaciais do Brasil. O pacote inclui uma ampla variedade de conjuntos de dados geográficos como recursos simples, disponíveis em várias escalas geográficas e por vários anos. + columns: + - name: ano + description: Ano + - name: sigla_uf + description: Sigla da Unidade de Federação + - name: id_municipio + description: ID Município - IBGE 7 Dígitos + - name: id_cnes + description: Id estabelecimento - CNES + - name: geometria + description: Coordenadas do Estabelecimento de Saúde + + - name: br_geobr_mapas__escola + description: O geobr é um pacote R e Python que permite que os usuários acessem facilmente os shapefiles do Instituto Brasileiro de Geografia e Estatística (IBGE) e outros conjuntos oficiais de dados espaciais do Brasil. O pacote inclui uma ampla variedade de conjuntos de dados geográficos como recursos simples, disponíveis em várias escalas geográficas e por vários anos. + columns: + - name: sigla_uf + description: Sigla da Unidade da Federação - IBGE + - name: id_escola + description: ID Escola - INEP + - name: geometria + description: Latitude e Longitude da Escola + + - name: br_geobr_mapas__regiao + description: O geobr é um pacote R e Python que permite que os usuários acessem facilmente os shapefiles do Instituto Brasileiro de Geografia e Estatística (IBGE) e outros conjuntos oficiais de dados espaciais do Brasil. O pacote inclui uma ampla variedade de conjuntos de dados geográficos como recursos simples, disponíveis em várias escalas geográficas e por vários anos. + columns: + - name: id_regiao + description: Código da Região - IBGE + - name: nome_regiao + description: Nome da Região + - name: geometria + description: Polígonos das Regiões Brasileiras + + - name: br_geobr_mapas__regiao_intermediaria + description: O geobr é um pacote R e Python que permite que os usuários acessem facilmente os shapefiles do Instituto Brasileiro de Geografia e Estatística (IBGE) e outros conjuntos oficiais de dados espaciais do Brasil. O pacote inclui uma ampla variedade de conjuntos de dados geográficos como recursos simples, disponíveis em várias escalas geográficas e por vários anos. + columns: + - name: id_uf + description: ID da Unidade da Federação + - name: sigla_uf + description: Sigla da Unidade da Federação + - name: id_regiao_intermediaria + description: ID da Região Intermediária - IBGE + - name: geometria + description: Polígono da Região Intermediária + + - name: br_geobr_mapas__saude + description: O geobr é um pacote R e Python que permite que os usuários acessem facilmente os shapefiles do Instituto Brasileiro de Geografia e Estatística (IBGE) e outros conjuntos oficiais de dados espaciais do Brasil. O pacote inclui uma ampla variedade de conjuntos de dados geográficos como recursos simples, disponíveis em várias escalas geográficas e por vários anos. + columns: + - name: id_regiao_saude + description: ID Região de Saúde + - name: id_uf + description: ID da Unidade da Federação - IBGE + - name: sigla_uf + description: Sigla da Unidade da Federação + - name: geometria + description: Polígonos das regiões de saúde + + - name: br_geobr_mapas__semiarido + description: O geobr é um pacote R e Python que permite que os usuários acessem facilmente os shapefiles do Instituto Brasileiro de Geografia e Estatística (IBGE) e outros conjuntos oficiais de dados espaciais do Brasil. O pacote inclui uma ampla variedade de conjuntos de dados geográficos como recursos simples, disponíveis em várias escalas geográficas e por vários anos. + columns: + - name: id_municipio + description: ID Município IBGE - 7 Dígitos + - name: sigla_uf + description: Sigla da Unidade de Federação + - name: geometria + description: Multipoligono da região do Semiárido + + - name: br_geobr_mapas__setor_censitario_2010 + description: Setores censitarios do Censo Brasileiro de 2010 + columns: + - name: id_setor_censitario + description: Identificador do setor censitário + - name: zona + description: Zona + - name: id_uf + description: ID da Unidade da Federação + - name: id_municipio + description: Identificador do município IBGE + - name: nome_municipio + description: Nome do município + - name: id_vizinhanca + description: Identificador da vizinhança + - name: nome_vizinhanca + description: Nome da vizinhança + - name: id_subdistrito + description: Identificador do substrito + - name: nome_subdistrito + description: Nome do substrito + - name: id_distrito + description: Identificador do distrito + - name: nome_distrito + description: Nome do distrito + - name: geometria + description: Polígono do setor censitário + - name: sigla_uf + description: Sigla da Unidade da Federação + + - name: br_geobr_mapas__uf + description: O geobr é um pacote R e Python que permite que os usuários acessem facilmente os shapefiles do Instituto Brasileiro de Geografia e Estatística (IBGE) e outros conjuntos oficiais de dados espaciais do Brasil. O pacote inclui uma ampla variedade de conjuntos de dados geográficos como recursos simples, disponíveis em várias escalas geográficas e por vários anos. + columns: + - name: id_uf + description: ID da Unidade da Federação - IBGE + - name: sigla_uf + description: Sigla da Unidade da Federação + - name: geometria + description: Polígono da Unidade da Federação + + - name: br_geobr_mapas__bioma + description: Polígonos de todos o biomas presentes no território brasileiro e área costeira. + columns: + - name: id_bioma + description: Código do bioma + - name: nome_bioma + description: Nome do bioma + - name: geometria + description: Geometria + - name: ano + description: Ano + + - name: br_geobr_mapas__mesorregiao + description: O geobr é um pacote R e Python que permite que os usuários acessem facilmente os shapefiles do Instituto Brasileiro de Geografia e Estatística (IBGE) e outros conjuntos oficiais de dados espaciais do Brasil. O pacote inclui uma ampla variedade de conjuntos de dados geográficos como recursos simples, disponíveis em várias escalas geográficas e por vários anos. + columns: + - name: id_uf + description: ID da Unidade da Federação + - name: sigla_uf + description: Sigla da Unidade da Federação + - name: id_mesorregiao + description: ID da Mesorregião - IBGE + - name: geometria + description: Polígono da Mesorregião + + - name: br_geobr_mapas__regiao_imediata + description: O geobr é um pacote R e Python que permite que os usuários acessem facilmente os shapefiles do Instituto Brasileiro de Geografia e Estatística (IBGE) e outros conjuntos oficiais de dados espaciais do Brasil. O pacote inclui uma ampla variedade de conjuntos de dados geográficos como recursos simples, disponíveis em várias escalas geográficas e por vários anos. + columns: + - name: id_uf + description: ID da Unidade da Federação + - name: sigla_uf + description: Sigla da Unidade da Federação + - name: id_regiao_imediata + description: ID da Região Imediata - IBGE + - name: geometria + description: Polígono da região imediata diff --git a/models/br_ibge_inpc/br_ibge_inpc__mes_brasil.sql b/models/br_ibge_inpc/br_ibge_inpc__mes_brasil.sql index d1586eee..d7912e4b 100644 --- a/models/br_ibge_inpc/br_ibge_inpc__mes_brasil.sql +++ b/models/br_ibge_inpc/br_ibge_inpc__mes_brasil.sql @@ -1,4 +1,19 @@ -{{ config(alias='mes_brasil', schema='br_ibge_inpc') }} +{{ + config( + alias='mes_brasil', + schema='br_ibge_inpc', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -9,3 +24,6 @@ SAFE_CAST(variacao_semestral AS FLOAT64) variacao_semestral, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses FROM basedosdados-staging.br_ibge_inpc_staging.mes_brasil AS t +{% 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 %} \ No newline at end of file diff --git a/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_brasil.sql b/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_brasil.sql index 9c1eaa4c..2b9094b8 100644 --- a/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_brasil.sql +++ b/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_brasil.sql @@ -1,4 +1,19 @@ -{{ config(alias='mes_categoria_brasil', schema='br_ibge_inpc') }} +{{ + config( + alias='mes_categoria_brasil', + schema='br_ibge_inpc', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -10,3 +25,6 @@ SAFE_CAST(variacao_mensal AS FLOAT64) variacao_mensal, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses FROM basedosdados-staging.br_ibge_inpc_staging.mes_categoria_brasil AS t +{% 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 %} \ No newline at end of file diff --git a/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_municipio.sql b/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_municipio.sql index a318509b..51477a72 100644 --- a/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_municipio.sql +++ b/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_municipio.sql @@ -1,4 +1,19 @@ -{{ config(alias='mes_categoria_municipio', schema='br_ibge_inpc') }} +{{ + config( + alias='mes_categoria_municipio', + schema='br_ibge_inpc', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -10,4 +25,7 @@ SAFE_CAST(peso_mensal AS FLOAT64) peso_mensal, SAFE_CAST(variacao_mensal AS FLOAT64) variacao_mensal, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses -FROM basedosdados-staging.br_ibge_inpc_staging.mes_categoria_municipio AS t \ No newline at end of file +FROM basedosdados-staging.br_ibge_inpc_staging.mes_categoria_municipio AS t +{% 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 %} \ No newline at end of file diff --git a/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_rm.sql b/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_rm.sql index 1cad03c2..a5a90b87 100644 --- a/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_rm.sql +++ b/models/br_ibge_inpc/br_ibge_inpc__mes_categoria_rm.sql @@ -1,4 +1,19 @@ -{{ config(alias='mes_categoria_rm', schema='br_ibge_inpc') }} +{{ + config( + alias='mes_categoria_rm', + schema='br_ibge_inpc', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -10,4 +25,7 @@ SAFE_CAST(peso_mensal AS FLOAT64) peso_mensal, SAFE_CAST(variacao_mensal AS FLOAT64) variacao_mensal, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses -FROM basedosdados-staging.br_ibge_inpc_staging.mes_categoria_rm AS t \ No newline at end of file +FROM basedosdados-staging.br_ibge_inpc_staging.mes_categoria_rm AS t +{% 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 %} \ No newline at end of file diff --git a/models/br_ibge_ipca/br_ibge_ipca__mes_brasil.sql b/models/br_ibge_ipca/br_ibge_ipca__mes_brasil.sql index 491b37d4..cbd0cebd 100644 --- a/models/br_ibge_ipca/br_ibge_ipca__mes_brasil.sql +++ b/models/br_ibge_ipca/br_ibge_ipca__mes_brasil.sql @@ -1,4 +1,19 @@ -{{ config(alias='mes_brasil', schema='br_ibge_ipca') }} +{{ + config( + alias='mes_brasil', + schema='br_ibge_ipca', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -9,3 +24,7 @@ SAFE_CAST(variacao_semestral AS FLOAT64) variacao_semestral, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses FROM basedosdados-staging.br_ibge_ipca_staging.mes_brasil AS t + +{% 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 %} \ No newline at end of file diff --git a/models/br_ibge_ipca/br_ibge_ipca__mes_categoria_brasil.sql b/models/br_ibge_ipca/br_ibge_ipca__mes_categoria_brasil.sql index 22f2044c..8248ebec 100644 --- a/models/br_ibge_ipca/br_ibge_ipca__mes_categoria_brasil.sql +++ b/models/br_ibge_ipca/br_ibge_ipca__mes_categoria_brasil.sql @@ -1,4 +1,19 @@ -{{ config(alias='mes_categoria_brasil', schema='br_ibge_ipca') }} +{{ + config( + alias='mes_categoria_brasil', + schema='br_ibge_ipca', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -9,4 +24,7 @@ SAFE_CAST(peso_mensal AS FLOAT64) peso_mensal, SAFE_CAST(variacao_mensal AS FLOAT64) variacao_mensal, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses -FROM basedosdados-staging.br_ibge_ipca_staging.mes_categoria_brasil AS t \ No newline at end of file +FROM basedosdados-staging.br_ibge_ipca_staging.mes_categoria_brasil AS t +{% 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 %} \ No newline at end of file diff --git a/models/br_ibge_ipca/br_ibge_ipca__mes_categoria_municipio.sql b/models/br_ibge_ipca/br_ibge_ipca__mes_categoria_municipio.sql index 3189ecdd..0da922b2 100644 --- a/models/br_ibge_ipca/br_ibge_ipca__mes_categoria_municipio.sql +++ b/models/br_ibge_ipca/br_ibge_ipca__mes_categoria_municipio.sql @@ -1,4 +1,19 @@ -{{ config(alias='mes_categoria_municipio', schema='br_ibge_ipca') }} +{{ + config( + alias='mes_categoria_municipio', + schema='br_ibge_ipca', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -10,4 +25,7 @@ SAFE_CAST(peso_mensal AS FLOAT64) peso_mensal, SAFE_CAST(variacao_mensal AS FLOAT64) variacao_mensal, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses -FROM basedosdados-staging.br_ibge_ipca_staging.mes_categoria_municipio AS t \ No newline at end of file +FROM basedosdados-staging.br_ibge_ipca_staging.mes_categoria_municipio AS t +{% 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_ibge_ipca/br_ibge_ipca__mes_categoria_rm.sql b/models/br_ibge_ipca/br_ibge_ipca__mes_categoria_rm.sql index 7be742b6..371c762f 100644 --- a/models/br_ibge_ipca/br_ibge_ipca__mes_categoria_rm.sql +++ b/models/br_ibge_ipca/br_ibge_ipca__mes_categoria_rm.sql @@ -1,4 +1,20 @@ -{{ config(alias='mes_categoria_rm', schema='br_ibge_ipca') }} +{{ + config( + alias='mes_categoria_rm', + schema='br_ibge_ipca', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} + SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -10,4 +26,7 @@ SAFE_CAST(peso_mensal AS FLOAT64) peso_mensal, SAFE_CAST(variacao_mensal AS FLOAT64) variacao_mensal, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses -FROM basedosdados-staging.br_ibge_ipca_staging.mes_categoria_rm AS t \ No newline at end of file +FROM basedosdados-staging.br_ibge_ipca_staging.mes_categoria_rm AS t +{% 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 %} \ No newline at end of file diff --git a/models/br_ibge_ipca15/br_ibge_ipca15__mes_brasil.sql b/models/br_ibge_ipca15/br_ibge_ipca15__mes_brasil.sql index 4929816e..05f5361b 100644 --- a/models/br_ibge_ipca15/br_ibge_ipca15__mes_brasil.sql +++ b/models/br_ibge_ipca15/br_ibge_ipca15__mes_brasil.sql @@ -1,4 +1,19 @@ -{{ config(alias='mes_brasil', schema='br_ibge_ipca15') }} +{{ + config( + alias='mes_brasil', + schema='br_ibge_ipca15', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -9,3 +24,6 @@ SAFE_CAST(variacao_semestral AS FLOAT64) variacao_semestral, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses FROM basedosdados-staging.br_ibge_ipca15_staging.mes_brasil AS t +{% 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 %} \ No newline at end of file diff --git a/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_brasil.sql b/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_brasil.sql index 34620f30..dd83d513 100644 --- a/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_brasil.sql +++ b/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_brasil.sql @@ -1,4 +1,19 @@ -{{ config(alias='mes_categoria_brasil', schema='br_ibge_ipca15') }} +{{ + config( + alias='mes_categoria_brasil', + schema='br_ibge_ipca15', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -9,4 +24,7 @@ SAFE_CAST(peso_mensal AS FLOAT64) peso_mensal, SAFE_CAST(variacao_mensal AS FLOAT64) variacao_mensal, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses -FROM basedosdados-staging.br_ibge_ipca15_staging.mes_categoria_brasil AS t \ No newline at end of file +FROM basedosdados-staging.br_ibge_ipca15_staging.mes_categoria_brasil AS t +{% 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 %} \ No newline at end of file diff --git a/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_municipio.sql b/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_municipio.sql index 93cab180..f6746760 100644 --- a/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_municipio.sql +++ b/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_municipio.sql @@ -1,4 +1,19 @@ -{{ config(alias='mes_categoria_municipio', schema='br_ibge_ipca15') }} +{{ + config( + alias='mes_categoria_municipio', + schema='br_ibge_ipca15', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -10,4 +25,7 @@ SAFE_CAST(peso_mensal AS FLOAT64) peso_mensal, SAFE_CAST(variacao_mensal AS FLOAT64) variacao_mensal, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses -FROM basedosdados-staging.br_ibge_ipca15_staging.mes_categoria_municipio AS t \ No newline at end of file +FROM basedosdados-staging.br_ibge_ipca15_staging.mes_categoria_municipio AS t +{% 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 %} \ No newline at end of file diff --git a/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_rm.sql b/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_rm.sql index db03b31e..d800cce9 100644 --- a/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_rm.sql +++ b/models/br_ibge_ipca15/br_ibge_ipca15__mes_categoria_rm.sql @@ -1,4 +1,19 @@ -{{ config(alias='mes_categoria_rm', schema='br_ibge_ipca15') }} +{{ + config( + alias='mes_categoria_rm', + schema='br_ibge_ipca15', + materialized='incremental', + pre_hook = "DROP ALL ROW ACCESS POLICIES ON {{ this }}", + post_hook=['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"),DATE(CAST(ano AS INT64),CAST(mes AS INT64),1), MONTH) <= 6)'] + ) +}} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, @@ -10,4 +25,7 @@ SAFE_CAST(peso_mensal AS FLOAT64) peso_mensal, SAFE_CAST(variacao_mensal AS FLOAT64) variacao_mensal, SAFE_CAST(variacao_anual AS FLOAT64) variacao_anual, SAFE_CAST(variacao_doze_meses AS FLOAT64) variacao_doze_meses -FROM basedosdados-staging.br_ibge_ipca15_staging.mes_categoria_rm AS t \ No newline at end of file +FROM basedosdados-staging.br_ibge_ipca15_staging.mes_categoria_rm AS t +{% 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 %} \ No newline at end of file diff --git a/models/br_inep_enem/br_inep_enem__dicionario.sql b/models/br_inep_enem/br_inep_enem__dicionario.sql new file mode 100644 index 00000000..378c67c7 --- /dev/null +++ b/models/br_inep_enem/br_inep_enem__dicionario.sql @@ -0,0 +1,14 @@ +{{ + config( + alias='dicionario', + schema='br_inep_enem' + ) +}} + +SELECT +SAFE_CAST(id_tabela AS STRING) id_tabela, +SAFE_CAST(nome_coluna AS STRING) nome_coluna, +SAFE_CAST(chave AS STRING) chave, +SAFE_CAST(cobertura_temporal AS STRING) cobertura_temporal, +SAFE_CAST(valor AS STRING) valor +FROM basedosdados-staging.br_inep_enem_staging.dicionario AS t diff --git a/models/br_inep_enem/code/main.py b/models/br_inep_enem/code/main.py new file mode 100644 index 00000000..ed2d1f52 --- /dev/null +++ b/models/br_inep_enem/code/main.py @@ -0,0 +1,300 @@ +# Script para criar dicionario dos microdados e questionarios +import pandas as pd +import numpy as np +import requests +import zipfile +import io +import os +import basedosdados as bd + +YEARS = range(1998, 2022 + 1) + +CWD = os.getcwd() +INPUT = os.path.join(CWD, "input") +TMP = os.path.join(CWD, "tmp") +OUTPUT = os.path.join(CWD, "output") + +if not os.path.exists(INPUT): + os.mkdir(INPUT) + +if not os.path.exists(TMP): + os.mkdir(TMP) + +if not os.path.exists(OUTPUT): + os.mkdir(OUTPUT) + + +def extract_dicts() -> tuple[str, str]: + zip_file = [file for file in os.listdir(INPUT) if file.endswith(".zip")][0] + z = zipfile.ZipFile(f"{INPUT}/{zip_file}") + z.extractall(TMP) + return (f"{TMP}/dicionarios", "Dicionário_Microdados_ENEM_") + + +dir_dicts, template_file = extract_dicts() + + +def build_dictionary(year: int, path: str) -> pd.DataFrame: + df = pd.read_excel(path) + + first_col = df.columns[0] + assert isinstance(first_col, str) and first_col.startswith("DICIONÁRIO") + + line_separator = ( + f"QUESTIONÁRIO SOCIOECONÔMICO DO ENEM" + if year < 2010 + else "DADOS DO QUESTIONÁRIO SOCIOECONÔMICO" + ) + + start_line = df[df[first_col].str.contains(line_separator, na=False)].index[0] + + df = df[df.index > start_line] + + assert isinstance(df, pd.DataFrame) + + columns = { + "Unnamed: 1": "descricao", + "Unnamed: 2": "chave", + "Unnamed: 3": "valor", + "Unnamed: 4": "tamanho", + "Unnamed: 5": "tipo", + } + + columns[first_col] = "coluna" + + df = df.rename(columns=columns, errors="raise") + + # Drop lines here "chave" is empty + df = df[df["chave"].notna()] + + assert isinstance(df, pd.DataFrame) + + cols = df["coluna"].to_list() + + for index in range(0, len(cols) + 1): + next_index = index + 1 + if next_index < len(cols) and pd.isna(cols[next_index]): + cols[next_index] = cols[index] + + df["nome_coluna"] = cols + df["cobertura_temporal"] = None + df["id_tabela"] = f"questionario_socioeconomico_{year}" + + df = df[["id_tabela", "nome_coluna", "chave", "cobertura_temporal", "valor"]] + df = df[df["nome_coluna"] != "IN_QSE"] + + # Some records contains multiple values + df["chave"] = df["chave"].apply(lambda value: value.split("\n") if isinstance(value, str) and "\n" in value else value) # type: ignore + + assert isinstance(df, pd.DataFrame) + df = df.explode("chave") + + cols_with_empty_value = df[df["valor"].isna()]["nome_coluna"].unique() # type: ignore + + for col in cols_with_empty_value: + valid_value = df.loc[ + (df["nome_coluna"] == col) & (df["valor"].notna()), "valor" + ].values + assert len(valid_value) == 1 + df.loc[df["nome_coluna"] == col, "valor"] = valid_value[0] + + df["chave"] = df["chave"].astype(str) + df["valor"] = df["valor"].astype(str) + return df + + +dict_by_table = pd.concat( + [ + build_dictionary(year, f"{dir_dicts}/{template_file}{year}.xlsx") + for year in YEARS + ] +) + +dict_by_table.to_csv(f"{OUTPUT}/dicionario_questionarios.csv", index=False) + + +def read_remote_sheet(url): + url = url.replace("edit#gid=", "export?format=csv&gid=") + return pd.read_csv( + io.StringIO(requests.get(url, timeout=10).content.decode("utf-8")) + ) + + +microdados_arch = read_remote_sheet( + "https://docs.google.com/spreadsheets/d/1EUhqjdB6BDGlksgy4UY8cwTF7pQBavP7Mrhgi-y3GRI/edit#gid=0" +) +microdados_arch = microdados_arch[microdados_arch["covered_by_dictionary"] == "yes"] + + +def get_original_name(col_name: str, year: int) -> str: + target_col_year = f"original_name_{year}" + values = microdados_arch.loc[ + microdados_arch["name"] == col_name, target_col_year + ].values + assert len(values) == 1 + return values[0] + + +def get_value_and_keys(df: pd.DataFrame, col_name: str, year: int) -> pd.DataFrame: + original_col_name = get_original_name(col_name, year) + df = df.loc[df["variavel"] == original_col_name][["chave", "valor"]] + df["nome_coluna"] = col_name + df["ano"] = str(year) + return df + + +def build_dictionary_microdados( + year: int, path: str, cols_covered_by_dictionary: list[str] +): + df = pd.read_excel(path) + + first_col = df.columns[0] + assert isinstance(first_col, str) and first_col.startswith( + "DICIONÁRIO" + ), f"First column should be a string, {path}=" + + line_end_separator = ( + f"QUESTIONÁRIO SOCIOECONÔMICO DO ENEM" + if year < 2010 + else "DADOS DO QUESTIONÁRIO SOCIOECONÔMICO" + ) + + start_line = df[df[first_col].str.contains("NU_INSCRICAO", na=False)].index[0] + end_line = df[df[first_col].str.contains(line_end_separator, na=False)].index[0] + + df = df[(df.index >= start_line) & (df.index < end_line)] + + columns = { + "Unnamed: 1": "descricao", + "Unnamed: 2": "chave", + "Unnamed: 3": "valor", + "Unnamed: 4": "tamanho", + "Unnamed: 5": "tipo", + } + columns[first_col] = "variavel" + + df = df.rename(columns=columns, errors="raise") # type: ignore + + cols_filled = df["variavel"].to_list() + + for index in range(0, len(cols_filled) + 1): + next_index = index + 1 + if next_index < len(cols_filled) and pd.isna(cols_filled[next_index]): + cols_filled[next_index] = cols_filled[index] + + df["variavel"] = cols_filled + + result = [ + get_value_and_keys(df, col_name, year) + for col_name in cols_covered_by_dictionary + ] + + return pd.concat(result).map(lambda x: x.strip() if isinstance(x, str) else x) + + +dict_microdados_by_year = pd.concat( + [ + build_dictionary_microdados(year, f"{dir_dicts}/{template_file}{year}.xlsx", microdados_arch["name"].to_list()) for year in YEARS # type: ignore + ] +) + + +# Para cada coluna vamos verificar se o par chave/valor são iguais entre todos os anos +def gen_unique_key_value(col_name: str, df: pd.DataFrame): + def create_intervals(years): + if len(years) == 1: + return [years] + + intervals = [] + current_interval = [years[0]] + + for i in range(1, len(years)): + if years[i] - years[i - 1] != 1: + current_interval.append(years[i - 1]) + intervals.append(current_interval) + current_interval = [years[i]] + + current_interval.append(years[-1]) + intervals.append(current_interval) + + return intervals + + def make_ranges(key, value): + values_by_key = df.loc[ + (df["chave"] == key) & (df["valor"] == value), "valor" + ].values + assert len(set(values_by_key)) == 1, f"{col_name=}, {values_by_key=}" + + years = df.loc[ + (df["chave"] == key) & (df["valor"] == value), "ano" + ].values.astype(int) + + intervals = [list(set(interval)) for interval in create_intervals(years)] + + def make_temporal_cov(interval): + interval_sort = list( + map( + lambda year: "" + if year == max(YEARS) or year == min(YEARS) + else str(year), + np.sort(interval), + ), + ) + return "(1)".join(interval_sort) + + cobertura_temporal = [make_temporal_cov(interval) for interval in intervals] + + return (str(key), ",".join(cobertura_temporal), str(values_by_key[0])) + + ranges = [ + make_ranges(key, value) for (key, value), _ in df.groupby(["chave", "valor"]) # type: ignore + ] + + basic_cols = ["chave", "cobertura_temporal", "valor"] + + dict_df = pd.DataFrame(ranges, columns=basic_cols) + + unique_keys = [i for (i, v) in dict_df["chave"].value_counts().items() if v == 1] + + # Drop temporal coverage if key is unique + def drop_temporal_cov(key, temporal_cov): + return None if key in unique_keys else temporal_cov + + dict_df["cobertura_temporal"] = dict_df[["chave", "cobertura_temporal"]].apply( + lambda values: drop_temporal_cov(*values), axis=1 + ) + + # Last edits + if col_name in [ + "tipo_prova_matematica", + "tipo_prova_ciencias_natureza", + "tipo_prova_ciencias_humanas", + "tipo_prova_linguagens_codigos", + ]: + dict_df["valor"] = dict_df["valor"].apply(lambda value: value.title()) + + dict_df["nome_coluna"] = col_name + dict_df["id_tabela"] = "microdados" + + all_cols = [*["id_tabela", "nome_coluna"], *basic_cols] + + return dict_df[all_cols] + + +dict_microdados = pd.concat( + [ + gen_unique_key_value(col_name, df) # type: ignore + for col_name, df in dict_microdados_by_year.groupby("nome_coluna") + ] +) + +pd.concat([dict_microdados, dict_by_table]).to_csv(f"{OUTPUT}/dicionario.csv", index=False) # type: ignore + +# Upload dictionary +tb = bd.Table(dataset_id="br_inep_enem", table_id="dicionario") + +tb.create( + path=f"{OUTPUT}/dicionario.csv", + if_table_exists="replace", + if_storage_data_exists="replace", +) diff --git a/models/mundo_transfermarkt_competicoes/brasileirao_serie_a.sql b/models/mundo_transfermarkt_competicoes/mundo_transfermarkt_competicoes__brasileirao_serie_a.sql similarity index 60% rename from models/mundo_transfermarkt_competicoes/brasileirao_serie_a.sql rename to models/mundo_transfermarkt_competicoes/mundo_transfermarkt_competicoes__brasileirao_serie_a.sql index 597ca67d..6f9a6617 100644 --- a/models/mundo_transfermarkt_competicoes/brasileirao_serie_a.sql +++ b/models/mundo_transfermarkt_competicoes/mundo_transfermarkt_competicoes__brasileirao_serie_a.sql @@ -1,5 +1,6 @@ {{ config( + alias='brasileirao_serie_a', schema='mundo_transfermarkt_competicoes', materialized='table', partition_by={ @@ -12,16 +13,15 @@ }, labels = {'tema': 'esporte'}, post_hook = ['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter - ON {{this}} - GRANT TO ("allUsers") - FILTER USING (DATE_DIFF(CURRENT_DATE(),DATE(data), week) > 6)', + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"), DATE(data), week) > 6)', 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter ON {{this}} GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") - FILTER USING (EXTRACT(YEAR from data) = EXTRACT(YEAR from CURRENT_DATE()))' ] + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"), DATE(data), week) <= 6)' ] ) }} - SELECT SAFE_CAST(REPLACE (ano_campeonato,".0","") AS INT64) ano_campeonato, SAFE_CAST(data AS DATE) data, @@ -30,32 +30,32 @@ SAFE_CAST(estadio AS STRING) estadio, SAFE_CAST(arbitro AS STRING) arbitro, SAFE_CAST(REPLACE (publico,".0","") AS INT64) publico, SAFE_CAST(REPLACE (publico_max,".0","") AS INT64) publico_max, -SAFE_CAST(time_man AS STRING) time_man, -SAFE_CAST(time_vis AS STRING) time_vis, -SAFE_CAST(tecnico_man AS STRING) tecnico_man, -SAFE_CAST(tecnico_vis AS STRING) tecnico_vis, -SAFE_CAST(REPLACE (colocacao_man,".0","") AS INT64) colocacao_man, -SAFE_CAST(REPLACE (colocacao_vis,".0","") AS INT64) colocacao_vis, -SAFE_CAST(REPLACE (valor_equipe_titular_man,".0","") AS INT64) valor_equipe_titular_man, -SAFE_CAST(REPLACE (valor_equipe_titular_vis,".0","") AS INT64) valor_equipe_titular_vis, -SAFE_CAST(idade_media_titular_man AS FLOAT64) idade_media_titular_man, -SAFE_CAST(idade_media_titular_vis AS FLOAT64) idade_media_titular_vis, -SAFE_CAST(REPLACE (gols_man,".0","") AS INT64) gols_man, -SAFE_CAST(REPLACE (gols_vis,".0","") AS INT64) gols_vis, -SAFE_CAST(REPLACE (gols_1_tempo_man,".0","") AS INT64) gols_1_tempo_man, -SAFE_CAST(REPLACE (gols_1_tempo_vis,".0","") AS INT64) gols_1_tempo_vis, -SAFE_CAST(REPLACE (escanteios_man,".0","") AS INT64) escanteios_man, -SAFE_CAST(REPLACE (escanteios_vis,".0","") AS INT64) escanteios_vis, -SAFE_CAST(REPLACE (faltas_man,".0","") AS INT64) faltas_man, -SAFE_CAST(REPLACE (faltas_vis,".0","") AS INT64) faltas_vis, -SAFE_CAST(REPLACE (chutes_bola_parada_man,".0","") AS INT64) chutes_bola_parada_man, -SAFE_CAST(REPLACE (chutes_bola_parada_vis,".0","") AS INT64) chutes_bola_parada_vis, -SAFE_CAST(REPLACE (defesas_man,".0","") AS INT64) defesas_man, -SAFE_CAST(REPLACE (defesas_vis,".0","") AS INT64) defesas_vis, -SAFE_CAST(REPLACE (impedimentos_man,".0","") AS INT64) impedimentos_man, -SAFE_CAST(REPLACE (impedimentos_vis,".0","") AS INT64) impedimentos_vis, -SAFE_CAST(REPLACE (chutes_man,".0","") AS INT64) chutes_man, -SAFE_CAST(REPLACE (chutes_vis,".0","") AS INT64) chutes_vis, -SAFE_CAST(REPLACE (chutes_fora_man,".0","") AS INT64) chutes_fora_man, -SAFE_CAST(REPLACE (chutes_fora_vis,".0","") AS INT64) chutes_fora_vis +SAFE_CAST(time_man AS STRING) time_mandante, +SAFE_CAST(time_vis AS STRING) time_visitante, +SAFE_CAST(tecnico_man AS STRING) tecnico_mandante, +SAFE_CAST(tecnico_vis AS STRING) tecnico_visitante, +SAFE_CAST(REPLACE (colocacao_man,".0","") AS INT64) colocacao_mandante, +SAFE_CAST(REPLACE (colocacao_vis,".0","") AS INT64) colocacao_visitante, +SAFE_CAST(REPLACE (valor_equipe_titular_man,".0","") AS INT64) valor_equipe_titular_mandante, +SAFE_CAST(REPLACE (valor_equipe_titular_vis,".0","") AS INT64) valor_equipe_titular_visitante, +SAFE_CAST(idade_media_titular_man AS FLOAT64) idade_media_titular_mandante, +SAFE_CAST(idade_media_titular_vis AS FLOAT64) idade_media_titular_visitante, +SAFE_CAST(REPLACE (gols_man,".0","") AS INT64) gols_mandante, +SAFE_CAST(REPLACE (gols_vis,".0","") AS INT64) gols_visitante, +SAFE_CAST(REPLACE (gols_1_tempo_man,".0","") AS INT64) gols_1_tempo_mandante, +SAFE_CAST(REPLACE (gols_1_tempo_vis,".0","") AS INT64) gols_1_tempo_visitante, +SAFE_CAST(REPLACE (escanteios_man,".0","") AS INT64) escanteios_mandante, +SAFE_CAST(REPLACE (escanteios_vis,".0","") AS INT64) escanteios_visitante, +SAFE_CAST(REPLACE (faltas_man,".0","") AS INT64) faltas_mandante, +SAFE_CAST(REPLACE (faltas_vis,".0","") AS INT64) faltas_visitante, +SAFE_CAST(REPLACE (chutes_bola_parada_man,".0","") AS INT64) chutes_bola_parada_mandante, +SAFE_CAST(REPLACE (chutes_bola_parada_vis,".0","") AS INT64) chutes_bola_parada_visitante, +SAFE_CAST(REPLACE (defesas_man,".0","") AS INT64) defesas_mandante, +SAFE_CAST(REPLACE (defesas_vis,".0","") AS INT64) defesas_visitante, +SAFE_CAST(REPLACE (impedimentos_man,".0","") AS INT64) impedimentos_mandante, +SAFE_CAST(REPLACE (impedimentos_vis,".0","") AS INT64) impedimentos_visitante, +SAFE_CAST(REPLACE (chutes_man,".0","") AS INT64) chutes_mandante, +SAFE_CAST(REPLACE (chutes_vis,".0","") AS INT64) chutes_visitante, +SAFE_CAST(REPLACE (chutes_fora_man,".0","") AS INT64) chutes_fora_mandante, +SAFE_CAST(REPLACE (chutes_fora_vis,".0","") AS INT64) chutes_fora_visitante FROM basedosdados-staging.mundo_transfermarkt_competicoes_staging.brasileirao_serie_a AS t \ No newline at end of file diff --git a/models/mundo_transfermarkt_competicoes/mundo_transfermarkt_competicoes__copa_brasil.sql b/models/mundo_transfermarkt_competicoes/mundo_transfermarkt_competicoes__copa_brasil.sql new file mode 100644 index 00000000..fb283c07 --- /dev/null +++ b/models/mundo_transfermarkt_competicoes/mundo_transfermarkt_competicoes__copa_brasil.sql @@ -0,0 +1,64 @@ +{{ + config( + alias='copa_brasil', + schema='mundo_transfermarkt_competicoes', + materialized='table', + partition_by={ + "field": "ano_campeonato", + "data_type": "int64", + "range": { + "start": 2020, + "end": 2022, + "interval": 1} + }, + labels = {'tema': 'esporte'}, + post_hook = ['CREATE OR REPLACE ROW ACCESS POLICY allusers_filter + ON {{this}} + GRANT TO ("allUsers") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"), DATE(data), MONTH) > 6)', + 'CREATE OR REPLACE ROW ACCESS POLICY bdpro_filter + ON {{this}} + GRANT TO ("group:bd-pro@basedosdados.org", "group:sudo@basedosdados.org") + FILTER USING (DATE_DIFF(DATE("{{ run_started_at.strftime("%Y-%m-%d") }}"), DATE(data), MONTH) <= 6)' ], + ) + }} +SELECT + SAFE_CAST(REPLACE (ano_campeonato,".0","") AS INT64) ano_campeonato, + SAFE_CAST(data AS DATE) data, + SAFE_CAST(CONCAT(horario, ":00") AS TIME) horario, + INITCAP(fase) fase, + INITCAP(tipo_fase) tipo_fase, + SAFE_CAST(estadio AS STRING) estadio, + SAFE_CAST(arbitro AS STRING) arbitro, + SAFE_CAST(REPLACE (publico,".0","") AS INT64) publico, + SAFE_CAST(REPLACE (publico_max,".0","") AS INT64) publico_max, + SAFE_CAST(time_man AS STRING) time_mandante, + SAFE_CAST(time_vis AS STRING) time_visitante, + SAFE_CAST(tecnico_man AS STRING) tecnico_mandante, + SAFE_CAST(tecnico_vis AS STRING) tecnico_visitante, + SAFE_CAST(REPLACE (valor_equipe_titular_man,".0","") AS INT64) valor_equipe_titular_mandante, + SAFE_CAST(REPLACE (valor_equipe_titular_vis,".0","") AS INT64) valor_equipe_titular_visitante, + SAFE_CAST(idade_media_titular_man AS FLOAT64) idade_media_titular_mandante, + SAFE_CAST(idade_media_titular_vis AS FLOAT64) idade_media_titular_visitante, + SAFE_CAST(REPLACE (gols_man,".0","") AS INT64) gols_mandante, + SAFE_CAST(REPLACE (gols_vis,".0","") AS INT64) gols_visitante, + SAFE_CAST(REPLACE (gols_1_tempo_man,".0","") AS INT64) gols_1_tempo_mandante, + SAFE_CAST(REPLACE (gols_1_tempo_vis,".0","") AS INT64) gols_1_tempo_visitante, + SAFE_CAST(REPLACE (penalti,".0","") AS INT64) penalti, + SAFE_CAST(REPLACE (gols_penalti_man,".0","") AS INT64) gols_penalti_mandante, + SAFE_CAST(REPLACE (gols_penalti_vis,".0","") AS INT64) gols_penalti_visitante, + SAFE_CAST(REPLACE (escanteios_man,".0","") AS INT64) escanteios_mandante, + SAFE_CAST(REPLACE (escanteios_vis,".0","") AS INT64) escanteios_visitante, + SAFE_CAST(REPLACE (faltas_man,".0","") AS INT64) faltas_mandante, + SAFE_CAST(REPLACE (faltas_vis,".0","") AS INT64) faltas_visitante, + SAFE_CAST(REPLACE (chutes_bola_parada_man,".0","") AS INT64) chutes_bola_parada_mandante, + SAFE_CAST(REPLACE (chutes_bola_parada_vis,".0","") AS INT64) chutes_bola_parada_visitante, + SAFE_CAST(REPLACE (defesas_man,".0","") AS INT64) defesas_mandante, + SAFE_CAST(REPLACE (defesas_vis,".0","") AS INT64) defesas_visitante, + SAFE_CAST(REPLACE (impedimentos_man,".0","") AS INT64) impedimentos_mandante, + SAFE_CAST(REPLACE (impedimentos_vis,".0","") AS INT64) impedimentos_visitante, + SAFE_CAST(REPLACE (chutes_man,".0","") AS INT64) chutes_mandante, + SAFE_CAST(REPLACE (chutes_vis,".0","") AS INT64) chutes_visitante, + SAFE_CAST(REPLACE (chutes_fora_man,".0","") AS INT64) chutes_fora_mandante, + SAFE_CAST(REPLACE (chutes_fora_vis,".0","") AS INT64) chutes_fora_visitante +FROM basedosdados-staging.mundo_transfermarkt_competicoes_staging.copa_brasil AS t \ No newline at end of file diff --git a/models/mundo_transfermarkt_competicoes/schema.yml b/models/mundo_transfermarkt_competicoes/schema.yml index 38299b45..eabc75c3 100644 --- a/models/mundo_transfermarkt_competicoes/schema.yml +++ b/models/mundo_transfermarkt_competicoes/schema.yml @@ -1,11 +1,11 @@ version: 2 models: - - name: brasileirao_serie_a - description: "Dados de 2003-03-29 até 2006-12-03 possuem somente as seguintes informações: data, horario, rodada, estadio, time_man, time_vis, gols_man, gols_vis. O motivo é que o site não disponibilizou outras informações. + - name: mundo_transfermarkt_competicoes__brasileirao_serie_a + description: "Dados de 2003-03-29 até 2006-12-03 possuem somente as seguintes informações: data, horario, rodada, estadio, time_mandante, time_visitante, gols_mandante, gols_visitante. O motivo é que o site não disponibilizou outras informações. A partir de 2007-05-03, informações mais completas foram disponibilizadas, contudo com algumas exceções. - - tecnico_man e tecnico_vis possuem alguns valores vazios devido a mudança de padrão. Geralmente técnicos possui id = 0. Contudo quando o técnico é um ex-jogador, ele possuí um id específico. Em consequência da inconsistência no padrão do id dos técnicos, linhas em que esse erro ocorre as colunas valor_equipe_titular_man, valor_equipe_titular_vis, idade_media_titular_man, idade_media_titular_vis, também são afetadas e resultando em vazio; + - tecnico_mandante e tecnico_visitante possuem alguns valores vazios devido a mudança de padrão. Geralmente técnicos possui id = 0. Contudo quando o técnico é um ex-jogador, ele possuí um id específico. Em consequência da inconsistência no padrão do id dos técnicos, linhas em que esse erro ocorre as colunas valor_equipe_titular_mandante, valor_equipe_titular_visitante, idade_media_titular_mandante, idade_media_titular_visitante, também são afetadas e resultando em vazio; - Na data de 2016-12-11, rodada 38, a partida entre Chapecoense e Atlético-MG não ocorreu em decorrência do desastre que atingiu a equipe do Chapecoense na época, resultando assim em W.O. duplo; Fonte: https://www.transfermarkt.com/campeonato-brasileiro-serie-a/startseite/wettbewerb/BRA1" @@ -24,59 +24,138 @@ Fonte: https://www.transfermarkt.com/campeonato-brasileiro-serie-a/startseite/we description: Público presente - name: publico_max description: Público máximo - - name: time_man + - name: time_mandante description: Time mandante - - name: time_vis + - name: time_visitante description: Time visitante - - name: tecnico_man + - name: tecnico_mandante description: Técnico do time mandante - - name: tecnico_vis + - name: tecnico_visitante description: Técnico do time visitante - - name: colocacao_man + - name: colocacao_mandante description: Colocação do time mandante - - name: colocacao_vis + - name: colocacao_visitante description: Colocação do time visitante - - name: valor_equipe_titular_man + - name: valor_equipe_titular_mandante description: Valor da equipe titular do time mandante - - name: valor_equipe_titular_vis + - name: valor_equipe_titular_visitante description: Valor da equipe titular do time visitante - - name: idade_media_titular_man + - name: idade_media_titular_mandante description: Idade média da equipe titular do time mandante - - name: idade_media_titular_vis + - name: idade_media_titular_visitante description: Idade média da equipe titular do time visitante - - name: gols_man + - name: gols_mandante description: Gols do time mandante - - name: gols_vis + - name: gols_visitante description: Gols do time visitante - - name: gols_1_tempo_man + - name: gols_1_tempo_mandante description: Gols no primeiro tempo do time mandante - - name: gols_1_tempo_vis + - name: gols_1_tempo_visitante description: Gols no primeiro tempo do time visitante - - name: escanteios_man + - name: escanteios_mandante description: Escanteios do time mandante - - name: escanteios_vis + - name: escanteios_visitante description: Escanteios do time visitante - - name: faltas_man + - name: faltas_mandante description: Faltas feitas pelo time mandante - - name: faltas_vis + - name: faltas_visitante description: Faltas feitas pelo time visitante - - name: chutes_bola_parada_man + - name: chutes_bola_parada_mandante description: Chutes de bola parada do time mandante - - name: chutes_bola_parada_vis + - name: chutes_bola_parada_visitante description: Chutes de bola parada do time visitante - - name: defesas_man + - name: defesas_mandante description: Defesas do time mandante - - name: defesas_vis + - name: defesas_visitante description: Defesas do time visitante - - name: impedimentos_man + - name: impedimentos_mandante description: Impedimentos do time mandante - - name: impedimentos_vis + - name: impedimentos_visitante description: Impedimentos do time visitante - - name: chutes_man + - name: chutes_mandante description: Chutes do time mandante - - name: chutes_vis + - name: chutes_visitante description: Chutes do time visitante - - name: chutes_fora_man + - name: chutes_fora_mandante description: Chutes fora do time mandante - - name: chutes_fora_vis + - name: chutes_fora_visitante + description: Chutes fora do time visitante + - name: mundo_transfermarkt_competicoes__copa_brasil + description: "Com dados coletados via webscraping, a tabela abrange edições a partir de 2020, quando a fonte dos dados, o site da Transfermarkt, começou a fornecer informações detalhadas sobre vencedores e estatísticas de partidas. Entre 2017 e 2020, 91 equipes competiram, com onze já nas oitavas de final, enquanto a edição de 2021 trouxe 92 equipes. A presença de valores nulos reflete a natureza variável da fonte de dados." + columns: + - name: ano_campeonato + description: Ano do campeonato + - name: data + description: Data da partida + - name: horario + description: Horário da partida + - name: fase + description: Fase do campeonato + - name: tipo_fase + description: Tipo de jogo na fase + - name: estadio + description: Estádio + - name: arbitro + description: Árbitro + - name: publico + description: Público presente + - name: publico_max + description: Público máximo + - name: time_mandante + description: Time mandante + - name: time_visitante + description: Time visitante + - name: tecnico_mandante + description: Técnico do time mandante + - name: tecnico_visitante + description: Técnico do time visitante + - name: valor_equipe_titular_mandante + description: Valor da equipe titular do time mandante + - name: valor_equipe_titular_visitante + description: Valor da equipe titular do time visitante + - name: idade_media_titular_mandante + description: Idade média da equipe titular do time mandante + - name: idade_media_titular_visitante + description: Idade média da equipe titular do time visitante + - name: gols_mandante + description: Gols do time mandante + - name: gols_visitante + description: Gols do time visitante + - name: gols_1_tempo_mandante + description: Gols no primeiro tempo do time mandante + - name: gols_1_tempo_visitante + description: Gols no primeiro tempo do time visitante + - name: penalti + description: Indicador se o jogo foi para os pênaltis + - name: gols_penalti_mandante + description: Gols nos pênaltis do time mandante + - name: gols_penalti_visitante + description: Gols nos pênaltis do time visitante + - name: escanteios_mandante + description: Escanteios do time mandante + - name: escanteios_visitante + description: Escanteios do time visitante + - name: faltas_mandante + description: Faltas feitas pelo time mandante + - name: faltas_visitante + description: Faltas feitas pelo time visitante + - name: chutes_bola_parada_mandante + description: Chutes de bola parada do time mandante + - name: chutes_bola_parada_visitante + description: Chutes de bola parada do time visitante + - name: defesas_mandante + description: Defesas do time mandante + - name: defesas_visitante + description: Defesas do time visitante + - name: impedimentos_mandante + description: Impedimentos do time mandante + - name: impedimentos_visitante + description: Impedimentos do time visitante + - name: chutes_mandante + description: Chutes do time mandante + - name: chutes_visitante + description: Chutes do time visitante + - name: chutes_fora_mandante + description: Chutes fora do time mandante + - name: chutes_fora_visitante description: Chutes fora do time visitante diff --git a/models/world_wb_mides/licitacao.sql b/models/world_wb_mides/licitacao.sql index 0ca260bb..f2e6073e 100644 --- a/models/world_wb_mides/licitacao.sql +++ b/models/world_wb_mides/licitacao.sql @@ -1,3 +1,19 @@ +{{ + config( + schema = "world_wb_mides", + materialized = "table", + partition_by = { + "field": "ano", + "data_type": "int64", + "range": { + "start": 2009, + "end": 2021, + "interval": 1} + }, + cluster_by = ["mes", "sigla_uf"], + labels = {"project_id": "basedosdados", "tema": "economia"} + ) + }} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(mes AS INT64) mes, diff --git a/models/world_wb_mides/licitacao_item.sql b/models/world_wb_mides/licitacao_item.sql index 4132f2dc..00976f19 100644 --- a/models/world_wb_mides/licitacao_item.sql +++ b/models/world_wb_mides/licitacao_item.sql @@ -1,3 +1,19 @@ +{{ + config( + schema = "world_wb_mides", + materialized = "table", + partition_by = { + "field": "ano", + "data_type": "int64", + "range": { + "start": 2009, + "end": 2022, + "interval": 1} + }, + cluster_by = ["sigla_uf"], + labels = {"project_id": "basedosdados", "tema": "economia"} + ) + }} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(sigla_uf AS STRING) sigla_uf, diff --git a/models/world_wb_mides/licitacao_participante.sql b/models/world_wb_mides/licitacao_participante.sql index 2d4dcc35..5b95b33f 100644 --- a/models/world_wb_mides/licitacao_participante.sql +++ b/models/world_wb_mides/licitacao_participante.sql @@ -1,3 +1,19 @@ +{{ + config( + schema = "world_wb_mides", + materialized = "table", + partition_by = { + "field": "ano", + "data_type": "int64", + "range": { + "start": 2009, + "end": 2021, + "interval": 1} + }, + cluster_by = ["sigla_uf"], + labels = {"project_id": "basedosdados", "tema": "economia"} + ) + }} SELECT SAFE_CAST(ano AS INT64) ano, SAFE_CAST(sigla_uf AS STRING) sigla_uf, diff --git a/models/world_wb_mides/orgao_unidade_gestora.sql b/models/world_wb_mides/orgao_unidade_gestora.sql new file mode 100644 index 00000000..589cf8f2 --- /dev/null +++ b/models/world_wb_mides/orgao_unidade_gestora.sql @@ -0,0 +1,18 @@ +{{ + config( + schema = "world_wb_mides", + materialized = "table", + cluster_by = ["sigla_uf"], + labels = {"project_id": "basedosdados", "tema": "economia"} + ) + }} +SELECT +SAFE_CAST(ano AS STRING) ano, +SAFE_CAST(sigla_uf AS STRING) sigla_uf, +SAFE_CAST(id_municipio AS STRING) id_municipio, +SAFE_CAST(orgao AS STRING) orgao, +SAFE_CAST(nome_orgao AS STRING) nome_orgao, +SAFE_CAST(id_unidade_gestora AS STRING) id_unidade_gestora, +SAFE_CAST(nome_unidade_gestora AS STRING) nome_unidade_gestora, +SAFE_CAST(esfera AS STRING) esfera +FROM basedosdados-staging.world_wb_mides_staging.orgao_unidade_gestora AS t \ No newline at end of file diff --git a/models/world_wb_mides/pagamento.sql b/models/world_wb_mides/pagamento.sql index 946f4281..eb65ca8d 100644 --- a/models/world_wb_mides/pagamento.sql +++ b/models/world_wb_mides/pagamento.sql @@ -305,7 +305,7 @@ pago_pb AS ( FROM `basedosdados-staging.world_wb_mides_staging.raw_despesa_rs` AS c LEFT JOIN `basedosdados-staging.world_wb_mides_staging.aux_orgao_rs` AS a ON c.cd_orgao = a.cd_orgao LEFT JOIN `basedosdados.br_bd_diretorios_brasil.municipio` m ON m.id_municipio = a.id_municipio - WHERE tipo_operacao = 'P' AND (SAFE_CAST(vl_liquidacao AS FLOAT64) >= 0) + WHERE tipo_operacao = 'P' AND (SAFE_CAST(vl_pagamento AS FLOAT64) >= 0) GROUP BY 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 ), estorno_rs AS ( @@ -315,7 +315,7 @@ pago_pb AS ( FROM `basedosdados-staging.world_wb_mides_staging.raw_despesa_rs` AS c LEFT JOIN `basedosdados-staging.world_wb_mides_staging.aux_orgao_rs` AS a ON c.cd_orgao = a.cd_orgao LEFT JOIN `basedosdados.br_bd_diretorios_brasil.municipio` m ON m.id_municipio = a.id_municipio - WHERE tipo_operacao = 'P' AND (SAFE_CAST(vl_liquidacao AS FLOAT64) < 0) + WHERE tipo_operacao = 'P' AND (SAFE_CAST(vl_pagamento AS FLOAT64) < 0) GROUP BY 1 ), frequencia_rs AS ( diff --git a/models/world_wb_mides/schema.yml b/models/world_wb_mides/schema.yml index 22f22870..395c7ea5 100644 --- a/models/world_wb_mides/schema.yml +++ b/models/world_wb_mides/schema.yml @@ -44,7 +44,8 @@ models : - name: subfuncao description: Descrição da subfunção orçamentária. - name: valor_ajuste - description: Valor de correção entre o valor final e valor inicial na ausência da identificação da despesa + description: Valor de correção entre o valor final e valor inicial na ausência + da identificação da despesa - name: valor_anulacao description: Valor da anulação, caso haja deduções - name: valor_final @@ -53,6 +54,19 @@ models : description: Valor bruto do empenho - name: valor_reforco description: Valor do reforço, caso haja incrementos + - name: world_wb_mides__dicionario + description: Dicionário + columns: + - name: chave + description: Chave + - name: cobertura_temporal + description: Cobertura Temporal + - name: coluna + description: Coluna + - name: id_tabela + description: ID Tabela + - name: valor + description: Valor - name: licitacao description: Dados a nível de licitação. columns: @@ -103,7 +117,8 @@ models : - name: orgao description: Órgão - name: preferencia_micro_pequena - description: Preferência de contratação para as microempresas e empresas de pequeno porte + description: Preferência de contratação para as microempresas e empresas de + pequeno porte - name: quantidade_convidados description: Número de convidados (modalidade convite) - name: sigla_uf @@ -208,108 +223,23 @@ models : description: PF ou PJ - name: vencedor description: Participante Vencedor - - name: liquidacao - description: Dados a nível de liquidação. - columns: - - name: ano - description: Ano - - name: data - description: Data - - name: documento_responsavel - description: Número do documento do liquidante - - name: id_empenho - description: Sequencial identificador do empenho - - name: id_empenho_bd - description: Código único de identificação do empenho - - name: id_liquidacao - description: Sequencial identificador da liquidação - - name: id_liquidacao_bd - description: Código único de identificação da liquidação - - name: id_municipio - description: ID Município - IBGE 7 Dígitos - - name: id_unidade_gestora - description: ID Unidade Gestora - - name: indicador_restos_pagar - description: Indica se o pagamento é realizado em exercício diferente - - name: mes - description: Mês - - name: nome_responsavel - description: Nome do liquidante - - name: numero_liquidacao - description: Número da liquidação - - name: orgao - description: Órgão Adminsitrativo - - name: sigla_uf - description: Sigla da Unidade da Federação - - name: valor_anulacao - description: Valor da anulação ou estorno caso haja deduções - - name: valor_liquidacao - description: Valor líquido da liquidação - - name: valor_liquidacao_original - description: Valor bruto liquidado - - name: pagamento - description: Dados a nível de pagamento. + - name: orgao_unidade_gestora + description: Dados auxiliares a nível de órgão e unidade gestora. columns: - name: ano description: Ano - - name: credor - description: Nome/Razão Social do credor - - name: data - description: Data - - name: documento_credor - description: Número do documento do credor - - name: fonte - description: Fonte do recurso - - name: id_empenho - description: Sequencial identificador do empenho - - name: id_empenho_bd - description: Código único de identificação do empenho - - name: id_liquidacao - description: Sequencial identificador da liquidação - - name: id_liquidacao_bd - description: Código único de identificação da licitação + - name: esfera + description: Esfera (e.g. municipal, intermunicipal, estadual, federal) - name: id_municipio description: ID Município - IBGE 7 Dígitos - - name: id_pagamento - description: Sequencial identificador do pagamento - - name: id_pagamento_bd - description: Código único de identificação do pagamento - name: id_unidade_gestora - description: Descrição Unidade Gestora - - name: indicador_restos_pagar - description: Indica se o pagamento é realizado em exercício diferente - - name: mes - description: Mês - - name: numero_empenho - description: Número do empenho - - name: numero_liquidacao - description: Número da liquidação - - name: numero_pagamento - description: Número do pagamento + description: Código da unidade gestora a qual a operação está vinculada + - name: nome_orgao + description: Nome do órgão + - name: nome_unidade_gestora + description: Nome da unidade gestora - name: orgao - description: Órgão Adminsitrativo + description: Código do órgão ao qual a operação (empenho, liquidação, pagamento + ou licitação) está vinculada - name: sigla_uf description: Sigla da Unidade da Federação - - name: valor_ajuste - description: Valor ajuste - - name: valor_anulacao - description: Somatório de deduções e anulações - - name: valor_final - description: Resultado do valor original descontado das deduções - - name: valor_inicial - description: Valor pago na fonte - - name: valor_liquido_recebido - description: Resultado do valor original descontado das deduções - - name: relacionamentos - description: Dados a nível de relacionamento. - columns: - - name: ano - description: Ano - - name: id_empenho - description: Código do Empenho - - name: id_licitacao - description: Código da Licitação - - name: id_municipio - description: ID Município - IBGE 7 Dígitos - - name: sigla_uf - description: Sigla da Unidade de Federação \ No newline at end of file diff --git a/models/world_wb_mides/world_wb_mides__dicionario.sql b/models/world_wb_mides/world_wb_mides__dicionario.sql new file mode 100644 index 00000000..3f7b74ff --- /dev/null +++ b/models/world_wb_mides/world_wb_mides__dicionario.sql @@ -0,0 +1,14 @@ +{{ + config( + alias = 'dicionario', + schema = "world_wb_mides", + materialized = "table" + ) + }} +SELECT +SAFE_CAST(id_tabela AS STRING) id_tabela, +SAFE_CAST(coluna AS STRING) coluna, +SAFE_CAST(chave AS STRING) chave, +SAFE_CAST(cobertura_temporal AS STRING) cobertura_temporal, +SAFE_CAST(valor AS STRING) valor +FROM basedosdados-staging.world_wb_mides_staging.dicionario AS t \ No newline at end of file