

# CTAS 쿼리에 대한 고려 사항 및 제한 사항
<a name="ctas-considerations-limitations"></a>

다음 섹션에서는 Athena에서 `CREATE TABLE AS SELECT`(CTAS) 쿼리를 사용할 때 유의해야 할 고려 사항과 제한 사항을 설명합니다.

## CTAS 쿼리 구문 알아보기
<a name="ctas-considerations-limitations-query-syntax"></a>

CTAS 쿼리 구문은 테이블 생성에 사용되는 `CREATE [EXTERNAL] TABLE`의 구문과 다릅니다. [CREATE TABLE AS](create-table-as.md)을(를) 참조하세요.

## 뷰와 CTAS 쿼리의 차이점
<a name="ctas-considerations-limitations-queries-vs-views"></a>

CTAS 쿼리는 Amazon S3의 지정된 위치에 새 데이터를 씁니다. 뷰는 어떤 데이터도 쓰지 않습니다.

## CTAS 쿼리 결과를 저장할 위치 지정
<a name="ctas-considerations-limitations-location-of-query-results"></a>

작업 그룹이 쿼리 결과 위치에 대한 [클라이언트 측 설정을 재정의](workgroups-settings-override.md)하는 경우 Athena는 `s3://amzn-s3-demo-bucket/tables/<query-id>/` 위치에 테이블을 생성합니다. 작업 그룹에 지정된 쿼리 결과 위치를 보려면 [작업 그룹 세부 정보를 조회](viewing-details-workgroups.md)하세요.

작업 그룹이 쿼리 결과 위치를 재정의하지 않으면 CTAS 쿼리에서 `WITH (external_location ='s3://amzn-s3-demo-bucket/')` 구문을 사용하여 CTAS 쿼리 결과가 저장되는 위치를 지정할 수 있습니다.

**참고**  
`external_location` 속성은 비어 있는 위치를 지정해야 합니다. CTAS 쿼리는 버킷의 경로 위치(접두사)가 비어 있는지 확인하고 해당 위치에 이미 데이터가 있는 경우 해당 데이터를 절대 덮어쓰지 않습니다. 동일한 위치를 다시 사용하려면 버킷의 키 접두사 위치에서 데이터를 삭제하세요.

`external_location` 구문을 생략하고 작업 그룹 설정을 사용하지 않으면 Athena는 쿼리 결과 위치에 대해 [클라이언트 측 설정](query-results-specify-location-console.md)을 사용하고 `s3://amzn-s3-demo-bucket/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/` 위치에 테이블을 생성합니다.

## 분리된 파일 찾기
<a name="ctas-considerations-limitations-locating-orphaned-files"></a>

`CTAS` 또는 `INSERT INTO` 문이 실패하는 경우 분리된 데이터 파일이 실패 또는 취소된 쿼리의 대상 데이터 위치에 남아 있을 가능성이 있습니다. 일부 경우 Athena가 쿼리의 대상 버킷에서 데이터를 삭제하지 않으므로 후속 쿼리에 부분 데이터가 포함될 수 있습니다.

검사 또는 삭제할 분리된 파일을 찾으려면 Athena에서 제공하는 데이터 매니페스트 파일을 사용하여 작성할 파일 목록을 추적할 수 있습니다. 드물지만 Athena 쿼리가 갑자기 실패한 경우 매니페스트 파일이 없을 수 있습니다. 대상 S3 위치를 수동으로 검사하여 분리된 파일을 찾을 수 있습니다. 자세한 내용은 [쿼리 출력 파일 식별](querying-finding-output-files.md#querying-identifying-output-files) 및 [DataManifestLocation](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecutionStatistics.html#athena-Type-QueryExecutionStatistics-DataManifestLocation)을 참조하세요.

Apache Iceberg를 사용하여 테이블의 원자성 트랜잭션을 달성하는 것이 좋습니다. 자세한 내용은 [Apache Iceberg 테이블 쿼리](querying-iceberg.md) 섹션을 참조하세요.

## ORDER BY 절은 무시된다는 점을 기억하세요.
<a name="ctas-considerations-limitations-order-by-ignored"></a>

CTAS 쿼리에서 Athena는 쿼리의 `SELECT` 부분에 있는 `ORDER BY` 절을 무시합니다.

SQL 사양(ISO 9075 Part 2)에 따라, `ORDER BY` 절을 바로 포함하는 쿼리 표현식에서만 쿼리 표현식에서 지정한 테이블의 행 순서가 보장됩니다. 어떤 경우든 SQL의 테이블은 내재적으로 정렬되지 않기 때문에 하위 쿼리에서 `ORDER BY`를 구현하면 쿼리가 잘못 수행되고 정렬된 출력을 얻을 수 없습니다. 따라서 Athena CTAS 쿼리에서는 데이터를 쓸 때 `ORDER BY` 절에서 지정한 순서가 유지되지 않을 수 있습니다.

## 쿼리 결과를 저장할 형식 선택
<a name="ctas-considerations-limitations-formats-for-query-results"></a>

CTAS 결과는 `PARQUET`, `ORC`, `AVRO`, `JSON` 및 `TEXTFILE`에 저장할 수 있습니다. CTAS `TEXTFILE` 형식에는 다중 문자 구분 기호가 지원되지 않습니다. 데이터 스토리지 형식을 지정하지 않으면 CTAS 쿼리 결과는 기본적으로 Parquet에 저장됩니다.

CTAS 쿼리를 실행할 때 형식 변환을 해석하기 위해 SerDe를 지정할 필요는 없습니다. [Example: Writing query results to a different format](ctas-examples.md#ctas-example-format)을(를) 참조하세요.

## 압축 형식 고려
<a name="ctas-considerations-limitations-compression-formats"></a>

`GZIP` 압축은 JSON 및 TEXTFILE 형식의 CTAS 쿼리 결과에 사용됩니다. Parquet의 경우 `GZIP` 또는 `SNAPPY`를 사용할 수 있으며 기본값은 `GZIP`입니다. ORC의 경우 `LZ4`, `SNAPPY`, `ZLIB` 또는 `ZSTD`를 사용할 수 있으며 기본값은 `ZLIB`입니다. 압축을 지정하는 CTAS 예제는 [Example: Specifying data storage and compression formats](ctas-examples.md#ctas-example-compression)단원을 참조하십시오. Athena의 압축에 대한 자세한 내용은 [Athena에서 압축 사용](compression-formats.md) 섹션을 참조하세요.

## 결과 분할 및 버킷팅
<a name="ctas-considerations-limitations-partition-and-bucket-limits"></a>

CTAS 쿼리의 결과 데이터를 분할하고 버킷화할 수 있습니다. 대상 테이블의 속성을 지정하려면 `WITH` 절 끝에 분할 및 버킷팅 조건자를 포함합니다. 자세한 내용은 [분할 및 버킷팅 사용](ctas-partitioning-and-bucketing.md) 및 [Example: Creating bucketed and partitioned tables](ctas-examples.md#ctas-example-bucketed)(을)를 참조하세요.

CTAS를 사용하여 분할된 테이블을 생성할 때 Athena의 쓰기 제한은 파티션 100개입니다. 100개 파티션 제한을 해결하는 방법에 대한 자세한 내용은 [CTAS 및 INSERT INTO를 사용하여 100개 파티션 한도 문제 해결](ctas-insert-into.md) 단원을 참조하세요.

## 결과 암호화
<a name="ctas-considerations-limitations-encryption"></a>

Amazon S3에서 다른 쿼리 결과를 암호화하는 것과 유사한 방식으로 Athena에서 CTAS 쿼리 결과를 암호화할 수 있습니다. 자세한 내용은 [Amazon S3에 저장된 Athena 쿼리 결과 암호화](encrypting-query-results-stored-in-s3.md) 섹션을 참조하세요.

## 예상 버킷 소유자 설정은 CTAS에는 적용되지 않습니다.
<a name="ctas-considerations-limitations-expected-bucket-owner"></a>

CTAS 문의 경우 예상 버킷 소유자 설정이 Amazon S3의 대상 테이블 위치에 적용되지 않습니다. 예상 버킷 소유자 설정은 Athena 쿼리 결과에 대해 지정한 Amazon S3 출력 위치에만 적용됩니다. 자세한 내용은 [Athena 콘솔을 사용하여 쿼리 결과 위치 지정](query-results-specify-location-console.md) 섹션을 참조하세요.

## 열 데이터 형식이 유지됨
<a name="ctas-considerations-limitations-data-types"></a>

CTAS 쿼리의 열 데이터 유형은 원본 쿼리에 지정된 유형과 동일합니다.