Athena でデータカタログビューを使用する - Amazon Athena

Athena でデータカタログビューを使用する

Amazon Athena でデータカタログビューを作成するには、特別な CREATE VIEW ステートメントが必要です。それらのデータカタログビューのクエリでは、従来の SQL SELECT 構文を使用します。データカタログビューは、マルチダイアレクトビュー、または MDV とも呼ばれます。

データカタログビューを作成する

Athena でデータカタログビューを作成するには、次の構文を使用します。

CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW view_name SECURITY DEFINER [ SHOW VIEW JSON ] AS athena-sql-statement
注記

SHOW VIEW JSON オプションはデータカタログビューにのみ適用され、Athena ビューには適用されません。SHOW VIEW JSON オプションを使用すると、入力を検証する「ドライラン」が実行され、検証が成功すると、ビューを表す AWS Glue テーブルオブジェクトの JSON が返されます。実際のビューは作成されません。SHOW VIEW JSON オプションを指定しない場合、検証が完了し、ビューはデータカタログに通常どおり作成されます。

次の例は、Definer ロールのユーザーが orders_by_date データカタログビューを作成する方法を示しています。この例では、Definer ロールが default データベース内の orders テーブルに対するすべての SELECT 権限を持っていることを前提としています。

CREATE PROTECTED MULTI DIALECT VIEW orders_by_date SECURITY DEFINER AS SELECT orderdate, sum(totalprice) AS price FROM orders WHERE order_city = 'SEATTLE' GROUP BY orderdate

構文については、「CREATE PROTECTED MULTI DIALECT VIEW」を参照してください。

データカタログビューをクエリする

ビューが作成されると、Lake Formation 管理者は、データカタログビューに対する Invoker 許可を SELECT プリンシパルに付与できます。その後、Invoker プリンシパルは、ビューが参照する基になるベーステーブルにアクセスしなくてもビューをクエリできます。以下は Invoker クエリの例です。

SELECT * from orders_by_date where price > 5000

考慮事項と制限事項

次に示すデータカタログビューの制限の大部分は、Athena に固有のものです。他のサービスにも適用されるデータカタログビューの他の制限については、Lake Formation ドキュメントを参照してください。

  • データカタログビューは、他のビュー、データベースリソースリンク、テーブルリソースリンクのいずれも参照できません。

  • ビュー定義では最大 10 個のテーブルを参照できます。

  • Lake Formation のテーブルには IAMAllowedPrincipals データレイクのアクセス許可を付与してはいけません。付与されている場合は、Multi Dialect views may only reference tables without IAMAllowedPrincipals permissions というエラーが表示されます。

  • テーブルの Amazon S3 の場所は、Lake Formation データレイクの場所として登録する必要があります。テーブルがこのように登録されていない場合、Multi Dialect views may only reference Lake Formation managed tables というエラーが表示されます。Lake Formation で Amazon S3 の場所を登録する方法については、「AWS Lake Formation Developer Guide」の「Registering an Amazon S3 location」を参照してください。

  • AWS Glue GetTables および SearchTables API コールは、IsRegisteredWithLakeFormation パラメータを更新しません。パラメータの正しい値を表示するには、AWS Glue GetTable API を使用します。詳細については、「AWS Lake Formation Developer Guide」の「GetTables and SearchTables APIs do not update the value for the IsRegisteredWithLakeFormation parameter」を参照してください。

  • DEFINER プリンシパルは IAM ロールのみにできます。

  • DEFINER ロールには、基礎となるテーブルに対する完全な SELECT (付与可能な) 権限が必要です。

  • UNPROTECTED データカタログビューはサポートされていません。

  • ユーザー定義関数 (UDF) は、ビュー定義ではサポートされていません。

  • Athena 統合データソースはデータカタログビューでは使用できません。

  • Data Catalog ビューは外部 Hive メタストアではサポートされていません。

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

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

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

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

アクセス許可

データカタログビューには Lake Formation AdminDefinerInvoker の 3 つのロールが必要です。

  • Lake Formation Admin — すべてのLake Formation 権限を設定するためのアクセス権があります。

  • Definer — データカタログビューを作成します。Definer ロールには、ビュー定義が参照するすべての基礎となるテーブルに対して付与可能で完全な SELECT 権限が必要です。

  • Invoker — データカタログビューにクエリを実行したり、そのメタデータを確認したりできます。クエリの呼び出し元を表示するには、invoker_principal() DML 関数を使用できます。詳細については、「invoker_principal()」を参照してください。

Definer ロールの信頼関係によって、AWS Glue と Lake Formation のサービスプリンシパルに対する sts:AssumeRole アクションを許可する必要があります。詳細については、「AWS Lake Formation デベロッパーガイド」の「Prerequisites for creating views」を参照してください。

Athena にアクセスするための IAM アクセス許可も必要です。詳細については、「Amazon Athena の AWS 管理ポリシー」を参照してください。