Amazon Athena でのパーティション射影 - Amazon Athena

Amazon Athena でのパーティション射影

Athena では、高度にパーティション分割されたテーブルのクエリ処理を高速化し、パーティション管理を自動化するためにパーティション射影を使用することができます。

パーティション射影では、パーティション値と場所は、AWS Glue Data Catalog のようなリポジトリから読み取るのではなく、設定から計算されます。多くの場合、インメモリオペレーションはリモートオペレーションよりも高速であるため、パーティション射影は高度にパーティション分割されたテーブルに対するクエリの実行時間を短縮できます。クエリおよび基盤となるデータの特定の特性によっては、パーティション射影によって、パーティションメタデータの取得時に制限されているクエリのクエリ実行時間が大幅に短縮されます。

パーティション化されたテーブルのプルーニングと射影

パーティションプルーニングは、メタデータを収集し、クエリに適用されるパーティションのみに「プルーニング」します。多くの場合、これによってクエリが高速化されます。Athena は、パーティション射影用に設定されたテーブルなどのパーティション列があるすべてのテーブルに対してパーティションプルーニングを使用します。

通常、クエリを処理する場合、Athena はパーティションプルーニングを実行する前に AWS Glue Data Catalog に対して GetPartitions 呼び出しを行います。テーブルに多数のパーティションがある場合、GetPartitions を使用すると、パフォーマンスに悪影響が及ぶ可能性があります。これを回避するには、パーティション射影を使用します。パーティション射影は、Athena が GetPartitions の呼び出しを回避できるようにします。パーティション射影設定は、Athena が独自にパーティションを構築するために必要なすべての情報を Athena に提供するからです。

パーティション射影の使用

パーティション射影を使用するには、AWS Glue Data Catalog または 外部 Hive メタストアのテーブルプロパティで、各パーティション列のパーティション値と射影型の範囲を指定します。テーブル上のこれらのカスタムプロパティは、Athena がテーブルでクエリを実行するときに、どのパーティションパターンを期待すべきかを把握できるようにします。クエリの実行中、Athena は、この情報を使用して、パーティション値を射影します。AWS Glue Data Catalog または外部 Hive メタストアから取得するのではありません。これにより、クエリの実行時間が短縮されるだけでなく、Athena、AWS Glue、または外部の Hive メタストアでパーティションを手動で作成する必要がなくなるため、パーティション管理も自動化されます。

重要

テーブルでパーティション射影を有効にすると、AWS Glue Data Catalog または Hive メタストア内のテーブルに登録されているパーティションメタデータが Athena によりすべて無視されます。

ユースケース

パーティション射影が役立つシナリオには、次のようなものがあります。

  • 高度にパーティション化されたテーブルに対するクエリが、思ったほどすぐに完了しない。

  • データに新しい日付または時刻パーティションが作成されたとき、定期的にパーティションをテーブルに追加する。パーティション射影で、新しいデータが到着したときに使用できる相対日付範囲を設定している。

  • Amazon S3 に高度にパーティション分割されたデータがある。データは、AWS Glue Data Catalog または Hive メタストア内のモデルに対して実用的ではなく、クエリがそのごく一部のみを読み取る。

射影可能なパーティション構造

パーティション射影は、パーティションが次のような予測可能なパターン (ただし、これに限りません) に従う場合に最も簡単に設定できます。

  • 整数[1, 2, 3, 4, ..., 1000] または [0500, 0550, 0600, ..., 2500] などの整数の連続的なシーケンス。

  • 日付[20200101, 20200102, ..., 20201231] または [1-1-2020 00:00:00, 1-1-2020 01:00:00, ..., 12-31-2020 23:00:00] などの日付や日時の連続的なシーケンス。

  • 列挙値 – 空港コードや AWS リージョンなど、列挙値の有限集合。

  • AWS サービスログ – AWS のサービスログは通常、AWS Glue で指定できるために Athena がパーティション射影に使用できるパーティションスキームを持つ既知の構造になっています。例については、「Amazon Kinesis Data Firehose の例」を参照してください。

パーティションパステンプレートのカスタマイズ

デフォルトで、Athena はフォーム s3://<bucket>/<table-root>/partition-col-1=<partition-col-1-val>/partition-col-2=<partition-col-2-val>/ を使用してパーティションの場所を構築しますが、データの編成が異なる場合、Athena はこのパステンプレートをカスタマイズするためのメカニズムを提供します。この手順については、「カスタム S3 ストレージの場所の指定」を参照してください。

考慮事項と制約事項

以下の考慮事項に注意してください。

  • パーティション射影により、AWS Glue または外部 Hive メタストアでパーティションを手動で指定する必要がなくなります。

  • テーブルでパーティション射影を有効にすると、そのテーブルについては、Athena は AWS Glue Data Catalog 内または外部 Hive メタストア内のパーティションメタデータを無視します。

  • 射影されたパーティションが Amazon S3 に存在しない場合でも、Athena はそのパーティションを射影します。Athena はエラーをスローし、データを返しません。ただし、空のパーティションが多すぎる場合、従来の AWS Glue パーティションに比べてパフォーマンスが低下する可能性があります。射影パーティションの半分以上が空の場合は、従来のパーティションを使用することをお勧めします。

  • パーティション射影に定義された範囲境界を超える値のクエリは、エラーを返しません。その代わりに、クエリが実行されても行は返されません。例えば、2020 年に開始される時間関連データがあり、'projection.timestamp.range'='2020/01/01,NOW' として定義されている場合、SELECT * FROM table-name WHERE timestamp = '2019/02/02' のようなクエリは正常に完了しますが、行は返されません。

  • パーティション射影は、テーブルが Athena を通じてクエリされる場合以外は使用できません。同じテーブルが Amazon Redshift Spectrum または Amazon EMR などの別のサービスを通じて読み取られる場合は、標準のパーティションメタデータが使用されます。

  • パーティション射影は DML 限定の機能であるため、SHOW PARTITIONS は、Athena によって射影されていても、AWS Glue カタログまたは外部の Hive メタストアには登録されていないパーティションをリストしません。

  • Athena は、パーティションの射影の設定としてビューのテーブルプロパティを使用しません。この制限を回避するには、ビューが参照するテーブルのテーブルプロパティでパーティション射影を構成して有効にします。

Video

以下の動画は、パーティション投影を使用して Athena でのクエリのパフォーマンスを向上させる方法を紹介するものです。