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
,MULTITHREADING
ogDIRECT
for at optimere indlæsningsydelsen. UNRECOVERABLE
er 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/[email protected]_string control=/path_to_control_file/control_file.ctl