2013-04-28 1 views
3

Это первый раз, когда я работаю с SQL. Я использую PostgreSQL для Windows 7 64bit.Импорт (не CSV) текстовых данных в PostgreSQL, который разделен пробелами и одной заглавной

У меня есть следующие (большой) .txt файл твитов построен так:

T 2009-06-07 02:07:41 
U http://twitter.com/cyberplumber 
W SPC Severe Thunderstorm Watch 339: WW 339 SEVERE TSTM KS NE 070200Z - 070800Z URGENT - IMMEDIATE BROADCAST REQUE.. http://tinyurl.com/5th9sw 

Как вы видите, все три «колонки» разделяются следующим образом: T \t (то же самое для U и W) вместо традиционной запятой (,). Я хотел бы импортировать весь файл в таблицу SQL с столбцами с именем date, user и text_msg.

Я предполагаю, что мне, вероятно, придется разобрать его каким-то образом. Любые идеи о том, как получить данные в таблицу простейшим и эффективным образом? Также обратите внимание, что файлы .txt довольно велики (> 4 ГБ), и поэтому для меня нет простого способа редактировать их вручную.

+0

Является ли это одноразовая работа или регулярное требование? –

+0

Также, * как всегда *, ваша версия Postgres пожалуйста. –

+0

Если вы импортируете каналы Twitter, см. Https://github.com/umitanuki/twitter_fdw –

ответ

2

Попробуйте сделать следующее:

Во-первых, создать соответствующую таблицу в SQL следующим образом:

CREATE TABLE tweet(
ts timestamp, -- if inserting the values as timestamps gives errors, change to 'TEXT' 
url TEXT, -- There smarted UDTs for URL available too 
message TEXT 
); 

Затем пойти и попытаться запустить стандартное заявление COPY, что-то вроде следующего:

Наконец, молись, чтобы у вас было достаточно памяти и лог-файлов для> 4 ГБ файлов. Для получения дополнительной информации о команде COPY, см http://www.postgresql.org/docs/9.2/static/sql-copy.html

2

Быстрый & грязный хак:

DROP SCHEMA tmp CASCADE; 
CREATE SCHEMA tmp ; 
SET search_path=tmp; 

CREATE TABLE lutser 
     (id SERIAL NOT NULL PRIMARY KEY 
     , ztxt text 
     ); 

CREATE TABLE tweetdeck 
     (id SERIAL NOT NULL PRIMARY KEY 
     , stamp timestamp NOT NULL 
     , zurl text 
     , ztxt text 
     ); 

COPY lutser(ztxt) 
FROM '/tmp/tweet.dat' 
     ; 

INSERT INTO tweetdeck (stamp, zurl, ztxt) 
SELECT regexp_replace(t.ztxt, E'^[A-Z][ \t]*', '')::timestamp 
     , regexp_replace(u.ztxt, E'^[A-Z][ \t]*', '') 
     , regexp_replace(w.ztxt, E'^[A-Z][ \t]*', '') 
FROM lutser t 
JOIN lutser u ON u.id = t.id+1 
JOIN lutser w ON w.id = t.id+2 
WHERE t.id %3 = 1 
AND LEFT(t.ztxt,1) = 'T' -- Should be redundant, Won't harm 
AND LEFT(u.ztxt,1) = 'U' 
AND LEFT(w.ztxt,1) = 'W' 
     ; 


SELECT * FROM lutser; 
SELECT * FROM tweetdeck; 

Результаты:

COPY 9 
INSERT 0 3 
id |                  ztxt                  
----+-------------------------------------------------------------------------------------------------------------------------------------------------- 
    1 | T 2009-06-07 02:07:31 
    2 | U http://twitter.com/cyberplumber 
    3 | W SPC Severe Thunderstorm Watch 339: WW 339 SEVERE TSTM KS NE 070200Z - 070800Z URGENT - IMMEDIATE BROADCAST REQUE.. http://tinyurl.com/5th9sw 
    4 | T 2009-06-07 02:07:41 
    5 | U http://twitter.com/cyberplumber 
    6 | W SPC Severe Thunderstorm Watch 339: WW 339 SEVERE TSTM KS NE 070200Z - 070800Z URGENT - IMMEDIATE BROADCAST REQUE.. http://tinyurl.com/5th9sw 
    7 | T 2009-06-07 02:07:51 
    8 | U http://twitter.com/cyberplumber 
    9 | W SPC Severe Thunderstorm Watch 339: WW 339 SEVERE TSTM KS NE 070200Z - 070800Z URGENT - IMMEDIATE BROADCAST REQUE.. http://tinyurl.com/5th9sw 
(9 rows) 


id |  stamp  |    zurl    |                  ztxt                  
----+---------------------+---------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------- 
    1 | 2009-06-07 02:07:31 | http://twitter.com/cyberplumber | SPC Severe Thunderstorm Watch 339: WW 339 SEVERE TSTM KS NE 070200Z - 070800Z URGENT - IMMEDIATE BROADCAST REQUE.. http://tinyurl.com/5th9sw 
    2 | 2009-06-07 02:07:41 | http://twitter.com/cyberplumber | SPC Severe Thunderstorm Watch 339: WW 339 SEVERE TSTM KS NE 070200Z - 070800Z URGENT - IMMEDIATE BROADCAST REQUE.. http://tinyurl.com/5th9sw 
    3 | 2009-06-07 02:07:51 | http://twitter.com/cyberplumber | SPC Severe Thunderstorm Watch 339: WW 339 SEVERE TSTM KS NE 070200Z - 070800Z URGENT - IMMEDIATE BROADCAST REQUE.. http://tinyurl.com/5th9sw 
(3 rows) 
Смежные вопросы