S3バケットにAuroraのデータを出力するINTO OUTFILEの設定方法

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ロールを指定してあげる必要があります。

パラメーターグループを作成します。

S3バケットにAuroraのデータを出力する INTO OUTFILEの設定方法

aurora_select_into_s3_roleにIAMロールARNを設定します。

S3バケットにAuroraのデータを出力するINTO OUTFILEの設定方法

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;

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました