Oracle
 sql >> Base de données >  >> RDS >> Oracle

Charger un énorme fichier csv dans la table de base de données oracle à l'aide de Pyspark

Permettez-moi de vous montrer un exemple de fichier de contrôle que j'utilise pour charger un très gros fichier (120 millions d'enregistrements par jour)

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

Quelques considérations

  • Le chargement par positions est toujours plus rapide que l'utilisation de délimiteurs
  • Utiliser les options de PARALLEL , MULTITHREADING et DIRECT pour optimiser les performances de chargement.
  • UNRECOVERABLE est également un bon conseil si vous avez toujours le fichier au cas où vous auriez besoin de récupérer la base de données, vous auriez besoin de charger à nouveau les données.
  • Utilisez le jeu de caractères approprié.
  • La clause TRAILING NULLCOLS indique à SQL*Loader de traiter toutes les colonnes relativement positionnées qui ne sont pas présentes dans l'enregistrement comme des colonnes nulles.
  • La position signifie que chaque ligne contient des données sans aucun délimiteur, vous connaissez donc la position de chaque champ dans le tableau par la longueur.

AAAAABBBBBBCCCCC19828733UUUU

  • Si votre fichier txt ou csv a un séparateur de champs, disons un point-virgule, alors vous devez utiliser le FIELDS DELIMITED BY

Ceci est stocké dans un fichier de contrôle, normalement un fichier texte avec l'extension ctl. Ensuite, vous invoquez à partir de la ligne de commande

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