Amazon Redshift 数据摄取选项 大数据博客
Amazon Redshift 数据摄取选项
由 Steve Phillips 和 Sudipta Bagchi 于 2024 年 9 月 5 日发布在 Amazon Redshift 上,属于 分析 分类。 基础知识 (100) 中级 (200) 学习级别 永久链接
关键要点
Amazon Redshift 提供多种数据从不同源摄取到其高性能、可扩展环境中的选项。数据摄取选项包括 COPY 命令、联邦查询、零 ETL 集成、Apache Spark 集成、实时流式数据摄取等。选择合适的方法取决于数据的大小和结构、对实时访问或转换的需求、数据源、现有基础设施和用户技能集。Amazon Redshift 是一项数据仓库服务,支持将数据从多个源高效地摄取到高性能、可扩展的环境中。无论数据存储于操作数据库、数据湖、本地系统、Amazon Elastic Compute CloudAmazon EC2或其他 AWS 服务,Amazon Redshift 都提供多种数据摄取方式,以满足特定需求。目前可用的选项包括:
摄取方式描述COPY 命令从 Amazon Simple Storage ServiceAmazon S3、[Amazon EMR](https//awsamazoncom/emr/、Amazon DynamoDB 或远程主机通过 SSH 加载数据。联邦查询通过源数据库计算运行查询,结果返回到 Amazon Redshift。零 ETL 集成直接从 Amazon Aurora MySQL 兼容版、Amazon RDS for MySQL、Amazon RDS for PostgreSQL 和 DynamoDB 加载数据,并在加载后执行转换。Apache Spark 集成与 AWS Glue 或 Amazon EMR 结合,对数据进行转换后再加载到 Amazon Redshift。流式数据摄取支持从 Amazon Kinesis 数据流、Amazon MSK 和 Amazon Data Firehose 的数据摄取。常用 ETL 工具支持如 Informatica、Matillion 和 DBT Labs 等常用 ETL 工具。接下来的内容将探讨每个选项如下图所示,确定它们适用于不同的用例,并讨论如何以及为什么选择特定的 Amazon Redshift 工具或特性进行数据摄取。
Amazon Redshift COPY 命令
Redshift COPY 命令,一个简单的低代码数据摄取工具,可以从 Amazon S3、DynamoDB、Amazon EMR 以及通过 SSH 从远程主机加载数据。这是一种快速有效地将大量数据加载到 Amazon Redshift 中的方法。它利用 Amazon Redshift 的大规模并行处理MPP架构并行读取和加载大量数据。这使您可以通过将数据拆分为多个文件来利用并行处理,特别是当文件被压缩时。
COPY 命令的推荐用例包括加载大规模数据集和来自支持数据源的数据。COPY 自动将大型未压缩的分隔文本文件拆分成较小的扫描范围,以利用 Amazon Redshift 配置集群和无服务器工作组的并行性。通过自动复制,自动化使 COPY 命令增强,添加了自动数据摄取作业。
COPY 命令的优势:
性能 高效并行加载来自 Amazon S3 或其他源的大型数据集,优化吞吐量简单 简单易用,所需设置最少成本优化 利用 Amazon Redshift 的 MPP,以较低的成本降低数据传输时间灵活性 支持 CSV、JSON、Parquet、ORC 和 AVRO 等文件格式Amazon Redshift 联邦查询
Amazon Redshift 联邦查询允许您将来自 Amazon RDS 或 Aurora 操作数据库的实时数据纳入商业智能 (BI) 和报告应用程序中。
联邦查询适用于希望将运营系统中的数据与存储在 Amazon Redshift 中的数据结合的组织。联邦查询能够跨 Amazon RDS for MySQL 和 PostgreSQL 数据源进行查询,无需提取、转换和加载ETL管道。如果需要将操作数据存储在数据仓库中,则支持在操作数据存储和 Amazon Redshift 表之间的表同步。在需要数据转换的场景中,您可以使用 Redshift 存储过程修改 Redshift 表中的数据。
联邦查询的关键特性:
实时访问 允许跨不同来源查询实时数据,如 Amazon RDS 和 Aurora,无需移动数据统一数据视图 提供跨多个数据库的数据单视图,简化数据分析和报告节省成本 消除了将数据移动到 Amazon Redshift 的 ETL 流程,节省存储和计算成本灵活性 支持 Amazon RDS 和 Aurora 数据源,灵活访问和分析分布式数据Amazon Redshift 零 ETL 集成
Aurora 零 ETL 集成允许从 Amazon Aurora MySQL 兼容版和 Amazon Aurora PostgreSQL 兼容版、Amazon RDS for MySQL预览和 DynamoDB 直接访问操作数据,而无需 ETL,几乎是实时的。您可以使用零 ETL 简化执行变更数据捕获 (CDC) 的摄取管道,从 Aurora 数据库到 Amazon Redshift。零 ETL 集成基于 Amazon Redshift 和 Aurora 存储层的集成,提供简单设置、数据过滤、自动可观察性、自动恢复,并与 Amazon Redshift 配置集群或 Amazon Redshift Serverless 工作组集成。
零 ETL 集成的好处:
无缝集成 自动集成并同步操作数据库与 Amazon Redshift 之间的数据,无需自定义 ETL 流程近实时洞察 提供近实时的数据更新,确保最新数据可用于分析易于使用 简化数据架构,无需单独的 ETL 工具和流程高效性 最小化数据延迟并提供系统间数据一致性,提高整体数据准确性和可靠性Amazon Redshift 与 Apache Spark 的集成
Amazon Redshift 与 Apache Spark 的集成通过 Amazon EMR 或 AWS Glue 自动进行,相较于社区提供的连接器提供性能和安全性优化。该集成增强并简化了安全性,支持 AWS 身份和访问管理 (IAM) 认证。AWS Glue 40 提供了一个可视化 ETL 工具,用于编写读取和写入 Amazon Redshift 的作业,利用 Redshift Spark 连接器进行连接。这简化了构建 ETL 管道到 Amazon Redshift 的过程。Spark 连接器允许使用 Spark 应用程序在将数据加载到 Amazon Redshift 之前进行处理和转换。该集成减少了设置 Spark 连接器的手动过程,并缩短了为分析和机器学习 (ML) 任务准备所需的时间。它允许您指定与数据仓库的连接,并在几分钟内开始处理 Amazon Redshift 数据。
此集成提供了推送能力,用于排序、汇总、限制、连接和标量函数操作,以通过仅移动相关数据来优化性能,从 Amazon Redshift 到消耗该数据的 Apache Spark 应用程序。Spark 作业适合数据处理管道和需要使用 Spark 高级数据转换功能的场景。
通过 Amazon Redshift 与 Apache Spark 的集成,您可以简化带有数据转换要求的 ETL 管道的构建。它提供以下优势:
高性能 利用 Apache Spark 的分布式计算能力进行大规模数据处理和分析可扩展性 轻松扩展以处理海量数据集,通过多个节点分布计算灵活性 支持广泛的数据源和格式,为数据处理任务提供多样性互操作性 与 Amazon Redshift 无缝集成,以实现高效的数据传输和查询Amazon Redshift 流式数据摄取
Amazon Redshift 流式数据摄取的主要好处是能够以非常低的延迟直接从流式源摄取每秒数百兆字节的数据,这是支撑实时分析和洞察的基础。流式摄取支持来自 Kinesis 数据流、Amazon MSK 和 Data Firehose 的数据,要求不需要数据暂存,支持灵活的架构,并通过 SQL 配置。流式摄取支持实时仪表板和操作分析,通过直接将数据摄取到 Amazon Redshift 的物化视图中实现。
Amazon Redshift 流式数据摄取解锁了近实时流式分析:
低延迟 近实时地摄取流式数据,使流式摄取非常适合时间敏感的应用,如物联网 (IoT)、金融交易和点击流分析可扩展性 从 Kinesis 数据流、Amazon MSK 和 Data Firehose 等源管理高吞吐量和大量流式数据集成 与其他 AWS 服务集成,构建端到端的流式数据管道持续更新 保持 Amazon Redshift 中数据的持续更新,反映来自数据流的最新信息Amazon Redshift 数据摄取用例和示例
在这一部分,我们详细讨论不同的 Amazon Redshift 数据摄取用例并提供示例。
Redshift COPY 用例:应用日志数据摄取和分析
从 Amazon S3 中摄取应用日志数据是使用 Redshift COPY 命令最常见的用例。数据工程师需要分析应用日志数据以洞察用户行为、识别潜在问题并优化平台性能。为了实现这一点,数据工程师在多个存储于 S3 桶中的文件并行摄取日志数据到 Redshift 表中。这种并行化利用了 Amazon Redshift 的 MPP 架构,使数据摄取速度比其他方法更快。
鲸鱼加速器苹果版以下代码是使用 COPY 命令从一组 CSV 文件加载数据到 Redshift 表的示例:
sqlCOPY myschemamytableFROM s3//mybucket/data/files/IAMROLE ‘arnawsiam1234567891011role/MyRedshiftRole’FORMAT AS CSV
该代码使用了以下参数:
mytable 是用于数据加载的目标 Redshift 表s3//mybucket/data/files/ 是 CSV 文件所在的 S3 路径IAMROLE 指定访问 S3 桶所需的 IAM 角色FORMAT AS CSV 指定数据文件为 CSV 格式除了 Amazon S3,COPY 命令还可以从其他源加载数据,如 DynamoDB、Amazon EMR、通过 SSH 的远程主机或其他 Redshift 数据库。COPY 命令提供了指定数据格式、分隔符、压缩和其他参数的选项,以处理不同的数据源和格式。
要开始使用 COPY 命令,请查看 从 Amazon S3 加载的 COPY 命令使用。
联邦查询用例:零售公司整合报告与分析
在此用例中,一家零售公司有一个运行在 Amazon RDS for PostgreSQL 上的操作数据库,存储实时销售交易、库存水平和客户信息数据。此外,数据仓库在 Amazon Redshift 上运行,存储历史数据以供报告和分析使用。为了创建整合的报告解决方案,结合实时操作数据与历史数据,而又无需多步骤的 ETL 流程,完成以下步骤:
设置网络连接。确保您的 Redshift 集群和 RDS for PostgreSQL 实例在相同的虚拟私有云 (VPC) 中,或通过 VPC 互联、AWS PrivateLink 或 AWS Transit Gateway 建立了网络连接。为联邦查询创建一个密钥和 IAM 角色:在 AWS Secrets Manager 中创建一个新密钥以存储对 Amazon RDS for PostgreSQL 实例的凭据用户名和密码。创建一个 IAM 角色,赋予访问 Secrets Manager 密钥和 Amazon RDS for PostgreSQL 实例的权限。将 IAM 角色与 Amazon Redshift 集群关联。在 Amazon Redshift 中创建一个外部架构:使用 SQL 客户端或 Amazon Redshift 控制台上的查询编辑器 v2 连接到 Redshift 集群。创建一个引用您的 Amazon RDS for PostgreSQL 实例的外部架构:sqlCREATE EXTERNAL SCHEMA postgresschemaFROM POSTGRESDATABASE mydatabaseSCHEMA publicURI endpointforyourrdsinstanceawsregionrdsamazonawscom5432IAMROLE arnawsiam123456789012role/RedshiftRoleForRDSSECRETARN arnawssecretsmanagerawsregion123456789012secretmyrdssecretabc123
使用联邦查询直接从 Amazon Redshift 查询 Amazon RDS for PostgreSQL 实例中的表:sqlSELECT rorderid rorderdate rcustomername rtotalamount hproductname hcategoryFROM postgresschemaorders r JOIN redshiftschemaproducthistory h ON rproductid = hproductidWHERE rorderdate gt= 20240101
在 Amazon Redshift 中创建视图或物化视图,将联邦查询的操作数据与 Amazon Redshift 中的历史数据结合以供报告使用:sqlCREATE MATERIALIZED VIEW salesreport ASSELECT rorderid rorderdate rcustomername rtotalamount hproductname hcategory hhistoricalsalesFROM ( SELECT orderid orderdate customername totalamount productid FROM postgresschemaorders ) r JOIN redshiftschemaproducthistory h ON rproductid = hproductid
通过本实施,Amazon Redshift 的联邦查询将实时运营数据与 Amazon RDS for PostgreSQL 实例中的历史数据集成,从而消除了多步骤 ETL 流程的需要,并使您能够创建综合报告和分析,结合来自多个源的数据。
要开始使用 Amazon Redshift 的联邦查询摄取,请查看 使用联邦查询查询数据。
零 ETL 集成用例:电子商务应用的近实时分析
假设一个基于 Aurora MySQL 兼容版的电子商务应用管理在线订单、客户数据和产品目录。为了对交易数据进行近实时的分析并进行数据过滤以获得对客户行为、销售趋势和库存管理的洞察,而无需构建和维护多步骤的 ETL 管道,您可以利用 Amazon Redshift 的零 ETL 集成。完成以下步骤:
设置一个 Aurora MySQL 集群必须运行与 MySQL 8032 或更高版本兼容的 Aurora MySQL 305:在所需的 AWS 区域创建一个 Aurora MySQL 集群。配置集群设置,如实例类型、存储和备份选项。创建一个与 Amazon Redshift 的零 ETL 集成:在 AWS RDS 控制台中,导航到零 ETL 集成。选择创建集成并选择您的 Aurora MySQL 集群作为源。选择一个现有的 Redshift 集群或创建一个新集群作为目标。为集成提供名称并审核设置。选择创建集成以启动零 ETL 集成过程。验证集成状态:创建集成后