Incrementando um fluxo de ETL com pgloader
Em uma postagem anterior vimos como criar um fluxo, agora vamos apenas incrementar o que já fizemos.
Já temos o postgres configurado.
Já temos o pgloader instalado
Já temos o script de carga funcionando.
Agora vamos incrementar este script para que seja possível fazer uma carga completa desde download do arquivo em extensão .zip até o carga de dados na instância do banco de dados.
Em resumo vamos fazer o seguinte:
- Após fazer o download do .zip
- extrair para um local temporário (descompactar)
- dropar tabela se existir
- criar a tabela
Em resumo a carga de dados já foi resolvida.
Agora vamos apenas incrementar o nosso script para que ele possa fazer as tarefas de dropar
a tabela e criar
a tabela, auto contida em um mesmo script.
BEFORE LOAD DO
$$ DROP TABLE IF EXISTS empresa; $$,
$$ CREATE TABLE empresa (
CNPJ INTEGER PRIMARY KEY,
RAZAO VARCHAR(150),
NATUREZAJURIDICA VARCHAR(150),
QUALIFICRESPONSAVEL VARCHAR(150),
CAPITALSOCIAL VARCHAR(32),
PORTEDAEMPRESA VARCHAR(2),
ENTEFEDERATIVO VARCHAR(64)
); $$;
Para isso vamos adicionar uma nova seção no arquivo que faz a nossa carga de dados, a versão final do arquivo vai ficar assim:
LOAD CSV
FROM FILENAME MATCHING ~/K3241\.K03200Y0\.D20108\.EMPRECSV/
HAVING FIELDS
(
CNPJ,
RAZAO,
NATUREZAJURIDICA,
QUALIFICRESPONSAVEL,
CAPITALSOCIAL,
PORTEDAEMPRESA,
ENTEFEDERATIVO
)
INTO postgresql://postgres:admin@localhost:5432/cnpjs
TARGET TABLE empresa
TARGET COLUMNS (
CNPJ,
RAZAO,
NATUREZAJURIDICA,
QUALIFICRESPONSAVEL,
CAPITALSOCIAL,
PORTEDAEMPRESA,
ENTEFEDERATIVO
) WITH truncate,
skip header = 64370,
fields optionally enclosed by '"',
fields escaped by double-quote,
fields terminated by ';'
SET work_mem to '32 MB', maintenance_work_mem to '64 MB'
BEFORE LOAD DO
$$ drop table if exists empresa; $$,
$$ create table empresa (
CNPJ integer primary key,
RAZAO varchar(150),
NATUREZAJURIDICA varchar(150),
QUALIFICRESPONSAVEL varchar(150),
CAPITALSOCIAL varchar(32),
PORTEDAEMPRESA varchar(32),
ENTEFEDERATIVO varchar(64)
); $$;
Com esta adição, agora o nosso script vai fazer o drop e create table em apenas uma passada. Isso vai ajudar na hora de montar os dados, e facilitar a manutenção no script.