S3バケットのcsvファイルとかからAuroraにデータをインポートするLOAD DATA FROM S3
S3に配置したCSVなどのデータをクラウド上でそのままAuroraにインポートする方法です。
AuroraはIAM DB認証にしたりと細かい設定が必要ですが、Auroraの設定は割愛します。
LOAD DATA FROM S3 MANIFEST 's3://バケット名/~~.manifest' INTO TABLE テーブル名 (列1,列2,列3...);
(列1,列2,列3)の箇所はcsvファイルのカンマ区切りで合わせる必要があります。デフォルトはタブ区切りのファイルを読み込みますので、カンマ区切りのファイルの場合は、別途指定が必要です。
また、テーブルとcsv(tsv)のレイアウトが全く同じ場合は(列1,列2,…)を省略することができます。
スキップしたい列がある場合は、列名の先頭に@を付けます。(列名:idの場合、@id)
@を付けた列は変数となりますので、色々使えます。
manifestファイルは以下のようにJSON形式で書きます。
{ "entries": [ { "url":"s3://バケット名/2013-10-04-customerdata", "mandatory":true }, { "url":"s3://バケット名/2013-10-05-customerdata", "mandatory":true } ] }
公式サイトを見る限り異なるリージョンからもロードできるようです。ただ私は試してません。
S3に簡単なファイルを配置して、A5M2とかで実行することが可能です。
DBクラスターパラメータの設定1
LOAD DATA FROM S3を実行するにはDBクラスターのaurora_load_from_s3_roleというパラメータにIAMロールを指定してあげる必要があります。
これが未設定だと以下のようなエラーが表示されます。
LOAD DATA FROM S3をするには、IAMロールとIAMポリシーを作成します。
このポリシーを作成します。ポリシー名は適当で良いです。
ちなみにサービスは「S3」ですが、全てのS3アクションの権限を与えても良いです。
次にRDSのIAMロールを作成します。このIAMロールに対してIAMポリシーをアタッチします。
あとは「データベース」の「IAMロールの管理」で、作成したロールを指定すればOKです。
DBクラスターパラメータの設定2
DBクラスターパラメータを新規作成します。
その際に以下を設定する必要があります。
パラメータ | ロール名 |
---|---|
aurora_load_from_s3_role | 作成したロール |
ポートについて
MySQL互換なので、デフォルトポートの3306は、インバウンドの設定で開放しておく必要があります。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント