データをエクスポート(CSV / ファイルへ)
Oracle
-- CSV with SQL*Plus (spool)
SET MARKUP CSV ON
SPOOL customer.csv
SELECT id, name, email FROM customer;
SPOOL OFF
-- Logical export with Data Pump (from the shell)
expdp app_user/password tables=customer directory=dir_dmp dumpfile=customer.dmpCSV には SQL*Plus の SET MARKUP CSV ON + SPOOL(12.2+)を使用する。スキーマ/テーブルを移動するには、Data Pump(expdp)がバイナリの .dmp を生成し、別の Oracle データベースに impdp でインポートする。
PostgreSQL
-- Server side
COPY (SELECT id, name, email FROM customer) TO '/data/customer.csv' WITH (FORMAT csv, HEADER true);
-- Client side (psql)
\copy (SELECT id, name, email FROM customer) TO 'customer.csv' WITH (FORMAT csv, HEADER true)COPY ... TO はクエリ結果をファイルに書き込む(サーバー側、権限が必要)。psql の \copy はクライアントのファイルに書き込む。HEADER true でヘッダー行を追加する。
MySQL
-- To a file on the server
SELECT id, name, email FROM customer
INTO OUTFILE '/data/customer.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
-- To the client: mysql -e ... > file (tab-separated)
-- mysql -e "SELECT * FROM customer" shop > customer.tsvSELECT ... INTO OUTFILE はサーバー上にファイルを作成する(secure_file_priv のパスと FILE 権限が必要。上書きはできない)。クライアント側に出力するには mysql -e でリダイレクトする。
SQL Server
-- Export with bcp (from the shell)
bcp "SELECT id, name, email FROM shop.dbo.customer" queryout customer.csv -c -t, -S server -T
-- or the whole table
bcp shop.dbo.customer out customer.dat -n -S server -Tbcp out/queryout はデータをファイルに書き込む: -c は文字モード、-t, はフィールド区切り文字、-n はネイティブのバイナリ形式。クエリ結果には queryout を使用する。SSMS の「Results to File」も選択肢。
MongoDB
# Export CSV (fields must be specified)
mongoexport --db=shop --collection=customer --type=csv --fields=id,name,email --out=customer.csv
# As JSON
mongoexport --db=shop --collection=customer --out=customer.jsonmongoexport は CSV/JSON を生成する。CSV では --fields で列を明示的に指定する必要がある。絞り込みには --query を使用する。完全なバイナリバックアップには mongodump が推奨される。
Redis
# Scan keys (SCAN instead of KEYS in production)
redis-cli --scan --pattern 'customer:*' > keys.txt
# For a full data backup, download an RDB snapshot to the client side (non-blocking)
redis-cli --rdb ./dump.rdb構造化された CSV エクスポートは組み込まれていない。キーの一覧には --scan(ノンブロッキング)を、全データには RDB ファイルを使用する。redis-cli --rdb はサーバー上でバックグラウンド生成されたスナップショットをローカルファイルにダウンロードする。ファイルをサーバー上に置きたい場合は BGSAVE を使用する。SAVE はメインスレッドをブロックするため本番環境では使用しないこと。値も取得するには、スキャン結果をループで読む。
Elasticsearch
# Export with elasticdump
elasticdump --input=http://localhost:9200/customer --output=customer.json --type=data
# For large data, paged reads with scroll / point-in-time
GET customer/_search?scroll=1m
{ "size": 1000, "query": { "match_all": {} } }直接の CSV エクスポートはない。全データを取得するには elasticdump を使用するか、scroll/PIT(point-in-time)で _search をページングする。CSV への変換には Logstash の csv 出力または外部ツールが必要。