sql >> Databáze >  >> RDS >> Oracle

Načtěte obrovský soubor csv do databázové tabulky Oracle pomocí Pyspark

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 a DIRECT 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



  1. 5 důvodů, proč si vybrat Arkware

  2. Jak zkontrolovat, zda je datum mezi datem1 a date2 pomocí mysql?

  3. MySQL pro výběr maximální hodnoty mezi zapnutými a vypnutými časovými razítky plus 3 sekundy

  4. Spojte dvě tabulky, vylučte stejné záznamy