diff --git a/dbt_project.yml b/dbt_project.yml index ad2be417..6bbab5d0 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -261,6 +261,9 @@ models: br_mec_prouni: +materialized: table +schema: br_mec_prouni + br_mec_sisu: + +materialized: table + +schema: br_mec_sisu br_mercadolivre_ofertas: +materialized: table +schema: br_mercadolivre_ofertas diff --git a/models/br_mec_sisu/br_mec_sisu__microdados.sql b/models/br_mec_sisu/br_mec_sisu__microdados.sql new file mode 100644 index 00000000..3d52b58c --- /dev/null +++ b/models/br_mec_sisu/br_mec_sisu__microdados.sql @@ -0,0 +1,128 @@ +{{ + config( + schema="br_mec_sisu", + alias="microdados", + materialized="table", + partition_by={ + "field": "ano", + "data_type": "int64", + "range": {"start": 2017, "end": 2024, "interval": 1}, + }, + cluster_by=["ano", "sigla_uf_candidato"], + labels={"tema": "educacao"}, + ) +}} +select + safe_cast(ano as int64) as ano, + safe_cast(edicao as string) as semestre, + case + when etapa = '4' then 'Chamada Regular' when etapa = '7' then 'Lista de Espera' + end as etapa, + safe_cast(sigla_uf_ies as string) as sigla_uf_ies, + safe_cast(id_ies as string) as id_ies, + safe_cast(sigla_ies as string) as sigla_ies, + safe_cast(d1.sigla_uf as string) as sigla_uf_campus, + safe_cast(d1.id_municipio as string) as id_municipio_campus, + safe_cast(id_campus as string) as id_campus, + safe_cast(campus as string) as campus, + safe_cast(id_curso as string) as id_curso, + safe_cast(nome_curso as string) as nome_curso, + safe_cast(turno as string) as turno, + safe_cast(periodicidade as string) as periodicidade, + safe_cast(tipo_cota as string) as tipo_cota, + safe_cast(ds_modalidade_concorrencia as string) as modalidade_concorrencia, + safe_cast(quantidade_vagas_concorrencia as int64) as quantidade_vagas_concorrencia, + safe_cast(percentual_bonus as float64) as percentual_bonus, + safe_cast(peso_l as float64) as peso_l, + safe_cast(peso_ch as float64) as peso_ch, + safe_cast(peso_cn as float64) as peso_cn, + safe_cast(peso_m as float64) as peso_m, + safe_cast(peso_r as float64) as peso_r, + safe_cast(nota_minima_l as float64) as nota_minima_l, + safe_cast(nota_minima_ch as float64) as nota_minima_ch, + safe_cast(nota_minima_cn as float64) as nota_minima_cn, + safe_cast(nota_minima_m as float64) as nota_minima_m, + safe_cast(nota_minima_r as float64) as nota_minima_r, + safe_cast(media_minima as float64) as media_minima, + safe_cast(cpf as string) as cpf, + safe_cast(inscricao_enem as string) as inscricao_enem, + safe_cast(candidato as string) as candidato, + safe_cast(sexo as string) as sexo, + case + when + ( + (length(data_nascimento) = 8) + and (cast(substr(data_nascimento, 1, 2) as int64) > 30) + ) + then concat('19', data_nascimento) + when + ( + (length(data_nascimento) = 8) + and (cast(substr(data_nascimento, 1, 2) as int64) < 30) + ) + then concat('20', data_nascimento) + else data_nascimento + end as data_nascimento, + safe_cast(d2.sigla_uf as string) as sigla_uf_candidato, + safe_cast(d2.id_municipio as string) as id_municipio_candidato, + safe_cast(opcao as string) as opcao, + safe_cast(nota_l as float64) as nota_l, + safe_cast(nota_ch as float64) as nota_ch, + safe_cast(nota_cn as float64) as nota_cn, + safe_cast(nota_m as float64) as nota_m, + safe_cast(nota_r as float64) as nota_r, + safe_cast(nota_l_peso as float64) as nota_l_peso, + safe_cast(nota_ch_peso as float64) as nota_ch_peso, + safe_cast(nota_cn_peso as float64) as nota_cn_peso, + safe_cast(nota_m_peso as float64) as nota_m_peso, + safe_cast(nota_r_peso as float64) as nota_r_peso, + safe_cast(nota_candidato as float64) as nota_candidato, + safe_cast(nota_corte as float64) as nota_corte, + safe_cast(classificacao as int64) as classificacao, + safe_cast( + ( + case + when status_aprovado = 'N' + then false + when status_aprovado = 'S' + then true + end + ) as bool + ) as status_aprovado, + case + when status_matricula = 'CANCELADA' + then 'Cancelada' + when status_matricula = 'DOCUMENTACAO REJEITADA' + then 'Documentação rejeitada' + when status_matricula = 'DOCUMENTAÇÃO REJEITADA' + then 'Documentação rejeitada' + when status_matricula = 'EFETIVADA' + then 'Efetivada' + when status_matricula = 'NÃO COMPARECEU' + then 'Não compareceu' + when status_matricula = 'NÃO CONVOCADO' + then 'Não convocado' + when status_matricula = 'PENDENTE' + then 'Pendente' + when status_matricula = 'SUBSTITUIDA - FORA DO PRAZO' + then 'Substituída - fora do prazo' + when status_matricula = 'SUBSTITUIDA - MATRICULA FORA DO PRAZO' + then 'Substituída - fora do prazo' + when status_matricula = 'SUBSTITUIDA - MESMA IES' + then 'Substituída - mesma IES' + when status_matricula = 'SUBSTITUIDA - OUTRA IES' + then 'Substituída - outra IES' + when status_matricula = 'SUBSTITUÍDA MESMA IES' + then 'Substituída - mesma IES' + when status_matricula = 'SUBSTITUÍDA OUTRA IES' + then 'Substituída - outra IES' + end as status_matricula +from `basedosdados-staging.br_mec_sisu_staging.microdados` s +left join + `basedosdados-staging.br_bd_diretorios_brasil.municipio` d1 + on (s.sigla_uf_campus = d1.sigla_uf) + and (lower(s.nome_municipio_campus) = lower(d1.nome)) +left join + `basedosdados-staging.br_bd_diretorios_brasil.municipio` d2 + on (s.sigla_uf_candidato = d2.sigla_uf) + and (lower(s.nome_municipio_candidato) = lower(d2.nome)) diff --git a/models/br_mec_sisu/schema.yml b/models/br_mec_sisu/schema.yml new file mode 100644 index 00000000..43915bf0 --- /dev/null +++ b/models/br_mec_sisu/schema.yml @@ -0,0 +1,317 @@ +--- +version: 2 +models: + - name: br_mec_sisu__microdados + description: Microdados dos candidatos que utilizam do sistema unificado gerido + pelo MEC para as vagas ofertadas por instituições públicas de ensino superior + de todo o Brasil + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - ano + - semestre + - etapa + - id_curso + - cpf + - candidato + - opcao + columns: + - name: ano + description: Ano da edição + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: semestre + description: Semestre + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: etapa + description: Código da etapa + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: id_ies + description: ID da Instituição de Ensino Superior + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - relationships: + to: ref('br_bd_diretorios_brasil__instituicao_ensino_superior') + field: id_ies + - name: sigla_ies + description: Sigla da Instituição de Ensino Superior + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: sigla_uf_ies + description: Sigla da Unidade da Federação da Instituição de Ensino Superior + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: sigla_uf + - name: id_campus + description: ID do campus da Instituição Superior + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: campus + description: Nome do campus da Instituição Superior + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: sigla_uf_campus + description: Sigla da Unidade da Federação do campus da Instituição de Ensino + Superior + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: sigla_uf + - name: id_municipio_campus + description: ID Município do campus da Instituição Superior - IBGE 7 Dígitos + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: id_curso + description: ID Curso - INEP + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nome_curso + description: Nome Curso - INEP + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: turno + description: Turno + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: periodicidade + description: Periodicidade do curso + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: tipo_cota + description: Tipo de Cota + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: modalidade_concorrencia + description: Tipo da modalidade de concorrência + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: quantidade_vagas_concorrencia + description: Total de vagas ofertadas dentro da modalidade de concorrência + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: percentual_bonus + description: Percentual do bônus definido para as ações afirmativas próprias + da IES + - name: peso_l + description: Peso atribuído pela instituição, na adesão ao Sisu, para a prova + de linguagens do Enem na oferta do curso no processo seletivo + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: peso_ch + description: Peso atribuído pela instituição, na adesão ao Sisu, para a prova + de ciências humanas do Enem na oferta do curso no processo seletivo + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: peso_cn + description: Peso atribuído pela instituição, na adesão ao Sisu, para a prova + de ciências da natureza do Enem na oferta do curso no processo seletivo + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: peso_m + description: Peso atribuído pela instituição, na adesão ao Sisu, para a prova + de matemática do Enem na oferta do curso no processo seletivo + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: peso_r + description: Peso atribuído pela instituição, na adesão ao Sisu, para a prova + de redação do Enem na oferta do curso no processo seletivo + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_minima_l + description: Nota mínima atribuída pela instituição, na adesão ao Sisu, para + a prova de linguagens do Enem na oferta do curso no processo seletivo + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_minima_ch + description: Nota mínima atribuída pela instituição, na adesão ao Sisu, para + a prova de ciências humanas do Enem na oferta do curso no processo seletivo + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_minima_cn + description: Nota mínima atribuída pela instituição, na adesão ao Sisu, para + a prova de ciências da natureza do Enem na oferta do curso no processo seletivo + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_minima_m + description: Nota mínima atribuída pela instituição, na adesão ao Sisu, para + a prova de matematica do Enem na oferta do curso no processo seletivo + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_minima_r + description: Nota mínima atribuída pela instituição, na adesão ao Sisu, para + a prova de redação do Enem na oferta do curso no processo seletivo + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: media_minima + description: Média aritmética mínima (não considerando pesos) dos cinco tipos + de provas do Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: cpf + description: CPF do candidato + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: inscricao_enem + description: Código de inscrição do candidato no Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: candidato + description: Nome do candidato + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: sexo + description: Sexo do candidato + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: data_nascimento + description: Data de nascimento do candidato + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - relationships: + to: ref('br_bd_diretorios_data_tempo__dia') + field: dia.dia + - name: sigla_uf_candidato + description: Sigla da Unidade da Federação de residência do candidato + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: sigla_uf + - name: id_municipio_candidato + description: ID do Município de residência do candidato - IBGE 7 Dígitos + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: opcao + description: Informa se é a primeira ou segunda opção de curso do candidato + no sistema Sisu + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_l + description: Nota obtida pelo candidato na prova de linguagens do Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_ch + description: Nota obtida pelo candidato na prova de ciências humanas do Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_cn + description: Nota obtida pelo candidato na prova de ciências da natureza do + Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_m + description: Nota obtida pelo candidato na prova de matemática do Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_r + description: Nota obtida pelo candidato na redação do Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_l_peso + description: Nota ponderada para a prova de linguagens do Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_ch_peso + description: Nota ponderada para a prova de ciências humanas do Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_cn_peso + description: Nota ponderada para a prova de ciências da natureza do Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_m_peso + description: Nota ponderada para a prova de matemática do Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_r_peso + description: Nota ponderada para a redação do Enem + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_candidato + description: Nota final do candidato + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: nota_corte + description: Nota de corte da modalidade/curso na chamada regular + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: classificacao + description: Colocação do candiadto considerando todos os inscritos para o + mesmo curso + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: status_aprovado + description: Informa se o estudante foi aprovado ou não na chamada regular + em sua opção de curso + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05 + - name: status_matricula + description: Informa a situação de matrícula registrado pela IES no sistema + "Sisu Gestão" + tests: + - dbt_utils.not_null_proportion: + at_least: 0.05