Laat me je een voorbeeld tonen van een controlebestand dat ik gebruik om een heel groot bestand te laden (120 miljoen records per dag)
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
....
....)
Enkele overwegingen
- Het laden van posities gaat altijd sneller dan het gebruik van scheidingstekens
- Gebruik de opties van
PARALLEL
,MULTITHREADING
enDIRECT
om de laadprestaties te optimaliseren. UNRECOVERABLE
is ook een goed advies als u het bestand altijd bij de hand heeft voor het geval u de database moet herstellen, u de gegevens opnieuw moet laden.- Gebruik de juiste tekenset.
- De TRAILING NULLCOLS-clausule vertelt SQL*Loader om relatief gepositioneerde kolommen die niet in het record aanwezig zijn, als nulkolommen te behandelen.
- Positie betekent dat elke rij gegevens bevat zonder scheidingsteken, zodat u de positie van elk veld in de tabel weet aan de hand van de lengte.
AAAAABBBBBBCCCCC19828733UUUU
- Als uw txt- of csv-bestand een veldscheidingsteken heeft, laten we zeggen een puntkomma, dan moet u de
FIELDS DELIMITED BY
gebruiken
Dit wordt opgeslagen in een controlebestand, normaal gesproken een tekstbestand met de extensie ctl. Vervolgens roep je aan vanaf de opdrachtregel
sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl