Dovolte mi ukázat vám příklad kontrolního souboru, který používám k načtení velmi velkého souboru (120 milionů záznamů každý den)
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
....
....)
Některé úvahy
- Načítání podle pozic je vždy rychlejší než použití oddělovačů
- Použijte možnosti
PARALLEL
,MULTITHREADING
aDIRECT
k optimalizaci výkonu načítání. UNRECOVERABLE
je také dobrá rada, pokud máte soubor vždy k dispozici pro případ, že byste potřebovali obnovit databázi, museli byste načíst data znovu.- Použijte příslušnou znakovou sadu.
- Klauzule TRAILING NULLCOLS říká SQL*Loaderu, aby zacházel se všemi relativně umístěnými sloupci, které nejsou přítomny v záznamu, jako se sloupci null.
- Pozice znamená, že každý řádek obsahuje data bez jakéhokoli oddělovače, takže polohu každého pole v tabulce znáte podle délky.
AAAAABBBBBBCCCCC19828733UUUU
- Pokud má váš soubor txt nebo csv oddělovač polí, řekněme středník, musíte použít
FIELDS DELIMITED BY
To je uloženo v kontrolním souboru, obvykle textovém souboru s příponou ctl. Poté vyvoláte z příkazového řádku
sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl