

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 支援的分割區投影類型
<a name="partition-projection-supported-types"></a>

資料表可以具有 `enum`、`integer`、`date,` 或 `injected` 分割區資料欄類型的任意組合。

## 列舉類型
<a name="partition-projection-enum-type"></a>

將 `enum`類型用於值為列舉集合成員的分割區資料欄 （例如，機場代碼 或 AWS 區域)。

在資料表中定義分割區屬性，如下所示：


****  

| 屬性名稱 | 範例值 | Description | 
| --- | --- | --- | 
| projection.{{columnName}}.type | `enum` | 必要。用於資料欄 {{columnName}} 的投影類型。該值必須是 enum (不區分大小寫) 以表示使用列舉類型。允許開頭和結尾空格。 | 
| projection.{{columnName}}.values | `A,B,C,D,E,F,G,Unknown` | 必要. 用於資料欄 {{columnName}} 之以逗號分隔的列舉分割區值清單。任何空格都會被視為列舉值的一部分。 | 

**注意**  
建議的最佳實務是將 `enum` 型分割區投影的使用限制成幾十個或以下。雖然`enum`投影沒有特定限制，但 gzip 壓縮時，資料表中繼資料的總大小不得超過約 1 MB AWS Glue 的限制。請注意，您資料表的主要部分會共用此限制，例如資料欄名稱、位置、儲存格式等。如果您發現自己在 `enum` 投影中使用幾十個以上的唯一 ID，請考慮使用替代方法，例如歸納為代理欄位中較少數的唯一數值。您可以透過取捨基數的方式，控制 `enum` 欄位中唯一數值的數量。

## 整數類型
<a name="partition-projection-integer-type"></a>

對於其可能值會被解譯為定義範圍內整數的分割區資料欄，請使用整數類型。投影整數資料欄目前限制為帶正負號的 Java 長整數範圍 (-263 至 263-1，含)。


****  

| 屬性名稱 | 範例值 | Description | 
| --- | --- | --- | 
| projection.{{columnName}}.type | `integer` | 必要。用於資料欄 {{columnName}} 的投影類型。該值必須是 integer (不區分大小寫) 以表示使用整數類型。允許開頭和結尾空格。 | 
| projection.{{columnName}}.range | `0,10`<br />`-1,8675309`<br />`0001,9999` | 必要. 以逗號分隔的雙元素清單，提供資料欄 {{columnName}} 上的查詢要傳回的最小和最大範圍值。請注意，值必須以逗號分隔，而非連字號。這些值包含在內，可以是負的，也可以以零開頭。允許開頭和結尾空格。 | 
| projection.{{columnName}}.interval | `1`<br />`5` | 選用。正整數，指定用於資料欄 {{columnName}} 之連續分割區值之間的間隔。例如，range 值 "1,3" 具有 "1" 的 interval 值，會產生 1、2 和 3 的值。range 值相同但 interval 值為 "2" 會產生 1 和 3 的值，略過 2。允許開頭和結尾空格。預設為 1。 | 
| projection.{{columnName}}.digits | `1`<br />`5` | 選用。正整數，指定用於資料欄 {{columnName}} 之分割區值最終表示法中要包含的位數。例如，range 值 "1,3" 具有 "1" 的 digits 值，會產生 1、2 和 3 的值。range 值相同但 digits 值為 "2" 會產生 01、02 和 03 的值。允許開頭和結尾空格。預設值是非靜態位數，且不以零開頭。 | 

## 日期類型
<a name="partition-projection-date-type"></a>

對於其值會被解譯為定義範圍內之日期 (以及選用的時間) 的分割區資料欄，請使用整數類型。

**重要**  
投影的日期資料欄會在查詢執行期以國際標準時間 (UTC) 產生。


****  

| 屬性名稱 | 範例值 | Description | 
| --- | --- | --- | 
| 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}} 之連續分割區值之間的間隔。例如，`range` 值為 `2017-01,2018-12` 搭配 `interval` 值為 `1` 以及 `interval.unit` 值為 `MONTHS`，會產生值 2017-01、2017-02、2017-03 等。相同的 `range` 值搭配 `interval` 值為 `2` 且 `interval.unit` 值為 `MONTHS`，會產生值 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 個值，然後彙總結果。


****  

| 屬性名稱 | Value | Description | 
| --- | --- | --- | 
| projection.{{columnName}}.type | `injected` | 必要. 用於資料欄 {{columnName}} 的投影類型。僅支援 string 類型。指定的值必須是 injected (不區分大小寫)。允許開頭和結尾空格。 | 

如需詳細資訊，請參閱[何時使用 `injected` 投影類型](partition-projection-dynamic-id-partitioning.md#partition-projection-injection)。