Athena でデータカタログビューを使用する
Amazon Athena でデータカタログビューを作成するには、特別な CREATE VIEW
ステートメントが必要です。それらのデータカタログビューのクエリでは、従来の SQL SELECT
構文を使用します。
データカタログビューを作成する
Athena でデータカタログビューを作成するには、次の構文を使用します。
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW
view_name
SECURITY DEFINER [ SHOW VIEW JSON ] ASathena-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 に固有のものです。Athena と他のサービスの両方に適用されるデータカタログビューの制限については、Lake Formation ドキュメントを参照してください。
-
データカタログビューは、他のビュー、データベースリソースリンク、テーブルリソースリンクのいずれも参照できません。
-
ビュー定義では最大 10 個のテーブルを参照できます。
-
基礎となるテーブルは、Lake Formation に登録されている必要があります。
-
DEFINER
プリンシパルは IAM ロールのみにできます。 -
DEFINER
ロールには、基礎となるテーブルに対する完全なSELECT
(付与可能な) 権限が必要です。 -
UNPROTECTED
データカタログビューはサポートされていません。 -
ユーザー定義関数 (UDF) は、ビュー定義ではサポートされていません。
-
Athena 統合データソースはデータカタログビューでは使用できません。
-
Data Catalog ビューは外部 Hive メタストアではサポートされていません。
-
Athena は、古いビューを検出するとエラーメッセージを表示します。以下のいずれかが発生すると、古いビューが報告されます。
-
このビューは、存在しないテーブルまたはデータベースを参照します。
-
スキーマまたはメタデータの変更は、参照されるテーブルで行われます。
-
参照されるテーブルは削除され、異なるスキーマまたは設定で再度作成されます。
-
アクセス許可
データカタログビューには Lake Formation Admin
、Definer
、Invoker
の 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 管理ポリシー」を参照してください。