S3バケットのcsvファイルとかからAuroraにデータをインポートするLOAD DATA FROM S3

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とかで実行することが可能です。

LOAD DATA FROM S3

DBクラスターパラメータの設定1

LOAD DATA FROM S3を実行するにはDBクラスターのaurora_load_from_s3_roleというパラメータにIAMロールを指定してあげる必要があります。

これが未設定だと以下のようなエラーが表示されます。

S3バケットのcsvファイルとかからAuroraにデータをインポートするLOAD DATA FROM S3

IAMロールとポリシーとAurora

LOAD DATA FROM S3をするには、IAMロールとIAMポリシーを作成します。

S3バケットのcsvファイルとかからAuroraにデータをインポートするLOAD DATA FROM S3

このポリシーを作成します。ポリシー名は適当で良いです。

ちなみにサービスは「S3」ですが、全てのS3アクションの権限を与えても良いです。

次にRDSのIAMロールを作成します。このIAMロールに対してIAMポリシーをアタッチします。

あとは「データベース」の「IAMロールの管理」で、作成したロールを指定すればOKです。

DBクラスターパラメータの設定2

DBクラスターパラメータを新規作成します。

その際に以下を設定する必要があります。

パラメータ ロール名
aurora_load_from_s3_role 作成したロール

ポートについて

MySQL互換なので、デフォルトポートの3306は、インバウンドの設定で開放しておく必要があります。

コメント

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