この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。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 ] [, ... ] ]
この構文に従ってParquetファイルをCOPYする場合、具体的には以下のようなクエリとなります。
COPY listing
FROM 's3://mybucket/data/listings/parquet/'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
FORMAT AS PARQUET;
認証情報の設定について
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を指定しましょう。それでは!