

# AWS Glue での AWS Glue Data Catalog ビューの使用
<a name="catalog-views"></a>

 AWS Glue Data Catalog ではビューを作成および管理できます。これは一般的に AWS Glue Data Catalog ビューと呼ばれます。これらのビューは複数の SQL クエリエンジンをサポートしているため、Amazon Athena、Amazon Redshift、AWS Glue などのさまざまな AWS サービス間で同じビューにアクセスできるため便利です。Apache Iceberg、Apache Hudi、Delta Lake に基づくビューを使用できます。

 データカタログでビューを作成することで、AWS Lake Formation でのリソース許可とタグベースのアクセスコントロールを使用して、データカタログビューへのアクセスを許可できます。このアクセスコントロール方法を使用すれば、ビューの作成時に参照したテーブルへの追加のアクセスを設定する必要はありません。アクセス許可を付与するこの方法は、definer セマンティクスと呼ばれ、これらのビューは definer ビューと呼ばれます。AWS Lake Formation でのアクセスコントロールの詳細は、「AWS Lake Formation デベロッパーガイド」の「[Granting and revoking permissions on Data Catalog resources](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html)」を参照してください。

 データカタログビューは、次のユースケースに役立ちます。
+  **細やかなアクセス制御** – ユーザーが必要とするアクセス許可に基づいてデータアクセスを制限するビューを作成できます。例えば、データカタログのビューを使用して、人事 (HR) 部門に属さない従業員が個人を特定できる情報 (PII) を表示できないようにすることができます。
+  **完全なビュー定義** – データカタログのビューに特定のフィルターを適用することで、ビュー内のデータレコードを常に完全な状態にすることができます。
+  **セキュリティの強化** – ビューの作成に使用するクエリ定義は完全である必要があります。これにより、データカタログのビューが有害なアクターによる SQL コマンドの影響を受けにくくなります。
+  **シンプルなデータ共有** – AWS Lake Formation でのアカウント間データ共有により、データを移動せずに他の AWS アカウントとデータを共有することができます。

## データカタログビューの作成
<a name="catalog-creating-view"></a>

 Spark SQL による AWS CLI および AWS Glue ETL スクリプトを使用して、データカタログビューを作成できます。データカタログビューを作成するための構文には、ビュータイプを `MULTI DIALECT` に、`SECURITY` 述語を `DEFINER` に指定して定義者ビューを示すことが含まれます。

 データカタログビューを作成する SQL ステートメントの例: 

```
CREATE PROTECTED MULTI DIALECT VIEW database_name.catalog_view SECURITY DEFINER
AS SELECT order_date, sum(totalprice) AS price
FROM source_table
GROUP BY order_date;
```

 データカタログビューを作成したら、当該ビューに対する AWS Lake Formation SELECT アクセス許可を持つ IAM ロールを使用して、Amazon Athena、Amazon Redshift、または AWS Glue ETL ジョブなどのサービスからクエリを実行できます。ビューで参照される基盤となるテーブルへのアクセスを許可する必要はありません。

 データカタログビューの作成と設定の詳細については、「AWS Lake Formation デベロッパーガイド」の「[Building AWS Glue Data Catalog views](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html)」を参照してください。

## サポートされているビュー操作
<a name="catalog-supported-view-operations"></a>

 以下のコマンドフラグメントは、データカタログビューを操作するさまざまな方法を示します。

 **CREATE VIEW** 

 データカタログビューを作成します。以下は、既存のテーブルからビューを作成する例です。

```
CREATE PROTECTED MULTI DIALECT VIEW catalog_view 
SECURITY DEFINER AS SELECT * FROM my_catalog.my_database.source_table
```

 **ALTER VIEW** 

 使用可能な構文: 

```
ALTER VIEW view_name [FORCE] ADD DIALECT AS query
ALTER VIEW view_name [FORCE] UPDATE DIALECT AS query
ALTER VIEW view_name DROP DIALECT
```

 `FORCE ADD DIALECT` オプションを使用して、新しいエンジンダイアレクトに従ってスキーマとサブオブジェクトを強制的に更新できます。ただし、これを行うと、他のエンジンダイアレクトの更新にも `FORCE` を使用しないと、クエリエラーが発生する可能性があることに注意してください。サンプルを以下に示します。

```
ALTER VIEW catalog_view FORCE ADD DIALECTAS
SELECT order_date, sum(totalprice) AS priceFROM source_tableGROUP BY orderdate;
```

 以下は、ダイアレクトを更新するためにビューを変更する方法を示します。

```
ALTER VIEW catalog_view UPDATE DIALECT AS
SELECT count(*) FROM my_catalog.my_database.source_table;
```

 **DESCRIBE VIEW** 

 ビューを記述するために使用できる構文: 

 `SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name]` – ユーザーがビューの記述に必要な AWS Glue および AWS Lake Formation のアクセス許可を持っている場合、列を一覧表示できます。列を表示するためのいくつかのサンプルコマンドを以下に示します。

```
SHOW COLUMNS FROM my_database.source_table;    
SHOW COLUMNS IN my_database.source_table;
```

 `DESCRIBE view_name` – ユーザーがビューの記述に必要な AWS Glue および AWS Lake Formation のアクセス許可を持っている場合、列およびメタデータをビュー内で一覧表示できます。

 **DROP VIEW** 

 使用可能な構文: 

```
DROP VIEW [ IF EXISTS ] view_name
```

 次のサンプルは、ビューを削除する前にビューが存在するかどうかをテストする `DROP` ステートメントを示します。

```
DROP VIEW IF EXISTS catalog_view;
```

 `SHOW CREATE VIEW view_name` – 指定したビューを作成する SQL ステートメントを示します。以下は、データカタログビューの作成を示すサンプルです。

```
SHOW CREATE TABLE my_database.catalog_view;CREATE PROTECTED MULTI DIALECT VIEW my_catalog.my_database.catalog_view (
  net_profit,
  customer_id,
  item_id,
  sold_date)
TBLPROPERTIES (
  'transient_lastDdlTime' = '1736267222')
SECURITY DEFINER AS SELECT * FROM
my_database.store_sales_partitioned_lf WHERE customer_id IN (SELECT customer_id from source_table limit 10)
```

 **SHOW VIEWS** 

 通常のビュー、マルチダイアレクトビュー (MDV)、Spark ダイアレクトのない MDV など、カタログ内のすべてのビューを一覧表示します。使用可能な構文は次のとおりです。

```
SHOW VIEWS [{ FROM | IN } database_name] [LIKE regex_pattern]:
```

 ビューを表示するサンプルコマンドを以下に示します。

```
SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';
```

 データカタログビューの作成と設定の詳細については、「AWS Lake Formation デベロッパーガイド」の「[Building AWS Glue Data Catalog views](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html)」を参照してください。

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

 データカタログビューの作成後は、ビューをクエリできるようになります。AWS Glue ジョブで設定された IAM ロールには、データカタログビューに対する Lake Formation **SELECT** アクセス許可が必要です。ビューで参照される基盤となるテーブルへのアクセスを許可する必要はありません。

 すべてをセットアップしたら、ビューをクエリできます。たとえば、次のクエリを実行してビューにアクセスできます。

```
SELECT * from my_database.catalog_view LIMIT 10;
```

## 制限
<a name="catalog-view-limitations"></a>

 データカタログビューを使用する場合は、次の制限を考慮してください。
+  AWS Glue 5.0 以上では、データカタログビューのみを作成できます。
+  Data Catalog ビュー定義者は、ビューによってアクセスされる基盤となるベーステーブルに対する `SELECT` アクセスを持っている必要があります。特定のベーステーブルに定義者ロールに対する Lake Formation フィルターが適用されている場合、データカタログビューの作成は失敗します。
+  ベーステーブルには AWS Lake Formation 内の `IAMAllowedPrincipals` データレイクのアクセス許可を付与してはいけません。付与されている場合は、**Multi Dialect views may only reference tables without IAMAllowedPrincipals permissions** というエラーが表示されます。
+  テーブルの Amazon S3 の場所は、AWS Lake Formation データレイクの場所として登録する必要があります。テーブルが登録されていない場合、エラー `Multi Dialect views may only reference AWS Lake Formation managed tables` が発生します。AWS Lake Formation で Amazon S3 の場所を登録する方法については、「AWS Lake Formation デベロッパーガイド」の「[Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html)」を参照してください。
+  `PROTECTED` データカタログビューのみを作成できます。`UNPROTECTED` ビューはサポートされていません。
+  データカタログビュー定義では別の AWS アカウント内のテーブルを参照することはできません。また、別のリージョンにあるのと同じアカウントのテーブルを参照することはできません。
+  アカウントまたはリージョン間でデータを共有するには、AWS Lake Formation リソースリンクを使用してビュー全体をクロスアカウントおよびクロスリージョンで共有する必要があります。
+  ユーザー定義関数 (UDF) はサポートされていません。
+  データカタログビューで他のビューを参照できません。