Athena でデータカタログビューを使用する
Amazon Athena でデータカタログビューを作成するには、特別な CREATE VIEW
ステートメントが必要です。それらのデータカタログビューのクエリでは、従来の SQL SELECT
構文を使用します。データカタログビューは、マルチダイアレクトビュー、または MDV とも呼ばれます。
データカタログビューを作成する
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 に固有のものです。他のサービスにも適用されるデータカタログビューの他の制限については、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 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 管理ポリシー」を参照してください。