Amazon Athena のビューは、物理的なテーブルではなく、論理的なテーブルです。ビューを定義するクエリは、1 つのクエリでビューが参照されるたびに実行されます。SELECT
クエリからビューを作成でき、今後のクエリでこのビューを参照できます。
Athena では、Athena ビューと AWS Glue Data Catalog ビューという 2 種類のビューを使用できます。
Athena ビューを使用すべき場合
Athena ビューを作成すると、次のようなことが可能になります:
-
データのサブセットをクエリする – 例えば、元のテーブルの列のサブセットを含むビューを作成して、データのクエリを簡素化できます。
-
テーブルを組み合わせる – ビューを使用して、複数のテーブルを組み合わせて 1 つのクエリにすることができます。複数のテーブルを持ち、それらを
UNION ALL
と組み合わせる場合は、その式でビューを作成して、結合テーブルに対するクエリを簡素化できます。 -
複雑さを非表示にする – ビューを使用して、既存の基本クエリの複雑さを非表示にし、ユーザーが実行するクエリを簡素化します。基本クエリには、テーブル間の結合、列リストの表現や他の SQL 構文が含まれていることより、その理解とデバッグが困難なことがよくあります。複合型を解消して、クエリを単純化するビューを作成できます。
-
クエリを最適化する – 最適化されたクエリを作成するために、ビューを使用して最適化手法を実験できます。たとえば、
WHERE
条件、JOIN
順序、あるいはベストパフォーマンスを示す他の表現の組み合わせを見つけた場合には、これらの句および表現でビューを作成することができます。こうして、アプリケーションはこのビューに対して比較的な単純なクエリを実行できます。後に、元のクエリを最適化するためのより良い方法を見つけた場合には、ビューを再作成するときに、すべてのアプリケーションは最適化された基本クエリを即時に採用します。 -
基になる名前を非表示にする – ビューを使用して基になるテーブル名と列名を非表示にし、名前が変更された場合のメンテナンスの問題を最小限に抑えることができます。名前が変更された場合は、単に新しい名前を使用してビューを再作成します。テーブルではなく、このビューを使用するクエリは、変更なしで実行を直接続けます。
詳細については、「Athena ビューを使用する」を参照してください。
AWS Glue Data Catalog ビューを使用すべき場合
Amazon Athena や Amazon Redshift などの AWS のサービス 全体で 1 つの共通ビューが必要な場合は AWS Glue Data Catalog ビューを使用します。データカタログビューでは、アクセス許可はビューをクエリするユーザーではなく、ビューを作成したユーザーによって定義されます。この権限の付与方法は、definer セマンティクスと呼ばれます。
以下のユースケースは、データカタログビューの使用例です。
-
アクセスコントロールの強化 — ユーザーが必要とするアクセス許可のレベルに基づいてデータアクセスを制限するビューを作成します。例えば、データカタログビューを使用して、人事 (HR) 部門に属さない従業員が個人を特定できる情報を表示できないようにすることができます。
-
完全なレコードを確保 — データカタログビューに特定のフィルターを適用することで、データカタログビューのデータレコードを常に完全な状態にすることができます。
-
セキュリティの強化 — データカタログビューでビューを作成するには、ビューを作成するクエリ定義をそのまま維持する必要があります。これにより、データカタログビューは悪意のある行為者からの SQL コマンドの影響を受けにくくなります。
-
基礎となるテーブルへのアクセスを防ぐ — Definer セマンティクスにより、ユーザーは基礎となるテーブルを利用できるようにしなくてもビューにアクセスすることができます。ビューを定義したユーザーのみがテーブルにアクセスする必要があります。
データカタログビュー定義は AWS Glue Data Catalog に保存されます。つまり、AWS Lake Formation を使用して、リソース許可、列付与、またはタグベースのアクセスコントロールを通じてアクセスを許可できます。Lake Formation でのアクセス権の付与と取り消しについての詳細は、「AWS Lake Formation デベロッパーガイド」の「Data Catalog リソースに対する許可の付与と取り消し」を参照してください。
詳細については、「Athena でデータカタログビューを使用する」を参照してください。