新闻中心

  • 首页 i(name 提升您的 ETL 性能,利用多个 Redshift 仓库进行写入预览大数据博客

提升您的 ETL 性能,利用多个 Redshift 仓库进行写入预览大数据博客

2026-01-27 14:18:04

利用多个 Redshift 数据仓库提升 ETL 性能

主要要点

在这篇文章中,我们讨论了如何透过亚马逊 Redshift 的数据共享功能,使用多个数据仓库来提升 ETL提取、转换和加载运作的性能。这允许用户根据不同的工作负载需求,使用不同类型和规模的数据仓库来进行数据写入。此外,此功能还有助于更好地控制成本、提升协作及确保数据的即时性。

引言

亚马逊 Redshift 是一个快速的云数据仓库,能处理 PB 级资料,并且受到无数客户的信任,以支持他们的分析工作负载。随著越来越多的客户使用 Redshift 的数据共享功能,迅速实现跨集群和伺服器无服务工作群组的资料存取,中间无需移动或复制数据。这使得数据的存取能够同时支持数千位用户的需求。

本文将介绍使用多数据仓库进行写入的功能,此功能目前正处于公开预览阶段,并且是优化 ETL 工作负载的利器。使用者可以轻松地将 ETL 工作任务分摊至多个仓库,从而提升执行的预测性。在进一步讨论时,将说明何时应考虑使用多个数据仓库进行同一数据库的写入,并解释多数据仓库写入如何运作,还会提供示例供读者参考。

使用多个数据仓库写入同一数据库的理由

提升混合工作负载的性能与可预测性

客户经常从符合初始工作负载需求的数据仓库开始。例如,若仅需要支持偶尔的用户查询及每晚导入 1000 万行的购买数据,则 32 RPU 的工作群组可能正好适合需求。然而,若自此新增一个每小时导入 4 亿行用户网站和应用互动数据的工作负载,将会减慢现有用户的响应速度,因为新工作负载竞用资源。选择升级到一个更大的工作群组,虽然可以快速完成读取和写入任务,但这可能会增加不必要的费用。因此,对于多工作负载共享计算的情况,当其中一个工作负载出现峰值时,其他工作负载的绩效也可能受到影响。

以下是单仓库架构的示意图:

透过数据共享,现在可以将新的网站用户互动 ETL 分配到独立的、更大的工作群组,使其能迅速而有效地完成,且不会影响到现有工作负载的成本或完成时间。以下是多仓库架构的示意图:

这种多仓库架构使所有写入工作负载都能够及时完成,并且所需的总计算资源与单仓库支持所有工作负载相比,要少并因此降低成本。

控制与监控成本

在使用单一数据仓库执行所有 ETL 任务的情况下,很难了解哪些工作负载在消耗您的成本。举例来说,您可能会有某个团队从 CRM 系统导入数据,而另一个团队则在导入内部操作系统中的数据。在这种情况下,监控和控制成本就会变得困难,因为查询将共用相同的运算资源。透过将写入工作负载分拆至不同的仓库,您可以独立地监控和控制成本,确保各工作负载能独立进展,无需资源冲突。

轻松协作实时数据

有时候,两个团队会基于数据治理、计算性能或成本的原因而使用不同的仓库,但也需要向共享数据写入。例如,您可能会有一组客户 360 表格需要随著客户与行销、销售和客户服务团队的互动而实时更新。当这些团队使用不同的数据仓库时,保持数据的即时性会变得困难,因为您可能需要使用亚马逊简单存储服务Amazon S3、亚马逊简单通知服务Amazon SNS、亚马逊简单伫列服务Amazon SQS和 AWS Lambda 等工具构建多服务 ETL 流程来追踪每个团队数据的即时变更并将其导入统一的来源。

透过数据共享的写入能力,您能在几次点击之内便可为不同的团队授予对数据库对象的精确权限例如,对一个表授予 SELECT 权限,而对另一个则授予 SELECT、INSERT 和 TRUNCATE 权限。这样一来,团队便可以使用各自的仓库开始写入共享对象。数据一经提交便会在所有仓库中实时提供,即便相关仓库来自不同的帐户或区域,这样的功能也能有效运行。

提升您的 ETL 性能,利用多个 Redshift 仓库进行写入预览大数据博客

在接下来的部分中,我们将介绍如何通过数据共享使用多个仓库向同一数据库写入数据。

解决方案概述

在此解决方案中,我们将使用以下术语:

命名空间 数据库对象、用户和角色的逻辑容器,包含他们对数据库对象的权限以及计算伺服器无服务工作组和专用集群。数据共享 数据共享的单位。给数据共享授予对对象的权限。生产者 创建数据共享的数据仓库,为数据共享授予对对象的权限,并授予其他仓库和帐户访问该数据共享的权限。消费者 获授访问数据共享的数据仓库。可以将消费者视为数据共享的租户。

此用例涉及一个拥有两个数据仓库的客户:一个主要数据仓库用于大多数的读写查询以及一个附属的次要数据仓库,主要用于向主要命名空间写入。我们使用的是 AWS Labs 提供的 10 GB TPCH 数据集,该数据集被托管于 S3 桶中。您可以复制并粘贴许多后续命令以进行跟随。尽管这对于数据仓库来说是较小的数据集,但足够进行功能测试。

以下是我们的解决方案架构示意图:

在主要命名空间中,我们首先设置连接,并创建一个名为 marketing 的数据库,该数据库包含 prod 和 staging 架构,并在 prod 架构中创建三个表格,分别称为 region、nation 和 afcustomer。接著,我们从 region 和 nation 表中导入数据,但不会将数据导入 afcustomer 表中。

然后,在主要命名空间中创建一个数据共享。我们为该数据共享授予在 staging 架构中创建对象的能力,以及在 prod 架构中选择、插入、更新和删除对象的能力。接著,再将该命名空间的使用权限授予其他命名空间。

此时,我们连接到次要数据仓库。我们在该工作仓库中根据数据共享创建一个数据库并创建一个新用户。随后,授予该新用户对数据共享对象的权限。然后再作为新用户重新连接到次要数据仓库。

在这之后,我们在数据共享的 staging 架构中创建一个客户表,并从 TPCH 10 个客户数据集中复制数据到该暂存表中。我们然后将暂存客户表的数据插入共享的 afcustomer 生产表中,随后清空该表。

至此,ETL 任务完成,您能够从主要仓库和次要 ETL 仓库中检索到由次要 ETL 仓库插入的主要命名空间中的数据。

前提条件

要跟进本文,您需要准备以下前提条件:

创建两个使用 PREVIEW2023 跟踪的仓库。这些仓库可以混合使用伺服器无服务工作群组、ra34xl 集群和 ra316xl 集群。在两个仓库中均需有 超级用户 的访问权限。拥有一个 AWS 身份与访问管理 (IAM) 角色,可以将数据从 Amazon Redshift 导入到 Amazon S3Amazon Redshift 在创建集群或伺服器无服务工作群组时会默认创建一个。若需要跨帐户访问,则需要拥有一个 IAM 用户或角色,该角色有权授权数据共享。具体的 IAM 策略详情,请参见 共享数据共享。

有关最新资讯,请参见 在 AWS 帐户内或跨帐户共享读取和写入数据预览。

设置主要命名空间生产者

在此部分中,我们将展示如何设置主要生产者命名空间以存储我们的数据。

连接到生产者

完成以下步骤以连接到生产者:

在 Amazon Redshift 控制台中,选择导航窗格中的 Query editor v2。

在 Query editor v2 中,您可以在左侧窗格看到您访问的所有仓库。可以展开它们以查看其数据库。

使用超级用户连接到您的主要数据仓库。

执行以下命令以创建 marketing 数据库:

sqlCREATE DATABASE marketing

创建要共享的数据库对象

完成以下步骤以创建您的数据库对象进行共享:

在创建 marketing 数据库后,将数据库连接切换到 marketing 数据库。

您可能需要刷新页面才能看到该数据库。

执行以下命令以创建打算共享的两个架构:

免费国际加速器永久免费版

sqlCREATE SCHEMA stagingCREATE SCHEMA prod

使用以下代码创建要共享的表。这些是来自 AWS Labs DDL 文件的标准 DDL 语句,但表名已做修改。

sqlCREATE TABLE prodregion ( rregionkey INT4 NOT NULL rname CHAR(25) NOT NULL rcomment VARCHAR(152) NOT NULL PRIMARY KEY (RREGIONKEY))

CREATE TABLE prodnation ( nnationkey INT4 NOT NULL nname CHAR(25) NOT NULL nregionkey INT4 NOT NULL ncomment VARCHAR(152) NOT NULL PRIMARY KEY (NNATIONKEY))

CREATE TABLE prodafcustomer ( ccustkey INT8 NOT NULL cname VARCHAR(25) NOT NULL caddress VARCHAR(40) NOT NULL cnationkey INT4 NOT NULL cphone CHAR(15) NOT NULL cacctbal NUMERIC(12 2) NOT NULL cmktsegment CHAR(10) NOT NULL ccomment VARCHAR(117) NOT NULL PRIMARY KEY (CCUSTKEY)) DISTKEY(ccustkey) SORTKEY(ccustkey)

将数据复制到 region 和 nation 表中

运行以下命令,将数据从 AWS Labs S3 桶复制到 region 和 nation 表中。如果您在创建集群时选择默认创建 IAM 角色,则可以复制和粘贴以下命令来将数据加载到您的表中:

sqlCOPY prodnation FROM s3//redshiftdownloads/TPCH/218/10GB/nationtbl IAMROLE DEFAULT DELIMITER REGION useast1COPY prodregion FROM s3//redshiftdownloads/TPCH/218/10GB/regiontbl IAMROLE DEFAULT DELIMITER REGION useast1

创建数据共享

使用以下命令创建数据共享:

sqlCREATE DATASHARE marketing PUBLICACCESSIBLE TRUE

publicaccessible 设定定义数据共享能否被公共可访问的专用集群和伺服器无服务工作群组的消费者使用。如果您的仓库不是公共可访问的,可以忽略该字段。

向数据共享授予对架构的权限

要将对象和权限添加到数据共享中,请使用授权语法,指定您希望授予权限的数据共享:

sqlGRANT USAGE ON SCHEMA prod TO DATASHARE marketingGRANT USAGE CREATE ON SCHEMA staging TO DATASHARE marketing

这使得数据共享的消费者可以使用添加到 prod 架构中的对象,并能使用和创建添加到 staging 架构中的对象。为了保持向后兼容性,您可以使用 ALTER DATASHARE 命令添加架构,这将等同于授予对该架构的使用权。

向数据共享授予对表的权限

现在,您可以使用授权语法将对表的访问权限授予数据共享,具体操作如下:

sqlGRANT ALL ON TABLE prodafcustomer TO DATASHARE marketing

为了保持向后兼容性,使用 ALTER DATASHARE 命令添加表将等同于授予该表的选择权。

此外,我们还添加了范围权限,允许您对数据共享中的所有当前和未来对象授予相同的权限。我们为数据共享添加了 prod 架构表的范围选择权限:

sqlGRANT SELECT FOR TABLES IN SCHEMA prod TO DATASHARE marketing

在这次授权后,客户将拥有在 prod 架构中所有当前和未来表的选择权限,这会赋予他们对 region 和 nation 表的选择访问。

查看授予数据共享的权限

您可以运行以下命令来查看授予数据共享的权限:

sqlSHOW ACCESS FOR DATASHARE marketing

向次