Externe Tabellen vs SQLLoader
So, ich habe oft zum laden von Daten in holding-Tabellen führen einige Daten-Validierung überprüft, und dann wieder die Ergebnisse.
Normalerweise erstelle ich den holding-Tabelle, dann eine sqlldr control-Datei und laden Sie die Daten in die Tabelle, dann Lauf ich meine Abfragen.
Gibt es einen Grund, ich sollte mit externen Tabellen für die Sache statt?
In welcher Art und Weise Sie mein Leben erleichtern?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der große Vorteil der externen Tabellen ist, dass wir die Abfrage innerhalb der Datenbank mit SQL. So können wir nur führen die Validierungen als SELECT-Anweisungen, ohne die Notwendigkeit für eine holding-Tabelle. Ebenso, wenn wir tun müssen, um eine manipulation der geladenen Daten ist es fast immer einfacher, dies zu tun mit SQL eher als SQLLDR Befehle. Wir können auch verwalten laden von Daten mit DBMS_JOB/DBMS_SCHEDULER Routinen, die weiter reduziert die Notwendigkeit für shell-Skripte und cron-jobs.
Jedoch, wenn Sie bereits einen ausgereiften und stabilen Prozess mit SQLLDR ich dann zugeben, dass es unwahrscheinlich ist, würden Sie realisieren, enorme Vorteile aus der Portierung zu externen Tabellen.
Es gibt auch einige Fälle - besonders, wenn Sie laden, die Millionen von Zeilen - wo die SQLLDR Ansatz wesentlich schneller. Howver, der Unterschied wird nicht so gekennzeichnet, die mit neueren Versionen der Datenbank. Ich erwarte vollständig, dass SQLLDR irgendwann veraltet zugunsten von externen Tabellen.
Wenn man sich die External Table " - syntax, es sieht verdächtig ähnlich wie SQL*Loader control-Datei-syntax 🙂
Wenn die externe Tabelle wird wiederholt verwendet, in mehreren Abfragen könnte es sein, schneller zu laden, wird eine Tabelle (wie Sie jetzt tun), anstatt erneut Scannen Sie Ihre externe Tabelle für jede Abfrage. Wie @APC notes, Oracle Verbesserungen in Ihnen, so dass je nach DB-version YMMV.
Ich würde die Verwendung von externen Tabellen für Ihre Flexibilität.
Es ist einfacher, ändern Sie die Datenquelle auf eine andere Datei
alter table ... location ('my_file.txt1','myfile.txt2')
Können Sie tun multitablen Beilagen, Serienbriefe, führen Sie es durch eine Pipeline-Funktion etc...
Parallele Abfrage ist einfacher ...
Er legt auch Abhängigkeiten besser ...
Den code in der Datenbank gespeichert ist, so wird es automatisch gesichert ...
Andere Sache, die Sie tun können, mit externen Tabellen Lesen Sie komprimierte Dateien. Wenn Ihre Dateien sind mit gzip komprimiert zum Beispiel, dann können Sie mit der PRÄPROZESSOR-Direktive in Ihren externen Tabellen-definition, um Dekomprimieren Sie die Dateien, wie Sie gelesen werden.