Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Carregar arquivo csv enorme na tabela de banco de dados Oracle usando o Pyspark


Deixe-me mostrar um exemplo de um arquivo de controle que uso para carregar um arquivo muito grande (120 milhões de registros por dia)
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
....
....)

Algumas considerações
  • É sempre mais rápido carregar por posições do que usar delimitadores
  • Use as opções de PARALLEL , MULTITHREADING e DIRECT para otimizar o desempenho de carregamento.
  • UNRECOVERABLE também é um bom conselho se você sempre tiver o arquivo, caso precise recuperar o banco de dados, será necessário carregar os dados novamente.
  • Use o conjunto de caracteres apropriado.
  • A cláusula TRAILING NULLCOLS diz ao SQL*Loader para tratar quaisquer colunas relativamente posicionadas que não estejam presentes no registro como colunas nulas.
  • Posição significa que cada linha contém dados sem qualquer delimitador, então você sabe a posição de cada campo na tabela pelo comprimento.

AAAAABBBBBBCCCCC19828733UUUU
  • Se o seu arquivo txt ou csv tiver um separador de campo, digamos ponto e vírgula, você precisará usar o FIELDS DELIMITED BY

Isso é armazenado em um arquivo de controle, normalmente um arquivo de texto com extensão ctl. Então você invoca a partir da linha de comando
sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl