ビューの使用 - Amazon Athena

ビューの使用

Amazon Athena のビューは、物理的なテーブルではなく、論理的なテーブルです。ビューを定義するクエリは、1 つのクエリでビューが参照されるたびに実行されます。

SELECT クエリからビューを作成でき、今後のクエリでこのビューを参照できます。詳細については、「CREATE VIEW」を参照してください。

どのようなときにビューを使うのでしょう。

以下の目的でビューを作成できます。

  • データのサブネットをクエリする。たとえば、元のテーブルから列のサブネットがあるテーブルを作成して、データのクエリを単純化できます。

  • 複数のテーブルを 1 つのクエリに結合する。複数のテーブルを持ち、それらを UNION ALLと組み合わせる場合は、その式でビューを作成して、結合テーブルに対するクエリを簡素化できます。

  • 既存の基本クエリの複雑性を解消して、ユーザーによるクエリの実行を単純化する。基本クエリには、テーブル間の結合、列リストの表現や他の SQL 構文が含まれていることより、その理解とデバッグが困難なことがよくあります。複雑性を解消して、クエリを単純化するビューを作成できます。

  • 最適化手法を試用して、最適化されたクエリを作成する。たとえば、WHERE 条件、JOIN 順序、あるいはベストパフォーマンスを示す他の表現の組み合わせを見つけた場合には、これらの句および表現でビューを作成することができます。こうして、アプリケーションはこのビューに対して比較的な単純なクエリを実行できます。後に、元のクエリを最適化するためのより良い方法を見つけた場合には、ビューを再作成するときに、すべてのアプリケーションは最適化された基本クエリを即時に採用します。

  • 基礎となるテーブルおよび列の名前を隠し、メンテナンス問題を最小限に抑える (この名前が変更された場合)。この場合、新しい名前を使用して、ビューを再作成します。基礎となるテーブルではなく、このビューを使用するすべてのクエリは、変更なしで実行を続けます。

Athena のビューでサポートされているアクション

Athena は、ビューで次のアクションをサポートします。このコマンドはクエリエディタで実行できます。

ステートメント 説明
CREATE VIEW

指定する SELECT クエリから新しいビューを作成します。詳細については、「ビューの作成」を参照してください。

オプションの OR REPLACE 句は、既存のビューを更新して置き換えます。

DESCRIBE VIEW

名前が付けられたビューの列のリストを表示します。これにより、複雑なビューの属性を確認できます。

DROP VIEW

既存のビューを削除します。オプションの IF EXISTS 句は、ビューが存在しない場合に、エラーを抑制します。詳細については、「ビューの削除」を参照してください。

SHOW CREATE VIEW

指定するビューを作成する SQL ステートメントを表示します。

SHOW VIEWS

指定するデータベース、あるいは、データベース名を省略する場合の現在のデータベースのビューのリスト。オプションの LIKE 句を正規表現で使用して、ビュー名のリストを制限します。コンソールの左ペインでビューのリストを表示することもできます。

SHOW COLUMNS

ビュー用のスキーマの列を一覧表示します。

ビューの考慮事項

Athena でビューを作成して使用する場合、次の考慮事項が適用されます。

  • Athena で作成されたビューをプレビューして操作できるのは、Athena コンソール、AWS Glue データカタログ (使用するために移行した場合)、同じカタログに接続している Amazon EMR クラスターで実行している Presto を使用する場合です。他の方法で作成された Athena ビューをプレビューあるいは追加することはできません。

  • AWS GlueData Catalog を通じてビューを作成する場合は、PartitionKeys パラメータを指定し、その値を空のリストに設定する必要があります (例: "PartitionKeys":[])。それ以外の場合、ビューは Athena で失敗します。次の例では、"PartitionKeys":[] を使用して Data Catalog から作成されたビューを示します。

    aws glue create-table --database-name mydb --table-input '{ "Name":"test", "TableType": "EXTERNAL_TABLE", "Owner": "hadoop", "StorageDescriptor":{ "Columns":[{ "Name":"a","Type":"string"},{"Name":"b","Type":"string"}], "Location":"s3://xxxxx/Oct2018/25Oct2018/", "InputFormat":"org.apache.hadoop.mapred.TextInputFormat", "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "SerdeInfo":{"SerializationLibrary":"org.apache.hadoop.hive.serde2.OpenCSVSerde", "Parameters":{"separatorChar": "|", "serialization.format": "1"}}},"PartitionKeys":[]}'
  • Data Catalog で Athena ビューを作成した場合、Data Catalog はビューをテーブルとして扱います。テーブルレベルのきめ細かなアクセスコントロールを Data Catalog で使用して、これらのビューへのアクセスを制限できます。

  • Athena は再帰的なビューの実行を回避し、そのような場合にはエラーメッセージを表示します。再帰的なビューとは、自身を参照するビュークエリです。

  • Athena では、古いビューを検出するとエラーメッセージが表示されます。以下のいずれかが発生すると、古いビューがレポートされます。

    • このビューは、存在しないテーブルまたはデータベースを参照します。

    • スキーマまたはメタデータの変更は、参照されるテーブルで行われます。

    • 参照されるテーブルは削除され、異なるスキーマまたは設定で再度作成されます。

  • ネストされたビューのクエリが有効であり、テーブルおよびデータベースが存在する限り、ネストされたビューを作成して実行できます。

ビューの制限

  • Athena のビュー名にはアンダースコア (_) 以外の特殊文字は使用できません。詳細については、「テーブル、データベース、および列の名前」を参照してください。

  • ビューの名前に予約キーワードを使用しないようにします。予約キーワードを使用している場合、ビューでのクエリでは予約キーワードを二重引用符で囲みます。「予約キーワード」を参照してください。

  • フェデレーテッドデータソース、外部 Hive メタストア、UDF でビューを使用することはできません。

  • 地理空間関数ではビューを使用できません。

  • Amazon S3 でビューを使用してデータのアクセスをコントロールすることはできません。ビューをクエリするには、Amazon S3 に保存されているデータにアクセスするためのアクセス権限が必要です。詳細については、「Amazon S3 へのアクセス」を参照してください。

コンソールでビューを操作する

Athena コンソールでは、以下のことができます。

  • 左側のペインでテーブルがリストされているすべてのビューを見つけます。Athena は SHOW VIEWS オペレーションを実行して、このリストを示します。

  • ビューをフィルタリングします。

  • ビューをプレビューしてプロパティを表示し、編集または削除します。

コンソールでビューアクションをリストするには

ビューは既に作成した場合にのみコンソールで表示されます。

  1. Athena コンソールで、[ビュー] を選択してビューを選び、展開します。

    次の例で示すように、ビューには含まれる列も表示されます。

    
                        列を表示するビューの展開のスクリーンショット。
  2. ビューのリストでビューを選択し、コンテキスト (右クリック) メニューを開きます。アクションメニューアイコン (⋮) が選択したビューで強調され、次の例に示すように、アクションのリストが開きます。

    
                        ビューのコンテキストメニューのスクリーンショット。これで、プレビュー、プロパティの表示およびビューの削除ができます。
  3. オプションを選択します。たとえば、[プロパティの表示] には、ビューの名前、Athena で作成されビューのテーブルのデータベースの名前、および作成されたタイムスタンプが表示されます。

ビューの作成

すべての SELECT クエリからビューを作成することができます。

コンソールでビューを作成するには

ビューを作成する前に、データベースを選択してからテーブルを選択します。テーブルで SELECT クエリを実行し、そこからビューを作成します。

  1. Athena コンソールで [ビューの作成] を選択します。

    
                        ビューを作成するボタンを示すスクリーンショット。

    クエリエディタでは、サンプルのビュークエリが表示されます。

  2. サンプルのビュークエリを編集します。テーブル名を指定し、他の構文を追加します。詳細については、「CREATE VIEW」および「ビューの例」を参照してください。

    ビュー名にはアンダースコア (_) 以外の特殊文字は使用できません。「テーブル、データベース、および列の名前」を参照してください。ビューの名前に予約キーワードを使用しないようにします。

  3. ビュークエリを実行し、必要に応じてデバックを行い、保存します。

また、クエリエディタでクエリを作成してから、[クエリからビューを作成] を使用することもできます。


                クエリからビューを作成するボタンを示すスクリーンショット。

無効なビューを実行すると、Athena はエラーメッセージを表示します。

ビューが作成されたテーブルを削除すると、そのビューの実行を試みる場合に Athena はエラーメッセージを表示します。

既存のビューの上部のビューであるネストされたビューを作成することができます。Athena ではそれ自体を参照する、再帰的なビューを実行できません。

ビューの例

ビュークエリの構文を表示するには、SHOW CREATE VIEW を使用します。

例 1

次の 2 つのテーブルを考えてみます。2 つの列 (idname) がある employees テーブルと 2 つの列 (idsalary) がある salaries テーブルです。

この例では、name_salary という名前のビューを employees テーブル および salaries テーブルから給料にマッピングされた ID のリストを取得する SELECT クエリとして作成します。

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 b FROM x GROUP BY a ), table2 AS ( SELECT a, AVG(d) AS d FROM y GROUP BY a) SELECT table1.*, table2.* FROM table1 JOIN table2 ON table1.a = table2.a;

ビューの更新

ビューを作成すると、このビューは左ペインの [ビュー] リストに表示されます。

ビューを編集するには、そのビューを選択してコンテキストメニュー (右クリック) を選んでから、[クエリの表示/編集] を選択します。クエリエディタでビューを編集することもできます。詳細については、「CREATE VIEW」を参照してください。

ビューの削除

ビューを削除するには、そのビューを選択してコンテキストメニュー (右クリック) を選んでから、[ビューの削除] を選択します。詳細については、「DROP VIEW」を参照してください。