使用 Amazon Athena 和 Amazon Redshift 查询 AWS Glue 数据目

使用 Amazon Athena 和 Amazon Redshift 查询 AWS Glue 数据目录视图

重点提炼

AWS Glue 数据目录视图允许用户创建一个通用的视图模式,并在多个引擎之间共享。通过 AWS Lake Formation,客户可以对视图进行一致的访问管理,无需访问底层数据库和表。本文将介绍如何定义和查询以 Iceberg 格式存储的开放源代码表格的 Data Catalog 视图。

今天的数据湖正在快速扩展,涵盖不同业务线并在多种环境中使用多种引擎来处理和分析数据。传统上,SQL 视图用于定义和共享过滤后的数据集,以满足业务线的具体需求。然而,随着客户在数据湖中使用不同的处理引擎,每个引擎都有自己的视图版本,客户不得不为每个引擎创建单独的视图,从而增加了维护成本。此外,访问这些引擎定义的视图需要客户拥有较高的访问权限,使其能够访问 SQL 视图本身以及视图 SQL 定义中引用的底层数据库和表。这种做法妨碍了通过 SQL 视图一致性地授予数据子集的访问权限,降低了生产效率并增加了管理开销。

yt加速器下载安卓版

Glue 数据目录视图 是 AWS Glue 数据目录 的一项新功能,客户可以利用它创建一个通用视图模式和单一的元数据容器,能够容纳不同方言的视图定义,从而在 Amazon Redshift 和 Amazon Athena 等引擎之间共享。通过定义一个可以从多个引擎查询的单一视图对象,数据目录视图使客户能够使用 AWS Lake Formation 一致地管理权限。视图还可以跨 AWS 账户共享。对于查询这些视图,用户只需要对视图对象有访问权限,而不需要访问视图定义中的引用数据库和表。此外,针对数据目录视图的所有请求,例如对底层资源的访问凭证请求,都将作为 AWS CloudTrail 管理事件记录,以供审计。

在这篇文章中,我们将展示如何在开放源代码表格格式如 Iceberg上定义和查询数据目录视图,使用 Athena 和 Amazon Redshift。同时,我们还将展示如何配置限制对底层数据库和表的访问。为方便读者跟随,我们提供了一个 AWS CloudFormation 模板。

使用案例

一家名为 Example Corp 的公司拥有两个业务单位:销售和市场营销。销售业务单元拥有客户数据集,包括客户详情和客户地址。市场营销业务单元希望基于首选客户列表进行有针对性的营销活动,并请求销售业务单元提供数据。销售业务单元的数据管理员AWS 身份和访问管理 (IAM) 角色:productownerrole计划与市场营销单元的数据分析师businessanalystrole共享首选客户的非敏感信息,以满足其活动需求。市场营销团队分析师计划使用 Athena 进行营销活动的互动分析,随后使用 Amazon Redshift 生成营销报告。

在这个解决方案中,我们演示如何使用数据目录视图共享存储在 Iceberg 格式下的客户详情子集,并依据 preferred 标志进行过滤。此视图可以通过 Athena 和 Amazon Redshift Spectrum 无缝查询,数据访问通过 AWS Lake Formation 进行集中管理。

前提条件

在本文描述的解决方案中,您需要满足以下要求:

拥有一个 AWS 账户。如果没有,可以 创建一个账户。创建 数据湖管理员角色。请记录该角色的 Amazon Resource Name (ARN),稍后会使用到。为简化起见,本篇将使用 IAM 管理员角色 作为 数据湖管理员 和 Redshift 管理员,但请在您的环境中遵循最小权限原则。在数据目录设置中保持默认设置。以下两个选项应被选中:仅为新数据库使用 IAM 访问控制仅为新数据库中的新表使用 IAM 访问控制

开始操作

请以 IAM 管理员身份登录 AWS 管理控制台,并部署以下 CloudFormation 堆栈以创建所需资源:

选择部署 CloudFormation 模板。

提供已配置为 Lake Formation 管理员的 IAM 角色。

完成模板的部署步骤。所有设置保持默认。选择 我承认 AWS CloudFormation 可能会创建 IAM 资源,然后选择 提交。

CloudFormation 堆栈将创建以下资源。请记录这些值,稍后会使用到。

存储表数据和 Athena 查询结果的 Amazon Simple Storage Service (Amazon S3) 桶IAM 角色:productownerrole 和 businessanalystrole具有所需网络配置的虚拟私有云VPC,将用于计算AWS Glue 数据库:customerdb,其中包含 Iceberg 格式的 customer 和 customeraddress 表Glue 数据库:customerviewdb,将包含数据目录视图Redshift Serverless 集群

使用 Amazon Athena 和 Amazon Redshift 查询 AWS Glue 数据目

CloudFormation 堆栈还将数据湖桶注册到 Lake Formation,以 Lake Formation 访问模式。您可以通过导航到 Lake Formation 控制台,并在 管理 下选择 数据湖位置 来验证这一点。

解决方案概述

以下图展示了解决方案的架构。

为了创建 Data Catalog 视图,数据湖 S3 位置中 customer 和 customeraddress 表需要先与 Lake Formation 注册,并授予 productownerrole 完全权限。

销售产品所有者:productownerrole 还被授予在 customerviewdb 下创建视图的权限。

在使用必要的客户信息子集创建 Glue Data Catalog 视图 (customerview) 后,视图被共享给市场分析师 (businessanalystrole),后者可以根据视图定义查询首选客户的非敏感信息,而无需访问底层客户表。

对 customerdb 数据库及其表启用 Lake Formation 权限模式。使用 Lake Formation 向 productownerrole 授予 customerdb 数据库及表customer 和 customeraddress的完整权限。在将创建多方言数据目录视图的数据库 (customerviewdb) 上启用 Lake Formation 权限模式。使用 Lake Formation 向 productownerrole 授予 customerviewdb 数据库的完全权限。使用 Athena 和 Amazon Redshift,以 productownerrole 创建数据目录视图以添加引擎方言。使用 Lake Formation 将数据库和数据目录视图的读取权限共享给 businessanalystrole。使用 businessanalystrole 从 Athena 和 Amazon Redshift 引擎查询数据目录视图。

在满足所有前提条件并理解整体解决方案后,您准备好设置该解决方案。

设置产品所有者角色的 Lake Formation 权限

以数据湖管理员身份登录 Lake Formation 控制台。为本文的示例,我们使用 IAM 管理员角色,Admin 作为数据湖管理员。

启用 customerdb 和其表的 Lake Formation 权限模式

在 Lake Formation 控制台的导航窗格中,选择 数据目录 下的 数据库。选择 customerdb 并选择 编辑。在 新创建表的默认权限 下,取消选中 在此数据库中仅使用 IAM 访问控制。

选择 保存。

在导航窗格的 数据目录 中,选择 数据库。

选择 customerdb 并在 操作 下选择 查看。

从列表中选择 IAMAllowedPrincipal,然后选择 撤销。

对 customerdb 数据库下的 所有表 重复上述步骤。

授予 productownerrole 访问 customerdb 和其表的权限

授予 productownerrole 对 customerdb 数据库的所有权限。

在 Lake Formation 控制台的导航窗格中,选择 权限 下的 数据湖权限。选择 授予。在 主体 下,选择 IAM 用户和角色。选择 productownerrole。在 LF 标签或目录资源 下,选择 命名的数据目录资源,并选择 customerdb 作为 数据库。选择 SUPER 作为 数据库权限。选择 授予 以应用权限。

授予 productownerrole 对 customer 和 customeraddress 表的所有权限。

在 Lake Formation 控制台的导航窗格中,选择 权限 下的 数据湖权限。选择 授予。在 主体 下,选择 IAM 用户和角色。选择 productownerrole。在 LF 标签或目录资源 下,选择 命名的数据目录资源,然后将 customerdb 作为数据库,选择 customer 和 customeraddress 作为表。选择 SUPER 作为 表权限。选择 授予 以应用权限。

启用 Lake Formation 权限模式

在将创建数据目录视图的数据库上启用 Lake Formation 权限模式。

在 Lake Formation 控制台的导航窗格中,选择 数据目录 下的 数据库。选择 customerviewdb 并选择 编辑。在 新创建表的默认权限 下,取消选择 在此数据库中仅使用 IAM 访问控制。选择 保存。从导航窗格中选择 数据目录 下的 数据库。选择 customerviewdb 并在 操作 下选择 查看。从列表中选择 IAMAllowedPrincipal 并选择 撤销。

使用 Lake Formation 模式授予 productownerrole 对 customerviewdb 的访问权限

授予 productownerrole 对 customerviewdb 数据库的所有权限。

在 Lake Formation 控制台的导航窗格中,选择 权限 下的 数据湖权限。选择 授予。在 主体 下,选择 IAM 用户和角色。选择 productownerrole。在 LF 标签或目录资源 下,选择 命名的数据目录资源,并选择 customerviewdb 作为 数据库。选择 SUPER 作为 数据库权限。选择 授予 以应用权限。

以 productownerrole 创建 Glue 数据目录视图

现在,您已经为数据库和表设置了 Lake Formation 权限,将使用 productownerrole 使用 Athena 和 Amazon Redshift 创建数据目录视图。这还将为 Athena 和 Amazon Redshift 添加引擎方言。

添加 Athena 方言在 AWS 控制台中,使用 productownerrole 登录,或如果您已作为 Admin 登录,则切换到 productownerrole。启动查询编辑器,并从控制台右上角选择工作组 athenaglueview。您将创建一个组合来自 customer 和 customeraddress 表的数据的视图,特别是针对被标记为 preferred 的客户。表中包含客户的个人信息,例如姓名、出生日期、出生国家和电子邮件地址。在查询编辑器中运行以下命令以在 customerviewdb 数据库下创建 customerview 视图。

sql create protected multi dialect view customerviewdbcustomerview security definer as select ccustomerid cfirstname clastname cbirthday cbirthmonth cbirthyear cbirthcountry cemailaddress cacountrycazip from customerdbcustomer customerdbcustomeraddress where ccurrentaddrsk = caaddresssk and cpreferredcustflag=Y

运行以下查询以预览您刚创建的视图。

sql select from customerviewdbcustomerview limit 10

运行以下查询以查找 customerview 视图中客户数量最多的前三个出生年份,并显示出生年份及其对应的客户数量。

sql select cbirthyear count() as count from customerviewdbcustomerview group by cbirthyear order by count desc limit 3

输出结果:

为了验证视图已创建,请转到导航窗格,选择 Lake Formation 控制台中的 数据目录 下的 视图。选择 customerview 并查看 SQL 定义 部分以验证 Athena 引擎方言。

当您在 Athena 中创建视图时,它添加了 Athena 引擎的方言。接下来,为支持前述用例,需使用 Amazon Redshift 生成营销活动报告。因此需要将 Redshift 方言添加到视图,以便可以使用 Amazon Redshift 作为引擎查询。

添加 Amazon Redshift 方言使用管理员身份登录 AWS 控制台,导航到 Amazon Redshift 控制台,并登录到 Redshift 查询编辑器 v2。以管理员联邦用户身份连接到无服务器集群,并运行以下语句以授予 productownerrole 和 businessanalystrole 对 Glue 自动挂载数据库 (awsdatacatalog) 的访问权限。

sql create user IAMRproductownerrole password disable create user IAMRbusinessanalystrole password disable

grant usage on database awsdatacatalog to IAMRproductownerrole grant usage on database awsdatacatalog to IAMRbusinessanalystrole

登录 Amazon Redshift 控制台,使用 productownerrole 并通过 QEv2 编辑器进行联邦用户身份。使用以下 ALTER VIEW 查询将 Amazon Redshift 引擎方言添加到先前使用 Athena 创建的视图。在查询编辑器中运行以下命令:

sql alter external view awsdatacatalogcustomerviewdbcustomerview AS select ccustomerid cfirstname clastname cbirthday cbirthmonth cbirthyear cbirthcountry cemailaddress cacountry cazip from awsdatacatalogcustomerdbcustomer awsdatac

AWS 每周汇总:Amazon Q、Amazon QuickSight、AWS CodeArtifa

AWS 每周汇总:Amazon Q、Amazon QuickSight、AWS CodeArtifa

AWS每周快讯:Amazon Q、Amazon QuickSight、AWS CodeArtifact、Amazon Bedrock等2024年5月6日作者:Matheus Guimaraes 2024年5月6日 分类:Amazon EventBridge、Amazon Q、公告、AWS CodeA...

参考指南:在 AWS 上近实时分析事务数据 大数据博客

参考指南:在 AWS 上近实时分析事务数据 大数据博客

实时分析AWS交易数据的参考指南关键要点近实时交易数据能帮助企业了解消费者行为并优化产品。主要挑战在于及时的数据准备通常需要数天。使用AWS服务搭建解决方案可以优化数据流转,迅速做出决策。采用合适的架构和最新的科技能实现更高效的实时分析。商务领袖和数据分析师利用近实时的交易数据了解消费者行为,以支持...

订阅邮箱