2009-11-20 17 views
7

Często muszę ładować dane do tabel trzymania, aby przeprowadzić sprawdzanie poprawności danych, a następnie zwrócić wyniki. Zazwyczaj tworzę tabelę przechowywania, następnie plik kontrolny sqlldr i ładuję dane do tabeli, a następnie uruchamiam moje zapytania. Czy jest jakiś powód, dla którego powinienem używać zewnętrznych tabel dla rzeczy? W jaki sposób ułatwią mi życie?Tabele zewnętrzne vs SQLLoader

Odpowiedz

13

Dużą zaletą zewnętrznych tabel jest to, że możemy je odpytać z poziomu bazy danych za pomocą SQL. Możemy więc po prostu uruchomić sprawdzanie poprawności jako instrukcje SELECT bez potrzeby trzymania tabeli. Podobnie, jeśli potrzebujemy manipulować załadowanymi danymi, prawie zawsze łatwiej jest to zrobić za pomocą poleceń SQL niż poleceń SQLLDR. Możemy również zarządzać ładowaniem danych za pomocą procedur DBMS_JOB/DBMS_SCHEDULER, co dodatkowo ogranicza potrzebę stosowania skryptów powłoki i zadań cron.

Jednakże, jeśli masz już dojrzały i stabilny proces za pomocą SQLLDR, to przyznaję, że jest mało prawdopodobne, że uzyskasz ogromne korzyści z przenoszenia na zewnętrzne tabele.

Jest także kilka przypadków - szczególnie, jeśli ładujesz miliony rzędów - gdzie metoda SQLLDR może być znacznie szybsza. Jakkolwiek, różnica nie będzie oznaczona nowszymi wersjami bazy danych. W pełni oczekuję, że SQLLDR zostanie ostatecznie wycofany na rzecz zewnętrznych tabel.

+1

+1, wszystkie zalety. – DCookie

3

Jeśli spojrzeć na składni tabela zewnętrzna, wygląda podejrzanie jak SQL * Loader plików kontrola składni :-)

Jeśli tabela zewnętrzna ma być wielokrotnie używane w wielu zapytań może być szybciej załadować tabeli (tak jak teraz) zamiast przeszukiwać zewnętrzną tabelę dla każdego zapytania. Jak zauważa @APC, Oracle wprowadza w nich ulepszenia, więc w zależności od wersji DB YMMV.

+1

Podejrzanie podobne, ale nie równoważne. :) http://stackoverflow.com/questions/898872/oracle-external-tables-advanced-flat-file-layout –

+0

Dobra uwaga. Zastanawiam się, ile kodu SQL * programu ładującego znajdowało się za co najmniej początkowym krokiem w zewnętrznych tabelach ... – DCookie

+0

@DCookie. Jest rozwijany przez ten sam zespół :) – BobC

3

Używałbym zewnętrznych stołów dla ich elastyczności.

Łatwiej zmodyfikować źródło danych na nich być inny plik alter table ... location ('my_file.txt1','myfile.txt2')

Można zrobić multitable wkładki, scala, uruchom go poprzez potokowym funkcji etc ...

zapytania równoległy jest łatwiejsze. ..

ustanawia także zależności lepiej ...

Kod jest przechowywany w bazie danych, więc wycofał się automatycznie w górę ...

0

Inną rzeczą, którą można zrobić za pomocą zewnętrznych tabel, są odczytywane skompresowane pliki. Jeśli na przykład pliki są skompresowane przy użyciu gzip, możesz użyć dyrektywy PREPROCESSOR w definicji zewnętrznej tabeli, aby rozpakować pliki podczas ich odczytu.