LoginSignup
4
2

More than 1 year has passed since last update.

RDS(MySQL)からS3へのデータエクスポート

Posted at

最終的な目標

AWS RDS(MySQL)のテーブル内のデータを、S3へエクスポートして、Athenaでクエリを投げられるようにしたい!

本記事で出来るようになること

AWS RDS(MySQL)のテーブル内のデータをS3へエクスポートする

EC2サーバーを経由して、S3へエクスポートする方法

例)
ユーザー名:testuser
ホスト名:fugafuga
パスワード:hogehoge
DB:test_db
テーブル名:test_table

mysqldump

mysqldumpでのエクスポート
# tsvでのエクスポート
$ mysqldump -utestuser -hfugafuga  -phogehoge --tab=/tmp test_db test_table > ./output/mysqldump_output.tsv

# csvでのエクスポート
$ mysqldump -utestuser -hfugafuga  -phogehoge --tab=/tmp --fields-terminated-by=, test_db test_table > ./output/mysqldump_output.csv

# whereで指定したい場合
$ mysqldump -utestuser -hfugafuga  -phogehoge --tab=/tmp test_db test_table --where 'userid >= 50' > ./output/mysqldump_output.tsv

参考)mysqldumpまとめ
参考)MySQLのデータをcsv,tsv形式でダンプする

mysqlコマンド

mysqlコマンドでのエクスポート
# tsvでのエクスポート
mysql -utestuser -hfugafuga  -phogehoge -D test_db -e "SELECT * from test_table;" > ./output/mysql_output.tsv

# csvでのエクスポート
mysql -utestuser -hfugafuga  -phogehoge -D test_db -e "SELECT * from test_table;" | sed -e 's/\t/,/g' > ./output/mysql_output.csv

SELECT INTO OUTFILE

こちらはRDSに入ってからのコマンドになります。

SELECT INTO OUTFILEでのエクスポート
-- csvエクスポート
SELECT * FROM test_table
	INTO OUTFILE './output/select_into_outfile_output.csv'
		FIELDS TERMINATED BY ','
		OPTIONALLY ENCLOSED BY '"';

-- tsvエクスポート
SELECT * FROM test_table
  INTO OUTFILE './output/select_into_outfile_output.tsv'
        FIELDS TERMINATED BY '\t';

上記の何かしらのやり方でファイルを出力した後、S3へ

S3へエクスポート
$ gzip output.tsv
$ aws s3 cp ./output.tsv.gz s3://hogehoge/yyyymm=202206/

直でS3へエクスポートする方法

RDSのスナップショット→parquet形式でエクスポート

こちらの大変丁寧に書かれてある記事を参考にすれば、S3へ直でエクスポートすることができます。
(サボってすみません)

parquet形式でエクスポートできるのですが、csvなどのファイル形式よりもデータスキャン量が圧倒的に少ないのでおすすめです。

おわりに

調べてみると意外と方法があるのだなぁと実感しました。
書かないと忘れるので、自分の備忘録として書いたつもりではおりますが、
どなたかの役に立てば幸いです。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2