Простейший импорт текста с разделителем в виде трубы с заголовком в PostgreSQL

Я пытаюсь создать базу данных с несколькими таблицами. Одна из таблиц предназначена для хранения около 1,3 млн строк данных из экономической переписи США. Данные находятся в текстовом файле с разделителями. Это почти моя первая попытка использовать PostgreSQL.

Я надеялся использовать код, подобный приведенному ниже, чтобы просто импортировать все как текст. (Я предварительно решил рассматривать все как символ, потому что все значения, которые должны быть числовыми, включают буквенные коды для пропущенных значений и тому подобное). Однако в документации COPY говорится, что опция HEADER доступна только для импорта файлов CSV.

Моя конечная цель - использовать PostgreSQL для создания урезанных версий этих данных для анализа в R. Но R может подавиться большими файлами, поэтому я надеялся выполнить всю предварительную обработку в PostgreSQL вместо того, чтобы требовать какой-то третий инструмент. Я ищу способ сделать это, который требует минимум предварительных знаний и анализа файла, который я импортирую.

Есть ли другой способ сделать это с помощью PostgreSQL, или мне нужно удалить первую строку с помощью какого-либо другого инструмента?

Если я не могу использовать HEADER, я предполагаю, что мне нужно предоставить имена столбцов в команде CREATE TABLE. Это правильно?

Кроме того, в таких случаях PostgreSQL применяет тип данных по умолчанию или пытается определить тип данных для каждого столбца, или что? Или я могу установить тип данных по умолчанию?

Я использую PostgreSQL 9.3.4 под Windows 7 64-bit с 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;

1 ответ

Похоже, CSV должен работать. Форматы TEXT и CSV на самом деле очень похожи. Разница главным образом заключается в том, как интерпретируются кавычки и экранированные символы и как обрабатываются пустые значения. См. Документы для более точного описания.

Я бы просто попробовал:

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

И посмотри, работает ли это. Если есть другие проблемы, проверьте страницу документа для решения или, конечно, задайте другой вопрос.

Да, да, вам нужны имена столбцов и типы данных для CREATE TABLE команда. Снова посмотрите документы для этого. Вам нужно создать свою таблицу, прежде чем пытаться импортировать в нее данные.

Другие вопросы по тегам