web-dev-qa-db-fra.com

Exportation de 30 millions de lignes vers CSV

J'ai une requête qui frappe plusieurs tables dans une base de données Oracle (11g). Je n'ai pas accès au serveur lui-même. J'utilise SQL Developer ou SQL * Plus pour me connecter.

Il y a environ 31 millions de lignes et 7 colonnes, et je veux le vider dans un fichier CSV.

Comment puis-je atteindre cet objectif?

4
GWR

En supposant que cela consiste à transporter des données vers un autre système. Dans ce cas, cela fonctionnera:

set colsep ";"
set linesize 9999
set trimspool on
set heading off
set pagesize 0
set wrap off
set feedback off
set newpage 0
set arraysize 5000
spool you csv_file.csv
select rows from your tables;
spool off

Si vous ne voulez pas de ligne d'en-tête, passez à l'en-tête

S'il s'agit d'analyser les données dans Excel, veuillez vous réveiller et apprendre sql. SQL, en particulier Oracle, dispose de nombreux excellents outils pour vous aider à analyser vos données. Au moment où les données sont transportées dans le fichier csv, Oracle analytics a déjà fait une excellente analyse . Data Warehousing and Business Intelligence mais pour de nombreuses tâches, le SQL simple peut être suffisant. Commencez à lire sur Oracle Analytics.

7
ik_zelf

J'essaierais d'écrire une requête pour produire les valeurs séparées par des virgules, en prenant soin de supprimer tous les retours de chariot superflus ou autres drôles qui briseraient le format, surtout si vous avez des colonnes qui sont des entrées de texte de forme libre et peuvent avoir toutes sortes des entrées en eux. J'ai vu une fois des données pour "email_content" qui contenaient un exemple de valeurs séparées par des virgules. C'était amusant.

Votre code se retrouverait dans le sens de ...

select
  to_char(my_date,'YYYY-MM-DD HH24:MI:SS')
  ||','  ||to_char(my_number,'fm999999999999990.00000')
  ||',"' ||regexp_replace(my_string,'[[:cntrl]]','')
  ||'",' ||to_char(my_number,'fm999999999999990.00000')
from
  my_table;

Ensuite, utilisez SQL * Plus pour spouler la sortie, en utilisant les commandes affichées dans docs pour supprimer les en-têtes, définissez une taille de ligne appropriée, supprimez le retour du nombre de lignes, augmentez la taille du tableau par défaut à environ 100 peut-être, ou utilisez TL_File pour le mettre en file d'attente en tant que processus serveur.

1
David Aldridge