パーティション射影用にサポートされている型 - Amazon Athena

パーティション射影用にサポートされている型

テーブルには、enumintegerdate,、または injected パーティション列の型の任意の組み合わせを使用できます。

列挙型

値が列挙セット (空港コードや 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 フィールドの一意の値の数を制御できます。

整数型

使用できる値が定義された範囲内の整数として解釈可能なパーティション列には、整数型を使用します。射影整数列は現在、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 が生成されます。先頭と末尾に空白文字を使用できます。デフォルトでは、静的な桁数も先頭のゼロもありません。

日付型

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

重要

射影される日付列は、クエリの実行時に協定世界時 (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 に基づく日付形式文字列。サポートされている任意の Java.time.* 型を使用できます。
projection.columnName.interval

1

5

columnNameの連続するパーティション値の間隔を指定する正の整数。たとえば、range 値が 2017-01,2018-12interval 値が 1interval.unit 値が MONTHS の場合、2017-01、2017-02、2017-03 というように値が生成されます。range 値が同じで interval 値が 2interval.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 のシリアル化された形式を表す時間単位の単語。使用できる値は YEARSMONTHSWEEKSDAYSHOURSMINUTESSECONDSMILLIS です。これらの値の大文字と小文字は区別されません。

指定された日付が単一日または単一月の精度である場合、interval.unit はオプションであり、デフォルトではそれぞれ 1 日または 1 か月です。それ以外の場合は、interval.unit が必要です。

例 – 月によるパーティション

次のテーブル設定例では、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', ...

挿入型

使用できる値をいくつかの論理範囲内で手動で生成することができないが、クエリの WHERE 句で単一の値として指定されるパーティション列には、挿入型を使用します。

次の点に留意することが重要です。

  • 挿入列ごとにフィルタ式が指定されていない場合、挿入列でのクエリは失敗します。

  • 挿入された列のフィルター式に複数の値を持つクエリは、値が論理和である場合にのみ成功します。

  • string 型の列のみがサポートされています。

プロパティ名 説明
projection.columnName.type

injected

必須。列 columnName に使用する射影型です。string 型のみがサポートされています。値 injected (大文字と小文字は区別されません) を指定する必要があります。先頭と末尾に空白文字を使用できます。

詳細については、「injected 射影タイプを使用すべき場合」を参照してください。