

# 파티션 프로젝션에 지원되는 형식
<a name="partition-projection-supported-types"></a>

테이블에는 `enum`, `integer`, `date,` 또는 `injected` 파티션 열 형식의 조합이 있을 수 있습니다.

## 열거형 형식
<a name="partition-projection-enum-type"></a>

값이 열거형 집합의 멤버(예: 공항 코드 또는 AWS 리전)인 파티션 열의 `enum` 형식을 사용합니다.

테이블에서 다음과 같이 파티션 속성을 정의합니다.


****  

| 속성 이름 | 예제 값 | 설명 | 
| --- | --- | --- | 
| projection.{{columnName}}.type | `enum` | 필수 사항입니다. {{columnName}} 열에 사용할 프로젝션 형식입니다. 열거형 형식의 사용을 나타내기 위해서는 값이 enum이어야 합니다(대소문자 구분 안 함). 선행 및 후행 공백을 사용할 수 있습니다. | 
| projection.{{columnName}}.values | `A,B,C,D,E,F,G,Unknown` | 필수 사항입니다. {{ColumnName}} 열에 대한 열거형 파티션 값의 쉼표로 구분된 목록입니다. 공백은 열거형 값의 일부로 간주됩니다. | 

**참고**  
가장 좋은 방법은 `enum` 기반 파티션 프로젝션 사용을 수십 개 이하로 제한하는 것입니다 `enum` 프로젝션에 대해 구체적인 제한은 없지만 테이블의 메타데이터 총 크기는 gzip 압축 시 약 1MB의 AWS Glue 제한을 초과할 수 없습니다. 이 제한은 열 이름, 위치, 스토리지 형식 등과 같은 테이블의 주요 부분에서 공유됩니다. 자신이 `enum` 프로젝션에 수십 개 이상의 고유 ID를 사용하고 있다면 대리 필드에서 더 적은 수의 고유 값으로 버킷팅하는 등의 대안적 방법을 고려하는 것이 좋습니다. 카디널리티를 포기함으로써 `enum` 필드에서 고유 값의 수를 제어할 수 있습니다.

## 정수 형식
<a name="partition-projection-integer-type"></a>

가능한 값을 정의된 범위 내의 정수로 해석할 수 있는 파티션 열에 대해 정수 형식을 사용합니다. 프로젝션 정수 열은 현재 Java 부호 있는 long(-263\~263-1 포함)의 범위로 제한됩니다.


****  

| 속성 이름 | 예제 값 | 설명 | 
| --- | --- | --- | 
| projection.{{columnName}}.type | `integer` | 필수 사항입니다. {{columnName}} 열에 사용할 프로젝션 형식입니다. 정수 형식의 사용을 나타내기 위해서는 값이 integer여야 합니다(대소문자 구분 안 함). 선행 및 후행 공백을 사용할 수 있습니다. | 
| projection.{{columnName}}.range | `0,10`<br />`-1,8675309`<br />`0001,9999` | 필수 사항입니다. {{columnName}} 열에 대한 쿼리에서 반환할 최소 및 최대 범위 값을 제공하는 두 요소의 쉼표로 구분된 목록입니다. 값을 하이픈이 아닌 쉼표로 구분해야 합니다. 이 값은 포함되며 음수일 수 있으며 선행 0을 포함할 수 있습니다. 선행 및 후행 공백을 사용할 수 있습니다. | 
| projection.{{columnName}}.interval | `1`<br />`5` | 선택 사항. {{columnName}} 열에 대한 연속 파티션 값 사이의 간격을 지정하는 양의 정수입니다. 예를 들어 interval 값이 “1"인 range 값 “1,3"은 1, 2, 3 값을 생성합니다. interval 값이 “2"인 동일한 range 값은 값 1과 3을 생성하며 2를 건너뜁니다. 선행 및 후행 공백을 사용할 수 있습니다. 기본값은 1입니다. | 
| projection.{{columnName}}.digits | `1`<br />`5` | 선택 사항. {{columnName}} 열에 대한 파티션 값의 최종 표시에 포함할 자릿수를 지정하는 양의 정수입니다. 예를 들어 digits 값이 “1"인 range 값 “1,3"은 1, 2, 3 값을 생성합니다. digits 값이 “2"인 동일한 range 값은 01, 02 및 03 값을 생성합니다. 선행 및 후행 공백을 사용할 수 있습니다. 기본값은 고정 자릿수와 선행 0이 없습니다. | 

## 날짜 형식
<a name="partition-projection-date-type"></a>

정의된 범위 내에서 값을 날짜(선택적 시간 포함)로 해석할 수 있는 파티션 열에 대해 날짜 형식을 사용합니다.

**중요**  
프로젝션 날짜 열은 쿼리 실행 시 UTC(협정 세계 표준시)로 생성됩니다.


****  

| 속성 이름 | 예제 값 | 설명 | 
| --- | --- | --- | 
| projection.{{columnName}}.type | `date` | 필수 사항입니다. {{columnName}} 열에 사용할 프로젝션 형식입니다. 날짜 형식의 사용을 나타내기 위해서는 값이 date여야 합니다(대소문자 구분 안 함). 선행 및 후행 공백을 사용할 수 있습니다. | 
| projection.{{columnName}}.range | `201701,201812`<br />`01-01-2010,12-31-2018`<br />`NOW-3YEARS,NOW`<br />`201801,NOW+1MONTH` | 필수 사항입니다. {{columnName}} 열에 대한 최소 및 최대 `range` 값을 제공하는 두 요소의 쉼표로 구분된 목록입니다. 이 값은 포함되며 Java `java.time.*` 날짜 형식과 호환되는 모든 형식을 사용할 수 있습니다. 최소값과 최대값 모두 동일한 형식을 사용해야 합니다. `.format` 특성에 지정된 형식은 이러한 값에 사용되는 형식이어야 합니다.<br />이 열에는 이 정규식 패턴으로 서식이 지정된 상대 날짜 문자열도 포함될 수 있습니다.<br />`\s*NOW\s*(([\+\-])\s*([0-9]+)\s*(YEARS?\|MONTHS?\|WEEKS?\|DAYS?\|HOURS?\|MINUTES?\|SECONDS?)\s*)?`<br />공백은 허용되지만 날짜 리터럴은 날짜 문자열 자체의 일부로 간주됩니다. | 
| projection.{{columnName}}.format | `yyyyMM`<br />`dd-MM-yyyy`<br />`dd-MM-yyyy-HH-mm-ss` | 필수 사항입니다. Java 날짜 형식 [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)를 기반으로 하는 날짜 형식 문자열입니다. 지원되는 모든 Java.time.\* 형식일 수 있습니다. | 
| projection.{{columnName}}.interval | `1`<br />`5` | {{columnName에}} 열에 대한 연속 파티션 값 사이의 간격을 지정하는 양의 정수입니다. 예를 들어 `interval` 값이 `1`이고 `interval.unit` 값이 `MONTHS`인 `range`값 `2017-01,2018-12`는 2017-01, 2017-02, 2017-03 등의 값을 생성합니다. `interval` 값이 `2`이고 `interval.unit` 값이 `MONTHS`인 동일한 `range` 값은 2017-01, 2017-03, 2017-05 등의 값을 생성합니다. 선행 및 후행 공백을 사용할 수 있습니다.<br />제공된 날짜가 하루 또는 한 달 정밀도인 경우 `interval`은 선택 사항이며 기본값은 각각 1일 또는 1개월입니다. 그렇지 않으면 `interval`이 필요합니다. | 
| projection.{{columnName}}.interval.unit | `YEARS`<br />`MONTHS`<br />`WEEKS`<br />`DAYS`<br />`HOURS`<br />`MINUTES`<br />`SECONDS`<br />`MILLIS` | [ChronoUnit](https://docs.oracle.com/javase/8/docs/api/java/time/temporal/ChronoUnit.html)의 직렬화된 형식을 나타내는 시간 단위 단어입니다. 가능한 값은 `YEARS`, `MONTHS`, `WEEKS`, `DAYS`, `HOURS`, `MINUTES`, `SECONDS` 또는 `MILLIS`입니다. 이러한 값은 대/소문자를 구분합니다.<br />제공된 날짜가 하루 또는 한 달 정밀도인 경우 `interval.unit`은 선택 사항이며 기본값은 각각 1일 또는 1개월입니다. 그렇지 않으면 `interval.unit`이 필요합니다. | 

**Example -월별 분할**  
다음 예제 테이블 구성은 2015년부터 현재까지의 데이터를 월별로 분할합니다.  

```
'projection.month.type'='date', 
'projection.month.format'='yyyy-MM', 
'projection.month.interval'='1', 
'projection.month.interval.unit'='MONTHS', 
'projection.month.range'='2015-01,NOW', 
...
```

## 삽입 형식
<a name="partition-projection-injected-type"></a>

일부 논리적 범위 내에서 절차에 따라 생성될 수 없지만 쿼리의 `WHERE` 절에서 단일 값으로 제공되는 가능한 값을 가진 파티션 열에 대해 삽입된 형식을 사용하세요.

다음 사항을 명심해야 합니다.
+ 삽입된 각 열에 대해 필터 식이 제공되지 않으면 삽입된 열에 대한 쿼리가 실패합니다.
+ 주입된 열의 필터 식에 대해 여러 값이 있는 쿼리는 값이 분리된 경우에만 성공합니다.
+ `string` 형식의 열만 지원됩니다.
+ 주입된 파티션 열과 함께 `WHERE IN` 절을 사용하는 경우 `IN` 목록에서 지정할 수 있는 값은 1,000개로 제한됩니다. 주입된 열에 대해 파티션이 1,000개를 초과하는 데이터세트를 쿼리하려면 쿼리를 여러 개의 작은 쿼리로 분할한 후(각각 `WHERE IN` 절에서 최대 1,000개의 값을 보유함) 결과를 집계합니다.


****  

| 속성 이름 | 값 | 설명 | 
| --- | --- | --- | 
| projection.{{columnName}}.type | `injected` | 필수 사항입니다. {{columnName}} 열에 사용할 프로젝션 형식입니다. string 형식만 지원됩니다. 지정된 값은 injected여야 합니다(대소문자 구분 안 함). 선행 및 후행 공백을 사용할 수 있습니다. | 

자세한 내용은 [`injected` 프로젝션 유형을 사용해야 하는 경우](partition-projection-dynamic-id-partitioning.md#partition-projection-injection) 섹션을 참조하세요.