ビューの使用
Amazon Athena のビューは、物理的なテーブルではなく、論理的なテーブルです。ビューを定義するクエリは、1 つのクエリでビューが参照されるたびに実行されます。
SELECT
クエリからビューを作成でき、今後のクエリでこのビューを参照できます。詳細については、「CREATE VIEW」を参照してください。
トピック
どのようなときにビューを使うのでしょう。
以下の目的でビューを作成できます。
-
データのサブネットをクエリする。例えば、元のテーブルからの列のサブネットでビューを作成して、データのクエリを単純化できます。
-
複数のテーブルを 1 つのクエリに結合する。複数のテーブルを持ち、それらを
UNION ALL
と組み合わせる場合は、その式でビューを作成して、結合テーブルに対するクエリを簡素化できます。 -
既存の基本クエリの複合型を解消して、ユーザーによるクエリの実行を単純化する。基本クエリには、テーブル間の結合、列リストの表現や他の SQL 構文が含まれていることより、その理解とデバッグが困難なことがよくあります。複合型を解消して、クエリを単純化するビューを作成できます。
-
最適化手法を試用して、最適化されたクエリを作成する。たとえば、
WHERE
条件、JOIN
順序、あるいはベストパフォーマンスを示す他の表現の組み合わせを見つけた場合には、これらの句および表現でビューを作成することができます。こうして、アプリケーションはこのビューに対して比較的な単純なクエリを実行できます。後に、元のクエリを最適化するためのより良い方法を見つけた場合には、ビューを再作成するときに、すべてのアプリケーションは最適化された基本クエリを即時に採用します。 -
基礎となるテーブルおよび列の名前を隠し、メンテナンス問題を最小限に抑える (この名前が変更された場合)。この場合、新しい名前を使用して、ビューを再作成します。基礎となるテーブルではなく、このビューを使用するすべてのクエリは、変更なしで実行を続けます。
Athena のビューでサポートされているアクション
Athena は、ビューで次のアクションをサポートします。このコマンドはクエリエディタで実行できます。
Statement | 説明 |
---|---|
CREATE VIEW |
指定する オプションの |
DESCRIBE VIEW |
名前が付けられたビューの列のリストを表示します。これにより、複合型のビューの属性を確認できます。 |
DROP VIEW |
既存のビューを削除します。オプションの |
SHOW CREATE VIEW |
指定するビューを作成する SQL ステートメントを表示します。 |
SHOW VIEWS |
指定するデータベース、あるいは、データベース名を省略する場合の現在のデータベースのビューのリスト。オプションの |
SHOW COLUMNS |
ビュー用のスキーマの列を一覧表示します。 |
ビューの考慮事項
Athena でビューを作成して使用する場合は、次の考慮事項が適用されます。
-
Athena では、Athena コンソール、AWS Glue Data Catalog (移行して使用している場合)、または同じカタログに接続されている Amazon EMR クラスターで実行されている Presto で作成されたビューをプレビューして使用できます。これら以外の方法で作成された Athena ビューをプレビューしたり、ビューに追加したりすることはできません。
-
データカタログで Athena ビューを作成した場合、データカタログはビューをテーブルとして扱います。データカタログでテーブルレベルのきめ細かなアクセスコントロールを使用して、これらのビューへのアクセスを制限できます。
-
Athena は再帰的なビューの実行を妨げ、そのような場合にはエラーメッセージを表示します。再帰的なビューとは、Athena 自体を参照するビュークエリです。
-
Athena は、古いビューを検出するとエラーメッセージを表示します。以下のいずれかが発生すると、古いビューが報告されます。
-
このビューは、存在しないテーブルまたはデータベースを参照します。
-
スキーマまたはメタデータの変更は、参照されるテーブルで行われます。
-
参照されるテーブルは削除され、異なるスキーマまたは設定で再度作成されます。
-
-
ネストされたビューのクエリが有効であり、テーブルおよびデータベースが存在する限り、ネストされたビューを作成して実行できます。
ビューの制限
-
Athena ビューの名前には、アンダースコア
(_)
以外の特殊文字を使用できません。詳細については、「テーブル、データベース、および列の名前」を参照してください。 -
ビューの名前に予約キーワードを使用しないようにします。予約キーワードを使用している場合、ビューでのクエリでは予約キーワードを二重引用符で囲みます。「予約済みキーワード」を参照してください。
-
Athena で作成したビューを外部 Hive メタストア、UDF で使用することはできません。Hive で外部で作成したビューを使用する方法については、「Hive ビューの使用」を参照してください。
-
地理空間関数ではビューを使用できません。
-
Amazon S3 のデータに対するアクセスコントロールを管理するためにビューを使用することはできません。ビューをクエリするには、Amazon S3 に保存されているデータにアクセスするためのアクセス許可が必要です。詳細については、「Athena から Amazon S3 へアクセスする」を参照してください。
-
アカウント間でのビューのクエリは Athena エンジンバージョン 2 と Athena エンジンバージョン 3 の両方でサポートされていますが、クロスアカウント AWS Glue Data Catalog を含むビューを作成することはできません。クロスアカウントデータカタログへのアクセスについては、「AWS Glue データカタログへのクロスアカウントアクセス」を参照してください。
-
Hive または Iceberg の非表示メタデータ列
$bucket
、$file_modified_time
、$file_size
、および$partition
は Athena のビューでサポートされていません。Athena の$path
メタデータ列の使用方法については「Amazon S3 内にあるソースデータのファイルの場所の取得 」を参照してください。
コンソールでビューを操作する
Athena コンソールでは、以下を実行することができます。
-
左側のペインで、テーブルがリストされているすべてのビューを見つける。
-
ビューをフィルタリングする。
-
ビューをプレビューしてそのプロパティを表示し、編集または削除する。
ビューのアクションを表示するには
ビューは、既に作成してある場合にのみコンソールに表示されます。
-
Athena コンソールで [Views] (ビュー) を選択し、ビューを選択して展開し、ビュー内の列を表示します。
-
ビューの横にある 3 つの縦のドットを選択して、ビューのアクションのリストを表示します。
-
アクションを選択して、ビューのプレビュー、クエリエディタへのビュー名の挿入、ビューの削除、ビューのプロパティの表示、またはクエリエディタでのビューの表示と編集を行います。
ビューの作成
Athena コンソールでテンプレートを使用するか、既存のクエリを実行して、ビューを作成できます。
テンプレートを使用してビューを作成するには
-
Athena コンソールで、[Tables and views] (テーブルとビュー) の横にある [Create] (作成) を選択してから、[Create view] (ビューの作成) を選択します。
このアクションにより、編集可能なビューテンプレートがクエリエディタに配置されます。
-
要件に応じてビューテンプレートを編集します。ステートメントにビューの名前を入力するときは、ビュー名にアンダースコア
(_)
以外の特殊文字を含めることはできません。「テーブル、データベース、および列の名前」を参照してください。ビューの名前に 予約済みキーワード を使用しないようにします。ビューの作成の詳細については、「CREATE VIEW」および「ビューの例」を参照してください。
-
[Run] (実行) をクリックしてビューを作成します。Athena コンソールのビューのリストにビューが表示されます。
既存のクエリからビューを作成するには
-
Athena クエリエディタを使用して、既存のクエリを実行します。
-
クエリエディタウィンドウで、[Create] (作成) を選択してから、[View from query] (クエリから表示する) を選択します。
-
[Create View] (ビューの作成) ダイアログボックスにビュー名を入力し、[Create] (作成) を選択します。ビュー名にはアンダースコア
(_)
以外の特殊文字は使用できません。「テーブル、データベース、および列の名前」を参照してください。ビューの名前に 予約済みキーワード を使用しないようにします。Athena はコンソール内のビューのリストにビューを追加し、クエリエディタのビューの
CREATE VIEW
ステートメントを表示します。
メモ
-
テーブルの基になるテーブルを削除してからそのビューの実行を試みると、Athena がエラーメッセージを表示します。
-
ネストされたビューを作成することができます。これは、既存のビューの上にあるビューです。Athena は、それ自体を参照する再帰的なビューの実行を妨げます。
ビューの例
ビュークエリの構文を表示するには、SHOW CREATE VIEW を使用します。
例 1
次の 2 つのテーブルを考えてみます。2 つの列 (employees
と id
) がある name
テーブルと 2 つの列 (salaries
と id
) がある salary
テーブルです。
この例では、name_salary
という名前のビューを SELECT
テーブル および employees
テーブルから給料にマッピングされた ID のリストを取得する salaries
クエリとして作成します。
CREATE VIEW name_salary AS SELECT employees.name, salaries.salary FROM employees, salaries WHERE employees.id = salaries.id
例 2
次の例では、view1
という名前のビューを作成して、複合型のクエリ構文を非表示にします。
このビューは 2 つのテーブル (table1
および table2
) の上部で実行され、各テーブルは異なる SELECT
クエリです。このビューは、table1
からの列を選択し、結果を table2
に結合します。この結合は、両方のテーブルにある a
列に基づいています。
CREATE VIEW view1 AS WITH table1 AS ( SELECT a, MAX(b) AS the_max FROM x GROUP BY a ), table2 AS ( SELECT a, AVG(d) AS the_avg FROM y GROUP BY a) SELECT table1.a, table1.the_max, table2.the_avg FROM table1 JOIN table2 ON table1.a = table2.a;
フェデレーティッドビューの詳細については、「フェデレーションされたビューのクエリ」を参照してください。