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
eDIRECT
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