项目展示

Our Projects

构建一个对架构变化具有弹性的分析管道,使用 Amazon Redshift Spectrum 大数据

项目展示

构建一个对架构变化具有弹性的分析管道,使用 Amazon Redshift Spectrum 大数据

2026-01-27 14:29:02 24

使用 Amazon Redshift Spectrum 构建一个抗模式变化的分析管道

作者 Swapna Bandla 和 Indira Balakrishnan发布日期 2024年2月20日分类 高级 (300)、Amazon Redshift、客户解决方案、技术操作指南原文链接 在此查看

关键要点

通过 AWS Glue 的模式演进功能,可以实现对接收数据的模式变化的自动管理。本文示范了如何使用 AWS Glue 处理不同模式的 JSON 文件,并通过 Amazon Redshift Spectrum 查询数据。文章将介绍创建分析管道的步骤,包括数据的上传、模式的更新以及跨模式的数据查询。

在大规模物联网IoT传感器设备中,您可以接收多种设备的数据并获取深入洞察。然而,这些设备可能以独特的模式和不同的属性来传输数据。您可以将所有 IoT 传感器的数据汇总到 Amazon S3 的中央位置。这时,使用 模式演进 功能,数据库表的模式可以根据接收到的文件属性变化而演变。利用 AWS Glue 的爬虫功能,根据 S3 文件的结构读取模式变化,从而实现 Amazon Redshift Spectrum 对模式变化的自动处理。这使得您可以通过单个 Amazon Redshift Spectrum 表 查询不同模式的数据,前提是使用 AWS Glue 元数据目录。

在本文中,我们将展示如何利用 AWS Glue 的模式演进功能,从存储在单一 Amazon S3 位置的多种格式的 JSON 文件中读取数据,并展示如何使用 Redshift Spectrum 查询这些数据,而无需重定义模式或将数据加载到 Redshift 表中。

解决方案概述

此解决方案包括以下步骤:

创建一个 Amazon Data Firehose 交付流,并将 Amazon S3 设为目标。使用 Amazon Kinesis Data Generator 生成样本流数据,并将其发送到交付流。将初始数据文件上传到 Amazon S3 位置。创建并运行 AWS Glue 爬虫,读取 Amazon S3 上的数据文件以填充数据目录。在 Amazon Redshift 中创建名为 iotdbext 的外部模式,并查询数据目录表。从 Redshift Spectrum 查询外部表,读取初始模式的数据。在 KDG 模板中添加额外的数据元素,并将数据发送到 Firehose 交付流。确保额外的数据文件已加载到 Amazon S3 中。再次运行 AWS Glue 爬虫以更新外部表定义。从 Redshift Spectrum 再次查询外部表,以读取两种不同模式的组合数据集。从模板中删除一个数据元素,并将数据发送到 Firehose 交付流。验证额外的数据文件已加载到 Amazon S3 中,并且少了一个数据元素。再次运行 AWS Glue 爬虫,更新外部表定义。从 Redshift Spectrum 查询外部表,以读取三种不同模式的组合数据集。

该解决方案的架构图如下所示。

前提条件

要实现此解决方案,您需要具备以下前提条件:

一台 Redshift 集群,具体操作请参考 创建样本 Amazon Redshift 集群。一个 S3 桶。熟悉 AWS 管理控制台。拥有 AWS 账户,并访问以下 AWS 服务:AWS GlueAWS 身份与访问管理 (IAM)Amazon RedshiftAmazon S3Amazon Data Firehose配置 Kinesis Data Generator:有关 Kinesis Data Generator 配置的说明,请参见此 博客。

实现解决方案

完成以下步骤以构建解决方案:

在 Kinesis 控制台中,创建一个 Firehose 交付流,参数如下:对于 Source,选择 Direct PUT。对于 Destination,选择 Amazon S3。对于 S3 bucket,输入您的 S3 桶名称。对于 Dynamic partitioning,选择 Enabled。

添加以下动态分区键:键 year,表达式为 connectionTime strptime(d/m/YHMS) strftime(Y)键 month,表达式为 connectionTime strptime(d/m/YHMS) strftime(m)键 day,表达式为 connectionTime strptime(d/m/YHMS) strftime(d)

键 hour,表达式为 connectionTime strptime(d/m/YHMS) strftime(H)

对于 S3 bucket prefix,输入 year=!{partitionKeyFromQueryyear}/month=!{partitionKeyFromQuerymonth}/day=!{partitionKeyFromQueryday}/hour=!{partitionKeyFromQueryhour}/

在 Amazon S3 控制台中,验证初始文件是否已成功加载到 S3 桶中。

在 AWS Glue 控制台, 创建并运行 AWS Glue 爬虫,数据源为您在前一步中指定的 S3 桶。

爬虫完成后,您可以在 AWS Glue 控制台验证表是否成功创建。

构建一个对架构变化具有弹性的分析管道,使用 Amazon Redshift Spectrum 大数据

在 Amazon Redshift 查询编辑器 v2 中,连接到 Redshift 实例,并创建一个指向 AWS Glue 数据目录数据库的外部模式。以下代码中,使用您的集群用于身份验证和授权的 IAM 角色的 Amazon 资源名称ARN。此 IAM 角色至少需要具有对要访问的 S3 桶执行 LIST 操作的权限,以及对桶中对象执行 GET 操作的权限。

sql CREATE external SCHEMA iotdbext FROM data catalog DATABASE iotdb IAMROLE arnawsiamltAWS accountidgtrole/ltrolenamegt CREATE external DATABASE if not exists

从 Redshift 外部模式查询数据目录中定义的表,注意 KDG 模板中定义的列:

sql select from iotdbextsensorsiotschemaevol

在 KDG 模板中添加一个额外的数据元素,并将数据发送到 Firehose 交付流:

json serviceRecommendedDate {{datefuture}}

验证新的数据已添加到 S3 桶。

重新运行 AWS Glue 爬虫。

再次从 Redshift 外部模式查询表,注意新填充的 servicerecommendeddate 列的数据集与以前的数据集的区别:

sql select from iotdbextsensorsiotschemaevol where servicerecommendeddate is not null

sql select from iotdbextsensorsiotschemaevol where servicerecommendeddate is null

从 KDG 模板中删除数据元素 status,并将数据重新发送到 Firehose 交付流。

验证新数据已添加到 S3 桶。

再次运行 AWS Glue 爬虫。

再次从 Redshift 外部模式查询表,注意新填充的数据集与以前的数据集的区别,该列为 status:

sql select from iotdbextsensorsiotschemaevol order by connectiontime desc

sql select from iotdbextsensorsiotschemaevol order by connectiontime

故障排除

如果数据在发送到 Firehose 交付流后未加载到 Amazon S3,请刷新并确保您已登录 KDG。

清理

如果您不打算进一步使用 S3 数据和 Redshift 集群,建议删除它们以避免不必要的AWS费用。

结论

随着基于大数据的预测与处方分析需求的增加,整合来自多种异构数据模型的数据的解决方案需求也在不断增长。本文展示了如何利用来自不同数据源的独特模式的相同原子数据元素来推导指标。您可以将所有数据源的数据存储在同一 S3 位置中,可以是同一文件夹或每个数据源多个子文件夹中。您可以定义并调度 AWS Glue 爬虫与数据刷新需求相同的频率运行。通过该解决方案,您可以创建一个 Redshift Spectrum 表,以使用 AWS Glue 数据目录和模式演进功能读取具有不同文件结构的 S3 位置的数据。

如您有任何疑问或建议,请在评论区留言。如果需要进一步支持以构建基于物联网传感器的数据分析解决方案,请与您的 AWS 账户团队联系。

飞跃加速器下载

关于作者

Swapna Bandla 是 AWS 分析专家解决方案架构师团队的高级解决方案架构师。她热衷于理解客户的数据和分析需求,并帮助他们开发基于云的高质量架构解决方案。在工作之外,她喜欢和家人共度时光。

Indira Balakrishnan 是 AWS 分析专家解决方案架构师团队的首席解决方案架构师。她热衷于帮助客户构建基于云的分析解决方案,以通过数据驱动的决策解决业务问题。在工作之外,她会参与孩子的活动,并和家人共度时光。

载入评论