Wie kann ich Oracle Preprozessor für externe Tabellen verwenden, um diese Art von Format zu konsumieren?

StackOverflow https://stackoverflow.com/questions/1290520

Frage

Angenommen, ich habe ein benutzerdefiniertes Dateiformat, das zu N -Tabellen analog sein kann. Wählen wir 3. Ich könnte die Datei transformieren und einen benutzerdefinierten Ladeverpackung zum Ausfüllen von 3 Datenbanktabellen schreiben.

Nehmen wir jedoch an, für Raum- und Ressourcenbeschränkungen kann ich all dies nicht in der Tablespace speichern.

Kann ich Oracle Preprozessor für externe Tabellen verwenden, um die benutzerdefinierte Datei auf drei verschiedene Arten zu transformieren?

Die Beispiele für die Verwendung, die ich gelesen habe, geben GZIP'D -Textdateien ein Beispiel. Dies ist jedoch eine Eins-zu-Eins-Datei-Tisch-Beziehung mit nur einer Transformation.

Ich habe eine einzige Datei mit n möglichen Datenextraktionen.

  • Müsste ich n externe Tabellen definieren, die jeweils auf ein anderes Programm verweisen?
  • Wenn ich drei Tabellen derselben Datei zuordne, wie wird sich dies auf die Leistung auswirken? (Zugriff ist meistens oder alle Lesevorgänge, nur wenige oder keine Schreibvorgänge).

Welches Format muss der Standardausgang meines Präprozessors sein? Muss es CSV sein oder gibt es Möglichkeiten, den externen Tabellentreiber zu konfigurieren?

War es hilfreich?

Lösung

"Wenn ich drei Tabellen derselben Datei zuordne, wie wirkt sich dies auf die Leistung aus (Zugriff ist meistens oder alle Lesevorgänge, nur wenige oder keine Schreibvorgänge"

Es sollte wenig oder gar keinen Unterschied zwischen drei Sitzungen geben, die über eine externe Tabellendefinition oder drei externe Tabellendefinitionen auf dieselbe Datei zugreifen. Externe Tabellen werden nicht von der Datenbank zwischengespeichert (möglicherweise vom Dateisystem oder der Festplatte), daher ist jeder Zugriff rein physikalisch. Abhängig vom Vorprozessorprogramm kann dort ein gewisses Maß an Serialisierung bestehen (oder Sie können ein Pre-Processor-Programm verwenden, um eine Serialisierung aufzuerlegen).

In Bezug auf die Leistung sollten Sie besser für eine einzelne Sitzung die externe Datei/Tabelle scannen und in eine oder mehrere Datenbanktabellen laden. Die anderen Sitzungen lesen es von dort aus und es wird in der SGA zwischengespeichert. Außerdem können Sie eine Datenbanktabelle indexieren, damit Sie nicht alles lesen müssen.

Möglicherweise können Sie verwenden Multi-Table-Einsätze So laden Sie mehrere Datenbanktabellen aus einer einzelnen externen Tabellendefinition in einem einzigen Pass.

"Welches Format muss die Standardausgabe meines Präprozessors sein? Muss es CSV sein, oder gibt es Möglichkeiten, den externen Tabellen -Treiber zu konfigurieren?"

Es folgt so ziemlich SQL*Loader und beide sind in der Versorgungshandbuch. Sie können festes Format oder andere Grenzwerte verwenden.

Müsste ich n externe Tabellen definieren, die jeweils auf ein anderes Programm verweisen?

Hängt davon ab, wie die Daten verschachtelt sind. Wenn Sie Pre-Processoren ignorieren, können Sie verschiedene externe Tabellen haben, die verschiedene Spalten aus derselben Datei ziehen oder die verwenden Laden Sie, wenn Klausel, um festzustellen, welche Aufzeichnungen enthalten oder ausgeschlossen werden sollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top