데이터 내보내기(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를 생성하며, 이를 impdp로 다른 Oracle 데이터베이스에 가져온다.
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는 메인 스레드를 블로킹하므로 운영 환경에서 사용하지 않는다. 값까지 얻으려면 scan 결과를 루프로 읽는다.
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 output이나 외부 도구가 필요하다.