SELECT 쿼리의 결과로 채워지는 새 테이블을 생성합니다. 빈 테이블을 생성하려면 CREATE TABLE을 사용합니다. CREATE TABLE AS
에서는 CREATE TABLE
DDL 문을 SELECT
DML 문과 결합하므로 기술적으로 DDL과 DML을 모두 포함합니다. CREATE TABLE
AS
가 다른 DDL 문과 함께 여기에 그룹화되어 있기는 하지만 Athena의 CTAS 쿼리는 Service Quotas을 위해 DML로 처리됩니다. Athena에서 Service Quotas에 대한 자세한 내용은 Service Quotas 섹션을 참조하세요.
참고
CTAS 문의 경우 예상 버킷 소유자 설정이 Amazon S3의 대상 테이블 위치에 적용되지 않습니다. 예상 버킷 소유자 설정은 Athena 쿼리 결과에 대해 지정한 Amazon S3 출력 위치에만 적용됩니다. 자세한 내용은 Athena 콘솔을 사용하여 쿼리 결과 위치 지정 단원을 참조하십시오.
이 참조 주제 외에 CREATE TABLE AS
에 대한 추가 정보는 쿼리 결과에서 테이블 생성(CTAS) 섹션을 참조하세요.
시놉시스
CREATE TABLE table_name
[ WITH ( property_name = expression [, ...] ) ]
AS query
[ WITH [ NO ] DATA ]
위치:
- WITH ( property_name = expression [, ...] )
-
선택적 CTAS 테이블 속성입니다. 일부는 데이터 스토리지 형식과 관련이 있습니다. CTAS 테이블 속성 섹션을 참조하세요.
- 쿼리
-
새 테이블을 생성하는 데 사용되는 SELECT 쿼리입니다.
중요
파티션을 사용하여 쿼리를 생성하려는 경우
SELECT
문에서 열 목록 마지막에 분할된 열의 이름을 지정합니다. - [ WITH [ NO ] DATA ]
-
WITH NO DATA
가 사용되는 경우 원래 테이블과 스키마가 동일한 새로운 빈 테이블이 생성됩니다.
참고
쿼리 결과 출력에 열 머리글을 포함하려면 CTAS 쿼리 대신 간단한 SELECT
쿼리를 사용할 수 있습니다. 쿼리 결과 위치에서 결과를 검색하거나 Athena 콘솔을 사용하여 결과를 직접 다운로드할 수 있습니다. 자세한 내용은 쿼리 결과 및 최근 쿼리 작업 단원을 참조하십시오.
CTAS 테이블 속성
Athena의 각 CTAS 테이블에는 WITH (property_name = expression [, ...] )
을 사용해 지정하는 선택적 CTAS 테이블 속성 목록이 있습니다. 이런 파라미터 사용에 대한 자세한 정보는 CTAS 쿼리 예제 단원을 참조하세요.
-
WITH (property_name = expression [, ...], )
-
-
table_type = ['HIVE', 'ICEBERG']
-
선택 사항입니다. 기본값은
HIVE
입니다. 결과 테이블의 테이블 유형 지정예시
WITH (table_type ='ICEBERG')
-
external_location = [location]
-
참고
Iceberg 테이블은 외부 테이블이 아니므로 이 속성은 Iceberg 테이블에 적용되지 않습니다. CTAS 문에서 Iceberg 테이블의 루트 위치를 정의하려면 이 단원의 뒷부분에 설명된
location
속성을 사용하세요.선택 사항입니다. Athena가 Amazon S3에서 CTAS 쿼리를 저장하는 위치입니다.
예시
WITH (external_location ='s3://amzn-s3-demo-bucket/tables/parquet_table/')
Athena는 쿼리 결과에 동일한 경로를 두 번 사용하지 않습니다. 위치를 수동으로 지정한 경우, 지정한 Amazon S3 위치에 데이터가 없는지 확인하세요. Athena는 데이터 삭제를 시도하지 않습니다. 동일한 위치를 다시 사용하려는 경우에는 데이터를 수동으로 삭제하세요. 그렇지 않으면 CTAS 쿼리에 실패합니다.
쿼리 결과 위치를 강제하는 작업 그룹에서
external_location
을 지정한 CTAS 쿼리를 실행할 경우 쿼리가 오류 메시지를 표시하며 실패합니다. 작업 그룹에 지정된 쿼리 결과 위치를 보려면 작업 그룹 세부 정보를 조회하세요.작업 그룹이 쿼리 결과 위치에 대한 클라이언트 측 설정을 재정의하는 경우 Athena는 다음 위치에 테이블을 생성합니다.
s3://amzn-s3-demo-bucket/tables/
query-id
/external_location
속성을 사용하여 위치를 지정하지 않으며 작업 그룹이 클라이언트 측 설정을 재정의하지 않는 경우, Athena는 쿼리 결과 위치에 대한 클라이언트 측 설정을 사용하여 다음 위치에 테이블을 생성합니다.s3://amzn-s3-demo-bucket/
Unsaved-or-query-name
/year
/month
/date
/tables/query-id
/ -
is_external = [boolean]
-
선택 사항입니다. 테이블이 외부 테이블인지 나타냅니다. 기본값은 true입니다. Iceberg 테이블의 경우 이 값을 false로 설정해야 합니다.
예시
WITH (is_external = false)
-
location = [location]
-
Iceberg 테이블에 필요합니다. 쿼리 결과에서 생성될 Iceberg 테이블의 루트 위치를 지정합니다.
예시
WITH (location ='s3://amzn-s3-demo-bucket/tables/
iceberg_table
/') -
field_delimiter = [delimiter]
-
선택 사항으로, 텍스트 기반 데이터 스토리지 형식과 관련이 있습니다. CSV, TSV 및 텍스트 파일의 단일 문자 필드 구분 기호입니다. 예:
WITH (field_delimiter = ',')
. 현재 CTAS 쿼리에는 여러 문자로 된 필드 구분 기호가 지원되지 않습니다. 필드 구분 기호를 지정하지 않으면 기본적으로\001
이 사용됩니다. -
format = [storage_format]
-
CTAS 쿼리 결과에 대한 스토리지 형식입니다(예:
ORC
,PARQUET
,AVRO
,JSON
,ION
또는TEXTFILE
). Iceberg 테이블의 경우 허용되는 형식은ORC
,PARQUET
및AVRO
입니다. 생략하면 기본값은PARQUET
입니다. 이 파라미터의 이름인format
은 소문자로 표시되어야 합니다. 그렇지 않으면 CTAS 쿼리에 실패합니다.예시
WITH (format = 'PARQUET')
-
bucketed_by = ARRAY[ column_name[,…], bucket_count = [int] ]
-
참고
이 속성은 Iceberg 테이블에 적용되지 않습니다. Iceberg 테이블의 경우 파티셔닝을 버킷 변환과 함께 사용합니다.
데이터를 버킷팅할 버킷의 배열 목록입니다. 생략하면 Athena는 이 쿼리에 데이터를 버킷팅하지 않습니다.
-
bucket_count = [int]
-
참고
이 속성은 Iceberg 테이블에 적용되지 않습니다. Iceberg 테이블의 경우 파티셔닝을 버킷 변환과 함께 사용합니다.
데이터를 버킷팅할 버킷의 이름입니다. 생략하면 Athena는 데이터를 버킷팅하지 않습니다. 예시
CREATE TABLE bucketed_table WITH ( bucketed_by = ARRAY[
column_name
], bucket_count = 30, format = 'PARQUET', external_location ='s3://amzn-s3-demo-bucket/tables/parquet_table/' ) AS SELECT * FROMtable_name
-
partitioned_by = ARRAY[ col_name[,…] ]
-
참고
이 속성은 Iceberg 테이블에 적용되지 않습니다. Iceberg 테이블에 대해 파티션 변환을 사용하려면 이 단원의 뒷부분에 설명된
partitioning
속성을 사용하세요.선택 사항입니다. CTAS 테이블이 분할되는 기준이 되는 열의 배열 목록입니다. 분할된 열의 이름이
SELECT
문의 열 목록 마지막에 나열되어 있는지 확인하세요. -
partitioning = ARRAY[partition_transform, ...]
-
선택 사항입니다. 생성할 Iceberg 테이블의 파티셔닝을 지정합니다. Iceberg는 다양한 파티션 변환과 파티션 진화를 지원합니다. 파티션 변환은 다음 표에 요약되어 있습니다.
변환 설명 year(ts)
매년 하나의 파티션을 생성합니다. 파티션 값은 ts
~ 1970년 1월 1일 사이 연도의 정수 차이입니다.month(ts)
각 연도에 매월 하나의 파티션을 생성합니다. 파티션 값은 ts
~ 1970년 1월 1일 사이 월의 정수 차이입니다.day(ts)
각 연도에 매일 하나의 파티션을 생성합니다. 파티션 값은 ts
~ 1970년 1월 1일 사이 날짜의 정수 차이입니다.hour(ts)
매일 시간당 하나의 파티션을 생성합니다. 파티션 값은 분과 초가 0으로 설정된 타임스탬프입니다. bucket(x, nbuckets)
데이터를 지정된 수의 버킷으로 해시합니다. 파티션 값은 0과 nbuckets - 1
(포함) 사이의x
정수 해시입니다.truncate(s, nchars)
파티션 값을 s
의 첫nchars
자로 만듭니다.예시
WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country']))
-
optimize_rewrite_min_data_file_size_bytes = [long]
-
선택 사항입니다. 데이터 최적화별 구성입니다. 최적화를 위해 지정된 값보다 작은 파일이 포함됩니다. 기본값은
write_target_data_file_size_bytes
값의 0.75배입니다. 이 속성은 Iceberg 테이블에만 적용됩니다. 자세한 내용은 Iceberg 테이블 최적화 단원을 참조하십시오.예시
WITH (optimize_rewrite_min_data_file_size_bytes = 402653184)
-
optimize_rewrite_max_data_file_size_bytes = [long]
-
선택 사항입니다. 데이터 최적화별 구성입니다. 최적화를 위해 지정된 값보다 큰 파일이 포함됩니다. 기본값은
write_target_data_file_size_bytes
값의 1.8배입니다. 이 속성은 Iceberg 테이블에만 적용됩니다. 자세한 내용은 Iceberg 테이블 최적화 단원을 참조하십시오.예시
WITH (optimize_rewrite_max_data_file_size_bytes = 966367641)
-
optimize_rewrite_data_file_threshold = [int]
-
선택 사항입니다. 데이터 최적화별 구성입니다. 최적화가 필요한 데이터 파일이 주어진 임계값보다 적으면 파일이 재작성되지 않습니다. 이를 통해 더 많은 데이터 파일을 누적하여 대상 크기에 더 가까운 파일을 생성하고 비용 절감을 위해 불필요한 계산을 건너뛸 수 있습니다. 기본값은 5입니다. 이 속성은 Iceberg 테이블에만 적용됩니다. 자세한 내용은 Iceberg 테이블 최적화 단원을 참조하십시오.
예시
WITH (optimize_rewrite_data_file_threshold = 5)
-
optimize_rewrite_delete_file_threshold = [int]
-
선택 사항입니다. 데이터 최적화별 구성입니다. 데이터 파일과 연관된 삭제 파일이 임계값보다 적으면 데이터 파일이 재작성되지 않습니다. 이를 통해 비용 절감을 위해 각 데이터 파일에 대해 더 많은 삭제 파일을 누적할 수 있습니다. 기본값은 2입니다. 이 속성은 Iceberg 테이블에만 적용됩니다. 자세한 내용은 Iceberg 테이블 최적화 단원을 참조하십시오.
예시
WITH (optimize_rewrite_delete_file_threshold = 2)
-
vacuum_min_snapshots_to_keep = [int]
-
선택 사항입니다. Vacuum 관련 구성입니다. 보존할 최신 스냅샷의 최소 수입니다. 기본 값은 1입니다. 이 속성은 Iceberg 테이블에만 적용됩니다. 자세한 내용은 VACUUM 단원을 참조하십시오.
참고
vacuum_min_snapshots_to_keep
속성을 사용하려면 Athena 엔진 버전 3이 필요합니다.예시
WITH (vacuum_min_snapshots_to_keep = 1)
-
vacuum_max_snapshot_age_seconds = [long]
-
선택 사항입니다. Vacuum 관련 구성입니다. 보존할 스냅샷의 수명을 나타내는 기간(초)입니다. 기본값은 432,000(5일)입니다. 이 속성은 Iceberg 테이블에만 적용됩니다. 자세한 내용은 VACUUM 단원을 참조하십시오.
참고
vacuum_max_snapshot_age_seconds
속성을 사용하려면 Athena 엔진 버전 3이 필요합니다.예시
WITH (vacuum_max_snapshot_age_seconds = 432000)
-
write_compression = [compression_format]
-
압축을 지정할 수 있는 모든 스토리지 형식에 사용할 압축 유형입니다.
compression_format
값은 데이터가 테이블에 기록될 때 사용할 압축을 지정합니다.TEXTFILE
,JSON
,PARQUET
및ORC
파일 형식에 대한 압축을 지정할 수 있습니다.예를 들어
format
속성이PARQUET
을 스토리지 형식으로 지정할 경우,write_compression
의 값은 Parquet에 대한 압축 형식을 지정합니다. 이 경우write_compression
의 값을 지정하는 것은parquet_compression
의 값을 지정하는 것과 같습니다.마찬가지로,
format
속성이ORC
를 스토리지 형식으로 지정할 경우,write_compression
의 값은 ORC에 대한 압축 형식을 지정합니다. 이 경우write_compression
의 값을 지정하는 것은orc_compression
의 값을 지정하는 것과 같습니다.동일한 CTAS 쿼리에서 여러 압축 형식 테이블 속성을 지정할 수 없습니다. 예를 들어
write_compression
및parquet_compression
모두를 동일한 쿼리에서 지정할 수는 없습니다.write_compression
및orc_compression
에도 동일하게 적용됩니다. 각 파일 형식에 지원되는 압축 유형에 대한 자세한 내용은 Athena에서 압축 사용 섹션을 참조하세요. -
orc_compression = [compression_format]
-
ORC
데이터를 테이블에 쓸 때ORC
파일 형식에 사용할 압축 유형입니다. 예:WITH (orc_compression = 'ZLIB')
.ORC
파일의 청크(ORC
Postscript 제외)가 지정한 압축을 사용하여 압축됩니다. 생략하면ORC
에 ZLIB 압축이 기본적으로 사용됩니다.참고
일관성을 위해
orc_compression
대신write_compression
속성을 사용하는 것이 좋습니다.format
속성을 사용하여 스토리지 형식을ORC
로 지정한 후write_compression
속성을 사용하여ORC
가 사용할 압축 형식을 지정합니다. -
parquet_compression = [compression_format]
-
Parquet 데이터를 테이블에 쓸 때 Parquet 파일 형식에 사용할 압축 유형입니다. 예:
WITH (parquet_compression = 'SNAPPY')
. 이 압축은 Parquet 파일 내의 열 청크에 적용됩니다. 생략하면 Parquet에 GZIP 압축이 기본적으로 사용됩니다.참고
일관성을 위해
parquet_compression
대신write_compression
속성을 사용하는 것이 좋습니다.format
속성을 사용하여 스토리지 형식을PARQUET
로 지정한 후write_compression
속성을 사용하여PARQUET
가 사용할 압축 형식을 지정합니다. -
compression_level = [compression_level]
-
사용할 압축 수준입니다. 이 속성은 ZSTD 압축에만 적용됩니다. 가능한 값은 1~22입니다. 기본값은 3입니다. 자세한 내용은 ZSTD 압축 수준 사용 단원을 참조하십시오.
-
예시
CTAS 쿼리의 예제는 다음 리소스를 참조하세요.