

# CTAS 쿼리 예제
<a name="ctas-examples"></a>

다음 예제를 사용하여 CTAS 쿼리를 생성합니다. CTAS 구문에 대한 자세한 정보는 [CREATE TABLE AS](create-table-as.md) 단원을 참조하세요.

이 섹션의 내용: 
+  [Example: Duplicating a table by selecting all columns](#ctas-example-dupe-table) 
+  [Example: Selecting specific columns from one or more tables](#ctas-example-specify-columns) 
+  [Example: Creating an empty copy of an existing table](#ctas-example-empty-table) 
+  [Example: Specifying data storage and compression formats](#ctas-example-compression) 
+  [Example: Writing query results to a different format](#ctas-example-format) 
+  [Example: Creating unpartitioned tables](#ctas-example-unpartitioned) 
+  [Example: Creating partitioned tables](#ctas-example-partitioned) 
+  [Example: Creating bucketed and partitioned tables](#ctas-example-bucketed) 
+  [Example: Creating an Iceberg table with Parquet data](#ctas-example-iceberg-parquet) 
+  [Example: Creating an Iceberg table with Avro data](#ctas-example-iceberg-avro) 
+  [Example: Creating an S3 table using CTAS](#ctas-example-s3-table) 

**Example 예제: 모든 열을 선택하여 테이블 복제**  
다음 예제에서는 테이블의 모든 열을 복사해 테이블을 만듭니다.  

```
CREATE TABLE new_table AS 
SELECT * 
FROM old_table;
```
동일한 예제의 다음 변형에서 `SELECT` 문에는 `WHERE` 절이 포함되어 있습니다. 이 경우, 쿼리는 테이블에서 `WHERE` 절을 충족하는 행만 선택합니다.  

```
CREATE TABLE new_table AS 
SELECT * 
FROM old_table 
WHERE condition;
```

**Example 예제: 하나 이상의 테이블에서 특정 열 선택**  
다음 예제에서는 다른 테이블의 열 세트에 대해 실행할 새 쿼리를 생성합니다.  

```
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;
```

**Example 예제: 기존 테이블의 빈 복사본 생성**  
다음 예제에서는 `WITH NO DATA`를 사용해 비어 있지만 원본 테이블과 스키마가 동일한 새 테이블을 생성합니다.  

```
CREATE TABLE new_table 
AS SELECT * 
FROM old_table
WITH NO DATA;
```

**Example 예제: 데이터 스토리지 및 압축 형식 지정**  
CTAS를 사용하면 한 스토리지 형식의 소스 테이블을 사용하여 스토리지 형식이 다른 또 다른 테이블을 만들 수 있습니다.  
`format` 속성을 사용하여 `ORC`, `PARQUET`, `AVRO`, `JSON` 또는 `TEXTFILE`을 새 테이블의 스토리지 형식으로 지정합니다.  
`PARQUET`, `ORC`, `TEXTFILE` 및 `JSON` 스토리지 형식의 경우 `write_compression` 속성을 사용하여 새 테이블의 데이터에 대한 압축 형식을 지정합니다. 각 파일 형식에서 지원하는 압축 유형에 대한 자세한 내용은 [Athena에서 압축 사용](compression-formats.md) 섹션을 참조하세요.  
다음 예제에서는 `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 ;
```

**Example 예제: 쿼리 결과를 다른 형식으로 쓰기**  
다음 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;
```

**Example 예제: 분할되지 않은 테이블 생성**  
다음 예제에서는 분할되지 않은 테이블을 생성합니다. 테이블 데이터가 다른 형식으로 저장됩니다. 이러한 예제 중 일부에서는 외부 위치를 지정합니다.  
다음 예제에서는 결과를 텍스트 파일로 저장하는 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;
```

**Example 예제: 분할된 테이블 생성**  
다음 예제에서는 `partitioned_by` 및 `WITH` 절의 기타 속성을 사용하여 다른 스토리지 형식으로 분할된 테이블에 대한 `CREATE TABLE AS SELECT` 쿼리를 보여줍니다. 구문은 [CTAS 테이블 속성](create-table-as.md#ctas-table-properties) 단원을 참조하세요. 분할할 열 선택에 대한 자세한 정보는 [분할 및 버킷팅 사용](ctas-partitioning-and-bucketing.md) 단원을 참조하세요.  
`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;
```

**Example 예제: 버킷팅 및 분할된 테이블 생성**  
다음 예제는 Amazon S3에 쿼리 결과를 저장하기 위해 분할 및 버킷팅을 둘 다 사용하는 `CREATE TABLE AS SELECT` 쿼리를 보여줍니다. 테이블 결과가 다른 열을 기준으로 분할 및 버킷팅됩니다. Athena는 최대 100개의 고유한 파티션 및 버킷 조합을 지원합니다. 예를 들어 5개의 버킷이 있는 테이블을 생성하는 경우 각각 5개의 버킷이 있는 20개의 파티션이 지원됩니다. 구문은 [CTAS 테이블 속성](create-table-as.md#ctas-table-properties) 단원을 참조하세요.  
버킷팅할 열 선택에 대한 자세한 정보는 [분할 및 버킷팅 사용](ctas-partitioning-and-bucketing.md) 단원을 참조하세요.  

```
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;
```

**Example 예: Parquet 데이터를 사용하여 Iceberg 테이블 생성**  
다음 예에서는 Parquet 데이터 파일을 사용하여 Iceberg 테이블을 생성합니다. 파일은 `table1`의 `dt` 열을 사용하여 월별로 분할됩니다. 이 예에서는 테이블의 모든 브랜치에 기본적으로 10개의 스냅샷이 보존되도록 테이블의 보존 속성을 업데이트합니다. 지난 7일 이내의 스냅샷도 유지됩니다. Athena에서 Iceberg 테이블 속성에 대한 자세한 내용은 [테이블 속성 지정](querying-iceberg-creating-tables.md#querying-iceberg-table-properties) 섹션을 참조하세요.  

```
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;
```

**Example 예: 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;
```

**Example 예: CTAS를 사용하여 S3 Table 생성**  
다음 예제에서는 CTAS를 사용하여 새 S3 Table을 생성합니다. 위치 속성은 생략되며 `table_type`의 기본값은 `ICEBERG`입니다.  

```
CREATE TABLE "s3tablescatalog/amzn-s3-demo-bucket"."namespace"."s3-table-name"
WITH (
    format = 'PARQUET'
)
AS SELECT *
FROM source_table;
```
일반 Iceberg 테이블과 동일한 구문으로 파티셔닝, 버킷팅과 같은 다른 모든 Iceberg 테이블 속성을 지정할 수 있습니다.