다음 예제를 사용하여 CTAS 쿼리를 생성합니다. CTAS 구문에 대한 자세한 정보는 CREATE TABLE AS 단원을 참조하세요.
이 섹션:
예제: 모든 열을 선택하여 테이블 복제
다음 예제에서는 테이블의 모든 열을 복사해 테이블을 만듭니다.
CREATE TABLE new_table AS
SELECT *
FROM old_table;
동일한 예제의 다음 변형에서 SELECT
문에는 WHERE
절이 포함되어 있습니다. 이 경우, 쿼리는 테이블에서 WHERE
절을 충족하는 행만 선택합니다.
CREATE TABLE new_table AS
SELECT *
FROM old_table
WHERE condition
;
예제: 하나 이상의 테이블에서 특정 열 선택
다음 예제에서는 다른 테이블의 열 세트에 대해 실행할 새 쿼리를 생성합니다.
CREATE TABLE new_table AS
SELECT column_1
, column_2, ... column_n
FROM old_table;
동일한 예제의 이번 변형에서는 여러 테이블의 특정 열을 바탕으로 새 테이블을 생성합니다.
CREATE TABLE new_table AS
SELECT column_1, column_2, ... column_n
FROM old_table_1
, old_table_2
, ... old_table_n
;
예제: 기존 테이블의 빈 복사본 생성
다음 예제에서는 WITH NO DATA
를 사용해 비어 있지만 원본 테이블과 스키마가 동일한 새 테이블을 생성합니다.
CREATE TABLE new_table
AS SELECT *
FROM old_table
WITH NO DATA;
예제: 데이터 스토리지 및 압축 형식 지정
CTAS를 사용하면 한 스토리지 형식의 소스 테이블을 사용하여 스토리지 형식이 다른 또 다른 테이블을 만들 수 있습니다.
format
속성을 사용하여 ORC
, PARQUET
, AVRO
, JSON
또는 TEXTFILE
을 새 테이블의 스토리지 형식으로 지정합니다.
PARQUET
, ORC
, TEXTFILE
및 JSON
스토리지 형식의 경우 write_compression
속성을 사용하여 새 테이블의 데이터에 대한 압축 형식을 지정합니다. 각 파일 형식에서 지원하는 압축 유형에 대한 자세한 내용은 Athena에서 압축 사용 섹션을 참조하세요.
다음 예제에서는 new_table
테이블의 데이터를 Parquet 형식으로 Snappy 압축을 사용하여 저장하도록 지정합니다. Parquet의 기본 압축은 GZIP
입니다.
CREATE TABLE new_table
WITH (
format = 'Parquet
',
write_compression = 'SNAPPY')
AS SELECT *
FROM old_table;
다음 예제에서는 new_table
테이블의 데이터를 ORC 형식으로 Snappy 압축을 사용하여 저장하도록 지정합니다. ORC의 기본 압축은 ZLIB입니다.
CREATE TABLE new_table
WITH (format = 'ORC
',
write_compression = 'SNAPPY')
AS SELECT *
FROM old_table ;
다음 예제에서는 new_table
테이블의 데이터를 텍스트 파일 형식으로 Snappy 압축을 사용하여 저장하도록 지정합니다. 텍스트 파일과 JSON 형식 모두의 기본 압축은 GZIP입니다.
CREATE TABLE new_table
WITH (format = 'TEXTFILE
',
write_compression = 'SNAPPY')
AS SELECT *
FROM old_table ;
예제: 쿼리 결과를 다른 형식으로 쓰기
다음 CTAS 쿼리는 CSV 또는 다른 형식으로 저장할 수 있는 모든 레코드를 old_table
에서 선택하고 ORC 형식으로 Amazon S3에 저장된 기본 데이터로 새 테이블을 만듭니다.
CREATE TABLE my_orc_ctas_table
WITH (
external_location = 's3://amzn-s3-demo-bucket/my_orc_stas_table/',
format = 'ORC
')
AS SELECT *
FROM old_table;
예제: 분할되지 않은 테이블 생성
다음 예제에서는 분할되지 않은 테이블을 생성합니다. 테이블 데이터가 다른 형식으로 저장됩니다. 이러한 예제 중 일부에서는 외부 위치를 지정합니다.
다음 예제에서는 결과를 텍스트 파일로 저장하는 CTAS 쿼리를 생성합니다.
CREATE TABLE ctas_csv_unpartitioned
WITH (
format = 'TEXTFILE
',
external_location = 's3://amzn-s3-demo-bucket/ctas_csv_unpartitioned/')
AS SELECT key1, name1, address1, comment1
FROM table1;
다음 예제에서는 결과가 Parquet에 저장되고 기본 결과 위치가 사용됩니다.
CREATE TABLE ctas_parquet_unpartitioned
WITH (format = 'PARQUET
')
AS SELECT key1, name1, comment1
FROM table1;
다음 쿼리에서는 테이블이 JSON으로 저장되고 원본 테이블 결과에서 특정 열을 선택합니다.
CREATE TABLE ctas_json_unpartitioned
WITH (
format = 'JSON
',
external_location = 's3://amzn-s3-demo-bucket/ctas_json_unpartitioned/')
AS SELECT key1, name1, address1, comment1
FROM table1;
다음 예제에서 형식은 ORC입니다.
CREATE TABLE ctas_orc_unpartitioned
WITH (
format = 'ORC
')
AS SELECT key1, name1, comment1
FROM table1;
다음 예제에서 형식은 Avro입니다.
CREATE TABLE ctas_avro_unpartitioned
WITH (
format = 'AVRO
',
external_location = 's3://amzn-s3-demo-bucket/ctas_avro_unpartitioned/')
AS SELECT key1, name1, comment1
FROM table1;
예제: 분할된 테이블 생성
다음 예제에서는 partitioned_by
및 WITH
절의 기타 속성을 사용하여 다른 스토리지 형식으로 분할된 테이블에 대한 CREATE TABLE AS SELECT
쿼리를 보여줍니다. 구문은 CTAS 테이블 속성 단원을 참조하세요. 분할할 열 선택에 대한 자세한 정보는 분할 및 버킷팅 사용 단원을 참조하세요.
참고
SELECT
문의 열 목록 끝에 파티션 열을 나열합니다. 둘 이상의 열을 기준으로 분할할 수 있으며 최대 100개의 고유한 파티션과 버킷 조합을 가질 수 있습니다. 예를 들어 버킷이 지정되지 않은 경우 100개의 파티션을 가질 수 있습니다.
CREATE TABLE ctas_csv_partitioned
WITH (
format = 'TEXTFILE
',
external_location = 's3://amzn-s3-demo-bucket/ctas_csv_partitioned/',
partitioned_by = ARRAY['key1'])
AS SELECT name1, address1, comment1, key1
FROM tables1;
CREATE TABLE ctas_json_partitioned
WITH (
format = 'JSON
',
external_location = 's3://amzn-s3-demo-bucket/ctas_json_partitioned/',
partitioned_by = ARRAY['key1'])
AS select name1, address1, comment1, key1
FROM table1;
예제: 버킷팅 및 분할된 테이블 생성
다음 예제는 Amazon S3에 쿼리 결과를 저장하기 위해 분할 및 버킷팅을 둘 다 사용하는 CREATE TABLE AS SELECT
쿼리를 보여줍니다. 테이블 결과가 다른 열을 기준으로 분할 및 버킷팅됩니다. Athena는 최대 100개의 고유한 파티션 및 버킷 조합을 지원합니다. 예를 들어 5개의 버킷이 있는 테이블을 생성하는 경우 각각 5개의 버킷이 있는 20개의 파티션이 지원됩니다. 구문은 CTAS 테이블 속성 단원을 참조하세요.
버킷팅할 열 선택에 대한 자세한 정보는 분할 및 버킷팅 사용 단원을 참조하세요.
CREATE TABLE ctas_avro_bucketed
WITH (
format = 'AVRO
',
external_location = 's3://amzn-s3-demo-bucket/ctas_avro_bucketed/',
partitioned_by = ARRAY['nationkey'],
bucketed_by = ARRAY['mktsegment'],
bucket_count = 3)
AS SELECT key1, name1, address1, phone1, acctbal, mktsegment, comment1, nationkey
FROM table1;
예 예: Parquet 데이터를 사용하여 Iceberg 테이블 생성
다음 예에서는 Parquet 데이터 파일을 사용하여 Iceberg 테이블을 생성합니다. 파일은 table1
의 dt
열을 사용하여 월별로 분할됩니다. 이 예에서는 테이블의 모든 브랜치에 기본적으로 10개의 스냅샷이 보존되도록 테이블의 보존 속성을 업데이트합니다. 지난 7일 이내의 스냅샷도 유지됩니다. Athena에서 Iceberg 테이블 속성에 대한 자세한 내용은 테이블 속성 지정 섹션을 참조하세요.
CREATE TABLE ctas_iceberg_parquet
WITH (table_type = 'ICEBERG',
format = 'PARQUET',
location = 's3://amzn-s3-demo-bucket/ctas_iceberg_parquet/',
is_external = false,
partitioning = ARRAY['month(dt)'],
vacuum_min_snapshots_to_keep = 10,
vacuum_max_snapshot_age_seconds = 604800
)
AS SELECT key1, name1, dt FROM table1;
예: Avro 데이터를 사용하여 Iceberg 테이블 생성
다음 예에서는 key1
에 의해 분할된 Avro 데이터 파일을 사용하여 Iceberg 테이블을 생성합니다.
CREATE TABLE ctas_iceberg_avro
WITH ( format = 'AVRO',
location = 's3://amzn-s3-demo-bucket/ctas_iceberg_avro/',
is_external = false,
table_type = 'ICEBERG',
partitioning = ARRAY['key1'])
AS SELECT key1, name1, date FROM table1;