sql >> Databasteknik >  >> RDS >> Oracle

Ladda en enorm csv-fil i Oracle-databastabellen med Pyspark

Låt mig visa dig ett exempel på en kontrollfil som jag använder för att ladda en mycket stor fil (120 miljoner poster varje 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
....
....)

Några överväganden

  • Det går alltid snabbare att ladda efter positioner än att använda avgränsare
  • Använd alternativen för PARALLEL , MULTITHREADING och DIRECT för att optimera laddningsprestanda.
  • UNRECOVERABLE är också ett bra råd om du alltid har filen ifall du behöver återställa databasen, måste du ladda data igen.
  • Använd lämplig teckenuppsättning.
  • Klausulen TRAILING NULLCOLS säger åt SQL*Loader att behandla alla relativt placerade kolumner som inte finns i posten som nollkolumner.
  • Position betyder att varje rad innehåller data utan någon avgränsare, så att du vet positionen för varje fält i tabellen efter längden.

AAAAABBBBBBCCCCC19828733UUUU

  • Om din txt- eller csv-fil har en fältseparator, låt oss säga semikolon, måste du använda FIELDS DELIMITED BY

Detta lagras i en kontrollfil, normalt en textfil med tillägget ctl. Sedan anropar du från kommandoraden

sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl



  1. Oracle SQL-fråga - generera poster mellan två datum

  2. percentil med COUNT(DISTINCT) med korrelerad WHERE fungerar bara med en vy (eller utan DISTINCT)

  3. TSQL välj i Temp-tabellen från dynamisk sql

  4. Infoga i SQLite Database android