[小ネタ]RedshiftへParquetファイルをCOPY文でロードする際の認証設定

はじめに

こんにちは。DI部の大高です。

最近RedshiftへParquetファイルをCOPY文でロードする機会があったのですが、IAM_ROLE以外を認証パラメータに利用した際にエラーになったのでご紹介したいと思います。

COPY文について

ReshiftへCOPY文を発行する際には、AWSのドキュメントにある通り、以下のような構文となります。

COPY table-name 
[ column-list ]
FROM data_source
authorization
[ [ FORMAT ] [ AS ] data_format ] 
[ parameter [ argument ] [, ... ] ]

COPY - Amazon Redshift

この構文に従ってParquetファイルをCOPYする場合、具体的には以下のようなクエリとなります。

COPY listing
FROM 's3://mybucket/data/listings/parquet/'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
FORMAT AS PARQUET;

COPY の例 - Amazon Redshift

認証情報の設定について

Parquetファイルフォーマット(列データ形式)の場合、以下のドキュメントに記載のとおり、認証情報にはIAM Roleを指定する必要があります。(2019/05現在)

COPY コマンドの認証情報は、IAM_ROLE パラメータまたは CREDENTIALS パラメータの引数として AWS Identity and Access Management (IAM) ロールを使用して指定する必要があります。

列データ形式の COPY - Amazon Redshift

実際に、以下のようなクエリを実行したところエラーとなりました。

COPY listing
FROM 's3://mybucket/data/listings/parquet/'
ACCESS_KEY_ID '<access-key-id>'
SECRET_ACCESS_KEY '<secret-access-key>'
FORMAT AS PARQUET;
Invalid operation: COPY from this file format only accepts IAM_ROLE credentials

まとめ

ParquetファイルをCOPY文でロードする際にはIAM Roleを指定しましょう。それでは!