Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Laden Sie mit Pyspark eine riesige CSV-Datei in die Oracle-Datenbanktabelle

Lassen Sie mich Ihnen ein Beispiel einer Steuerdatei zeigen, die ich verwende, um eine sehr große Datei (120 Millionen Datensätze pro Tag) zu laden

OPTIONS (SKIP=0, ERRORS=500, PARALLEL=TRUE, MULTITHREADING=TRUE, DIRECT=TRUE, SILENT=(ALL))
UNRECOVERABLE
LOAD DATA
CHARACTERSET WE8ISO8859P1
INFILE '/path_to_your_file/name_of_the_file.txt'
BADFILE '/path_to_your_file/name_of_the_file.bad'
DISCARDFILE '/path_to_your_file/name_of_the_file.dsc'
APPEND
INTO TABLE yourtablename
TRAILING NULLCOLS
(
COLUMN1 POSITION(1:4) CHAR
,COLUMN2 POSITION(5:8)  CHAR
,COLUMN3 POSITION(9:11) CHAR
,COLUMN4 POSITION(12:18) CHAR
....
....)

Einige Überlegungen

  • Das Laden nach Positionen ist immer schneller als das Verwenden von Trennzeichen
  • Verwenden Sie die Optionen von PARALLEL , MULTITHREADING und DIRECT um die Ladeleistung zu optimieren.
  • UNRECOVERABLE ist auch ein guter Rat, wenn Sie die Datei immer haben, falls Sie die Datenbank wiederherstellen müssen, müssen Sie die Daten erneut laden.
  • Verwenden Sie den entsprechenden Zeichensatz.
  • Die Klausel TRAILING NULLCOLS weist SQL*Loader an, alle relativ positionierten Spalten, die nicht im Datensatz vorhanden sind, als Nullspalten zu behandeln.
  • Position bedeutet, dass jede Zeile Daten ohne Trennzeichen enthält, sodass Sie die Position jedes Felds in der Tabelle anhand der Länge kennen.

AAAAABBBBBBCCCCC19828733UUUU

  • Wenn Ihre txt- oder csv-Datei ein Feldtrennzeichen hat, sagen wir Semikolon, dann müssen Sie FIELDS DELIMITED BY verwenden

Diese wird in einer Steuerdatei gespeichert, normalerweise einer Textdatei mit der Erweiterung ctl. Dann rufen Sie von der Befehlszeile

auf
sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl