[小ネタ]Athenaのクエリ結果の保存場所について

Athenaのクエリ結果の保存先について解説します
2023.02.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、洲崎です。
Athenaはクエリ実行すると、クエリ結果をS3に出力します。
S3の保存場所について調べる機会があったので紹介します。

いきなりまとめ

  • Athenaのクエリ結果の保存を指定する設定は2箇所ある
    • クエリエディタの設定
    • ワークグループの設定
  • ワークグループの設定を行っても利用するサービスによって指定のS3に出力されないケースがある
    • [クライアント側設定の上書き] オプションを利用する

Athenaのクエリ結果

Athenaでクエリした時の結果はS3に自動的に出力されます。
特に設定していないとデフォルトのバケットが自動作成されて、その中にクエリ結果を保存します。
東京リージョンの場合はaws-athena-query-results-ap-northeast-1-{AWSアカウントID}のバケットが作成されます。
中を覗くと、1クエリごとのcsvcsv.metadataがあることが分かります。

特にクエリ結果を気にしない場合は、ライフサイクルポリシー等を設定する形でよいと考えます。
一方、クエリ結果は個人情報が含まれるので暗号化したい、デフォルトのバケットではなく指定のS3バケットに格納したい等のケースがある場合は、クエリ結果の保存先を変える必要があります。
設定方法として2パターンありますので紹介します。

クエリエディタの設定

クエリエディタの設定は、Athenaのクエリエディタ上で実行したクエリが対象となります。
クエリエディタの画面

設定を行うにはエディタ上の「設定」をクリックして、クエリの結果と暗号化の設定のところで「管理」をクリックします。
クエリの結果を保存するS3バケットと、別AWSアカウントのバケットの場合はAWSアカウントIDを入力します。
「バケット所有者にクエリ結果に対する完全なコントロールを割り当てる」には、クエリ結果の管理を別AWSアカウントに割り当てる場合はチェックを入れます。
「クエリ結果を暗号化」は、暗号化したい場合にチェックを入れます。暗号化タイプはSSE-S3,SSE-KMS,CSE-KMSが可能です。

ワークグループの設定

ワークグループの設定を行うことで、その人のクエリエディタだけではなく、同じワークグループを使う全員のクエリ結果の出力先を指定できます。
Athenaの画面で、左のサイドメニューを開き、ワークグループをクリックします。

対象のワークグループを選択します。(デフォルトはprimaryです)

右上の「編集」ボタンをクリックすることで、S3を指定することができます。

[クライアント側設定の上書き]オプション

ワークグループの設定をしても、クエリ結果が指定のS3バケットに出力されず、デフォルトのS3バケットに出力されるケースがあります。
これはワークグループではなく、クライアント側の設定を優先している為です。
例えばQuickSightのデータソースをAthenaにしたクエリ結果は、ワークグループの設定を優先されずにデフォルトのS3バケットに出力されます。
ワークグループの全てのクエリを指定のS3バケットに出力したい場合は、「クライアント側設定の上書きオプション」を利用します。
クライアント設定の上書きは、ワークグループの編集画面で、チェックすることで設定可能です。

最後に

Amazon Athenaのクエリ結果についてまとめました。
設定する箇所が2箇所あるのと、ワークグループを設定しても対象のS3バケットに出力されなかった事象があった為、ブログにしました。
もしAthenaのクエリ結果の保存場所について調べてる方がいましたら参考になれば幸いです。

ではまた!コンサルティング部の洲崎でした。

参考