

# クエリ結果と最近のクエリを操作する
<a name="querying"></a>

Amazon Athena は、Amazon S3 で指定できる*クエリ結果の場所*に、実行される各クエリのクエリ結果とクエリ実行結果メタデータを自動的に保存します。必要に応じて、この場所にあるファイルにアクセスして操作できます。Athena コンソールからクエリ結果ファイルを直接ダウンロードすることもできます。

Athena では、クエリ結果を管理するための 2 つのオプションが提供されるようになりました。お客様がお持ちの S3 バケットを使用するか、マネージドクエリ結果機能を選択できます。独自のバケットを使用すると、ストレージ、アクセス許可、ライフサイクルポリシー、保持などを完全に制御できるため、最大限の柔軟性が得られますが、より多くの管理が必要になります。または、マネージドクエリ結果オプションを選択すると、ストレージとライフサイクルの管理は自動的にサービスで処理されるため、別の結果バケットを設定する必要がなくなり、事前定義された保持期間後に結果が自動的にクリーンアップされます。詳細については、「[マネージドクエリ結果](managed-results.md)」を参照してください。

Amazon S3 にクエリ結果の場所を初めてセットアップするときは、「[Athena コンソールを使用してクエリ結果の場所を指定する](query-results-specify-location-console.md)」を参照してください。

出力ファイルは、実行されるすべてのクエリに対して自動的に保存されます。Athena コンソールを使用してクエリ出力ファイルにアクセスして表示するには、IAM プリンシパル (ユーザーとロール) に、クエリ結果ロケーションに対する Amazon S3 の [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) アクションの許可と、Athenaの [GetQueryResults](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryResults.html) アクションの許可が必要です。クエリの結果の場所は暗号化できます。場所が暗号化されている場合、ユーザーには、クエリ結果の場所を暗号化および復号するための適切なキーアクセス許可が必要です。

**重要**  
クエリ結果の場所に対する Amazon S3 の `GetObject` アクションの許可を持つ IAM プリンシパルは、Athena の `GetQueryResults` アクションの許可が拒否された場合でも、Amazon S3 からクエリ結果を取得できます。

**注記**  
キャンセルされた、または失敗したクエリの場合、Athena が既に部分的な結果を Amazon S3 に書き込んでいる可能性があります。このような場合、Athena は結果が保存されている Amazon S3 プレフィックスから部分的な結果を削除しません。部分的な結果がある Amazon S3 プレフィックスを削除する必要があります。Athena は、Amazon S3 マルチパートアップロードを使用して Amazon S3 データを書き込みます。クエリが失敗した場合にはマルチパートアップロードを中止するように、バケットライフサイクルポリシーを設定することが推奨されます。詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[マルチパートアップロードを使用したオブジェクトのアップロードとコピー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config)」を参照してください。
特定の条件下では、Athena がクエリ実行を自動的に再試行することがあります。ほとんどの場合、これらのクエリは正常に完了し、クエリ ID は `Completed` とマークされます。これらのクエリは、最初の試行時に既に部分的な結果を書き込んでいる可能性があり、不完全なマルチパートアップロードになる恐れがあります。

**Topics**
+ [マネージドクエリ結果](managed-results.md)
+ [クエリ結果の場所を指定する](query-results-specify-location.md)
+ [Athena コンソールを使用してクエリ結果ファイルをダウンロードする](saving-query-results.md)
+ [Athena コンソールで最近のクエリを表示する](queries-viewing-history.md)
+ [複数の最近のクエリを CSV ファイルにダウンロードする](queries-downloading-multiple-recent-queries-to-csv.md)
+ [最近のクエリ表示オプションを設定する](queries-recent-queries-configuring-options.md)
+ [クエリ履歴を 45 日間よりも長く保持する](querying-keeping-query-history.md)
+ [Amazon S3 でクエリ出力ファイルを検索する](querying-finding-output-files.md)

# マネージドクエリ結果
<a name="managed-results"></a>

マネージドクエリ結果を使用することで、クエリ結果ストレージ用の Amazon S3 バケットを指定せずに SQL クエリを実行できるようになります。これにより、独自の S3 バケットをプロビジョニング、管理、アクセスの制御、クリーンアップする必要がなくなります。開始するには、新しいワークグループを作成するか、既存のワークグループを編集します。**[クエリ結果の設定]** で、**[Athena マネージド]** を選択します。

**主な特徴**
+ クエリを実行する前に S3 バケットの場所を選択する要件を削除することで、ワークフローを簡素化します。
+ マネージドクエリ結果の使用とクエリ結果の自動削除に追加のコストがかからないため、管理オーバーヘッドが削減され、個別の S3 バケットクリーンアッププロセスが不要になります。
+ 開始が簡単: マネージドクエリ結果を使用するように新規および既存のワークグループを簡単に設定できます。AWS アカウントで Athena マネージドクエリ結果とカスタマーマネージドクエリ結果を混在させることができます。
+ 個々のワークグループに関連付けられた `GetQueryResults` と `GetQueryResultsStream` を介して結果を読み取るアクセス許可で、IAM アクセス許可を合理化しました。
+ クエリ結果は、選択した AWS 所有キーまたはカスタマー所有キーで自動的に暗号化されます。

## 考慮事項と制限事項
<a name="managed-results-considerations"></a>

****
+ クエリ結果へのアクセスは、Athena のワークグループレベルで管理されます。そのため、特定のワークグループに対する `GetQueryResults` および `GetQueryResultsStream` IAM アクションへの明示的なアクセス許可が必要です。`GetQueryResults` アクションは、完了したクエリの結果をページ分割形式で取得できるユーザーを決定します。一方、`GetQueryResultsStream` アクションは、完了したクエリの結果をストリーミングできるユーザーを決定します (Athena ドライバーで一般的に使用されます)。
+ 200 MB を超えるクエリ結果ファイルをコンソールからダウンロードすることはできません。`UNLOAD` ステートメントを使用して、200 MB を超える結果を個別にダウンロードできる場所に書き込みます。
+ マネージドクエリ結果機能は、[クエリ結果の再利用](reusing-query-results.md)をサポートしていません。
+ クエリ結果は 24 時間利用できます。この期間中、クエリ結果は無償で保存されます。この期間を過ぎると、クエリ結果は自動的に削除されます。

## マネージドクエリ結果を使用してワークグループを作成または編集する
<a name="using-managed-query-results"></a>

コンソールからワークグループを作成したり、マネージドクエリ結果を使用して既存のワークグループを更新したりする方法

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/) で Athena コンソールを開きます。

1. 左側のナビゲーションから **[ワークグループ]** を選択します。

1. **[ワークグループを作成]** を選択して新しいワークグループを作成するか、リストから既存のワークグループを編集します。

1. **[クエリ結果の設定]**で、**[Athena マネージド]** を選択します。  
![\[クエリ結果の設定メニュー。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/athena-managed.png)

1. **クエリ結果を暗号化**する場合は、必要な暗号化オプションを選択します。詳細については、「[クエリ結果の暗号化を選択する](#managed-query-results-encryption-at-rest)」を参照してください。

1. その他の必要な詳細をすべて入力し、**[変更を保存]** を選択します。

## クエリ結果の暗号化を選択する
<a name="managed-query-results-encryption-at-rest"></a>

暗号化の設定には次の 2 つのオプションがあります。
+ **AWS 所有キーを使用して暗号化する** – マネージドクエリ結果を使用する場合のデフォルトのオプションです。クエリ結果を AWS 所有キーで暗号化する場合は、このオプションを選択します。
+ **カスタマーマネージドキーを使用して暗号化する** – カスタマーマネージドキーを使用してクエリ結果を暗号化および復号する場合は、このオプションを選択します。カスタマーマネージドキーを使用するには、キーポリシーセクションのプリンシパル要素に Athena サービスを追加します。詳細については、「[マネージドクエリ結果の AWS KMS キーポリシーを設定する](#managed-query-results-set-up)」を参照してください。クエリを正常に実行するには、クエリを実行しているユーザーに AWS KMS キーへのアクセス許可を付与する必要があります。

## マネージドクエリ結果の AWS KMS キーポリシーを設定する
<a name="managed-query-results-set-up"></a>

キーポリシーの `Principal` セクションでは、このキーを使用できるユーザーを指定します。マネージドクエリ結果機能には、`Principal` セクションで指定する必要があるプリンシパル `encryption.athena.amazonaws.com` が導入されています。このサービスプリンシパルは、Athena が所有していないキーへのアクセス専用です。また、マネージド結果にアクセスするために使用するキーポリシーに、`kms:Decrypt`、`kms:GenerateDataKey`、および `kms:DescribeKey` アクションを追加する必要があります。これらの 3 つのアクションは、許可された最小限のアクションです。

マネージドクエリの結果は、[暗号化コンテキスト](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)にワークグループ ARN を使用します。`Principal` セクションは AWS サービスであるため、キーポリシー条件に `aws:sourceArn` と `aws:sourceAccount` も追加する必要があります。次の例は、1 つのワークグループに対する最小限のアクセス許可を持つ AWS KMS キーポリシーを示しています。

```
 {
    "Sid": "Allow athena service principal to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "encryption.athena.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:DescribeKey"
      ],
    "Resource": "arn:aws:kms:us-east-1:{account-id}:key/{key-id}",
    "Condition": {
    "ArnLike": {
        "kms:EncryptionContext:aws:athena:arn": "arn:aws:athena:us-east-1:{account-id}:workgroup/{workgroup-name}",
        "aws:SourceArn": "arn:aws:athena:us-east-1:{account-id}:workgroup/{workgroup-name}"
    },
    "StringEquals": {
        "aws:SourceAccount": "{account-id}"
    }
}
```

次の AWS KMS キーポリシーの例では、同じアカウント *account-id* 内のすべてのワークグループに同じ AWS KMS キーの使用を許可します。

```
{
    "Sid": "Allow athena service principal to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "encryption.athena.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:DescribeKey"
    ],
    "Resource": "arn:aws:kms:us-east-1:account-id:key/{key-id}",
    "Condition": {
        "ArnLike": {
          "kms:EncryptionContext:aws:athena:arn": "arn:aws:athena:us-east-1:account-id:workgroup/*",
          "aws:SourceArn": "arn:aws:athena:us-east-1:account-id:workgroup/*"
        },
        "StringEquals": {
          "aws:SourceAccount": "account-id"
        }
    }
}
```

Athena および Amazon S3 のアクセス許可に加えて、`kms:GenerateDataKey` および `kms:Decrypt` アクションを実行するアクセス許可も取得する必要があります。詳細については、「[Amazon S3 の暗号化されたデータに対する許可](encryption.md#permissions-for-encrypting-and-decrypting-data)」を参照してください。

マネージドクエリ結果の暗号化の詳細については、[マネージドクエリ結果を暗号化する](encrypting-managed-results.md) を参照してください。

# マネージドクエリ結果を暗号化する
<a name="encrypting-managed-results"></a>

Athena は、[マネージドクエリ結果](managed-results.md) を暗号化するための以下のオプションを提供します。

## AWS 所有キーを使用した暗号化
<a name="encrypting-managed-results-aws-owned-key"></a>

これは、マネージドクエリ結果を使用する場合のデフォルトのオプションです。このオプションは、ユーザーが AWS 所有キーを使用してクエリ結果を暗号化することを示します。AWS 所有キーが AWS アカウントに保存されることはなく、AWS 所有の KMS キーのコレクションの一部となります。AWS 所有のキーを利用しても利用料はかからず、アカウントの AWS KMS クォータにもカウントされません。

## AWS KMS カスタマーマネージドキーを使用して暗号化する
<a name="encrypting-managed-results-customer-managed-key"></a>

カスタマーマネージドキーは、お客様が作成、所有、管理する AWS アカウントの KMS キーです。これらの KMS キーでは、キーポリシー、IAM ポリシー、権限の確立と管理、有効化と無効化、暗号化マテリアルのローテーション、タグの追加、KMS キーを参照するエイリアスの作成 、KMS キー削除のスケジューリングなどを含め、これらを完全に制御できます。詳細については、「[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)」を参照してください。

## Athena がカスタマーマネージドキーを使用して結果を暗号化する方法
<a name="encrypting-managed-results-how-ate-uses-cmk"></a>

カスタマーマネージドキーを指定すると、Athena はマネージドクエリ結果に保存されるときに、そのマネージドキーを使用してクエリ結果を暗号化します。`GetQueryResults` を呼び出すと、結果の復号に同じキーが使用されます。カスタマーマネージドキーの状態を無効に設定するか、マネージドキーの削除をスケジュールすると、Athena とすべてのユーザーがこのキーで結果を暗号化または復号できなくなります。

Athena は、エンベロープ暗号化とキー階層を使用してデータを暗号化します。AWS KMS 暗号化キーは、このキー階層のルートキーを生成および復号するために使用されます。

各結果は、暗号化時にワークグループで設定されたカスタマーマネージドキーを使用して暗号化されます。キーを別のカスタマーマネージドキーまたは AWS 所有キーに切り替えても、新しいキーで既存の結果を再暗号化することはありません。特定のカスタマーマネージドキーの削除と無効化は、そのキーで暗号化した結果の復号にのみ影響します。

Athena は、結果を暗号化および復号するための `kms:Decrypt`、`kms:GenerateDataKey`、および `kms:DescribeKey` オペレーションを実行するために、暗号化キーにアクセスする必要があります。詳細については、「[Amazon S3 の暗号化されたデータに対する許可](encryption.md#permissions-for-encrypting-and-decrypting-data)」を参照してください。

`StartQueryExecution` API を使用してクエリを送信し、`GetQueryResults` を使用して結果を読み取るプリンシパルには、Athena および Amazon S3 のアクセス許可に加えて、`kms:Decrypt`、`kms:GenerateDataKey`、および `kms:DescribeKey` オペレーションのカスタマーマネージドキーに対するアクセス許可も必要です。詳細については、「[AWS KMS のキーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)」を参照してください。

# クエリ結果の場所を指定する
<a name="query-results-specify-location"></a>

Athena が使用するクエリ結果の場所は、ワークグループの設定とクライアント側の設定の組み合わせによって決定されます。クライアント側の設定は、クエリの実行方法に基づいています。
+  Athena コンソールを使用してクエリを実行する場合は、ナビゲーションバーの **[Settings]** (設定) で入力した **[Query result location]** (クエリ結果の場所) がクライアント側の設定を決定します。
+ Athena API を使用してクエリを実行する場合は、[StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html) アクションの `OutputLocation` パラメータがクライアント側の設定を決定します。
+ ODBC または JDBC ドライバーを使用してクエリを実行する場合、接続 URL で指定された `S3OutputLocation` プロパティによってクライアント側の設定が決まります。

**重要**  
API または ODBC または JDBC ドライバーを使用してクエリを実行する場合、コンソールの設定は適用されません。

各ワークグループ設定には、[[Override client-side settings (クライアント側設定の上書き)]](https://docs.aws.amazon.com/athena/latest/ug/workgroups-settings-override.html) オプションがあり、有効にできます。このオプションを有効にすると、そのワークグループに関連付けられている IAM プリンシパルがクエリを実行するときに、適切なクライアント側の設定よりもワークグループの設定が優先されます。

## 以前に作成されたデフォルトの場所について
<a name="query-results-specify-location-previous-defaults"></a>

これまで Athena では、**クエリ結果の場所**の値を指定せずにクエリを実行し、クエリ結果の場所の設定がワークグループによって上書きされなかった場合は、Athena がデフォルトの場所を作成していました。デフォルトの場所は `aws-athena-query-results-MyAcctID-MyRegion` でした。*MyAcctID* はクエリを実行した IAM プリンシパルの Amazon Web Services アカウント ID で、*MyRegion* はクエリが実行されたリージョン (`us-west-1` など) です。

今後は、以前に Athena を使用したことがないアカウントがあるリージョンで Athena クエリを実行する前に、クエリ結果の場所を指定するか、クエリ結果の場所の設定を上書きするワークグループを使用しなければならなくなります。Athena はデフォルトのクエリ結果の場所を作成しなくなりましたが、以前に作成されたデフォルトの `aws-athena-query-results-MyAcctID-MyRegion` の場所は引き続き有効で、使用を継続できます。

**Topics**
+ [以前に作成されたデフォルトの場所について](#query-results-specify-location-previous-defaults)
+ [Athena コンソールを使用してクエリ結果の場所を指定する](query-results-specify-location-console.md)
+ [ワークグループを使用してクエリ結果の場所を指定する](query-results-specify-location-workgroup.md)

# Athena コンソールを使用してクエリ結果の場所を指定する
<a name="query-results-specify-location-console"></a>

クエリを実行する前に、Amazon S3 のクエリ結果バケットの場所を指定しておく、または指定されたバケットがあり、その設定がクライアント設定を上書きするワークグループを使用する必要があります。

**Athena コンソールを使用してクライアント側の設定のクエリ結果の場所を指定する**

1. クエリ結果の場所を指定するワークグループに[切り替えます](switching-workgroups.md)。デフォルトのワークグループの名前は **primary** です。

1. ナビゲーションバーから **[Settings]** (設定) を選択します。

1. ナビゲーションバーで **[Manage]** (管理) を選択します。

1. **[Manage settings]** (設定の管理) で、以下のいずれかを実行します。
   + **[Location of query result]** (クエリ結果の場所) ボックスで、クエリ結果のために Amazon S3 に作成したバケットへのパスを入力します。パスの先頭に `s3://` を付けます。
   + **[Browse S3]** (S3 をブラウズ) をクリックし、現在のリージョンで作成した Amazon S3 バケットを選択した上で、**[Choose]** (選択) をクリックします。
**注記**  
ワークグループのすべてのユーザーに対してクエリ結果の場所を指定するワークグループを使用している場合、クエリ結果の場所を変更するオプションは使用できません。

1. (オプション) **[View lifecycle configuration]** (ライフサイクル設定を表示) を選択すると、クエリ結果バケットの [[Amazon S3 lifecycle rules]](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) (Amazon S3 ライフサイクルルール) を表示および設定できます。作成する Amazon S3 ライフサイクルルールは、有効期限ルールまたは移行ルールのいずれでも可能です。有効期限ルールでは、一定の時間が経過するとクエリ結果は自動的に削除されます。移行ルールは別の Amazon S3 ストレージ階層に移動します。詳細については、Amazon Simple Storage Service ユーザーガイドの「[バケットのライフサイクル設定の指定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)」を参照してください。

1. (オプション) **[Expected bucket owner]** (想定されるバケット所有者) に、出力ロケーションバケットの所有者になると想定されている AWS アカウント の ID を入力します。これは追加のセキュリティ対策です。バケット所有者のアカウント ID がここで指定した ID と一致しない場合、バケットに出力できません。詳細については、「*Amazon S3 ユーザーガイド*」の「[バケット所有者条件によるバケット所有者の確認](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-owner-condition.html)」を参照してください。
**注記**  
予期されるバケット所有者の設定は、Athena クエリの結果の出力先として指定した Amazon S3 内の場所にのみ適用されます。これは、外部 Simple Storage Service (Amazon S3) バケット内のデータソースの場所、`CTAS` や `INSERT INTO` の書き込み先のテーブルの場所、`UNLOAD` ステートメントの出力場所、串刺検索のバケットのスピルオペレーション、別のアカウントのテーブルに対して実行される `SELECT` クエリなど、他の Amazon S3 ロケーションには適用されません。

1. (オプション) Simple Storage Service (Amazon S3) に保存されているクエリ結果を暗号化するには、**[Encrypt query results]** (クエリ結果の暗号化) を選択します。Athena の暗号化に関する詳細については、[保管中の暗号化](encryption.md) を参照してください。

1. (オプション) クエリ結果バケットの [ACL が有効になっている](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)ときに、バケット所有者にクエリ結果に対するフルコントロールアクセスを割り当てるには、**[Assign bucket owner full control over query results]** (クエリ結果に対する完全なコントロールをバケット所有者に付与する) を選択します。たとえば、クエリ結果の場所を別のアカウントが所有している場合に、クエリ結果の所有権とフルコントロールを他のアカウントに付与することができます。詳細については、「*Amazon S3 ユーザーガイド*」の「[オブジェクトの所有権のコントロールとバケットに対する ACL の無効化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)」を参照してください。

1. **[Save]** (保存) を選択します。

# ワークグループを使用してクエリ結果の場所を指定する
<a name="query-results-specify-location-workgroup"></a>

AWS マネジメントコンソール、AWS CLI、または Athena API を使用して、ワークグループ設定でクエリ結果の場所を指定します。

AWS CLI を使用する場合、[https://docs.aws.amazon.com/cli/latest/reference/athena/create-work-group.html](https://docs.aws.amazon.com/cli/latest/reference/athena/create-work-group.html) または [https://docs.aws.amazon.com/cli/latest/reference/athena/update-work-group.html](https://docs.aws.amazon.com/cli/latest/reference/athena/update-work-group.html) コマンドを実行するときに `--configuration` オプションの `OutputLocation` パラメータを使用してクエリ結果の場所を指定します。

**Athena コンソールを使用してワークグループのクエリ結果の場所を指定する**

1. コンソールのナビゲーションペインが表示されない場合は、左側の展開メニューをクリックします。  
![\[展開メニューを選択します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/nav-pane-expansion.png)

1. ナビゲーションペインで、**[Workgroups]** (ワークグループ) を選択します。

1. ワークグループのリストで、編集するワークグループのリンクを選択します。

1. **[編集]** を選択します。

1. **クエリ結果の場所と暗号化**については、次のいずれかを実行します。
   + **[Location of query result]** (クエリ結果の場所) ボックスに、クエリ結果のために Amazon S3 のバケットへのパスを入力します。パスの先頭に `s3://` を付けます。
   + **[Browse S3]** (S3 のブラウズ) で、使用する現在のリージョン用の Amazon S3 バケットを選択し、**[Choose]** (選択) を選択します。

1. (オプション) **[Expected bucket owner]** (想定されるバケット所有者) に、出力ロケーションバケットの所有者になると想定されている AWS アカウント の ID を入力します。これは追加のセキュリティ対策です。バケット所有者のアカウント ID がここで指定した ID と一致しない場合、バケットに出力できません。詳細については、「*Amazon S3 ユーザーガイド*」の「[バケット所有者条件によるバケット所有者の確認](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-owner-condition.html)」を参照してください。
**注記**  
予期されるバケット所有者の設定は、Athena クエリの結果の出力先として指定した Amazon S3 内の場所にのみ適用されます。これは、外部 Simple Storage Service (Amazon S3) バケット内のデータソースの場所、`CTAS` や `INSERT INTO` の書き込み先のテーブルの場所、`UNLOAD` ステートメントの出力場所、串刺検索のバケットのスピルオペレーション、別のアカウントのテーブルに対して実行される `SELECT` クエリなど、他の Amazon S3 ロケーションには適用されません。

1. (オプション) Simple Storage Service (Amazon S3) に保存されているクエリ結果を暗号化するには、**[Encrypt query results]** (クエリ結果の暗号化) を選択します。Athena の暗号化に関する詳細については、[保管中の暗号化](encryption.md) を参照してください。

1. (オプション) クエリ結果バケットの [ACL が有効になっている](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)ときに、バケット所有者にクエリ結果に対するフルコントロールアクセスを割り当てるには、**[Assign bucket owner full control over query results]** (クエリ結果に対する完全なコントロールをバケット所有者に付与する) を選択します。たとえば、クエリ結果の場所を別のアカウントが所有している場合に、クエリ結果の所有権とフルコントロールを他のアカウントに付与することができます。

   バケットの S3 オブジェクトの所有権の設定が **[Bucket owner preferred]** (バケット所有者推奨) となっている場合、バケット所有者は、このワークグループから書き込まれたすべてのクエリ結果オブジェクトも所有します。たとえば、外部アカウントのワークグループでこのオプションが有効になっており、そのクエリ結果の場所がアカウントの Simple Storage Service (Amazon S3) バケットに設定されている場合に、このバケットの S3 オブジェクトの所有権が **[Bucket owner preferred]** (バケット所有者推奨) と設定されていると、外部ワークグループのクエリ結果を所有し、フルコントロールアクセスを持つことになります。

   クエリ結果バケットの S3 オブジェクトの所有権設定が **[Bucket owner enforced]** (バケット所有者の強制) となっているときにこのプションを選択しても、効果はありません。詳細については、「*Amazon S3 ユーザーガイド*」の「[オブジェクトの所有権のコントロールとバケットに対する ACL の無効化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)」を参照してください。

1. 指定したクエリ結果の場所を使用するようにワークグループのすべてのユーザーに要求する場合は、**[Settings]** (設定) セクションまで下にスクロールして、**[Override client-side settings ]** (クライアント側設定の上書き) を選択します。

1. **[Save changes]** (変更の保存) を選択します。

# Athena コンソールを使用してクエリ結果ファイルをダウンロードする
<a name="saving-query-results"></a>

クエリを実行した直後に、クエリペインからクエリ結果の CSV ファイルをダウンロードできます。最近のクエリ結果も、**[Recent queries]** (最近のクエリ) タブからダウンロードできます。

**注記**  
Athena クエリ結果ファイルは、個々のユーザーによって設定できる情報を含むデータファイルです。このデータの読み込みと分析を行うプログラムの一部は、データの一部をコマンドと解釈する可能性があります (CSV インジェクション)。このため、クエリ結果の CSV データをスプレッドシートプログラムにインポートすると、そのプログラムから、セキュリティ上の問題について警告を受ける場合があります。システムを安全に保つには、ダウンロードされたクエリ結果からリンクまたはマクロを無効にするように常に選択する必要があります。

**クエリを実行してクエリ結果をダウンロードするには**

1. クエリエディタにクエリを入力し、**[Run]** (実行) をクリックします。

   クエリの実行が終了すると、[**Results (結果)**] ペインにクエリ結果が表示されます。

1. クエリ結果の CSV ファイルをダウンロードするには、クエリ結果ペインの上にある **[Download results]** (結果のダウンロード) を選択します。ブラウザとブラウザの設定によっては、ダウンロードの確認が必要になる場合があります。  
![\[Athena コンソールでクエリ結果を .csv ファイルに保存します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/getting-started-query-results-download-csv.png)

**以前のクエリのクエリ結果ファイルをダウンロードするには**

1. **[Recent queries]** (最近のクエリ) を選択します。  
![\[[Recent queries] (最近のクエリ) をクリックして以前のクエリを表示します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/getting-started-recent-queries.png)

1. 検索ボックスを使用してクエリを見つけ、クエリを選択してから、**[Download results]** (結果のダウンロード) を選択します。
**注記**  
**[Download results]** (結果のダウンロード) オプションを使用して、手動で削除されたクエリ結果を取得したり、Amazon S3 [ライフサイクルルール](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)によって削除または別の場所に移動されたクエリ結果を取得したりすることはできません。  
![\[(最近のクエリ) を選択して、以前のクエリ結果を検索してダウンロードします。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/querying-recent-queries-tab-download.png)

# Athena コンソールで最近のクエリを表示する
<a name="queries-viewing-history"></a>

Athena コンソールを使用して、成功したクエリと失敗したクエリの表示、および失敗したクエリのエラー詳細の表示を行うことができます。Athena では、クエリ履歴が 45 日間保持されます。

**Athena コンソールで最近のクエリを表示するには**

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) で Athena コンソールを開きます。

1. **[Recent queries]** (最近のクエリ) を選択します。**[Recent queries]** (最近のクエリ) タブには、実行された各クエリに関する情報が表示されます。

1. クエリエディタでクエリステートメントを開くには、クエリの実行 ID を選択します。  
![\[クエリの実行 ID を選択してクエリエディタで表示します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/querying-view-query-statement.png)

1. 失敗したクエリの詳細を表示するには、クエリの **[Failed]** (失敗) リンクを選択します。  
![\[クエリの [Failed] (失敗) リンクを選択して、失敗に関する情報を表示します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/querying-view-query-failure-details.png)

# 複数の最近のクエリを CSV ファイルにダウンロードする
<a name="queries-downloading-multiple-recent-queries-to-csv"></a>

Athena コンソールの **[Recent queries]** (最近のクエリ) タブを使用すると、1 つ以上の最近のクエリを CSV ファイルにエクスポートして、表形式で表示できます。ダウンロードしたファイルには、クエリ結果ではなく、SQL クエリ文字列自体とクエリに関するその他の情報が含まれています。エクスポートされるフィールドには、実行 ID、クエリ文字列のコンテンツ、クエリの開始時間、ステータス、実行時間、スキャンされたデータ量、使用されたクエリエンジンのバージョン、および暗号化方法が含まれます。最近のクエリを最大 500 個、または検索ボックスに入力した条件を使用してフィルター処理をした最大 500 個のクエリをエクスポートできます。

**1 つ以上の最近のクエリを CSV ファイルにエクスポートするには**

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) で Athena コンソールを開きます。

1. **[Recent queries]** (最近のクエリ) を選択します。

1. (オプション) 検索ボックスを使用して、ダウンロードする最近のクエリを絞り込みます。

1. **[CSV のダウンロード]** を選択します。  
![\[[CSV のダウンロード] を選択します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/querying-recent-queries-csv.png)

1. ファイル保存のプロンプトで、**[Save]** (保存) を選択します。デフォルトのファイル名は、タイムスタンプによって続く `Recent Queries` です (例: `Recent Queries 2022-12-05T16 04 27.352-08 00.csv`)

# 最近のクエリ表示オプションを設定する
<a name="queries-recent-queries-configuring-options"></a>

表示する列やテキストの折り返しなど、**[Recent queries]** (最近のクエリ) タブのオプションを設定できます。

****[Recent queries]** (最近のクエリ) タブのオプションを設定するには**

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) で Athena コンソールを開きます。

1. **[Recent queries]** (最近のクエリ) を選択します。

1. オプションボタン (歯車のアイコン) を選択します。  
![\[最近のクエリの表示を設定するには、オプションボタンをクリックします。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/querying-recent-queries-options.png)

1. **[Preferences ]** (設定) ダイアログボックスで、ページあたりの行数、行折り返しの動作、および表示する列を選択します。  
![\[最近のクエリの表示の設定。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/querying-recent-queries-preferences.png)

1. **[確認]** を選択します。

# クエリ履歴を 45 日間よりも長く保持する
<a name="querying-keeping-query-history"></a>

クエリ履歴を 45 日より長く保持する場合は、クエリ履歴を取得して、Amazon S3 などのデータストアに履歴を保存できます。このプロセスを自動化するには、Athena および Amazon S3 の API アクションと CLI コマンドを使用できます。以下の手順は、これらのステップをまとめたものです。

**クエリ履歴をプログラムで取得して保存するには**

1. Athena の [ListQueryExecutions](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListQueryExecutions.html) API アクション、または [list-query-executions](https://docs.aws.amazon.com/cli/latest/reference/athena/list-query-executions.html) CLI コマンドを使用して、クエリ ID を取得します。

1. Athena の [GetQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryExecution.html) API アクション、または [get-query-execution](https://docs.aws.amazon.com/cli/latest/reference/athena/get-query-execution.html) CLI コマンドを使用して、ID に基づいた各クエリに関する情報を取得します。

1. Simple Storage Service (Amazon S3) の [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) API アクション、または [put-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html) CLI コマンドを使用して、その情報を Amazon S3 に保存します。

# Amazon S3 でクエリ出力ファイルを検索する
<a name="querying-finding-output-files"></a>

ワークグループでクエリが発生し、そのワークグループの設定がクライアント側の設定よりも優先される場合でない限り、クエリ出力ファイルは次のパスパターンで Amazon S3 サブフォルダに保存されます。ワークグループの設定がクライアント側の設定よりも優先される場合、クエリはワークグループによって指定された結果パスを使用します。

```
QueryResultsLocationInS3/[QueryName|Unsaved/yyyy/mm/dd/]
```
+ *QueryResultsLocationInS3* は、ワークグループ設定またはクライアント側設定で指定されたクエリ結果の場所です。詳細については、このドキュメントで後述する「[クエリ結果の場所を指定する](query-results-specify-location.md)」を参照してください。
+ 次のサブフォルダは、ワークグループ設定が結果パスよりも優先されていないコンソールから実行されるクエリに対してのみ作成されます。AWS CLI から実行されるクエリまたは Athena API を使用して実行されるクエリは、*QueryResultsLocationInS3* に直接保存されます。
  + *QueryName* は結果を保存するクエリの名前です。クエリが実行されたものの、保存されなかった場合は、`Unsaved` が使用されます。
  + *yyyy/mm/dd* は、クエリが実行された日付です。

`CREATE TABLE AS SELECT` クエリに関連付けられたファイルは、上記のパターンの `tables` サブフォルダに保存されます。

## クエリ出力ファイルを識別する
<a name="querying-identifying-output-files"></a>

ファイルは、クエリの名前、クエリ ID、およびクエリが実行された日付に基づいて、Amazon S3 のクエリ結果の場所に保存されます。各クエリのファイルは *QueryID* を使用して命名されます。QueryID は、クエリの実行時に Athena が各クエリに割り当てる一意の識別子です。

次のファイルタイプが保存されます。


| ファイルタイプ | ファイル命名パターン | 説明 | 
| --- | --- | --- | 
|  **クエリ結果ファイル**  |  `QueryID.csv` `QueryID.txt`  |  DML クエリ結果ファイルはカンマ区切り値 (CSV) 形式で保存されます。 DDL クエリ結果は、プレーンテキストファイルとして保存されます。 結果ファイルは、コンソールの使用時には [**Results**] (結果) ペインから、またはクエリの [**History**] (履歴) からダウンロードできます。詳細については、「[Athena コンソールを使用してクエリ結果ファイルをダウンロードする](saving-query-results.md)」を参照してください。  | 
|  **クエリメタデータファイル**  |  `QueryID.csv.metadata` `QueryID.txt.metadata`  |  DML および DDL クエリメタデータファイルはバイナリ形式で保存され、人間が読めるものではありません。ファイル拡張子は、関連するクエリ結果ファイルに対応しています。Athena は、`GetQueryResults` アクションを使用してクエリ結果を読み込むときに、メタデータを使用します。これらのファイルは削除できますが、クエリに関する重要な情報が失われるため、お勧めしません。  | 
|  **データマニフェストファイル**  |  `QueryID-manifest.csv`  |  データマニフェストファイルは、[INSERT INTO](insert-into.md) クエリの実行時に Athena が Simple Storage Service (Amazon S3) データソースの場所に作成するファイルを追跡するために生成されます。クエリが失敗した場合、マニフェストはクエリが書き込むことを意図したファイルも追跡します。マニフェストは、失敗したクエリの結果として孤立したファイルを識別するのに役立ちます。  | 

## AWS CLI を使用して、クエリ出力の場所とファイルを特定する
<a name="querying-finding-output-files-cli"></a>

AWS CLI を使用してクエリ出力の場所と結果ファイルを特定するには、次の例のように、`aws athena get-query-execution` コマンドを実行します。*abc1234d-5efg-67hi-jklm-89n0op12qr34* をクエリ ID に置き換えます。

```
aws athena get-query-execution --query-execution-id abc1234d-5efg-67hi-jklm-89n0op12qr34
```

このコマンドにより、以下のような出力が返されます。各出力パラメータの説明については、*AWS CLI コマンドリファレンス*の「[get-query-execution](https://docs.aws.amazon.com/cli/latest/reference/athena/get-query-execution.html)」を参照してください。

```
{
    "QueryExecution": {
        "Status": {
            "SubmissionDateTime": 1565649050.175,
            "State": "SUCCEEDED",
            "CompletionDateTime": 1565649056.6229999
        },
        "Statistics": {
            "DataScannedInBytes": 5944497,
            "DataManifestLocation": "s3://amzn-s3-demo-bucket/athena-query-results-123456789012-us-west-1/MyInsertQuery/2019/08/12/abc1234d-5efg-67hi-jklm-89n0op12qr34-manifest.csv",
            "EngineExecutionTimeInMillis": 5209
        },
        "ResultConfiguration": {
            "EncryptionConfiguration": {
                "EncryptionOption": "SSE_S3"
            },
            "OutputLocation": "s3://amzn-s3-demo-bucket/athena-query-results-123456789012-us-west-1/MyInsertQuery/2019/08/12/abc1234d-5efg-67hi-jklm-89n0op12qr34"
        },
        "QueryExecutionId": "abc1234d-5efg-67hi-jklm-89n0op12qr34",
        "QueryExecutionContext": {},
        "Query": "INSERT INTO mydb.elb_log_backup SELECT * FROM mydb.elb_logs LIMIT 100",
        "StatementType": "DML",
        "WorkGroup": "primary"
    }
}
```