Wymored Login

importar dados caged para postgresql

04 de julho de 2019 por Alexandre Miguel de Andrade Souza

Nessa importação, vamos considerar o cenário em que estamos interessados nos dados do Estado de Minas Gerais

Converter para UTF-8

iconv -f ISO-8859-1 -t UTF-8 dados/CAGED/2019/CAGEDEST_042019.txt -o caged.csv

criar a estrutura para a tabela intermediária do caged (caged.sql)

#!/usr/bin/env python3
import csv, os
from slugify import slugify
origem = 'teste.csv'
destino = 'caged.sql'
arquivo = os.path.abspath(origem)

d = open(destino,'w')
with open(origem,'r') as f:

    header = f.readline().split(';')
    head_cells = []
    for cell in header:
        value = slugify(cell,separator="_")
        if value in head_cells:
            value = value+'_2'
        head_cells.append(value)
    #cabecalho = "{}\n".format(';'.join(campos))

    #print(cabecalho)
    fields= []
    for cell in head_cells:
        fields.append(" {} text".format(cell))
    table = origem.split('.')[0]
    sql = "create table {} ( \n {} \n);".format(origem.split('.')[0],",\n".join(fields))
    sql += "\n COPY {} FROM '{}' DELIMITER ';' CSV HEADER;".format(table,arquivo)

    print(sql)
    d.write(sql)

Adaptar o caged.sql para criar uma tabela temporária teste, importar os dados, criar a tabela do CAGED definitiva, se não houver e dar carga a partir da tabela teste intermediaria.

 drop table teste;
create table teste ( 
  admitidos_desligados integer,
competencia_declarada integer,
municipio integer,
ano_declarado integer,
cbo_2002_ocupacao integer,
cnae_1_0_classe integer,
cnae_2_0_classe integer,
cnae_2_0_subclas integer,
faixa_empr_inicio_jan integer,
grau_instrucao integer,
qtd_hora_contrat integer,
ibge_subsetor integer,
idade integer,
ind_aprendiz integer,
ind_portador_defic integer,
raca_cor integer,
salario_mensal text,
saldo_mov text,
sexo text,
tempo_emprego text,
tipo_estab text,
tipo_defic text,
tipo_mov_desagregado integer,
uf integer,
bairros_sp text,
bairros_fortaleza text,
bairros_rj text,
distritos_sp text,
regioes_adm_df text,
mesorregiao integer,
microrregiao integer,
regiao_adm_rj text,
regiao_adm_sp text,
regiao_corede text,
regiao_corede_04 text,
regiao_gov_sp text,
regiao_senac_pr text,
regiao_senai_pr text,
regiao_senai_sp text,
sub_regiao_senai_pr text,
ind_trab_parcial integer,
ind_trab_intermitente integer
);
COPY teste FROM '/home/p/dev/dados/caged.csv' DELIMITER ';' CSV HEADER;

create table cagedmg ( 
      admitidos_desligados integer,
    competencia_declarada integer,
    municipio integer,
    ano_declarado integer,
    cbo_2002_ocupacao integer,
    cnae_1_0_classe integer,
    cnae_2_0_classe integer,
    cnae_2_0_subclas integer,
    faixa_empr_inicio_jan integer,
    grau_instrucao integer,
    qtd_hora_contrat integer,
    ibge_subsetor integer,
    idade integer,
    ind_aprendiz integer,
    ind_portador_defic integer,
    raca_cor integer,
    salario_mensal NUMERIC(15,2),
    saldo_mov text,
    sexo text,
    tempo_emprego NUMERIC(15,2),
    tipo_estab text,
    tipo_defic text,
    tipo_mov_desagregado integer,
    uf integer,
    regioes_adm_df text,
    mesorregiao integer,
    microrregiao integer,
    ind_trab_parcial integer,
    ind_trab_intermitente integer
    );


    insert into cagedmg (
        admitidos_desligados,
        competencia_declarada,
        municipio,
        ano_declarado,
        cbo_2002_ocupacao,
        cnae_1_0_classe,
        cnae_2_0_classe,
        cnae_2_0_subclas,
        faixa_empr_inicio_jan,
        grau_instrucao,
        qtd_hora_contrat,
        ibge_subsetor,
        idade,
        ind_aprendiz,
        ind_portador_defic,
        raca_cor,
        salario_mensal,
        saldo_mov,
        sexo,
        tempo_emprego,
        tipo_estab,
        tipo_defic,
        tipo_mov_desagregado,
        uf,
        regioes_adm_df,
        mesorregiao,
        microrregiao,
        ind_trab_parcial,
        ind_trab_intermitente)
    select 
        admitidos_desligados,
        competencia_declarada,
        municipio,
        ano_declarado,
        cbo_2002_ocupacao,
        cnae_1_0_classe,
        cnae_2_0_classe,
        cnae_2_0_subclas,
        faixa_empr_inicio_jan,
        grau_instrucao,
        qtd_hora_contrat,
        ibge_subsetor,
        idade,
        ind_aprendiz,
        ind_portador_defic,
        raca_cor,
        cast(replace(salario_mensal,',','.') as NUMERIC(15,2)),
        saldo_mov,
        sexo,
        cast(replace(tempo_emprego,',','.') as NUMERIC(15,2)),
        tipo_estab,
        tipo_defic,
        tipo_mov_desagregado,
        uf,
        regioes_adm_df,
        mesorregiao,
        microrregiao,
        ind_trab_parcial,
        ind_trab_intermitente
    from teste
    where uf =31;

Para executar o arquivo caged.sql

time sudo -H -u postgres bash -c "psql trabalho < caged.sql"