

# 쿼리 결과 및 최근 쿼리 작업
<a name="querying"></a>

Amazon Athena는 실행되는 각 쿼리의 쿼리 결과 및 쿼리 실행 결과 메타데이터 정보를 Amazon S3에 지정할 수 있는 *쿼리 결과 위치*에 자동으로 저장합니다. 필요한 경우 이 위치의 파일에 액세스하여 해당 파일로 작업할 수 있습니다. 또한 Athena 콘솔에서 쿼리 결과 파일을 직접 다운로드할 수 있습니다.

Athena에서 이제 쿼리 결과 관리를 위한 두 가지 옵션을 제공합니다. 고객 소유 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 드라이버에서 사용).
+ 콘솔에서는 쿼리 결과 파일이 200MB보다 큰 경우 다운로드할 수 없습니다. 별도로 다운로드할 수 있는 위치에 200MB보다 큰 결과를 쓰려면 `UNLOAD` 문을 사용합니다.
+ 관리형 쿼리 결과 기능은 [쿼리 결과 재사용](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/ko_kr/athena/latest/ug/images/athena-managed.png)

1. **쿼리 결과 암호화**에서 원하는 암호화 옵션을 선택합니다. 자세한 내용은 [쿼리 결과 암호화 선택](#managed-query-results-encryption-at-rest) 섹션을 참조하세요.

1. 기타 모든 필수 세부 정보를 입력하고 **변경 사항 저장**을 선택합니다.

## 쿼리 결과 암호화 선택
<a name="managed-query-results-encryption-at-rest"></a>

암호화 구성에는 두 가지 옵션이 있습니다.
+ **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` 작업을 추가해야 합니다. 이 세 가지 작업이 최소한 허용되는 작업입니다.

관리형 쿼리 결과는 [암호화 컨텍스트](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)에 사용자의 작업 그룹 ARN을 사용합니다. `Principal` 섹션이 AWS 서비스이므로 키 정책 조건에 `aws:sourceArn` 및 `aws:sourceAccount`도 추가해야 합니다. 다음 예제에서는 단일 작업 그룹에 대해 최소 권한을 보유한 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 키입니다. 사용자는 키 정책 설정 및 관리, 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 콘솔을 사용하여 쿼리를 실행하는 경우 탐색 모음의 **설정**에 입력한 **쿼리 결과 위치**가 클라이언트 측 설정을 결정합니다.
+ 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에서는 **쿼리 결과 위치(Query result location)**의 값을 지정하지 않은 상태로 쿼리를 실행하고 작업 그룹이 쿼리 결과 위치 설정을 재정의하지 않는 경우 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. 탐색 모음에서 **설정**을 선택합니다.

1. 탐색 모음에서 **관리(Manage)**를 선택합니다.

1. **설정 관리(Manage settings)**에서 다음 중 하나를 수행합니다.
   + **쿼리 결과 위치(Location of query result)** 상자에서 Amazon S3에서 쿼리 결과를 위해 생성한 버킷의 경로를 입력합니다. 경로 앞에 `s3://`를 붙입니다.
   + **S3 검색(Browse S3)** 아이콘을 선택하고 현재 리전에서 생성한 Amazon S3 버킷을 선택한 다음 **선택(Choose)**을 선택합니다.
**참고**  
작업 그룹의 모든 사용자에 대해 쿼리 결과 위치를 지정하는 작업 그룹을 사용하는 경우 쿼리 결과 위치를 변경하는 옵션을 사용할 수 없습니다.

1. (선택 사항) **View lifecycle configuration**(수명 주기 구성 보기)를 선택하여 쿼리 결과 버킷에서 [Amazon S3 수명 주기 규칙](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)을 보고 구성합니다. 생성하는 Amazon S3 수명 주기 규칙은 만료 규칙 또는 전환 규칙일 수 있습니다. 만료 규칙은 일정 시간이 지나면 쿼리 결과를 자동으로 삭제합니다. 전환 규칙은 쿼리 결과를 다른 Amazon S3 스토리지 계층으로 이동합니다. 자세한 내용은 Amazon Simple Storage Service Console 사용 설명서의 [버킷에서 수명 주기 구성 설정](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 출력 위치에만 적용됩니다. 외부 Amazon S3 버킷의 데이터 소스 위치, `CTAS` 및 `INSERT INTO` 대상 테이블 위치, `UNLOAD` 문 출력 위치, 연합 쿼리의 유출 버킷 작업 또는 다른 계정의 테이블에 대해 실행되는 `SELECT` 쿼리 등의 다른 Amazon S3 위치에는 적용되지 않습니다.

1. (선택 사항) Amazon S3 저장된 쿼리 결과를 암호화하려면 **쿼리 결과 암호화(Encrypt query results)**를 선택하세요. Athena에서 암호화 사용에 대한 자세한 내용은 [저장 시 암호화](encryption.md) 섹션을 참조하세요.

1. (선택 사항) 쿼리 결과 버킷에 대해 [ACL이 사용 설정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)되어 있을 때 버킷 소유자에게 쿼리 결과에 대한 전체 제어 액세스 권한을 부여하려면 **버킷 소유자에게 쿼리 결과에 대한 전체 제어 할당**을 선택하세요. 예를 들어, 쿼리 결과 위치가 다른 계정이 소유한 경우 쿼리 결과에 대한 소유권 및 전체 제어 권한을 다른 계정에 부여할 수 있습니다. 자세한 내용은 *Amazon S3 사용자 안내서*의 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)를 참조하세요.

1. **저장**을 선택합니다.

# 작업 그룹을 사용하여 쿼리 결과 위치 지정
<a name="query-results-specify-location-workgroup"></a>

AWS Management Console, 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/ko_kr/athena/latest/ug/images/nav-pane-expansion.png)

1. 탐색 창에서 **작업 그룹(Workgroups)**을 선택합니다.

1. 작업 그룹 목록에서 편집할 작업 그룹의 링크를 선택합니다.

1. **편집**을 선택합니다.

1. **쿼리 결과 위치 및 암호화**에 대해 다음 중 하나를 수행합니다.
   + **쿼리 결과 위치(Location of query result)** 상자에 쿼리 결과에 대한 Amazon S3의 버킷 경로를 입력합니다. 경로 앞에 `s3://`를 붙입니다.
   + **S3 검색(Browse 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 출력 위치에만 적용됩니다. 외부 Amazon S3 버킷의 데이터 소스 위치, `CTAS` 및 `INSERT INTO` 대상 테이블 위치, `UNLOAD` 문 출력 위치, 연합 쿼리의 유출 버킷 작업 또는 다른 계정의 테이블에 대해 실행되는 `SELECT` 쿼리 등의 다른 Amazon S3 위치에는 적용되지 않습니다.

1. (선택 사항) Amazon S3 저장된 쿼리 결과를 암호화하려면 **쿼리 결과 암호화(Encrypt query results)**를 선택하세요. Athena에서 암호화 사용에 대한 자세한 내용은 [저장 시 암호화](encryption.md) 섹션을 참조하세요.

1. (선택 사항) 쿼리 결과 버킷에 대해 [ACL이 사용 설정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)되어 있을 때 버킷 소유자에게 쿼리 결과에 대한 전체 제어 액세스 권한을 부여하려면 **버킷 소유자에게 쿼리 결과에 대한 전체 제어 할당**을 선택하세요. 예를 들어, 쿼리 결과 위치가 다른 계정이 소유한 경우 쿼리 결과에 대한 소유권 및 전체 제어 권한을 다른 계정에 부여할 수 있습니다.

   버킷의 S3 객체 소유권 설정이 **버킷 소유자 기본**인 경우 버킷 소유자는 이 작업 그룹에서 작성된 모든 쿼리 결과 객체도 소유합니다. 예를 들어, 외부 계정의 작업 그룹에서 이 옵션을 활성화하고 쿼리 결과 위치를 계정의 **버킷 소유자 기본**의 S3 객체 소유권 설정을 가진 Amazon S3 버킷으로 설정한 경우, 외부 작업 그룹의 쿼리 결과에 대한 전체 제어 권한을 갖습니다.

   쿼리 결과 버킷의 S3 객체 소유권 설정이 **버킷 소유자 시행**인 경우 이 옵션은 아무 영향이 없습니다. 자세한 내용은 *Amazon S3 사용자 안내서*의 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)를 참조하세요.

1. 작업 그룹의 모든 사용자가 지정한 쿼리 결과 위치를 사용하도록 요청하려면 **설정(Settings)** 섹션까지 아래로 스크롤하고 **고객 측 설정 재정의(Override client-side settings)**를 선택합니다.

1. **변경 사항 저장**을 선택합니다.

# 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/ko_kr/athena/latest/ug/images/getting-started-query-results-download-csv.png)

**이전 쿼리에 대한 쿼리 결과 파일을 다운로드하려면**

1. **최근 쿼리(Recent queries)**를 선택합니다.  
![\[최근 쿼리(Recent queries)를 선택하여 이전 쿼리를 봅니다.\]](http://docs.aws.amazon.com/ko_kr/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)에 의해 삭제되었거나 다른 위치로 이동된 쿼리 결과를 검색할 수 없습니다.  
![\[최근 쿼리(Recent queries)를 선택하여 이전 쿼리 결과를 찾습니다.\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/athena/latest/ug/images/querying-view-query-statement.png)

1. 실패한 쿼리에 대한 세부 정보를 보려면 쿼리에 대한 **실패(Failed)** 링크를 선택합니다.  
![\[쿼리에 대한 실패(Failed) 링크를 선택하여 실패에 대한 정보를 봅니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/querying-view-query-failure-details.png)

# 여러 개의 최근 쿼리를 CSV 파일로 다운로드
<a name="queries-downloading-multiple-recent-queries-to-csv"></a>

Athena 콘솔의 **Recent queries**(최근 쿼리) 탭을 사용하여 하나 이상의 최근 쿼리를 CSV 파일로 내보내 테이블 형식으로 볼 수 있습니다. 다운로드한 파일에는 쿼리 결과가 아니라 SQL 쿼리 문자열 자체와 쿼리에 대한 기타 정보가 들어 있습니다. 내보낸 필드에는 실행 ID, 쿼리 문자열 내용, 쿼리 시작 시간, 상태, 실행 시간, 스캔한 데이터의 양, 사용된 쿼리 엔진 버전 및 암호화 방법이 포함됩니다. 검색 상자에 입력한 조건을 사용하여 최대 500개의 최근 쿼리 또는 필터링된 쿼리를 내보낼 수 있습니다.

**하나 이상의 최근 쿼리를 CSV 파일로 내보내려면**

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home)에서 Athena 콘솔을 엽니다.

1. **최근 쿼리(Recent queries)**를 선택합니다.

1. (선택 사항) 검색 상자를 사용하여 다운로드할 최근 쿼리를 필터링합니다.

1. **Download CSV**를 선택합니다.  
![\[Download CSV를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/athena/latest/ug/images/querying-recent-queries-options.png)

1. **기본 설정(Preferences)** 대화 상자에서 페이지당 행 수, 줄 바꿈 동작 및 표시할 열을 선택합니다.  
![\[최근 쿼리의 표시 구성\]](http://docs.aws.amazon.com/ko_kr/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. 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 쿼리 결과는 일반 텍스트 파일로 저장됩니다. 콘솔을 사용할 경우 콘솔의 **결과** 창에서 또는 쿼리 **기록**에서 결과 파일을 다운로드할 수 있습니다. 자세한 내용은 [Athena 콘솔을 사용하여 쿼리 결과 파일 다운로드](saving-query-results.md) 단원을 참조하세요.  | 
|  **쿼리 메타데이터 파일**  |  `QueryID.csv.metadata` `QueryID.txt.metadata`  |  DML 및 DDL 쿼리 메타데이터 파일은 이진 형식으로 저장되며 사람이 읽을 수 없습니다. 파일 확장명은 관련된 쿼리 결과 파일과 같습니다. Athena는 `GetQueryResults` 작업을 사용해 쿼리 결과를 읽을 때 메타데이터를 사용합니다. 이러한 파일을 삭제할 수 있지만, 쿼리에 대한 중요한 정보가 손실될 수 있기 때문에 파일을 삭제하지 않는 것이 좋습니다.  | 
|  **데이터 매니페스트 파일**  |  `QueryID-manifest.csv`  |  [INSERT INTO](insert-into.md) 쿼리가 실행될 때 Athena가 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"
    }
}
```