

# Iceberg 테이블 생성
<a name="querying-iceberg-creating-tables"></a>

Athena에서 사용할 Iceberg 테이블을 생성하려면 이 페이지에서 설명하는 `CREATE TABLE` 문을 사용하거나 AWS Glue 크롤러를 사용할 수 있습니다.

## CREATE TABLE 문 사용
<a name="querying-iceberg-creating-tables-query-editor"></a>

Athena는 Iceberg v2 테이블을 생성합니다. v1과 v2 테이블의 차이점은 Apache Iceberg 설명서의 [Format version changes](https://iceberg.apache.org/spec/#appendix-e-format-version-changes)(포맷 버전 변경 사항)을 참조하세요.

Athena `CREATE TABLE`은 데이터가 없는 Iceberg 테이블을 생성합니다. 테이블이 [Iceberg 오픈 소스 Glue 카탈로그](https://iceberg.apache.org/docs/latest/aws/#glue-catalog)를 사용하는 경우 Apache Spark와 같은 외부 시스템에서 직접 테이블을 쿼리할 수 있습니다. 외부 테이블을 만들 필요는 없습니다.

**주의**  
`CREATE EXTERNAL TABLE`을 실행하면 오류 메시지 External keyword not supported for table type ICEBERG가 표시됩니다.

Athena에서 Iceberg 테이블을 생성하려면 다음 구문 요약과 같이 `TBLPROPERTIES` 절에서 `'table_type'` 테이블 속성을 `'ICEBERG'`로 설정하세요.

```
CREATE TABLE
  [db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] )
  [PARTITIONED BY (col_name | transform, ... )]
  LOCATION 's3://amzn-s3-demo-bucket/{{your-folder}}/'
  TBLPROPERTIES ( 'table_type' ='ICEBERG' [, {{property_name}}={{property_value}}] )
```

Iceberg 테이블에서 쿼리할 수 있는 데이터 형식에 대한 자세한 내용은 [Athena에서 Iceberg 테이블에 대해 지원되는 데이터 형식](querying-iceberg-supported-data-types.md) 섹션을 참조하세요.

### 파티션 사용
<a name="querying-iceberg-partitioning"></a>

파티션이 있는 Iceberg 테이블을 생성하려면 `PARTITIONED BY` 구문을 사용합니다. 분할에 사용되는 열은 열 선언에서 먼저 지정해야 합니다. `PARTITIONED BY` 절 내에서는 열 유형을 포함하지 않아야 합니다. `CREATE TABLE` 구문에 [파티션 변환](https://iceberg.apache.org/spec/#partition-transforms)을 정의할 수도 있습니다. 분할을 위해 여러 열을 지정하려면 다음 예와 같이 열을 쉼표(`,`)로 구분합니다.

```
CREATE TABLE iceberg_table (id bigint, data string, category string)
  PARTITIONED BY (category, bucket(16, id))
  LOCATION 's3://amzn-s3-demo-bucket/{{your-folder}}/'
  TBLPROPERTIES ( 'table_type' = 'ICEBERG' )
```

다음 표에서는 사용 가능한 파티션 변환 함수를 보여줍니다.


****  

| 함수 | 설명 | 지원되는 유형 | 
| --- | --- | --- | 
| year(ts) | 연도별 파티션 | date, timestamp | 
| month(ts) | 월별 파티션 | date, timestamp | 
| day(ts)  | 일별 파티션 | date, timestamp | 
| hour(ts) | 시간별 파티션 | timestamp | 
| bucket({{N}}, col) | 해시된 값 모드(Mod) {{N}}개 버킷별 파티션 Hive 테이블의 해시 버킷팅과 같은 개념입니다. | int, long, decimal, date, timestamp, string, binary  | 
| truncate({{L}}, col) | {{L}}로 잘린 값별 파티션 | int, long, decimal, string | 

Athena는 Iceberg의 숨겨진 분할을 지원합니다. 자세한 내용은 Apache Iceberg 설명서의 [Iceberg의 숨겨진 분할](https://iceberg.apache.org/docs/latest/partitioning/#icebergs-hidden-partitioning)(Iceberg's hidden partitioning)을 참조하세요.

### 테이블 속성 지정
<a name="querying-iceberg-table-properties"></a>

이 섹션에서는 `CREATE TABLE` 문의 `TBLPROPERTIES` 절에 키-값 페어로 지정할 수 있는 테이블 속성에 대해 설명합니다. Athena는 Iceberg 테이블을 만들거나 변경하기 위해 테이블 속성에 미리 정의된 키-값 페어의 목록만 허용합니다. 다음 테이블에서는 지정할 수 있는 테이블 속성을 보여줍니다. 압축 옵션에 대한 자세한 내용은 이 문서의 [Iceberg 테이블 최적화](querying-iceberg-data-optimization.md)를 참조하세요. Athena가 특정 오픈 소스 테이블 구성 속성을 지원하도록 하려면 [athena-feedback@amazon.com](mailto:athena-feedback@amazon.com)으로 피드백을 보내세요.

***format***


****  

|  |  | 
| --- |--- |
| 설명 | 파일 데이터 형식 | 
| 허용되는 속성 값 | 지원되는 파일 형식 및 압축 조합은 Athena 엔진 버전에 따라 다릅니다. 자세한 내용은 [Iceberg 테이블 압축 사용](compression-support-iceberg.md) 섹션을 참조하세요. | 
| 기본값 | parquet | 

***write\_compression***


****  

|  |  | 
| --- |--- |
| 설명 | 파일 압축 코덱 | 
| 허용되는 속성 값 | 지원되는 파일 형식 및 압축 조합은 Athena 엔진 버전에 따라 다릅니다. 자세한 내용은 [Iceberg 테이블 압축 사용](compression-support-iceberg.md) 섹션을 참조하세요. | 
| 기본값 | 기본 쓰기 압축은 Athena 엔진 버전에 따라 다릅니다. 자세한 내용은 [Iceberg 테이블 압축 사용](compression-support-iceberg.md) 섹션을 참조하세요. | 

***optimize\_rewrite\_data\_file\_threshold***


****  

|  |  | 
| --- |--- |
| 설명 | 데이터 최적화별 구성입니다. 최적화가 필요한 데이터 파일이 주어진 임계값보다 적으면 파일이 재작성되지 않습니다. 이를 통해 더 많은 데이터 파일을 누적하여 대상 크기에 더 가까운 파일을 생성하고 비용 절감을 위해 불필요한 계산을 건너뛸 수 있습니다. | 
| 허용되는 속성 값 | 양수. 50 미만이어야 합니다. | 
| 기본값 | 5 | 

***optimize\_rewrite\_delete\_file\_threshold***


****  

|  |  | 
| --- |--- |
| 설명 | 데이터 최적화별 구성입니다. 데이터 파일과 연관된 삭제 파일이 임계값보다 적으면 데이터 파일이 재작성되지 않습니다. 이를 통해 비용 절감을 위해 각 데이터 파일에 대해 더 많은 삭제 파일을 누적할 수 있습니다. | 
| 허용되는 속성 값 | 양수. 50 미만이어야 합니다. | 
| 기본값 | 2 | 

***vacuum\_min\_snapshots\_to\_keep***


****  

|  |  | 
| --- |--- |
| 설명 | 테이블의 기본 브랜치에 유지할 최소 스냅샷 수입니다.<br />이 값은 `vacuum_max_snapshot_age_seconds` 속성보다 우선합니다. 남은 최소 스냅샷이 `vacuum_max_snapshot_age_seconds`에서 지정한 수명보다 오래된 경우 스냅샷이 보관되고 `vacuum_max_snapshot_age_seconds`의 값은 무시됩니다. | 
| 허용되는 속성 값 | 양수. | 
| 기본값 | 1 | 

***vacuum\_max\_snapshot\_age\_seconds***


****  

|  |  | 
| --- |--- |
| 설명 | 기본 브랜치에 유지할 스냅샷의 최대 수명입니다. vacuum\_min\_snapshots\_to\_keep에서 지정한 남은 최소 스냅샷이 지정된 수명보다 오래된 경우 이 값은 무시됩니다. 이 테이블 동작 속성은 Apache Iceberg 구성의 history.expire.max-snapshot-age-ms 속성에 해당합니다. | 
| 허용되는 속성 값 | 양수. | 
| 기본값 | 432000초(5일) | 

**vacuum\_max\_metadata\_files\_to\_keep****


****  

|  |  | 
| --- |--- |
| 설명 | 테이블의 기본 브랜치에 유지할 최대 이전 메타데이터 파일 수입니다. | 
| 허용되는 속성 값 | 양수. | 
| 기본값 | 100 | 

***write\_data\_path\_enabled***


****  

|  |  | 
| --- |--- |
| 설명 | 이 옵션을 true로 설정하면 Iceberg 테이블이 더 이상 사용되지 않는 write.object-storage.path 속성 대신 write.data.path 속성을 사용하여 생성됩니다. 더 이상 사용되지 않는 속성을 지원하지 않는 Iceberg 1.9.0 이상 버전과의 호환성을 보장하려면 이 옵션을 사용하세요. | 
| 허용되는 속성 값 | true, false | 
| 기본값 | false | 

### CREATE TABLE 문 예제
<a name="querying-iceberg-example-create-table-statement"></a>

다음 예에서는 3개의 열이 있는 Iceberg 테이블을 생성합니다.

```
CREATE TABLE iceberg_table (
  id int,
  data string,
  category string) 
PARTITIONED BY (category, bucket(16,id)) 
LOCATION 's3://amzn-s3-demo-bucket/{{iceberg-folder}}' 
TBLPROPERTIES (
  'table_type'='ICEBERG',
  'format'='parquet',
  'write_compression'='snappy',
  'optimize_rewrite_delete_file_threshold'='10'
)
```

## CREATE TABLE AS SELECT(CTAS) 사용
<a name="querying-iceberg-creating-tables-ctas"></a>

`CREATE TABLE AS` 문을 사용하여 Iceberg 테이블을 생성하는 방법에 대한 자세한 내용은 [CREATE TABLE AS](create-table-as.md)를 참조하세요. 특히 [CTAS 테이블 속성](create-table-as.md#ctas-table-properties) 섹션에 주의하세요.

## AWS Glue 크롤러 사용
<a name="querying-iceberg-creating-tables-crawler"></a>

AWS Glue 크롤러를 사용하여 Iceberg 테이블을 AWS Glue Data Catalog에 자동으로 등록할 수 있습니다. 다른 Iceberg 카탈로그에서 마이그레이션하려는 경우 AWS Glue 크롤러를 생성 및 예약하고 Iceberg 테이블이 위치한 Amazon S3 경로를 제공할 수 있습니다. AWS Glue 크롤러가 통과할 수 있는 Amazon S3 경로의 최대 깊이를 지정할 수 있습니다. AWS Glue 크롤러를 예약한 후 실행할 때마다 크롤러가 스키마 정보를 추출하고 스키마 변경 내용으로 AWS Glue Data Catalog를 업데이트합니다. AWS Glue 크롤러는 스냅샷 간 스키마 병합을 지원하고 AWS Glue Data Catalog의 최신 메타데이터 파일 위치를 업데이트합니다. 자세한 내용은 [Data Catalog and crawlers in AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html)를 참조하세요.