web-dev-qa-db-ja.com

3000万行をCSVにエクスポートする

Oracleデータベース(11g)の複数のテーブルにヒットするクエリがあります。サーバー自体にアクセスできません。 SQL DeveloperまたはSQL * Plusを使用して接続します。

行は約3100万行、列は7つあります。CSVファイルにダンプしたいと思います。

どうすればこれを達成できますか?

4
GWR

これを前提として、データを他のシステムに転送します。その場合これはうまくいきます:

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

ヘッダー行が必要ない場合は、見出しをオフに変更します

これがExcelでデータを分析するためのものである場合は、SQLを起動して学習してください。 SQL、特にOracleには、データの分析に役立つ多くの優れたツールがあります。データがcsvファイルに転送されるまでに、Oracle Analyticsはすでにいくつかの優れた分析を行っています。 Data Warehousing and Business Intelligence しかし、多くのタスクではプレーンSQLで十分です。 Oracle Analyticsについて読んでください。

7
ik_zelf

特に、自由形式のテキストエントリですべての並べ替えが行われる可能性がある列がある場合は、フォーマットを壊す余分な改行やその他の面白い文字列を削除するように注意して、コンマ区切りの値を生成するクエリを記述します。それらのエントリの。 「email_content」のデータに、カンマ区切り値の例が貼り付けられているのを見たことがあります。それは楽しかった。

あなたのコードは最終的には....

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;

次に、SQL * Plusを使用して出力をスプールし、 docs に示すコマンドを使用して見出しを抑制し、適切な行サイズを設定し、行数のフィードバックを抑制し、デフォルトの配列サイズを約100に増やします。おそらく、または TL_File を使用して、サーバープロセスとしてスプールアウトします。

1
David Aldridge