kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

tsvファイル出力(MySQL)とaws s3アップロード

RedShiftへのデータロードで、テーブルからcsvでダウンロードしてs3にアップロードします。txtファイルの出力とs3のアップロードについて書いていきます。

txtファイル

SQLファイルを作る

# dump.sql
select * from c into outfile '/tmp/table_name.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';
...

tsvファイルをdump

mysql cliからsqlファイルを実行する。

mysql -u username -p database_name < dump.sql 

s3へのアップロード

aws認証情報を登録

awsのIAMからaccess_key, secret_access_keyを取得、なければ作成する。defaultは登録されているので、プロファイル名は別で定義する。

$ aws configure --profile profile_name
AWS Access Key ID [None]: access_key
AWS Secret Access Key [None]: secret_access_key
Default region name [None]: ap-northeast-1
Default output format [None]: json

shファイルを作る

syncコマンドを利用してアップロードします。shファイルを作ります。

# upload_to_s3.sh
aws s3 sync /tmp/txts s3://bucket_name/txts --profile profile_name --exclude '*' --include '*.txt'
....

shファイルを実行

bash upload_to_s3.sh

# 結果
move: /tmp/table_name.txt to s3://bucket_name/txts/table_name.txt # 成功
move failed: /tmp/table_name.txt to s3://bucket_name/txts/table_name.txt Could not connect to the endpoint URL: "endpoing" #失敗
....

以上になります。

参考

AWS CLI の設定 - AWS Command Line Interface

AWS Command Line Interface での高レベルの S3 コマンドの使用 - AWS Command Line Interface

sync — AWS CLI 1.15.50 Command Reference

AWS CLI S3 Configuration — AWS CLI 1.15.50 Command Reference