使用 Amazon Glue Data Catalog 视图 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon Glue Data Catalog 视图

该功能为预览版,可能会发生变化。有关更多信息,请参阅 Amazon 服务条款文档中的“测试版和预览”部分。

当您想跨 Amazon Web Services(例如 Amazon Athena 和 Amazon Redshift)使用单一通用视图时,请使用 Amazon Glue Data Catalog 视图。在 Data Catalog 视图中,访问权限由创建视图的用户(而不是查询视图的用户)定义。这种授权方法称为定义程序语义。

以下使用案例展示如何使用 Data Catalog 视图。

  • 优化访问控制 – 您可以创建视图,根据用户所需的权限级别来限制数据访问。例如,您可以使用 Data Catalog 视图来防止非人力资源(HR)部门的员工查看个人身份信息。

  • 确保记录完整 – 通过对 Data Catalog 视图应用某些筛选器,您可以确保 Data Catalog 视图中的数据记录始终完整。

  • 增强安全性 – 在 Data Catalog 视图中,用于创建视图的查询定义必须完好无损,才能创建视图。这样的话,Data Catalog 视图不易受到恶意行为者的 SQL 命令的影响。

  • 防止访问基础表 – 定义程序语义允许用户访问视图,而无需向他们提供基础表。只有定义视图的用户才需要访问表。

Data Catalog 视图定义存储于 Amazon Glue Data Catalog。这意味着,您可以使用 Amazon Lake Formation 通过资源授权、列授权或基于标签的访问控制来授予访问权限。有关在 Lake Formation 中授予和撤消访问权限的更多信息,请参阅《Amazon Lake Formation Developer Guide》中的 Granting and revoking permissions on Data Catalog resources

权限

Data Catalog 视图需要三个角色:Lake Formation AdminDefinerInvoker

  • Lake Formation Admin – 有权配置所有 Lake Formation 权限。

  • Definer – 创建 Data Catalog 视图。Definer 角色必须对视图定义引用的所有基础表具有完全的可授予 SELECT 权限。

  • Invoker – 可以查询 Data Catalog 视图或检查其元数据。若要显示查询的调用者,可以使用 invoker_principal() DML 函数。有关更多信息,请参阅 invoker_principal()

Definer 角色的信任关系必须允许 Amazon Glue 和 Lake Formation 服务主体采取 sts:AssumeRole 操作,如以下示例所示。

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

还需要针对 Athena 访问的 IAM 权限。有关更多信息,请参阅 Amazon Athena 的 Amazon 托管策略

限制

  • Data Catalog 视图不能引用其他视图。

  • 在视图定义中,您最多可以引用 10 个表。

  • 基础表必须使用 Lake Formation 注册。

  • DEFINER 主体只能是 IAM 角色。

  • DEFINER 角色必须对基础表具有完全的 SELECT(可授予)权限。

  • 不支持 UNPROTECTED Data Catalog 视图。

  • 视图定义中不支持用户定义的函数(UDF)。

  • Athena 联合数据来源不能用于 Data Catalog 视图。

  • 外部 Hive 元存储不支持 Data Catalog 视图。

  • Athena 在检测到过时视图时会显示错误消息。发生以下一种情况时,会报告过时的视图:

    • 视图引用了不存在的表或数据库。

    • 在引用的表中进行了架构或元数据更改。

    • 删除了引用的表并使用不同的架构或配置重新创建。

创建 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

查询 Data Catalog 视图

视图创建后,Lake Formation Admin 可以向 Invoker 主体授予对 Data Catalog 视图的 SELECT 权限。然后,Invoker 主体无需访问视图所引用的基础基表,即可查询视图。以下是 Invoker 查询示例。

SELECT * from orders_by_date where price > 5000

更新 Data Catalog 视图

Lake Formation AdminDefiner 可以使用 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

有关用于创建和管理 Data Catalog 视图的语法的更多信息,请参阅 Glue Data Catalog 视图语法