Oracle
 sql >> Database >  >> RDS >> Oracle

Carica un enorme file CSV nella tabella del database Oracle usando Pyspark

Lascia che ti mostri un esempio di un file di controllo che utilizzo per caricare un file molto grande (120 milioni di record ogni giorno)

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
....
....)

Alcune considerazioni

  • È sempre più veloce caricare per posizione rispetto all'utilizzo dei delimitatori
  • Usa le opzioni di PARALLEL , MULTITHREADING e DIRECT per ottimizzare le prestazioni di caricamento.
  • UNRECOVERABLE è anche un buon consiglio se hai sempre il file nel caso in cui dovessi recuperare il database, dovresti caricare di nuovo i dati.
  • Utilizza il set di caratteri appropriato.
  • La clausola TRAILING NULLCOLS dice a SQL*Loader di trattare tutte le colonne posizionate relativamente che non sono presenti nel record come colonne nulle.
  • Posizione significa che ogni riga contiene dati senza alcun delimitatore, quindi conosci la posizione di ogni campo nella tabella dalla lunghezza.

AAAAABBBBBBCCCCC19828733UUUU

  • Se il tuo file txt o csv ha un separatore di campo, diciamo punto e virgola, devi usare FIELDS DELIMITED BY

Questo è memorizzato in un file di controllo, normalmente un file di testo con estensione ctl. Quindi invochi dalla riga di comando

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