Importação mais simples de texto delimitado por pipe com cabeçalho para PostgreSQL

0

Estou tentando criar um banco de dados com várias tabelas. Uma das tabelas destina-se a armazenar cerca de 1,3 milhões de linhas de dados do Censo Econômico dos EUA. Os dados estão em um arquivo de texto delimitado por pipe. Este é quase o meu primeiro esforço para usar o PostgreSQL.

Eu esperava usar código semelhante ao abaixo para simplesmente importar tudo como texto. (Decidi que tentaria tratar tudo como caractere, porque os valores que devem ser numéricos incluem códigos alfabéticos para valores ausentes e outros). No entanto, a documentação do COPY diz que a opção HEADER está disponível apenas para importação de arquivos CSV.

Meu objetivo final é usar o PostgreSQL para criar versões simplificadas desses dados para análise em R. Mas o R pode se engasgar com arquivos grandes, então eu esperava fazer todo o meu pré-processamento no PostgreSQL, em vez de exigir terceira ferramenta. Eu estou procurando a maneira de fazer isso que requer o mínimo conhecimento prévio e análise do arquivo que estou importando.

Existe outra maneira de fazer isso usando o PostgreSQL, ou eu preciso remover a primeira linha usando alguma outra ferramenta?

Se eu não puder usar o HEADER, estou assumindo que preciso fornecer nomes de colunas no comando CREATE TABLE. Isso está correto?

Além disso, em tais casos, o PostgreSQL aplica um tipo de dados padrão, ou tenta determinar o tipo de dados para cada coluna, ou o que? Como alternativa, posso definir um tipo de dados padrão?

Estou executando o PostgreSQL 9.3.4 no Windows 7 de 64 bits com o SP1.

CREATE DATABASE employ;
CREATE TABLE employ.ec0700a1;
COPY EC0700A1
    FROM 'C:\Users\andrewH\Documents\OaklandTechEmploymentProject\Economic Census 2007\EC07_6-dig_AllGeo\EC0700A1.dat'
    WITH    DELIMITER '|',
    HEADER TRUE;
    
por andrewH 11.04.2014 / 08:49

1 resposta

1

Parece que o CSV deve funcionar. Os formatos TEXT e CSV são realmente muito semelhantes. A diferença está principalmente em como aspas e escapes são interpretados e como os nulos são manipulados. Consulte os documentos para obter uma descrição mais exata.

Eu apenas tentaria:

COPY EC0700A1
    FROM 'C:\Users\andrewH\Documents\OaklandTechEmploymentProject\Economic Census 2007\EC07_6-dig_AllGeo\EC0700A1.dat'
    WITH  FORMAT CSV,
    DELIMITER '|',
    HEADER TRUE;

E veja se funciona. Se houver outros problemas, verifique a página do documento em busca de soluções ou, é claro, faça outra pergunta.

Ah, sim, você precisa de nomes de colunas e tipos de dados para o comando CREATE TABLE . Novamente veja os documentos para isso. Você precisa criar sua tabela antes de tentar importar dados para ela.

    
por 15.04.2014 / 03:40

Tags