使用 AWS Glue ETL 在 Apache Iceberg 上执行合并、分区演化和模式演化 大

使用 AWS Glue ETL 在 Apache Iceberg 上进行合并、分区演进和架构演进

核心要点

在这篇文章中,我们将探讨如何使用 AWS Glue ETL 进行数据的合并和结构、分区的演进。这对于应对日益增长的数据需求和变化的分析需求至关重要,尤其在传统数据湖中修改架构和分区往往是一项耗时且繁琐的任务。Apache Iceberg 提供了一种高效的方法来实现这些变化,不需要重写现有数据。

文章概述

企业随著从各种来源收集的数据越来越多,数据的结构和组织往往需要随著分析需求的变化而改变。然而,在传统数据湖中,改变架构和表分区的过程往往会造成干扰并耗费大量时间,需要重新命名或重建整个表,并重新处理大量数据,使得敏捷性和洞察能力大大降低。

架构演进使得无需重写现有数据即可添加、删除、重新命名或修改列。这对快速发展的企业尤为重要,因为它们需要增强数据结构以支持新用例。例如,一个电子商务公司可能会添加新的顾客人口统计属性或订单状态标记来丰富分析能力。Apache Iceberg 通过其创新的元数据表演进架构以向后兼容的方式管理这些架构变更。

同样,分区演进允许无缝添加、删除或划分分区。例如,一个电子商务市场可能最初按天划分订单数据。随著订单的积累,按天查询变得低效,这时可以将分区划分为按天和顾客 ID。表分区以最有效的方式组织大型数据集以提高查询性能。Iceberg 为企业提供了灵活性,允许其逐步调整分区,而无需繁琐的重建程序。新分区可以以完全兼容的方式添加,无需停机或重写现有数据文件。

本篇文章将演示如何利用 Iceberg、Amazon Simple Storage ServiceAmazon S3、AWS Glue、AWS Lake Formation以及 AWS 身份与访问管理IAM来实施支持无缝演进的事务性数据湖。通过在数据洞察演变的过程中允许无痛的架构及分区调整,您可以获得实现业务成功所需的未来保证灵活性。

解决方案概述

以我们的示例用例为例,一家虚构的大型电子商务公司每天处理数千个订单。在接收、更新、取消、发货、交付或退回订单时,变更会在其内部系统中进行,并需要将这些变更复制到 S3 数据湖中,以便数据分析师能够通过 Amazon Athena 执行查询。这些变更也可能包含架构的更新。由于不同组织的安全需求,他们需要通过 Lake Formation 对分析师进行细粒度的访问控制。

以下图示说明了解决方案架构。

解决方案工作流包括以下关键步骤:

使用 AWS Glue ETL 在 Apache Iceberg 上执行合并、分区演化和模式演化 大使用数据提取管道从本地获取数据到 Dropzone 位置。使用 AWS Glue 将 Dropzone 位置中的数据合并到 Iceberg 中。使用 Athena 查询数据。

实施前提

在执行本步骤之前,您需要确保具备以下前提条件:

拥有一个 AWS 项目已经设置好 Lake Formation

使用 AWS CloudFormation 设置基础架构

要使用 AWS CloudFormation 模板创建基础架构,请按照以下步骤操作:

以管理员身份登录到 AWS 帐户。打开 AWS CloudFormation 控制台。

点击 启动堆叠

在 堆叠名称 中输入名称本文中为 icebergdemo1。

点击 下一步。提供以下参数的信息:DatalakeUserNameDatalakeUserPasswordDatabaseNameTableNameDatabaseLFTagKeyDatabaseLFTagValueTableLFTagKeyTableLFTagValue

点击 下一步。

再次点击 下一步。

在 审查 部分检查您输入的值。选择 我确认 AWS CloudFormation 可能会创建具有自定义名称的 IAM 资源,然后选择 提交。

几分钟后,堆栈状态将变为 CREATECOMPLETE。

您可以转到堆栈的 输出 标签查看所有已配置的资源。这些资源以您提供的堆栈名称作为前缀在本文中为 icebergdemo1。

使用 Lambda 创建 Iceberg 表并通过 Lake Formation 授予访问权限

要创建 Iceberg 表并授予访问权限,请完成以下步骤:

转到 CloudFormation 堆栈 icebergdemo1 的 资源 标签,搜寻逻辑 ID 为 LambdaFunctionIceberg。点击相关的物理 ID 超连结。

您将被重定向到 Lambda 函数 icebergdemo1LambdaCreateIcebergandGrantaccess。

在 配置 标签下,选择左侧的 环境变数。

在 代码 标签中,您可以检查函数代码。

此函数使用 AWS SDK for Python (Boto3) APIs 来配置这些资源。它假设已提供的数据湖管理员角色来执行以下任务:

向数据湖管理员角色授予 DATALOCATIONACCESS 访问权限,以便于注册数据湖位置创建 Lake Formation 标记 (LFTags)使用 AWS Glue createdatabase API 在 AWS Glue 数据目录中创建数据库对数据库分配 LFTags使用 LFTags 向数据湖 IAM 用户和 AWS Glue ETL IAM 角色授予数据库的 DESCRIBE 访问权限使用 AWS Glue createtable API 创建 Iceberg 表:

pythonresponsecreatetable = glueclientcreatetable( DatabaseName=icebergdb1 OpenTableFormatInput={ IcebergInput { MetadataOperation CREATE Version 2 } } TableInput={ Name ecomorders StorageDescriptor { Columns [ {Name ordernum Type int} {Name sku Type string} {Name quantity Type int} {Name category Type string} {Name status Type string} {Name shippingid Type string} ] Location s3//icebergdemo1s3bucketicebergvthvwwblrwe8/iceberg/ } TableType EXTERNALTABLE })

将 LFTags 分配给该表对 Iceberg 表的 LFTags 进行 DESCRIBE 和 SELECT 操作授予数据湖 IAM 用户

将对 Iceberg 表的 LFTags 的 ALL、DESCRIBE、SELECT、INSERT、DELETE 和 ALTER 访问权限授予 AWS Glue ETL IAM 角色

在 测试 标签下,选择 测试 以运行函数。

当函数执行完毕后,您会看到消息执行函数:成功。

Lake Formation 帮助您集中管理、保护和全球共享数据以进行分析和机器学习。使用 Lake Formation,您可以对位于 Amazon S3 中的数据湖数据及其在数据目录中的元数据进行细粒度的访问控制。

要将 Amazon S3 位置作为 Iceberg 存储注册到数据湖中,请使用 Lake Formation 注册位置。然后,您可以利用 Lake Formation 的权限对指向该位置的数据目录对象进行细粒度的访问控制,并对该位置中的底层数据进行控制。

加速器试用3天

CloudFormation 堆栈已注册数据湖位置。

在 Lake Formation 中,数据位置权限 使当前用户可以创建和更改指向注册的 Amazon S3 位置的数据目录资源。数据位置权限除了 Lake Formation 数据权限以外,还能保护数据湖中的信息。

Lake Formation 标签基于访问控制 (LFTBAC) 是一种授权策略,根据属性定义权限。在 Lake Formation 中,这些属性称为 LFTags。您可以将 LFTags 附加到数据目录资源、Lake Formation 用户和表列上。您可以利用这些 LFTags 在 Lake Formation 资源上分配和撤回权限。当用户的标签与资源标签匹配时,Lake Formation 允许对这些资源进行操作。

验证来自 Lake Formation 控制台的 Iceberg 表

要验证 Iceberg 表,请完成以下步骤:

在 Lake Formation 控制台中,选择导航窗格中的 数据库。打开 icebergdb1 的详细页面。

您可以看到相关数据库的 LFTags。

在导航窗格中选择 表。打开 ecomorders 的详细页面。

在 表详细信息 部分,您可以观察到以下信息:

表格式 显示为 Apache Iceberg表管理 显示为 由数据目录管理位置 列出了 Iceberg 表的数据湖位置

在 LFTags 部分,您可以看到相关的表 LFTags。

在 表详细信息 部分,展开 高级表属性 以查看以下信息:

metadatalocation 指向 Iceberg 表的元数据文件位置tabletype 显示为 ICEBERG

在 架构 标签中,您可以查看在 Iceberg 表中定义的列。

将 Iceberg 与 AWS Glue 数据目录和 Amazon S3 集成

Iceberg 在表中跟踪单个数据文件,而不是目录。当对表进行明确提交时,Iceberg 创建数据文件并将它们添加到表中。Iceberg 在元数据文件中维护表的状态。表状态的任何变化都会创建一个新的元数据文件,原 atomically 替换旧的元数据。元数据文件跟踪表架构、分区配置及其他属性。

Iceberg 需要与像 Amazon S3 这样的对象存储兼容的文件系统来支持操作。

Iceberg 为表内容创建快照。每个快照都是在某一时刻表中数据文件的完整集合。快照中的数据文件存储在一个或多个清单文件中,这些文件包含表中每个数据文件的行、其分区数据和其度量数据。

以下图示说明了这一层次结构。

![快照结构](https//d2908q01vomqb2cloudfrontnet/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/