2013-12-17 3 views
0

я создал таблицу в зеленых сливах, ниже сценарийзеленый сливы (Postgres SQL)

- Таблица: staging.file_data

- DROP TABLE staging.file_data;

CREATE TABLE staging.file_data 
(
    file_name character varying(28), 
    line_number integer, 
    date_line text 
) 
WITH (
    OIDS=FALSE 
) 
DISTRIBUTED BY (file_name); 
ALTER TABLE staging.file_data 
    OWNER TO dev_staging_develop; 

Теперь мне нужно, чтобы загрузить эту таблицу с некоторыми плоскими файлами .... плоского файл имеет несколько столбцов, но я попросил, чтобы загрузить эту таблицу с плоским файлом в 1. первого столбца имеют имя файла 2. второй столбец - порядковый номер (номер строки) 3 третий столбец будет содержать строку данных (которая представляет собой не что иное, как все данные в первой строке плоского файла) и то же самое для каждого ряд .

поэтому, если у плоского файла 100 записей, у нас будет 100 строк в таблице.

но я не уверен, как импортировать этот плоский файл в эту таблицу, может ли кто-нибудь помочь ПРИМЕЧАНИЕ: плоский файл является текстовым файлом. и находится на моей локальной машине.

спасибо за ваше время и помощь заранее.

джейсон

+0

Привет всем, я создал таблицу здесь сценарий – jason

+0

я предполагаю, что 'date_line' был неправильным для' data_line' –

+0

Вы смотрели: http://www.postgresql.org /docs/8.4/interactive/sql-copy.html и http://stackoverflow.com/questions/2987433/how-to-import-csv-file-data-into-a-postgres-table –

ответ

0

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

--Create a temporary table to hold the contents of the file 
create temp table temp_file (
each_line text 
); 

copy temp_file from '<path_to_file>/filename' text HEADER; 
--if the file has a header! See also delimiter if needed and choose a char that does not exist in the file 

--Now add the line numbers, and the filename 
alter table temp_file add column line_no smallint; 
alter table temp_file add column filename text; 
create sequence temp_file_seq increment by 1 start with 1; --not sure start with 1 or 0, try 

update temp_file 
set line_no = nextval('temp_file_seq') 
    ,filename = 'filename'; 

--Now populate your table 
insert into staging.file_data 
select * from temp_file; 

--Cleanup 
drop table temp_file;