CTAS 쿼리 예제 - Amazon Athena

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

CTAS 쿼리 예제

다음 예제를 사용하여 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, TEXTFILEJSON 스토리지 형식의 경우 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://my_athena_results/my_orc_stas_table/', format = 'ORC') AS SELECT * FROM old_table;
예제: 분할되지 않은 테이블 생성

다음 예제에서는 분할되지 않은 테이블을 생성합니다. 테이블 데이터가 다른 형식으로 저장됩니다. 이러한 예제 중 일부에서는 외부 위치를 지정합니다.

다음 예제에서는 결과를 텍스트 파일로 저장하는 CTAS 쿼리를 생성합니다.

CREATE TABLE ctas_csv_unpartitioned WITH ( format = 'TEXTFILE', external_location = 's3://my_athena_results/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://my_athena_results/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://my_athena_results/ctas_avro_unpartitioned/') AS SELECT key1, name1, comment1 FROM table1;
예제: 분할된 테이블 생성

다음 예제에서는 partitioned_byWITH 절의 기타 속성을 사용하여 다른 스토리지 형식으로 분할된 테이블에 대한 CREATE TABLE AS SELECT 쿼리를 보여줍니다. 구문은 CTAS 테이블 속성 단원을 참조하세요. 분할할 열 선택에 대한 자세한 정보는 Athena에서 파티셔닝 및 버킷팅 단원을 참조하세요.

참고

SELECT 문의 열 목록 끝에 파티션 열을 나열합니다. 둘 이상의 열을 기준으로 분할할 수 있으며 최대 100개의 고유한 파티션과 버킷 조합을 가질 수 있습니다. 예를 들어 버킷이 지정되지 않은 경우 100개의 파티션을 가질 수 있습니다.

CREATE TABLE ctas_csv_partitioned WITH ( format = 'TEXTFILE', external_location = 's3://my_athena_results/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://my_athena_results/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 테이블 속성 단원을 참조하세요.

버킷팅할 열 선택에 대한 자세한 정보는 Athena에서 파티셔닝 및 버킷팅 단원을 참조하세요.

CREATE TABLE ctas_avro_bucketed WITH ( format = 'AVRO', external_location = 's3://my_athena_results/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 테이블을 생성합니다. 파일은 table1dt 열을 사용하여 월별로 분할됩니다. 이 예에서는 테이블의 모든 브랜치에 기본적으로 10개의 스냅샷이 보존되도록 테이블의 보존 속성을 업데이트합니다. 지난 7일 이내의 스냅샷도 유지됩니다. Athena에서 Iceberg 테이블 속성에 대한 자세한 내용은 테이블 속성 섹션을 참조하세요.

CREATE TABLE ctas_iceberg_parquet WITH (table_type = 'ICEBERG', format = 'PARQUET', location = 's3://my_athena_results/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://my_athena_results/ctas_iceberg_avro/', is_external = false, table_type = 'ICEBERG', partitioning = ARRAY['key1']) AS SELECT key1, name1, date FROM table1;