sobota, 27 listopada 2010

SQL Loader - czyli wciągamy do Oracle dane z plików CSV

Jeśli przenosimy dane pomiędzy dwoma rodzajami baz (z czego docelowa to Oracle :) ), albo ewentualnie chcemy wczytać coś z Excela najlepiej wyeksportować ze źródła dane do postaci pliku CSV, a następnie wciągać SQL Loaderem.

Na potrzeby tej lekcji wyeksportuj zawartość tabeli regions z schematu hr do pliku CSV. Możesz to zrobić klikając w SQL Developerze prawym przyciskiem myszy na nazwę tabeli a następnie klikając export data--> csv.

Stwórz sobie teraz tabelkę do której będziemy wciągać dane. Moglibyśmy wciągnąć dane do istniejącej już tabeli, ale sql loader nadpisze wiersze jeśli trafi na identyczne. Na potrzeby ćwiczeń stwórz tabelkę która będzie kopią (samej struktury) tabeli regions:


Kod:

create table regions2 as select * from regions where 1=2

Ten warunek WHERE 1=2 jest po to by przy kopiowaniu tabeli nie kopiował jej zawartości.

Jak już będziesz miał tabelę to stwórz sobie plik kontrolny który będzie sterował poczynaniami sqlloadera, z analogiczną zawartością:

load data
infile 'c:\andrzej\ld\regions.csv'
append into table regions2
fields terminated by ','
(region_id,region_name)

load data zostawiasz w spokoju.
infile określa plik csv z którego wciągane będą dane.
Append into table regions2 to znaczy że dane będą wciągane do tabeli regions2
fields terminated by ',' oznacza znak który rozdziela kolumny - oczywiście może być co inny znak np. bardzo często jest to średnik ; .
Ostatnia linijka oznacza nazwy kolumn do których w wybranej tabeli mają zostać wciągane dane we wskazanej kolejności.

Zapisz plik i w konsoli wpisz coś takiego:
sqlldr hr/hr control=c:\andrzej\ld\ustawienia.txt

hr/hr to nazwa użyszkodnika z poziomu którego robimy wciąganie danych (musi mieć do danej tabeli uprawnienia oczywiście) . Control wskazuje na położenie pliku kontrolnego który sobie przed momentem stworzyłeś.


Zajrzyj teraz do tabeli regions2. Masz tam dane z pliku csv :)

3 komentarze:

  1. Witam

    Uwaga na plik .csv który w Office 2003 pomimo konwersji na format "rozdzielany przecinkami" jest tak naprawdę rozdzielany średnikami, zatem w plik kontrolnym należy napisać: fields terminated by ';' .

    OdpowiedzUsuń
  2. Spodobało mi się nowe określenie: "nazwa użyszkodnika" :)

    OdpowiedzUsuń
  3. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń