sql >> Base de Datos >  >> RDS >> Oracle

Cargue un archivo csv enorme en la tabla de la base de datos de Oracle usando Pyspark

Permítame mostrarle un ejemplo de un archivo de control que uso para cargar un archivo muy grande (120 millones de registros cada día)

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
....
....)

Algunas consideraciones

  • Siempre es más rápido cargar por posiciones que usando delimitadores
  • Usar las opciones de PARALLEL , MULTITHREADING y DIRECT para optimizar el rendimiento de carga.
  • UNRECOVERABLE también es un buen consejo si siempre tiene el archivo en caso de que necesite recuperar la base de datos, tendrá que cargar los datos nuevamente.
  • Utilice el juego de caracteres apropiado.
  • La cláusula TRAILING NULLCOLS le dice a SQL*Loader que trate cualquier columna posicionada relativamente que no esté presente en el registro como columnas nulas.
  • Posición significa que cada fila contiene datos sin ningún delimitador, por lo que conoce la posición de cada campo en la tabla por la longitud.

AAAAABBBBBBCCCCC19828733UUUU

  • Si su archivo txt o csv tiene un separador de campo, digamos punto y coma, entonces necesita usar FIELDS DELIMITED BY

Esto se almacena en un archivo de control, normalmente un archivo de texto con extensión ctl. Luego invocas desde la línea de comando

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