今天的数据湖正在快速扩展,涵盖不同业务线并在多种环境中使用多种引擎来处理和分析数据。传统上,SQL视图用于定义和共享过滤后的数据集,以满足业务线的具体需求。然而,随着客户在数据湖中使用不同的处理引擎,每个引擎都有自己的视图版本,客户不得不为每个引擎创建单独的视图,从而增加了维护成本。此外,访问这些引擎定义的视图需要客户拥有较高的访问权限,使其能够访问 SQL 视图本身以及视图 SQL 定义中引用的底层数据库和表。这种做法妨碍了通过 SQL视图一致性地授予数据子集的访问权限,降低了生产效率并增加了管理开销。
是
的一项新功能,客户可以利用它创建一个通用视图模式和单一的元数据容器,能够容纳不同方言的视图定义,从而在 和 等引擎之间共享。通过定义一个可以从多个引擎查询的单一视图对象,数据目录视图使客户能够使用 一致地管理权限。视图还可以跨 AWS账户共享。对于查询这些视图,用户只需要对视图对象有访问权限,而不需要访问视图定义中的引用数据库和表。此外,针对数据目录视图的所有请求,例如对底层资源的访问凭证请求,都将作为 管理事件记录,以供审计。
在这篇文章中,我们将展示如何在开放源代码表格格式(如 Iceberg)上定义和查询数据目录视图,使用 Athena 和 AmazonRedshift。同时,我们还将展示如何配置限制对底层数据库和表的访问。为方便读者跟随,我们提供了一个 模板。
一家名为 Example Corp的公司拥有两个业务单位:销售和市场营销。销售业务单元拥有客户数据集,包括客户详情和客户地址。市场营销业务单元希望基于首选客户列表进行有针对性的营销活动,并请求销售业务单元提供数据。销售业务单元的数据管理员(AWS身份和访问管理 (IAM)
角色:product_owner_role)计划与市场营销单元的数据分析师(business_analyst_role)共享首选客户的非敏感信息,以满足其活动需求。市场营销团队分析师计划使用
Athena 进行营销活动的互动分析,随后使用 Amazon Redshift 生成营销报告。
在这个解决方案中,我们演示如何使用数据目录视图共享存储在 Iceberg 格式下的客户详情子集,并依据 preferred 标志进行过滤。此视图可以通过 Athena 和 无缝查询,数据访问通过 进行集中管理。
在本文描述的解决方案中,您需要满足以下要求:
请以 IAM 管理员身份登录 AWS 管理控制台,并部署以下 CloudFormation 堆栈以创建所需资源:
CloudFormation 堆栈将创建以下资源。请记录这些值,稍后会使用到。
product_owner_role 和 business_analyst_rolecustomerdb,其中包含 Iceberg 格式的 customer 和 customer_address 表customerviewdb,将包含数据目录视图删除)
CloudFormation 堆栈还将数据湖桶注册到 Lake Formation,以 Lake Formation 访问模式。您可以通过导航到 LakeFormation 控制台,并在 管理 下选择 数据湖位置 来验证这一点。
以下图展示了解决方案的架构。
删除)
为了创建 Data Catalog 视图,数据湖 S3 位置中 customer 和 customer_address 表需要先与 LakeFormation 注册,并授予 product_owner_role 完全权限 。
销售产品所有者:product_owner_role 还被授予在 customerviewdb 下创建视图的权限。
在使用必要的客户信息子集创建 Glue Data Catalog 视图 (customer_view) 后,视图被共享给市场分析师
(business_analyst_role),后者可以根据视图定义查询首选客户的非敏感信息,而无需访问底层客户表。
customerdb 数据库及其表启用 Lake Formation 权限模式 。product_owner_role 授予 customerdb 数据库及表(customer 和 customer_address)的完整权限。customerviewdb) 上启用 Lake Formation 权限模式 。product_owner_role 授予 customerviewdb 数据库的完全权限。product_owner_role 创建数据目录视图以添加引擎方言。business_analyst_role。business_analyst_role 从 Athena 和 Amazon Redshift 引擎查询数据目录视图。在满足所有前提条件并理解整体解决方案后,您准备好设置该解决方案。
以数据湖管理员身份登录 Lake Formation 控制台。为本文的示例,我们使用 IAM 管理员角色,Admin 作为数据湖管理员。
授予 product_owner_role 对customerdb 数据库的所有权限。
授予 product_owner_role 对customer 和 customer_address 表的所有权限。
在将创建数据目录视图的数据库上启用 Lake Formation 权限模式。
授予 product_owner_role 对customerviewdb 数据库的所有权限。
现在,您已经为数据库和表设置了 Lake Formation 权限,将使用 product_owner_role 使用 Athena 和 AmazonRedshift 创建数据目录视图。这还将为 Athena 和 Amazon Redshift 添加引擎方言。
product_owner_role 登录,或如果您已作为 Admin 登录,则切换到 product_owner_role。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';
sql select * from customerviewdb.customer_view limit 10;
customer_view 视图中客户数量最多的前三个出生年份,并显示出生年份及其对应的客户数量。sql select c_birth_year, count(*) as count from "customerviewdb"."customer_view" group by c_birth_year order by count desclimit 3;
输出结果:
删除)
当您在 Athena 中创建视图时,它添加了 Athena 引擎的方言。接下来,为支持前述用例,需使用 Amazon Redshift生成营销活动报告。因此需要将 Redshift 方言添加到视图,以便可以使用 Amazon Redshift 作为引擎查询。
product_owner_role 和 business_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