

# パーティション射影用にサポートされている型
<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` ベースのパーティション射影の使用は数 10 個以下に制限することが推奨されます。`enum` 射影に固有の制限はありませんが、テーブルのメタデータを gzip に圧縮するときには、合計サイズが約 1MB という AWS Glue の制限を超えることはできません。この制限は、列名、場所、およびストレージ形式といったテーブルの主要部分全体で共有されることに注意してください。`enum` 射影で使用している一意の ID が数十個ある場合は、サロゲートフィールドにバケット化する一意の値を少なくするなど別のアプローチを検討してください。カーディナリティをトレードオフすることで、`enum` フィールドの一意の値の数を制御できます。

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

使用できる値が定義された範囲内の整数として解釈可能なパーティション列には、整数型を使用します。射影整数列は現在、Java 符号付き長整数値 (-263 ～ 263-1。両端の値を含みます) の範囲に制限されています。


****  

| プロパティ名 | 値の例 | 説明 | 
| --- | --- | --- | 
| projection.columnName.type |  `integer`  | 必須。列 columnName に使用する射影型です。整数型の使用を通知するには、値を integer (大文字と小文字を区別しない) にする必要があります。先頭と末尾に空白文字を使用できます。 | 
| projection.columnName.range |  `0,10` `-1,8675309` `0001,9999`  | 必須。columnName 列のクエリによって返される最小値と最大値の範囲を示す 2 要素カンマ区切りリスト。値はハイフンではなくカンマで区切る必要があることに注意してください。両端の値が含まれ、負の値でもかまいません。また、先頭をゼロにすることもできます。先頭と末尾に空白文字を使用できます。 | 
| projection.columnName.interval |  `1` `5`  | オプション。列 columnName の連続するパーティション値の間隔を指定する正の整数。たとえば、range 値が「1,3」で、interval 値が「1」の場合、値 1、2、3 が生成されます。range 値が同じで interval が「2」の場合、値 1 と 3 が生成され、2 はスキップされます。先頭と末尾に空白文字を使用できます。デフォルトは 1 です。 | 
| projection.columnName.digits |  `1` `5`  | オプション。列 columnName のパーティション値の最終表現に含める桁数を指定する正の整数。たとえば、range 値が「1,3」で digits 値が「1」の場合、値 1、2、3 が生成されます。range 値が同じで digits 値が「2」の場合、値 01、02、03 が生成されます。先頭と末尾に空白文字を使用できます。デフォルトでは、静的な桁数も先頭のゼロもありません。 | 

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

定義された範囲内の日付 (オプションで時刻を含む) として解釈可能な値を持つパーティション列には、日付型を使用します。

**重要**  
射影される日付列は、クエリの実行時に協定世界時 (UTC) で生成されます。


****  

| プロパティ名 | 値の例 | 説明 | 
| --- | --- | --- | 
| projection.columnName.type |  `date`  | 必須。列 columnName に使用する射影型です。日付タイプの使用を通知するには、値を date (大文字と小文字を区別しない) にする必要があります。先頭と末尾に空白文字を使用できます。 | 
| projection.columnName.range |  `201701,201812` `01-01-2010,12-31-2018` `NOW-3YEARS,NOW` `201801,NOW+1MONTH`  |  必須。*columnName* 列の最小および最大 `range` 値を提供する、2 要素のカンマ区切りのリストです。両端の値が含まれ、Java の `java.time.*` 日付型と互換性のある任意の形式を使用できます。最小値と最大値のどちらも同じ形式を使用する必要があります。`.format` プロパティで指定する形式は、これらの値に使用される形式にする必要があります。 この列には、次の正規表現パターンの形式で相対日付文字列を含めることもできます。 `\s*NOW\s*(([\+\-])\s*([0-9]+)\s*(YEARS?\|MONTHS?\|WEEKS?\|DAYS?\|HOURS?\|MINUTES?\|SECONDS?)\s*)?` 空白は使用できますが、日付リテラルは日付文字列自体の一部と見なされます。  | 
| projection.columnName.format |  `yyyyMM` `dd-MM-yyyy` `dd-MM-yyyy-HH-mm-ss`  | 必須。Java の日付フォーマット [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) に基づく日付形式文字列。サポートされている任意の Java.time.\$1 型を使用できます。 | 
| projection.columnName.interval |  `1` `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 というように値が生成されます。先頭と末尾に空白文字を使用できます。 指定された日付が単一日または単一月の精度である場合、`interval` はオプションであり、デフォルトではそれぞれ 1 日または 1 か月です。それ以外の場合、`interval` が必要です。  | 
| projection.columnName.interval.unit |  `YEARS` `MONTHS` `WEEKS` `DAYS` `HOURS` `MINUTES` `SECONDS` `MILLIS`  |  [ChronoUnit](https://docs.oracle.com/javase/8/docs/api/java/time/temporal/ChronoUnit.html) のシリアル化された形式を表す時間単位の単語。使用できる値は `YEARS`、`MONTHS`、`WEEKS`、`DAYS`、`HOURS`、`MINUTES`、`SECONDS`、`MILLIS` です。これらの値の大文字と小文字は区別されません。 指定された日付が単一日または単一月の精度である場合、`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)」を参照してください。