Lad mig vise dig et eksempel på en kontrolfil, jeg bruger til at indlæse en meget stor fil (120 millioner poster hver 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
....
....)
Nogle overvejelser
- Det er altid hurtigere at indlæse efter positioner end at bruge afgrænsere
- Brug mulighederne for
PARALLEL,MULTITHREADINGogDIRECTfor at optimere indlæsningsydelsen. UNRECOVERABLEer også et godt råd, hvis du altid har filen, hvis du har brug for at gendanne databasen, skal du indlæse dataene igen.- Brug det relevante tegnsæt.
- TAILING NULLCOLS-udtrykket beder SQL*Loader om at behandle alle relativt placerede kolonner, der ikke er til stede i posten, som null-kolonner.
- Placering betyder, at hver række indeholder data uden nogen afgrænsning, så du kender placeringen af hvert felt i tabellen efter længden.
AAAAABBBBBBCCCCC19828733UUUU
- Hvis din txt- eller csv-fil har en feltseparator, lad os sige semikolon, så skal du bruge
FIELDS DELIMITED BY
Dette gemmes i en kontrolfil, normalt en tekstfil med endelsen ctl. Så kalder du fra kommandolinjen
sqlldr userid=youuser/example@sqldat.com_string control=/path_to_control_file/control_file.ctl