使用 AWS Glue Data Catalog 视图 - Amazon Athena

使用 AWS Glue Data Catalog 视图

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

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

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

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

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

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

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

Data Catalog 视图定义存储于 AWS Glue Data Catalog。这意味着,您可以使用 AWS Lake Formation 通过资源授权、列授权或基于标签的访问控制来授予访问权限。有关在 Lake Formation 中授予和撤消访问权限的更多信息,请参阅《AWS 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 角色的信任关系必须允许 AWS 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 的 AWS 托管策略

限制

  • 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 视图语法