「AWS Partition Projections Athenaクエリのパフォーマンス向上」

「AWS Partition Projectionsを使用したAthenaクエリのパフォーマンス向上」

現在のデータ駆動型の風景では、組織はますますAWS Data Lakeなどの堅牢なソリューションに頼るようになっており、構造化および非構造化の巨大な量のデータを一元化することができます。AWS Data Lakeは、スケーラブルかつ安全なリポジトリであり、ビジネスはデータをそのままの形式で保存でき、多様な分析や機械学習のタスクを容易に行うことができます。この巨大な情報の問い合わせには、Amazon Athenaが人気のあるツールの1つです。これはサーバーレスで対話型のクエリサービスであり、標準のSQLを使用してAmazon S3で直接データを分析することが容易になります。しかし、データの量が指数関数的に増えるにつれて、パフォーマンスの課題が生じることがあります。大規模なデータセット、複雑なクエリ、最適でないテーブル構造により、クエリの時間やコストが増加し、これらのソリューションが約束する利点を損なう可能性があります。この記事では、パーティションプロジェクションのパフォーマンスの課題に対処するための具体的な詳細について探求します。

Amazon Athenaのパーティションプロジェクションの高度な概念に入る前に、パーティションの基礎的な考え方、特にデータレイクの文脈でその重要性を理解することが重要です。

AWS Data Lakeにおけるパーティションとは何ですか?

データの格納と検索の領域では、パーティションとは1つ以上の列の値に基づいてテーブルのデータを分割することを指します。それをデータの膨大な本棚(データ)をジャンル(列の値)に基づいて異なるセクション(パーティション)に整理することと考えてください。これにより、特定の本(データ)を探す場合、全体の本棚全体ではなく、関連するセクション(パーティション)だけを検索する必要があります。

データレイクでは、パーティションは通常、データファイルを含むディレクトリです。各ディレクトリは、パーティション列の特定の値または値の範囲に対応しています。

パーティションの重要性はなぜですか?

効率性:パーティションがない場合、広範なデータセットのクエリにはすべてのファイルをスキャンする必要があり、時間がかかり、コストがかかります。パーティションがある場合、関連するディレクトリのみがスキャンされるため、処理するデータの量が大幅に減少します。

  • コストの削減:AWSなどのクラウド環境では、スキャンしたデータの量に対して支払いを行います。パーティションにより、コストを大幅に削減することができます。
  • スケーラビリティ:データが増えるにつれて、パーティションの重要性も増します。データレイクがより多くのデータで膨張していても、取得時間を管理可能な状態に保ちます。

パーティションの課題

パーティションには多くの利点がありますが、課題もあります:

  • メンテナンス:新しいデータが入ってくると、新しいパーティションを作成したり、既存のパーティションを更新する必要がある場合があります。
  • 最適なパーティショニング:パーティションが少なすぎると、まだ不要なデータをスキャンしてしまう可能性があります。逆に、パーティションが多すぎると、多数の小さなファイルが生成され、パフォーマンスが低下する可能性もあります。

データレイクにおけるパーティションの基本的な理解を持った上で、今度はAthenaでのパーティションプロジェクションの概念と、それがこれらの課題のいくつかを解決する方法についてより詳しく掘り下げましょう。

パーティションプロジェクションとは何ですか?

パーティションプルーニングは、不要なデータを除外し、クエリに特化したメタデータのみを選択する技術です。この方法は、クエリを高速化することがよくあります。Athenaは、パーティションされた列を持つすべてのテーブルに対してこの戦略を採用しています。通常のシナリオでは、Athenaがクエリを処理する際には、最初にAWS Glue Data Catalogとの通信を行い、GetPartitionsリクエストを行った後にパーティションプルーニングを実行します。しかし、テーブルに大量のパーティションがある場合、この呼び出しにより処理が遅くなる可能性があります。

高いパーティション化されたテーブルでこの高価な操作を回避するために、AWSはパーティションプロジェクションの技術を導入しました。パーティションプロジェクションでは、AthenaはGetPartitions呼び出しを行う必要がありません。代わりに、パーティションプロジェクションで提供される設定により、Athenaは自身でパーティションを作成するために必要なすべての情報を備えています。

パーティションプロジェクションの利点

  • クエリのパフォーマンスの向上:スキャンするデータ量を減らすことにより、クエリの実行速度が向上し、効率的になります。
  • コスト削減:Athenaでは、スキャンしたデータに対して支払いが発生します。データのスキャン量を減らすことで、コストを最小限に抑えることができます。
  • データ管理の簡素化:仮想パーティションにより、新しいデータが到着した際の継続的なパーティションメンテナンス作業(新しいパーティションの追加など)が不要になります。

パーティション投影の設定

パーティション投影を利用するには:

1. プロジェクションタイプの定義: Athenaは、`integer`,`enum`,`date`,`injected`などの複数のプロジェクションタイプをサポートしています。それぞれのタイプは、整数や日付などの範囲を生成するなど、特定のユースケースに使用されます。

2. プロジェクションの設定: これは、プロジェクションのルールやパターンを定義することを含みます。例えば、日付のプロジェクションの場合、開始日、終了日、および日付の形式を指定します。

3. テーブルプロパティの変更: プロジェクションが定義されたら、Athenaでテーブルプロパティを変更してこれらのプロジェクションを使用します。

使用例

データがデータレイクに格納され、customer_idとdtでパーティション化されているとします。データはカラム形式のparquet形式で格納されます。

s3://my-bucket/data/customer_id/yyyy-MM-dd/*.parquet

この例では、1年分、つまり365日と100人の顧客のデータがあるとします。これにより、データレイク上には365*100=36500のパーティションが生成されます。

このテーブル上でパーティション投影を有効にした場合と無効にした場合のクエリのベンチマークを行います。

5人の顧客の全年のレコード数を取得します。

クエリ

パーティション投影なし

パーティション投影を有効にしていない場合、クエリの合計実行時間は7.3秒です。そのうち、78%を計画に、20%をクエリの実行に費やしています。

クエリ結果

計画: 78% = 5.6秒実行: 20% = 1.46秒

パーティション投影あり

では、このテーブルでパーティション投影を有効にしましょう。 “partition.*”で終わるすべてのテーブルプロパティを確認してください。この例では、dtとcustomer_idの2つのパーティションがあります。日付型のプロジェクションとenum型のプロジェクションを使用します。enumタイプでは、最新のレコードがある場合にテーブルプロパティを更新するための自動化ジョブを作成できます。

クエリ結果

計画: 1.69秒実行: 0.6秒

結果

クエリのパフォーマンスが約70%改善されていることがわかります。これは、この機能により、Athenaがパーティションの値をプロジェクトできるため、AWS glueへのリモート呼び出しを回避できるためです。

制限事項と考慮事項

パーティション投影は強力ですが、すべての問題を解決するわけではありません。

  • 複雑なセットアップ: プロジェクションを設定するには、データとそのフォローするパターンについての深い理解が必要です。
  • 常に最適ではないことがある: 予測可能なパターンに従わないデータセットや不規則な更新のあるデータセットの場合、従来のパーティショニングがより適している場合があります。

結論

AWSがAthenaでのパーティション投影の導入を行ったことは、ユーザーエクスペリエンスと効率の向上に対する彼らの取り組みを示しています。この機能を活用することで、組織は最小の構成変更でより高速なクエリのパフォーマンスを実現することができます。すべてのツールと同様に、その強みと制限を理解することがその全ての潜在能力を引き出す鍵です。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more