パーティション射影を設定する
テーブルのプロパティでのパーティション射影のセットアップは、次の 2 つのステップで行います。
-
各パーティション列のデータ範囲と関連するパターンを指定するか、カスタムテンプレートを使用します。
-
テーブルのパーティション射影を有効にします。
注記
パーティション射影プロパティを既存のテーブルに追加する前に、パーティション射影プロパティをセットアップするパーティションの列がテーブルスキーマにすでに存在している必要があります。パーティション列がまだ存在しない場合、既存のテーブルに手動でパーティション列を追加する必要があります。AWS Glue では、この手順を自動的に実行しません。
このセクションでは、AWS Glue にテーブルプロパティを設定する方法について説明します。これらを設定するには、AWS Glue コンソール、Athena CREATE TABLE クエリ、または AWS Glue API オペレーションを使用できます。次の手順は、AWS Glue コンソールでプロパティを設定する方法を示しています。
AWS Glue コンソールを使用してパーティション射影を設定して有効化する
AWS Management Console にサインインし、AWS Glue コンソール (https://console.aws.amazon.com/glue/
) を開きます。 -
[Tables] (テーブル) タブを選択します。
[Tables] (テーブル) タブでは、既存のテーブルを編集する、または [Add tables] (テーブルの追加) を選択して新しいテーブルを作成できます。テーブルを手動またはクローラで追加する方法については、「AWS Glue デベロッパーガイド」の「AWS Glue コンソールでのテーブルの使用」を参照してください。
-
テーブルのリストで、編集するテーブルのリンクを選択します。
-
[Actions] (アクション)、[Edit table] (テーブルの編集) の順に選択します。
-
[Edit table] (テーブルの編集) ページの [Table properties] (テーブルプロパティ) セクションで、パーティション化された列ごとに以下のキーと値のペアを追加します。
-
[キー] に、
projection.
を追加します。columnName
.type -
[値] に、サポートされている型 (
enum
、integer
、date
、injected
) のいずれかを追加します。詳細については、「パーティション射影用にサポートされている型」(パーティション射影に対応した型) を参照してください。
-
-
「パーティション射影用にサポートされている型」のガイダンスに従って、設定要件に従って追加のキーと値のペアを追加します。
次のテーブル設定例では、パーティション射影用に
year
列を設定し、返すことのできる値を 2010~2016 の範囲に制限します。 -
キーと値のペアを追加して、パーティション射影を有効にします。[Key] (キー) には
projection.enabled
と入力し、その [Value] (値) にはtrue
と入力します。注記
projection.enabled
をfalse
に設定することで、このテーブルのパーティション射影をいつでも無効にできます。 -
完了したら、[Save ] を選択します。
-
Athena クエリエディタで、テーブル用に設定した列でのクエリをテストします。
次のクエリ例では、
SELECT DISTINCT
を使用して、year
列から一意の値を返します。データベースには 1987 年から 2016 年のデータが含まれていますが、projection.year.range
プロパティで返される値が 2010 年から 2016 年に制限されています。注記
projection.enabled
をtrue
に設定したが、1 つ以上のパーティション列を設定できない場合は、次のようなエラーメッセージが表示されます。HIVE_METASTORE_ERROR: Table
.database_name
.table_name
is configured for partition projection, but the following partition columns are missing projection configuration: [column_name
] (tabledatabase_name
.table_name
)
カスタム S3 ストレージの場所を指定する方法
AWS Glue でテーブルプロパティを編集するときは、射影されたパーティションのカスタム Amazon S3 パステンプレートを指定することもできます。カスタムテンプレートは、Athena が通常の .../column=value/...
パターンに従わないカスタム Amazon S3 ファイルの場所に、パーティション値を適切にマッピングすることを可能にします。
カスタムテンプレートの使用はオプションです。ただし、カスタムテンプレートを使用する場合、各パーティション列のプレースホルダをテンプレートに含める必要があります。テンプレート化された場所は、パーティション化されたデータファイルがパーティションごとの「フォルダ」に格納されるように、スラッシュで終わる必要があります。
カスタムパーティションの場所のテンプレートを指定するには
-
手順に従って、AWS Glue コンソールを使用して、パーティション射影の設定と有効化を行い、次のようにカスタムテンプレートを指定するキーと値のペアを追加します。
-
[キー] に「
storage.location.template
」と入力します。 -
[値] で、すべてのパーティション列のプレースホルダを含む場所を指定します。各プレースホルダ (および S3 パス自体) が 1 つのスラッシュで終了していることを確認します。
次のテンプレート値の例では、パーティション列
a
、b
、c
があるテーブルを想定しています。s3://amzn-s3-demo-bucket/table_root/a=${a}/${b}/some_static_subdirectory/${c}/
s3://amzn-s3-demo-bucket/table_root/c=${c}/${b}/some_static_subdirectory/${a}/${b}/${c}/${c}/
同じテーブルの場合、次のテンプレート値の例は、列
c
のプレースホルダが含まれていないため無効です。s3://amzn-s3-demo-bucket/table_root/a=${a}/${b}/some_static_subdirectory/
-
-
[Apply] を選択します。