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

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

重点提炼

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

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

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

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

使用案例

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

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

前提条件

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

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

开始操作

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

  1. 选择部署 CloudFormation 模板。
  2. 提供已配置为 Lake Formation 管理员的 IAM 角色。
  3. 完成模板的部署步骤。所有设置保持默认。
  4. 选择 我承认 AWS CloudFormation 可能会创建 IAM 资源 ,然后选择 提交

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

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

删除)

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

解决方案概述

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

删除)

为了创建 Data Catalog 视图,数据湖 S3 位置中 customercustomer_address 表需要先与 LakeFormation 注册,并授予 product_owner_role 完全权限

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

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

  1. customerdb 数据库及其表启用 Lake Formation 权限模式
  2. 使用 Lake Formation 向 product_owner_role 授予 customerdb 数据库及表(customercustomer_address)的完整权限。
  3. 在将创建多方言数据目录视图的数据库 (customerviewdb) 上启用 Lake Formation 权限模式
  4. 使用 Lake Formation 向 product_owner_role 授予 customerviewdb 数据库的完全权限。
  5. 使用 Athena 和 Amazon Redshift,以 product_owner_role 创建数据目录视图以添加引擎方言。
  6. 使用 Lake Formation 将数据库和数据目录视图的读取权限共享给 business_analyst_role
  7. 使用 business_analyst_role 从 Athena 和 Amazon Redshift 引擎查询数据目录视图。

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

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

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

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

  1. 在 Lake Formation 控制台的导航窗格中,选择 数据目录 下的 数据库
  2. 选择 customerdb 并选择 编辑
  3. 新创建表的默认权限 下,取消选中 在此数据库中仅使用 IAM 访问控制
  4. 选择 保存
    删除)
  5. 在导航窗格的 数据目录 中,选择 数据库
  6. 选择 customerdb 并在 操作 下选择 查看
  7. 从列表中选择 IAMAllowedPrincipal ,然后选择 撤销
    删除)
  8. customerdb 数据库下的 所有表 重复上述步骤。

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

授予 product_owner_role customerdb 数据库的所有权限

  1. 在 Lake Formation 控制台的导航窗格中,选择 权限 下的 数据湖权限
  2. 选择 授予
  3. 主体 下,选择 IAM 用户和角色
  4. 选择 product_owner_role
  5. LF 标签或目录资源 下,选择 命名的数据目录资源 ,并选择 customerdb 作为 数据库
  6. 选择 SUPER 作为 数据库权限
  7. 选择 授予 以应用权限。
    删除)
    删除)

授予 product_owner_role customercustomer_address 表的所有权限

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

启用 Lake Formation 权限模式

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

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

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

授予 product_owner_role customerviewdb 数据库的所有权限

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

以 product_owner_role 创建 Glue 数据目录视图

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

添加 Athena 方言

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

sql create protected multi dialect view customerviewdb.customer_view securitydefiner as select c_customer_id, c_first_name, c_last_name, c_birth_day, c_birth_month, c_birth_year, c_birth_country, c_email_address, ca_country,ca_zip from customerdb.customer, customerdb.customer_address wherec_current_addr_sk = ca_address_sk and c_preferred_cust_flag='Y';

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

sql select * from customerviewdb.customer_view limit 10;

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

sql select c_birth_year, count(*) as count from "customerviewdb"."customer_view" group by c_birth_year order by count desclimit 3;

输出结果:
删除)

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

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

添加 Amazon Redshift 方言

  1. 使用管理员身份登录 AWS 控制台,导航到 Amazon Redshift 控制台,并登录到 Redshift 查询编辑器 v2。
  2. 以管理员(联邦用户)身份连接到无服务器集群,并运行以下语句以授予 product_owner_rolebusiness_analyst_role 对 Glue 自动挂载数据库 (awsdatacatalog) 的访问权限。
"IAMR:business_analyst_role" password disable;

grant usage on database awsdatacatalog to "IAMR:product_owner_role"; grantusage on database awsdatacatalog to "IAMR:business_analyst_role"; ```

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

```sql alter external view awsdatacatalog.customerviewdb.customer_view ASselect c_customer_id, c_first_name, c_last_name, c_birth_day, c_birth_month,
c_birth_year, c_birth_country, c_email_address, ca_country, ca_zip fromawsdatacatalog.customerdb.customer, awsdatac

Leave a Reply

Required fields are marked *