本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
构建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 是无服务器的。) 为了实现高可用性,定期拍摄集群快照。
限制
文件格式仅限于 Glue 当前支持的AWS格式。
不支持实时下游报告。
架构
源技术堆栈
带有CSVXML、或JSON文件的 S3 存储桶
目标技术堆栈
S3 数据湖(带有分区 Parquet 文件存储)
Amazon 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 存储桶。 | 为每个源创建一个单独的存储桶,然后根据源系统的数据提取频率创建文件夹结构,例如 | 数据工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
使用适当的参数组以及维护和备份策略启动 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 文档)中描述的方法之一进行操作。
完全刷新:适用于不需要历史聚合的小数据集。请遵循以下方法之一:
截断 Amazon Redshift 表。
从暂存区加载当前分区
或者:
创建包含当前分区数据的临时表。
删除目标 Amazon Redshift 表。
将临时表重命名至目标表。