开始使用 Amazon DynamoDB 与 Amazon Redshift 的零 ETL 集成 大

开始使用 Amazon DynamoDB 的零ETL 与 Amazon Redshift 集成

作者:Ekta Ahuja Raghu Kuppala 和 Veerendra Nayak日期:2024年10月17日类别:Amazon DynamoDB,Amazon Redshift,分析完整原文链接

关键要点

零ETL集成:Amazon DynamoDB 和 Amazon Redshift 的结合,使您可以高效分析DynamoDB的数据,而不必构建和维护复杂的数据管道。操作简易性:此集成极大简化了数据的提取、转化和加载ETL流程,实现数据的无缝移动。丰富的分析功能:可以利用 Amazon Redshift 的高级SQL、机器学习等功能进行深度分析。客户案例:用户反馈零ETL集成显著降低了操作负担。

我们很高兴地宣布,Amazon DynamoDB 的零ETL 集成现已正式上线,您可以在Amazon Redshift上高性能分析 DynamoDB 数据而几乎不影响生产工作负载。数据一旦写入 DynamoDB 表,即可无缝地在 Amazon Redshift 中使用,省去了构建和维护复杂数据管道的需求。

零ETL集成简化了数据的点对点传输,无需创建和管理数据管道。您可以在Amazon Redshift Serverless 工作组或指定的 Amazon Redshift 集群上创建此集成,并利用 Amazon Redshift 的丰富功能来执行高级分析,例如高性能 SQL、内置机器学习和 Spark 集成、自动增量刷新的物化视图MV等。

这种零ETL 集成帮助我们的客户简化了提取、转化和加载ETL管道。以下是 Verisk Analytics DevOps 主管 Keith McDuffee 的 testimony:

“我们的仪表板基于 Amazon Redshift 上的事务数据。之前,我们使用自家解决方案将数据从 DynamoDB 移动到 Amazon Redshift,但常常超时,导致了很多操作负担和遗漏洞察。使用 DynamoDB 和 Amazon Redshift 的零ETL 集成,我们不再遇到这种问题,数据无缝且持续地复制到 Amazon Redshift。”

在本篇文章中,我们展示了一个电商应用如何利用该零ETL 集成,根据用户的位置信息和注册时间分析客户的分布情况。您还可以利用该集成进行用户留存和流失分析,通过比较不同时间段内活跃用户的数量来计算留存率。

解决方案概述

零ETL 集成提供了一个端到端的完全托管过程,使数据能够无缝从 DynamoDB 表移动到 Amazon Redshift,无需手动ETL过程,确保亚马逊红移环境中的高效和增量更新。此集成利用 DynamoDB 导出每 1530 分钟增量复制数据变更。初始数据载入为全量加载,耗时会根据数据量而有所不同。此集成还支持从多个 DynamoDB 表复制数据到一个 Amazon Redshift 提供的集群或无服务器工作组中,提供多应用的数据整体视图。

该复制过程几乎不会对 DynamoDB 表的性能或可用性造成影响,也不会消耗 DynamoDB 的读取容量单位RCUs。您的应用仍将使用 DynamoDB,同时这些表中的数据将被无缝复制到 Amazon Redshift,用于分析工作负载如报告和仪表板。

下图说明了这种架构:

接下来,我们将展示如何开始使用 DynamoDB 的零ETL 集成和 Amazon Redshift。本次发布支持使用 AWS 命令行界面AWS CLI、AWS SDKs、API 和 AWS 管理控制台 创建和管理零ETL 集成。本文将使用控制台演示。

先决条件

请完成以下前置步骤:

在 DynamoDB 表上启用 时间点恢复PITR。为目标 Redshift 数据仓库启用 大小写敏感性。根据 此处 的说明,为 DynamoDB 和 Amazon Redshift 附加基于资源的策略。创建集成的 AWS 身份与访问管理IAM用户或角色应具备授权的身份策略,具体操作请见 此处。

创建 DynamoDB 的零ETL 集成

您可以在 DynamoDB 控制台或 Amazon Redshift 控制台创建集成。以下步骤使用 Amazon Redshift 控制台。

在 Amazon Redshift 控制台中,选择导航菜单中的 零ETL 集成。选择 创建 DynamoDB 集成。

如果您选择在 DynamoDB 控制台中创建集成,请选择导航菜单中的 集成,然后选择 创建集成 和 Amazon Redshift。

对于 集成名称,输入名称例如 ddbrscustomerprofileszetlintegration。

选择 下一步。

选择 浏览 DynamoDB 表,并选择将作为源的表。

选择 下一步。

一次只能选择一张表。如果您需要从多个表中获取数据到同一个 Redshift 集群,您需要为每一张表创建单独的集成。

如果没有在源 DynamoDB 表上启用 PITR,选择源表时将会出现错误。在这种情况下,您可以选择 为我修复 以启用源表的 PITR。检查更改并选择 继续。

选择 下一步。

选择目标 Redshift 数据仓库。如果该数据仓库在同一账户中,您可以浏览并选择它。如果在不同账户中,您可以提供目标 Redshift 集群的 Amazon 资源名称ARN。

如果出现与资源策略相关的错误,请选择 为我修复,在此创建过程中 Amazon Redshift 会修复策略。或者,您也可以在创建零ETL 集成之前 手动添加 Amazon Redshift 的资源策略。检查更改并选择 重新启动并继续。

选择 下一步 完成您的集成。

零ETL 集成创建的状态应显示为 创建中。请等待状态更改为 活动。

从集成创建 Redshift 数据库

完成以下步骤以创建 Redshift 数据库:

在 Amazon Redshift 控制台中,导航到最近创建的零ETL 集成。

选择 从集成创建数据库。

对于 目标数据库名称,输入名称例如 ddbrscustomerprofileszetldb。

选择 创建数据库。

创建数据库后,其状态应从 创建中 更改为 活动。这将开始将源 DynamoDB 表中的数据复制到目标 Redshift 表,该表将在目标数据库 (ddbrscustomerprofileszetldb) 的公共模式下创建。

现在,您可以使用与 DynamoDB 的集成在 Amazon Redshift 中查询数据。

理解您的数据

从 DynamoDB 导出的数据存储在您通过零ETL 集成创建的 Redshift 数据库 (ddbrscustomerprofileszetldb) 中。会创建一个与 DynamoDB 源表同名的单表,并位于默认公共Redshift 架构下。DynamoDB 仅对主键属性分区键和可选择的排序键执行模式检验。因此,您的 DynamoDB 表结构将复制到 Amazon Redshift 的三个列:分区键、排序键,以及一个名为 value 的 SUPER 数据类型列,包含所有的属性。value 列中的数据是 DynamoDB JSON 格式的。有关数据格式的详细信息,请参见 DynamoDB 表导出输出格式。

DynamoDB 的分区键用作 Redshift 表的分布key,而 DynamoDB 网络键和排序键的组合则用作 Redshift 表的排序key。Amazon Redshift 还允许使用 ALTER SORT KEY 命令更改零ETL 集成复制的表的排序键。

在 Amazon Redshift 中,DynamoDB 数据是只读数据。数据可用于 Amazon Redshift 表后,您可以使用 PartiQL SQL 查询 value 列,或在表上创建和查询物化视图,物化视图会自动增量刷新。

有关 SUPER 数据类型的更多信息,请查看 Amazon Redshift 中的半结构化数据。

查询数据

要验证已导入的记录,您可以使用 Amazon Redshift 查询编辑器,通过 PartiQL SQL 查询 Amazon Redshift 中的目标表。例如,您可以使用以下查询选择 email 并展开 value 列中的数据以获取客户姓名和地址:

sqlSELECT email valuecustnameStext AS custname valueaddressStext AS custaddress value FROM ddbrscustomerprofileszetldbpubliccustomerprofiles

为了展示增量更改的复制过程,我们将对源 DynamoDB 表进行以下更新:

飞兔视频加速器在 DynamoDB 表中添加两个新项目: bash aws dynamodb putitem tablename customerprofiles item { email { S sarahwilson@examplecom } custname { S Sarah Wilson } username { S swilson789 } phone { S 5550123456 } address { S 789 Oak St Chicago IL 60601 } custcreatedt { S 20230401T090000Z } custupddt { S 20230401T090000Z } status { S active } }

bash aws dynamodb putitem tablename customerprofiles item { email { S michaeltaylor@examplecom } custname { S Michael Taylor } username { S mtaylor123 } phone { S 5552468024 } address { S 246 Maple Ave Los Angeles CA 90001 } custcreatedt { S 20221101T080000Z } custupddt { S 20221101T080000Z } status { S active } }

更新 DynamoDB 表中一项的地址: bash aws dynamodb updateitem tablename customerprofiles key {email {S sarahjones@examplecom}} updateexpression SET address = a expressionattributevalues {a{S124 Main St Somewhereville USA }}

删除 michaelwilson@examplecom 的项目: bash aws dynamodb deleteitem tablename customerprofiles key {email {S michaelwilson@examplecom}}

这些更改后,DynamoDB 表 customerprofiles 将有四项原有三项、两项新增、一项删除,如下图所示:

然后,您可以进入查询编辑器验证这些更改。此时,您可以期待增量更改反映在 Redshift 表中表内共四条记录。

在零ETL 复制的表上创建物化视图

常见的分析使用案例通常涉及通过复杂查询在多个源表之间聚合数据,以便为下游应用生成报告和仪表板。客户通常创建晚绑定视图来满足此类用例,但这些视图并不总是针对严格的查询服务水平协议SLA进行优化,因为基础查询的运行时间较长。另一个选择是创建一个表,以存储来自多个源表的数据,但这带来了根据源表中的更改逐步更新和刷新数据的挑战。

为了解决这些用例,并规避与传统选项相关的挑战,您可以在 Amazon Redshift 的零ETL 复制表之上创建物化视图,这些视图将在基础数据更改时自动增量刷新。物化视图对于存储经常访问的数据也很方便,可以通过零ETL 集成展开并压缩存储在 SUPER 列 value 中的数据。

例如,我们可以使用以下查询在 customerprofiles 表上创建一个物化视图来分析客户数据:

开始使用 Amazon DynamoDB 与 Amazon Redshift 的零 ETL 集成 大

sqlCREATE MATERIALIZED VIEW devpubliccustomermvAUTO REFRESH YESASSELECT valuecustnameSvarchar(30) AS custname valueusernameSvarchar(100) AS username valueemailSvarchar(60) AS custemail valueaddressSvarchar(100) AS custaddres valuephoneSvarchar(100) AS custphonenbr valuestatusSvarchar(10) AS custstatusvaluecustcreatedtSvarchar(10) AS custcreatedt valuecustupddtSvarchar(10) AS custupdatedt FROM ddbrscustomerprofileszetldbpubliccustomerprofilesGROUP BY 123456