

# Athena でデータカタログビューを使用する
<a name="views-glue"></a>

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

## データカタログビューを作成する
<a name="views-glue-creating-a-data-catalog-view"></a>

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](create-view.md#create-protected-multi-dialect-view)」を参照してください。

## データカタログビューをクエリする
<a name="views-glue-querying-a-data-catalog-view"></a>

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

```
SELECT * from orders_by_date where price > 5000
```

## 考慮事項と制限事項
<a name="views-glue-limitations"></a>

次に示すデータカタログビューの制限の大部分は、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](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html)」を参照してください。
+ AWS Glue [GetTables](https://docs.aws.amazon.com/glue/latest/webapi/API_GetTables.html) および [SearchTables](https://docs.aws.amazon.com/glue/latest/webapi/API_SearchTables.html) API コールは、`IsRegisteredWithLakeFormation` パラメータを更新しません。パラメータの正しい値を表示するには、AWS Glue [GetTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetTable.html) API を使用します。詳細については、「*AWS Lake Formation Developer Guide*」の「[GetTables and SearchTables APIs do not update the value for the IsRegisteredWithLakeFormation parameter](https://docs.aws.amazon.com/lake-formation/latest/dg/limitations.html#issue-GetTables-value)」を参照してください。
+ `DEFINER` プリンシパルは IAM ロールのみにできます。
+ `DEFINER` ロールには、基礎となるテーブルに対する完全な `SELECT` (付与可能な) 権限が必要です。
+ `UNPROTECTED` データカタログビューはサポートされていません。
+ ユーザー定義関数 (UDF) は、ビュー定義ではサポートされていません。
+ Athena 統合データソースはデータカタログビューでは使用できません。
+ Data Catalog ビューは外部 Hive メタストアではサポートされていません。
+ Athena は、古いビューを検出するとエラーメッセージを表示します。以下のいずれかが発生すると、古いビューが報告されます。
  + このビューは、存在しないテーブルまたはデータベースを参照します。
  + スキーマまたはメタデータの変更は、参照されるテーブルで行われます。
  + 参照されるテーブルは削除され、異なるスキーマまたは設定で再度作成されます。

## アクセス許可
<a name="views-glue-permissions"></a>

データカタログビューには `Lake Formation Admin`、`Definer`、`Invoker` の 3 つのロールが必要です。
+ **`Lake Formation Admin`** — すべてのLake Formation 権限を設定するためのアクセス権があります。
+ **`Definer`** — データカタログビューを作成します。`Definer` ロールには、ビュー定義が参照するすべての基礎となるテーブルに対して付与可能で完全な `SELECT` 権限が必要です。
+ **`Invoker`** — データカタログビューにクエリを実行したり、そのメタデータを確認したりできます。クエリの呼び出し元を表示するには、`invoker_principal()` DML 関数を使用できます。詳細については、「[invoker\_principal()](functions-env3.md#functions-env3-invoker-principal)」を参照してください。

`Definer` ロールの信頼関係によって、AWS Glue と Lake Formation のサービスプリンシパルに対する `sts:AssumeRole` アクションを許可する必要があります。詳細については、「AWS Lake Formation デベロッパーガイド」の「[Prerequisites for creating views](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html#views-prereqs)」を参照してください。

Athena にアクセスするための IAM アクセス許可も必要です。詳細については、「[AWSAmazon Athena の 管理ポリシー](security-iam-awsmanpol.md)」を参照してください。