

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# AWS Glue Data Catalog 视图
<a name="data-catalog-views-overview"></a>

本主题介绍如何在 AWS Glue Data Catalog 中创建视图。您可以使用 Data Catalog 中的视图来访问使用相同架构的不同数据来源中的数据。

通过在 Data Catalog 中创建视图，您可以创建单一的通用视图架构和元数据对象，以便在 Amazon Athena 和 Amazon EMR Spark 等引擎中使用。这样做可以让您在数据湖和数据仓库中使用相同的视图来适应您的使用案例。Data Catalog 中的视图是特殊的，因为它们被归类为定义者视图，其中访问权限由创建视图的用户定义，而不是由查询视图的用户定义。以下是一些在 Data Catalog 中创建视图的使用案例和好处：
+ 创建一个视图，根据用户所需的权限来限制数据访问。例如，您可以使用 Data Catalog 中的视图来防止不在 HR 部门工作的员工查看个人身份信息 (PII)。
+ 确保用户无法访问不完整的记录。通过对 Data Catalog 中的视图应用某些筛选器，可以确保 Data Catalog 中视图内的数据记录始终完整。
+ Data Catalog 视图还具有安全优势，即确保用于创建视图的查询定义必须完整才能创建视图。这种安全性优势意味着 Data Catalog 中的视图不容易受到恶意玩家的 SQL 命令的影响。
+ Data Catalog 中的视图支持与普通视图相同的优点，例如允许用户访问视图，而不向用户提供底层表。

要在 Data Catalog 中创建视图，必须有 [Spectrum 外部表](https://docs.aws.amazon.com/redshift/latest/dg/c-spectrum-external-tables.html)、包含在 [Lake Formation 管理的数据共享](https://docs.aws.amazon.com/redshift/latest/dg/what_is_datashare.html#lf_datashare_overview)中的对象或 [Apache Iceberg 表](https://docs.aws.amazon.com/redshift/latest/dg/what_is_datashare.html#lf_datashare_overview)。

Data Catalog 视图定义存储于 AWS Glue Data Catalog。可以使用 AWS Lake Formation 通过资源授权、列授权或基于标签的访问控制来授予访问权限。有关在 Lake Formation 中授予和撤销访问权限的更多信息，请参阅[授予和撤销对 Data Catalog 资源的权限](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html)。

当使用 Amazon Redshift 来运行引用此类 AWS Glue Data Catalog 视图的查询时，Amazon Redshift 在记录有关该查询的元数据时，会自动屏蔽某些系统表和视图列中的字段。有关更多信息，请参阅《Amazon Redshift Management Guide》**中的 [Secure logging](https://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing-secure-logging.html)。

## 先决条件
<a name="data-catalog-views-prerequisites"></a>

在 Data Catalog 中创建视图之前，请确保已完成以下先决条件：
+ 确保您的 IAM 角色具有以下信任策略。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                 "Service": [
                      "glue.amazonaws.com",
                      "lakeformation.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole"
          }
      ]
  }
  ```

------
+ 您还需要以下传递角色策略。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1",
              "Action": [
                  "iam:PassRole"
              ],
              "Effect": "Allow",
              "Resource": "*",
              "Condition": {
                  "StringEquals": {
                      "iam:PassedToService": [ 
                          "glue.amazonaws.com",
                          "lakeformation.amazonaws.com"
                      ]
                  }
              }
          }
      ]
  }
  ```

------
+ 最后，您还需要以下权限。
  + `Glue:GetDatabase`
  + `Glue:GetDatabases`
  + `Glue:CreateTable`
  + `Glue:GetTable`
  + `Glue:UpdateTable`
  + `Glue:DeleteTable`
  + `Glue:GetTables`
  + `Glue:SearchTables`
  + `Glue:BatchGetPartition`
  + `Glue:GetPartitions`
  + `Glue:GetPartition`
  + `Glue:GetTableVersion`
  + `Glue:GetTableVersions`

## 端到端示例
<a name="data-catalog-views-example"></a>

首先基于 Data Catalog 数据库创建外部架构。

```
CREATE EXTERNAL SCHEMA IF NOT EXISTS external_schema FROM DATA CATALOG DATABASE 'external_data_catalog_db' 
IAM_ROLE 'arn:aws:iam::123456789012:role/sample-role';
```

现在您可以创建 Data Catalog 视图。

```
CREATE EXTERNAL PROTECTED VIEW external_schema.remote_view 
AS SELECT * FROM external_schema.remote_table;
```

然后，您可以开始查询视图。

```
SELECT * FROM external_schema.remote_view;
```

有关与 Data Catalog 中的视图相关的 SQL 命令的更多信息，请参阅 [CREATE EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_VIEW.html)、[ALTER EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_EXTERNAL_VIEW.html) 和 [DROP EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_EXTERNAL_VIEW.html)。

## 注意事项和限制
<a name="data-catalog-views-considerations"></a>

以下是适用于在 Data Catalog 中创建的视图的注意事项和限制。
+ AWS Glue Data Catalog 视图仅在 RA3 预置集群或 Redshift Serverless 工作组上受支持。
+ 无法创建基于其他视图的 Data Catalog 视图。
+ 在 Data Catalog 视图中只能有 10 个基表。
+ 视图的定义者必须对基表拥有完全 `SELECT GRANTABLE` 权限。
+ 视图只能包含 Lake Formation 对象和内置对象。不允许在视图中使用以下对象。
  + 系统表
  + 用户定义的函数 (UDF)
  + 不在 Lake Formation 管理的数据共享中的 Redshift 表、视图、实体化视图和后期绑定视图。
+ 视图不能包含嵌套的 Redshift Spectrum 表。
+ 视图基础对象的 AWS Glue 表示形式必须与视图位于相同 AWS 账户和区域中。