构建ETL服务管道,使用 Glue 将数据从亚马逊 S3 增量加载到亚马逊 Red AWS shift - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

构建ETL服务管道,使用 Glue 将数据从亚马逊 S3 增量加载到亚马逊 Red AWS shift

由 Rohan Jamadagni (AWS) 和 Arunabha Datta () 创作 AWS

环境:生产

技术:分析;数据湖;存储和备份

AWS服务:亚马逊 Redshift;亚马逊 S3;Glue;Lambd AWS a AWS

Summary

此模式提供了有关如何配置亚马逊简单存储服务 (Amazon S3) 以获得最佳数据湖性能的指导,然后AWS使用 Glue 将增量数据更改从 Amazon S3 加载到 Amazon Redshift,执行提取、转换和ETL加载 () 操作。 

Amazon S3 中的源文件可以有不同的格式,包括逗号分隔值 (CSV) 和JSON文件。XML此模式描述了如何使用 AWS Glue 将源文件转换为成本优化且性能优化的格式,例如 Apache Parquet。您可以直接从 Amazon Athena 和 Amazon Redshift Spectrum 查询 Parquet 文件。您还可以将 Parquet 文件加载到 Amazon Redshift 中,对其进行聚合,然后与消费者共享聚合数据,或者使用亚马逊对数据进行可视化。 QuickSight

先决条件和限制

先决条件

  • 一个活动的 AWS 账户。

  • 具有适当权限且包含CSVXML、或JSON文件的 S3 源存储桶。

假设

  • CSVXML、或JSON源文件已加载到 Amazon S3 中,可以通过配置 AWS Glue 和 Amazon Redshift 的账户进行访问。

  • Amazon Redshift 文档中所述,遵循加载文件、拆分文件、压缩和使用清单的最佳实践。

  • 源文件结构保持不变。

  • 源系统能够按照 Amazon S3 中定义的文件夹结构将数据提取至 Amazon S3 中。

  • Amazon Redshift 集群可跨越单个可用区。(这种架构很合适,因为 AWS Lambda、G AWS lue 和 Amazon Athena 是无服务器的。) 为了实现高可用性,定期拍摄集群快照。

限制

架构

源技术堆栈

  • 带有CSVXML、或JSON文件的 S3 存储桶

目标技术堆栈

  • S3 数据湖(带有分区 Parquet 文件存储)

  • Amazon Redshift

目标架构

使用 G AWS lue 将增量更改从亚马逊 S3 加载到亚马逊 Redshift 的架构。

数据流

使用 G AWS lue 将增量更改从亚马逊 S3 加载到亚马逊 Redshift 的数据流。

工具

  • Amazon S3 — Amazon Simple Storage Service(Amazon S3)是一项可扩展的数据存储服务。Amazon S3 可用于各种存储解决方案,包括网站、移动应用程序、备份和数据湖。

  • AWSLambda — Lam AWS bda 允许您在不预配置或管理服务器的情况下运行代码。AWSLambda 是一项事件驱动型服务;您可以将代码设置为从其他服务自动启动。AWS

  • Amazon Redshift — Amazon Redshift 是一种完全托管的 PB 级数据仓库服务。借助 Amazon Redshift,您可以使用标准查询数据仓库和数据湖中数 PB 的结构化和半结构化数据。SQL

  • AWSGl AWS ue — Glue 是一项完全托管的ETL服务,可以更轻松地准备和加载数据进行分析。AWSGlue 会发现您的数据并将关联的元数据(例如表定义和架构)存储在 Glue AWS 数据目录中。您的编目数据可立即搜索、查询并可供使用。ETL

  • AWSS@@ ecret s Manager — S AWS ecrets Manager 便于保护和集中管理应用程序或服务访问所需的机密。该服务存储数据库凭据、API密钥和其他机密,无需以纯文本格式对敏感信息进行硬编码。Secrets Manager 还提供密钥轮换,以满足安全和合规性需求。它内置了亚马逊 Redshift、亚马逊关系数据库服务(亚马逊RDS)和亚马逊 DocumentDB 的集成。你可以使用 Secrets Manager 控制台、命令行界面 (CLI) 或 Secrets Manager 和 Secrets Manager 来存储和集中管理API密钥。SDKs

  • Amazon Athena — Amazon Athena 是一种交互式查询服务,可让您轻松分析存储在 Amazon S3 中的数据。Athena 是无服务器的,与 AWS Glue 集成,因此它可以直接查询使用 Glue 编目的数据。AWSAthena 可弹性扩展以提供交互式查询性能。

操作说明

任务描述所需技能

分析源系统的数据结构与属性。

对参与 Amazon S3 数据湖的每个数据来源执行此任务。

数据工程师

定义分区与访问策略。

该策略应基于数据捕获的频率、增量处理以及消耗需求。确保 S3 存储桶不向公众开放,并且访问仅由基于特定服务角色的策略控制。有关更多信息,请参阅 Amazon S3 文档

数据工程师

为每种数据来源类型创建单独的 S3 存储桶,为每个数据来源创建单独的 S3 存储桶 (Parquet),为每个数据来源创建单独的 S3 存储桶。

为每个源创建一个单独的存储桶,然后根据源系统的数据提取频率创建文件夹结构,例如 s3://source-system-name/date/hour。对于已处理的 (转换为 Parquet 格式) 文件,请创建类似的结构,例如 s3://source-processed-bucket/date/hour。有关创建 S3 存储桶的更多信息,请参阅 Amazon S3 文档

数据工程师
任务描述所需技能

使用适当的参数组以及维护和备份策略启动 Amazon Redshift 集群。

创建 Amazon Redshift 集群时,使用 Secrets Manager 数据库密钥作为管理员用户凭证。有关创建和调整 Amazon Redshift 集群规模的信息,请参阅 Amazon Redshift 文档Sizing Cloud Data Warehouses 白皮书。

数据工程师

创建IAM服务角色并将其附加到 Amazon Redshift 集群。

Ident AWS ity and Access Management (IAM) 服务角色可确保访问 Secrets Manager 和源 S3 存储桶。有关更多信息,请参阅有关授权添加角色的AWS文档。

数据工程师

创建数据库架构。

遵循设计表的 Amazon Redshift 最佳实践。根据用例,选择适当的排序和分配键,以及最佳的压缩编码。有关最佳实践,请参阅AWS文档

数据工程师

配置工作负载管理。

根据您的要求配置工作负载管理 (WLM) 队列、短查询加速 (SQA) 或并发扩展。有关更多信息,请参阅 Amazon Redshift 文档中的实施工作负载管理

数据工程师
任务描述所需技能

创建一个新密钥以将 Amazon Redshift 登录凭证存储在 Secrets Manager 中。

此机密存储管理员用户以及各个数据库服务用户的凭证。有关说明,请参阅 Secrets Manager 文档。选择 Amazon Redshift 集群作为密钥类型。此外,在密钥轮换页面,打开轮换。这将在 Amazon Redshift 集群中创建适当的用户,并按定义的时间间隔轮换密钥。

数据工程师

创建IAM策略以限制 Secrets Manager 的访问权限。

将 Secrets Manager 的访问权限限制为仅限亚马逊 Redshift 管理员和 G AWS lue。

数据工程师
任务描述所需技能

在 AWS Glue 数据目录中,为亚马逊 Redshift 添加连接。

有关说明,请参阅 AWSGlue 文档

数据工程师

为 AWS Glue 创建并附加IAM服务角色以访问 Secrets Manager、Amazon Redshift 和 S3 存储桶。

有关更多信息,请参阅 AWSGlue 文档

数据工程师

为源定义 AWS Glue 数据目录。

此步骤涉及在 AWS Glue 数据目录中创建数据库和所需的表。您可以使用爬虫对 AWS Glue 数据库中的表进行分类,也可以将其定义为 Amazon Athena 外部表。您还可以通过 Glue 数据目录访问在 Athena 中定义的外部表。AWS有关在 Athena 中定义数据目录创建外部表的更多信息,请参阅AWS文档。

数据工程师

创建 AWS Glue 作业来处理源数据。

Gl AWS ue 作业可以是 Python 外壳,也可以 PySpark 用于标准化、重复数据删除和清理源数据文件。要优化性能并避免查询整个 S3 源存储桶,请按日期对 S3 存储桶进行分区,按年、月、日和小时细分,作为 Glue 作业的下推谓词AWS。有关更多信息,请参阅 AWSGlue 文档。将处理和转换后的数据以 Parquet 格式加载至已处理的 S3 存储桶分区。您可从 Athena 查询 Parquet 文件。

数据工程师

创建 AWS Glue 任务将数据加载到亚马逊 Redshift 中。

AWSGlue 作业可以是 Python 外壳,也可以 PySpark 通过更新数据然后完全刷新来加载数据。有关详细信息,请参阅 AWSGlue 文档和其他信息部分。

数据工程师

(可选)根据需要使用触发器来安排 AWS Glue 作业。

增量数据加载主要由 Amazon S3 事件驱动,该事件导致 AWS Lambda 函数调用 Glue 作业AWS。对于任何需要基于时间而不是基于事件的调度的数据加载,请使用基于 G AWS lue 触发器的调度。

数据工程师
任务描述所需技能

为 Lambd AWS a 创建并附加IAM服务相关角色以访问 S3 存储桶和 Glue 任务。AWS

为 Lamb AWS da 创建IAM服务相关角色,其策略用于读取 Amazon S3 对象和存储桶,以及用于访问 Glue 以启动 Glu AWS e API 任务的策略。AWS有关更多信息,请参阅知识中心

数据工程师

创建一个 Lambda 函数以根据定义的 Amazon S3 事件运行 AWS Glue 任务。

Lambda 函数应通过创建 Amazon S3 清单文件来启动。Lambda 函数应将 Amazon S3 文件夹位置(例如,source_bucket/年/月/日期/小时)作为参数传递给 Glue 作业。AWSAWSGlue 作业将使用此参数作为下推谓词来优化文件访问和作业处理性能。有关更多信息,请参阅 AWSGlue 文档

数据工程师

创建 Amazon S3 PUT 对象事件以检测对象的创建,然后调用相应的 Lambda 函数。

Amazon S3 PUT 对象事件只能通过创建清单文件来启动。清单文件控制 Lambda 函数和 AWS Glue 任务并发性,并将加载作为批处理处理,而不是处理到达 S3 源存储桶特定分区的单个文件。有关更多信息,请参阅 Lambda 文档

数据工程师

相关资源

其他信息

更新插入和完全刷新的详细方法

更新插入:这适用于需要历史汇总的数据集,具体取决于业务用例。根据您的业务需求,按照更新和插入新数据(Amazon Redshift 文档)中描述的方法之一进行操作。

完全刷新:适用于不需要历史聚合的小数据集。请遵循以下方法之一:

  1. 截断 Amazon Redshift 表。

  2. 从暂存区加载当前分区

或者:

  1. 创建包含当前分区数据的临时表。

  2. 删除目标 Amazon Redshift 表。

  3. 将临时表重命名至目标表。