Amazon Athena を使用したパーティション射影 - Amazon Athena

Amazon Athena を使用したパーティション射影

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

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

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

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

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

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

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

重要

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

ユースケース

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

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

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

  • Amazon S3 に高度にパーティション化されたデータがある。データは、AWS Glue データカタログ または 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 データカタログ 内または外部 Hive メタストア内のパーティションメタデータを無視します。

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

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

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

  • Athena のビューは、射影設定プロパティを使用しません。