Я пытаюсь создать базу данных с несколькими таблицами. Одна из таблиц предназначена для хранения около 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 ответ1

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 . Снова посмотрите документы для этого. Вам нужно создать свою таблицу, прежде чем пытаться импортировать в нее данные.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .