

# 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\$1principal()](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)」を参照してください。

# データカタログビューを管理する
<a name="views-glue-managing"></a>

DDL コマンドを使用して、データカタログビューを更新および管理できます。

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

`Lake Formation` 管理者または定義者は、`ALTER VIEW UPDATE DIALECT` 構文を使用してビュー定義を更新できます。次の例では、ビュー定義を変更して、`orders` テーブルではなく `returns` テーブルから列を選択します。

```
ALTER VIEW orders_by_date UPDATE DIALECT
AS
SELECT return_date, sum(totalprice) AS price
FROM returns
WHERE order_city = 'SEATTLE'
GROUP BY orderdate
```

## AWS Glue Data Catalog ビューでサポートされている DDL アクション
<a name="views-glue-supported-actions"></a>

Athena は、AWS Glue Data Catalog ビューで次のアクションをサポートします。


| ステートメント | 説明 | 
| --- | --- | 
| [ALTER VIEW DIALECT](alter-view-dialect.md) |  エンジンダイアレクトを追加するか、既存のエンジンダイアレクトを更新または削除して、データカタログビューを更新します。  | 
| [CREATE PROTECTED MULTI DIALECT VIEW](create-view.md#create-protected-multi-dialect-view) |  指定された `SELECT` クエリからデータカタログビューを作成します。詳細については、「[CREATE PROTECTED MULTI DIALECT VIEW](create-view.md#create-protected-multi-dialect-view)」を参照してください。 オプションの `OR REPLACE` 句は、既存のビューを更新して置き換えます。  | 
| [DESCRIBE VIEW](describe-view.md) |  名前が付けられたビューの列のリストを表示します。これにより、複合型のビューの属性を確認できます。  | 
| [DROP VIEW](drop-view.md) |  既存のビューを削除します。オプションの `IF EXISTS` 句は、ビューが存在しない場合に、エラーを抑制します。  | 
| [SHOW CREATE VIEW](show-create-view.md) |  指定するビューを作成する SQL ステートメントを表示します。  | 
| [SHOW VIEWS](show-views.md) |  指定するデータベース、あるいは、データベース名を省略する場合の現在のデータベースのビューのリスト。オプションの `LIKE` 句を正規表現で使用して、ビュー名のリストを制限します。コンソールの左ペインでビューのリストを表示することもできます。  | 
| [SHOW COLUMNS](show-columns.md) |  ビュー用のスキーマの列を一覧表示します。  | 