パーティション射影を設定する - Amazon Athena

パーティション射影を設定する

テーブルのプロパティでのパーティション射影のセットアップは、次の 2 つのステップで行います。

  1. 各パーティション列のデータ範囲と関連するパターンを指定するか、カスタムテンプレートを使用します。

  2. テーブルのパーティション射影を有効にします。

注記

パーティション射影プロパティを既存のテーブルに追加する前に、パーティション射影プロパティをセットアップするパーティションの列がテーブルスキーマにすでに存在している必要があります。パーティション列がまだ存在しない場合、既存のテーブルに手動でパーティション列を追加する必要があります。AWS Glue では、この手順を自動的に実行しません。

このセクションでは、AWS Glue にテーブルプロパティを設定する方法について説明します。これらを設定するには、AWS Glue コンソール、Athena CREATE TABLE クエリ、または AWS Glue API オペレーションを使用できます。次の手順は、AWS Glue コンソールでプロパティを設定する方法を示しています。

AWS Glue コンソールを使用してパーティション射影を設定して有効化する
  1. AWS Management Console にサインインし、AWS Glue コンソール (https://console.aws.amazon.com/glue/) を開きます。

  2. [Tables] (テーブル) タブを選択します。

    [Tables] (テーブル) タブでは、既存のテーブルを編集する、または [Add tables] (テーブルの追加) を選択して新しいテーブルを作成できます。テーブルを手動またはクローラで追加する方法については、「AWS Glue デベロッパーガイド」の「AWS Glue コンソールでのテーブルの使用」を参照してください。

  3. テーブルのリストで、編集するテーブルのリンクを選択します。

    AWS Glue コンソールで、編集するテーブルを選択します。
  4. [Actions] (アクション)、[Edit table] (テーブルの編集) の順に選択します。

  5. [Edit table] (テーブルの編集) ページの [Table properties] (テーブルプロパティ) セクションで、パーティション化された列ごとに以下のキーと値のペアを追加します。

    1. [キー] に、projection.columnName.type を追加します。

    2. [] に、サポートされている型 (enumintegerdateinjected) のいずれかを追加します。詳細については、「パーティション射影用にサポートされている型」(パーティション射影に対応した型) を参照してください。

  6. パーティション射影用にサポートされている型」のガイダンスに従って、設定要件に従って追加のキーと値のペアを追加します。

    次のテーブル設定例では、パーティション射影用に year 列を設定し、返すことのできる値を 2010~2016 の範囲に制限します。

    AWS Glue コンソールのテーブルプロパティでパーティション列のパーティション射影を構成。
  7. キーと値のペアを追加して、パーティション射影を有効にします。[Key] (キー) には projection.enabled と入力し、その [Value] (値) には true と入力します。

    注記

    projection.enabledfalse に設定することで、このテーブルのパーティション射影をいつでも無効にできます。

  8. 完了したら、[Save ] を選択します。

  9. Athena クエリエディタで、テーブル用に設定した列でのクエリをテストします。

    次のクエリ例では、SELECT DISTINCT を使用して、year 列から一意の値を返します。データベースには 1987 年から 2016 年のデータが含まれていますが、projection.year.range プロパティで返される値が 2010 年から 2016 年に制限されています。

    パーティション射影を使用する列のクエリ。
    注記

    projection.enabledtrue に設定したが、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] (table database_name.table_name).

カスタム S3 ストレージの場所を指定する方法

AWS Glue でテーブルプロパティを編集するときは、射影されたパーティションのカスタム Amazon S3 パステンプレートを指定することもできます。カスタムテンプレートは、Athena が通常の .../column=value/... パターンに従わないカスタム Amazon S3 ファイルの場所に、パーティション値を適切にマッピングすることを可能にします。

カスタムテンプレートの使用はオプションです。ただし、カスタムテンプレートを使用する場合、各パーティション列のプレースホルダをテンプレートに含める必要があります。テンプレート化された場所は、パーティション化されたデータファイルがパーティションごとの「フォルダ」に格納されるように、スラッシュで終わる必要があります。

カスタムパーティションの場所のテンプレートを指定するには
  1. 手順に従って、AWS Glue コンソールを使用して、パーティション射影の設定と有効化を行い、次のようにカスタムテンプレートを指定するキーと値のペアを追加します。

    1. [キー] に「storage.location.template」と入力します。

    2. [] で、すべてのパーティション列のプレースホルダを含む場所を指定します。各プレースホルダ (および S3 パス自体) が 1 つのスラッシュで終了していることを確認します。

      次のテンプレート値の例では、パーティション列 abc があるテーブルを想定しています。

      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/
  2. [Apply] を選択します。