

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Athena 中使用 Data Catalog 檢視
<a name="views-glue"></a>

在 Amazon Athena 中建立 Data Catalog 檢視需要特殊的 `CREATE VIEW` 陳述式。進行查詢則使用傳統的 SQL `SELECT` 語法。Data Catalog 檢視也稱為*多方言*檢視或 MDV。

## 建立 Data Catalog 檢視
<a name="views-glue-creating-a-data-catalog-view"></a>

若要在 Athena 中建立 Data Catalog 檢視，請使用下列語法。

```
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW view_name 
SECURITY DEFINER 
[ SHOW VIEW JSON ]
AS athena-sql-statement
```

**注意**  
`SHOW VIEW JSON` 選項僅適用於 Data Catalog 檢視，並且不適用於 Athena 檢視。使用 `SHOW VIEW JSON` 選項會執行可驗證輸入的「試轉」，如果驗證成功，則會傳回將表示檢視的 AWS Glue 資料表物件的 JSON。此舉不會建立實際檢視。如果未指定 `SHOW VIEW JSON` 選項，則會完成驗證，並在 Data Catalog 中如常建立檢視。

下列範例顯示具有 `Definer` 角色的使用者如何建立 `orders_by_date` Data Catalog 檢視。此範例假設 `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)。

## 查詢 Data Catalog 檢視
<a name="views-glue-querying-a-data-catalog-view"></a>

建立檢視之後，`Lake Formation` 管理員可將 Data Catalog 檢視的 `SELECT` 許可授予 `Invoker` 主體。然後，`Invoker` 主體可查詢檢視，而無需存取檢視參考的基礎基本資料表。以下是範例 `Invoker` 查詢。

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

## 考量和限制
<a name="views-glue-limitations"></a>

下列大多數 Data Catalog 檢視限制專用於 Athena。如需 Data Catalog 檢視 (還適用於其他服務) 的其他限制，請參閱 Lake Formation 文件。
+ Data Catalog 檢視無法參考其他檢視、資料庫資源連結或資料表資源連結。
+ 檢視定義中可參考最多 10 個資料表。
+ 資料表不得具有 Lake Formation 中的 `IAMAllowedPrincipals` 資料湖許可。如果存在，則錯誤多方言檢視只能參考沒有 IAMAllowedPrincipals 許可的資料表。
+ 資料表的 Amazon S3 位置必須註冊為 Lake Formation 資料湖位置。如果資料表並未如此註冊，則會發生錯誤多方言檢視只能參考 Lake Formation 受管資料表。如需有關如何在 Lake Formation 中註冊 Amazon S3 位置的資訊，請參閱《AWS Lake Formation 開發人員指南**》中的[註冊 Amazon S3 位置](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 開發人員指南**》中的 [GetTables 和 SearchTables API 不會更新 IsRegisteredWithLakeFormation 參數的值](https://docs.aws.amazon.com/lake-formation/latest/dg/limitations.html#issue-GetTables-value)。
+ `DEFINER` 主體只能是 IAM 角色。
+ `DEFINER` 角色必須具有基礎資料表的完整 `SELECT` (可授予) 許可。
+ `UNPROTECTED` Data Catalog 檢視不受支援。
+ 檢視定義中不支援使用者定義函數 (UDF)。
+ Athena 聯合資料來源無法用於 Data Catalog 檢視。
+ 外部 Hive 中繼儲存不支援 Data Catalog 檢視。
+ Athena 會在偵測到過時的檢視時顯示錯誤訊息。當發生下列其中一種情況時，便會報告過時的檢視：
  + 檢視參考資料表或資料庫不存在。
  + 在參考的資料表中進行了結構描述或中繼資料變更。
  + 參考的資料表遭捨棄，並使用不同的結構描述或組態重新建立。

## 許可
<a name="views-glue-permissions"></a>

Data Catalog 檢視需要三個角色：`Lake Formation Admin`、`Definer` 和 `Invoker`。
+ **`Lake Formation Admin`** – 具有設定所有 Lake Formation 許可的存取權。
+ **`Definer`** – 建立 Data Catalog 檢視。對於檢視定義參考的所有基礎資料表，`Definer` 角色必須具有完整的可授予 `SELECT` 許可。
+ **`Invoker`** – 可查詢 Data Catalog 檢視或檢查其中繼資料。若要顯示查詢的調用者，您可以使用 `invoker_principal()` DML 函式。如需詳細資訊，請參閱[invoker\$1principal()](functions-env3.md#functions-env3-invoker-principal)。

`Definer` 角色的信任關係必須允許 AWS Glue 和 Lake Formation 服務主體`sts:AssumeRole`的動作。如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南**》中的[建立檢視的先決條件](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html#views-prereqs)。

還需要 Athena 進行存取的 IAM 許可。如需詳細資訊，請參閱[AWS Amazon Athena 的 受管政策](security-iam-awsmanpol.md)。

# 管理 Data Catalog 檢視
<a name="views-glue-managing"></a>

您可以使用 DDL 命令來更新和管理 Data Catalog 檢視。

## 更新 Data Catalog 檢視
<a name="views-glue-updating-a-data-catalog-view"></a>

`Lake Formation` 管理員或定義程式可使用 `ALTER VIEW UPDATE DIALECT` 語法來更新檢視定義。下列範例會修改檢視定義，以從 `returns` 資料表，而非 `orders` 資料表中選取資料欄。

```
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 檢視動作。


| 陳述式 | Description | 
| --- | --- | 
| [變更檢視方言](alter-view-dialect.md) |  透過新增引擎方言，或者更新或捨棄現有引擎方言來更新 Data Catalog 檢視。  | 
| [CREATE PROTECTED MULTI DIALECT VIEW](create-view.md#create-protected-multi-dialect-view) |  從指定的 `SELECT` 查詢建立 Data Catalog 檢視。如需詳細資訊，請參閱[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) |  列出檢視的結構描述中的欄。  | 