wtorek, 3 czerwca 2014

PGLoader v3

W ostatnim poście pisałam o narzędziu pgloader służący do importu danych do PostgreSQLa. Nowa wersja została przepisana w całości na język Common Lisp. Do zapisu i odczytu danych używane są dwa oddzielne wątki, które współdzielą pracę. To co się nie zmieniło to to, że do komunikacji PostgreSQL nadal używany jest protokołu COPY. Tutaj odsyłam do post na temat nowej wersji tego narzędzia.

Przykład instrukcji załadowania pliku CSV:

LOAD CSV  
   FROM '/root/pgloader_data.csv'
   INTO postgresql://root:password@188.226.251.1/pgloader?pgloader_test(c2,c3)
 
   WITH truncate,  
        skip header = 0,
        fields optionally enclosed by '"',  
        fields escaped by double-quote,  
        fields terminated by ','  
 
   SET client_encoding to 'utf8', 
 work_mem to '12MB', 
 standard_conforming_strings to 'on'
 
BEFORE LOAD DO  
    $$ drop table if exists pgloader_test; $$,  
    $$ create table pgloader_test (
        c1 serial,
        c2 varchar(20),  
        c3 integer
       );  
    $$; 


Ładujemy dane:

[root@niujork ~]$ pgloader  pgloader.load 
2014-06-03T14:54:53.046000Z LOG Starting pgloader, log system is ready.
2014-06-03T14:54:53.076000Z LOG Main logs in '/tmp/pgloader/pgloader.log'
2014-06-03T14:54:53.082000Z LOG Data errors in '/tmp/pgloader/'
2014-06-03T14:54:53.083000Z LOG Parsing commands from file #P"/root/pgloader.load"
2014-06-03T14:54:59.686000Z ERROR Database error 22P02: invalid input syntax for integer: "sldkfhg"
CONTEXT: COPY pgloader_test, line 2, column c3: "sldkfhg"


                    table name       read   imported     errors            time

                   before load          2          2          0          2.701s
------------------------------  ---------  ---------  ---------  --------------
                 pgloader_test     219175     219174          1         18.568s
------------------------------  ---------  ---------  ---------  --------------
------------------------------  ---------  ---------  ---------  --------------
             Total import time     219175     219174          1         21.269s


Ładujemy dane gdzie pierwsza komuna jest varchar, a druga integer. Dla niepoprawnych danych, narzędzie wyświetla błędy ale reszta danych zostanie zaimportowana poprawnie.

Innym dodatkowym atutem jest możliwość ładowania danych z innych systemów bazodanowych: MySQL, SQLite czy dBase, a także odczytywanie danych z plików zarchiwizowanych czy danych o stałej szerokości. Jeśli musicie zaimportować dane do PostgreSQL, to polecam to narzędzie. Może się wam bardzo przydać.

Zainteresowanych odsyłam do dokumentacji tutaj.


Brak komentarzy:

Prześlij komentarz