S3バケットにAuroraのデータを出力するSELECT INTO OUTFILEの設定方法
Auroraからselect文で取得した結果をS3にファイルで出力することができます。
S3バケットのcsvファイルとかからAuroraにデータをインポートするLOAD DATA FROM S3
↑の逆パターンです。
IAMポリシーとロールを作成
IAMポリシーを作成します。
作成したIAMポリシーをRDSのロールにアタッチします。
DBクラスターパラメータの設定1
SELECT INTO OUTFILEを実行するにはDBクラスターのaurora_select_into_s3_roleというパラメータにIAMロールを指定してあげる必要があります。
パラメーターグループを作成します。
aurora_select_into_s3_roleにIAMロールARNを設定します。
RDSにロールを追加
先ほど作成したIAMロールをRDSに追加する必要があります。この設定をしないと「cannot instantiate s3 client」というエラーが発生しますので注意してください。
これで以下のようなSQLが発行できるようになります。
SELECT * FROM テーブル名 INTO OUTFILE S3 's3://バケット名/aaa'
みたいな感じで実行すると、「aaa.part_00000」というファイルが作成されているはずです。
既にaaa.part_00000というファイルがバケットに存在する場合はエラーとなりますので、その場合に上書きしたい場合は、以下のように指定します。
SELECT * FROM テーブル名 INTO OUTFILE S3 's3://バケット名/aaa' OVERWRITE ON;
manifestをonにするとロードする際に便利です。
SELECT * FROM テーブル名 INTO OUTFILE S3 's3://バケット名/aaa' MANIFEST ON OVERWRITE ON;
MANIFESTをONにすると、以下のファイルが作成されます。
- aaa.manifest
- aaa.part_00000
ファイルはデフォルト6GBを超えると分割されていくようです。(part_00000,part_00001,part_00002,…)よほど巨大なデータをSELECTしない限りpart_00000の1ファイルなんじゃないかと思われます。
変数を使用する
@xxxで変数が使用できます。以下は、@numという変数を使用したオートナンバリングの例です。
set @num = 0; SELECT @num:=@num+1, first_name FROM テーブル名 INTO OUTFILE S3 's3://バケット名/aaa' MANIFEST ON OVERWRITE ON;
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント