Athena のパーティション射影(Partition Projection)を理解するためにイメージ図を書いた
コーヒーが好きな emi です。
S3 に格納したデータを Athena のパーティション射影(Partition Projection)で必要な部分のみ抽出する操作が必要なシーンは多くあると思います。私も最近よく使っているのですが、うまく説明するのが難しいなと思ったのでイメージ図を書いてみました。
パーティション(Partition)とは
「パーティション」とは、データを分割して管理する方法のことです。
データが増えてくると、すべてを一つの場所にまとめて管理するのが難しくなり、処理が遅くなってしまいます。そのため、データを日付やユーザー ID などの条件に基づいて複数の小さな「パーティション」に分割します。
こうすると、特定の条件に合ったデータだけをすばやく検索することができ、処理が効率的になります。
例えば S3 のパスでファイルをパーティションとして分割し、特定のパーティションだけをクエリに使うことで効率的にデータを取得できます。
以下のように日付でパーティション分割し、特定の日付(以下図では 2023~2024年)に絞って処理クエリを実行することで、S3 全体をフルスキャンすることなく必要な処理だけを実行できます。
射影(Projection)とは
データベースの世界では、特定の列のデータのみを抽出することを「射影」と言います。
表全体を扱うのではなく、特定の列や特定の部分だけを取り出します。
パーティション射影(Partition Projection)とは
Athena では、日付やユーザー ID など特定のパーティションキーを使ってクエリを効率的に絞り込むことが可能で、これを「パーティション射影」と呼びます。
パーティションを自動的に生成・管理し、クエリ時に効率よくデータを絞り込むことで、S3 上の大量のデータから必要な部分だけを動的に取り出すことができ、クエリのパフォーマンスが向上します。また、従来は手動で管理していたパーティションの定義を自動化できるため、運用の手間が軽減されます。
例えば以下のように S3 バケットに日付でプレフィックス(フォルダとも)が分かれているとします。
年月日以下のプレフィックスは日に日に自動で増えていくので、これらの構造定義を毎回 Athena に設定するのは大変です。
そこでパーティション射影(Partition Projection)を使うと、Athena 側で年月日以下の構造を自動で認識し、パーティションキーで特定の日付のデータにのみクエリを実行することが可能になります。
詳しいクエリ内容の説明は省きますが、上記図では partition_date
というパーティションキーを設定してパーティション射影(Partition Projection)を有効化しています。
内部的には、Athena は Glue Data Catalog のテーブルプロパティを使用してパーティション値と場所を計算しています。
実際の使い方イメージ
実際のパーティション射影(Partition Projection)の使い方は以下ブログが参考になりますので参照ください。
おわりに
Athena のパーティション射影(Partition Projection)についてイメージ図を書いてみました。
どなたかのお役に立てば幸いです。
参考