什么是Snowflake变更数据采集(CDC)?| 简化
Raj Verma关于CDC,变化数据捕获,数据集成,数据复制,数据仓库,Snowflake- 2022年6月27日 -为Hevo写作
在当今世界,操作系统中的数据变化相当频繁。另一方面,传统的数据仓库,不包含最新的数据。最新的数据被存储在运营系统中,然后再按设定的频率放入数据仓库。Snowflake 是一个现代数据仓库,已成为业界领先的基于云的 SaaS(软件即服务) 数据平台。Snowflake 变更数据捕获(CDC)使其很容易检测到一个表中的新变化/数据,以 便有效处理。
在今天的数据驱动的经济中,组织比以往任何时候都更依赖基于证据的决策。今天,几乎所有的公司都在收集数据以更好地了解他们的业务和客户。从公司数据中提取的有价值的见解有助于做出更明智和明智的商业决策,帮助推动业务增长和盈利能力。因此,公司以更好和更有效的方式管理他们的数据变得越来越重要,而这正是变化数据采集的地方。
这篇文章是关于Snowflake变化数据采集,以及它如何让你更新当前的数据变化。但在开始使用 Snowflake 变更数据采集之前,让我们先简单讨论一下 Snowflake 及其突出的功能。
目录
什么是 Snowflake?
图片来源:www.commons.wikimedia.org
Snowflake是一个现代的云数据仓库解决方案,以 SaaS 形式提供。它建立在亚马逊网络服务,微软Azure,或谷歌云基础设施,提供了一个无限制的平台来存储和检索数据。Snowflake 数据仓库利用专有的 SQL 数据库引擎和云的特定架构。
Snowflake 不需要安装、配置或管理任何硬件或软件,这使得它适合那些不希望将 资源专门用于内部服务器设置、维护或支持的企业。Snowflake 的安全和共享功能使企业很容易使用任何 ETL 解决方案安全地实时交换 和共享数据。Snowflake 的架构允许大数据的灵活性。与市场上的其他数据仓库相比,Snowflake因其可扩展性和相对容易使用而受到关注。
Snowflake 的主要特点
以下是负责Snowflake的巨大普及的原因。
- **缓存范式:**Snowflake 采用了缓存范式来快速提供缓存的结果。它利用持久性查询结果来避免重新生成报告。
- 标准和扩展的 SQL 支持。Snowflake 支持大多数用于查询数据的 SQL 的 DDL 和 DML 命令。除此之外,它还支持高级 DML 事务,存储过程,横向视图等。
- **可扩展性。**众所周知,Snowflake 的架构将其 "计算 "和 "存储 "单元分开,从而允许它们以 不同的方式扩展。因此,客户可以只为所使用的服务付费。
- **安全性。**Snowflake 支持各种改进的认证机制。这包括双因素认证和通过联合认证的 SSO。
- **半结构化的数据支持。**Snowflake 的架构支持读取数据类型的 VARIANT 模式,使结构化和半结构化数据存储 在同一区域。
使用 Hevo 的无代码数据管道在几分钟内复制 Snowflake 的数据
Hevo 数据,一个完全管理的数据管道平台,可以帮助你在几次点击中自动化,简化和 丰富你的数据复制过程。通过 Hevo 的各种连接器和快速的数据管道,您可以从100 多个数据源提取和加载数据,直 接进入Snowflake或您选择的数据仓库。简化你的Snowflake变化数据采集,并使用Hevo的强大和内置的转换层准备你的数据进行分析,而不需要写一行代码
Hevo是最快,最简单,最可靠的数据复制平台,将节省你的工程带宽和时间数倍。今天就试试我们的14天免费试用版,体验一下完全自动化的无障碍数据复制吧
什么是变更数据捕获(CDC)?
图片来源:www.hazelcast.com
变更数据捕获(CDC)是一种理想的解决方案,用于捕获数据库中近乎实时的数据移动。CDC是指用于检测和跟踪数据库中数据变化的软件设计模式的集合。它触发了与数据相关的事件,导致任何变化数据捕获的特定行动被执行。所有公司都需要访问实时数据流以进行高效的数据分析,而CDC通过在新的数据库事件发生时立即处理数据,提供近乎实时的数据移动。
使用CDC,事件被实时捕获和流,它有助于在高速数据环境中实现可靠、低延迟和可扩展的数据复制。它通过实施增量数据加载,消除了批量数据加载的过程。这样一来,数据仓库或数据库保持活跃,以便在变化数据捕获事件发生后立即执行特定的行动。此外,公司可以通过CDC以近乎实时的方式向BI(商业智能)工具和团队成员发送新鲜的数据更新,使他们保持最新的状态。
什么是雪花流?
在今天的数据驱动的经济中,你的系统中的数据变化相当频繁,如果每次都将数据完全加载到Snowflake中,那将是一项复杂的任务。这将花费你的时间和金钱。这就是Snowflake变更数据捕获(CDC)的作用。您只需使用几个命令就可以在 Snowflake 中有效地实现 CDC,而这是通过 Snowflake 中的流概念实现的。
一个 Snowflake 流对象基本上跟踪源表中的行的所有 DML 更改,并存储每个更改的元数据。该元数据在一个表的两个交易时间点之间被使用,以检索更改的数据。
Snowflake 流捕获源表中存在的所有行的初始快照,作为该表相对于初始时间点的 当前版本。然后,每次插入、更新或删除源表中的数据时,流都会启用更改数据捕获。每当任何DML变化被提交时,Streams都会有额外的列。因此,通过捕获CDC事件,你可以很容易地合并从源到目标的变化,使用 **MERGE**语句来合并源表和目标表。
如何设置 Snowflake 变更数据捕获与流?
要开始使用 Snowflake 变更数据捕获,请登录到 Snowflake Web-Based UI 或 SnowSQL。然后,按照下面提到的步骤。
**第1步:**运行以下命令来创建一个 **CDC_Stream**.
create or replace database CDC_STREAM;
Use CDC_STREAM;
第二步:你需要一个源表和一个目标表来进行操作。运行下面的命令,创建一个名为" "的源表。employees_source".
create or replace table employees_source (
id int,
first_name varchar(200),
last_name varchar(200) )
第3步:运行下面的命令,创建一个名为" "的目标表。employees_destination".
create or replace table employees_destination ( id int, first_name varchar(200), last_name varchar(200) );
**第4步:**运行下面的命令,在源表的顶部创建一个流。这个流将跟踪表内的任何数据变化。 **EMPLOYEES**表的任何数据变化。
create or replace stream employee_stream on table employees_source;
**注意:**只要没有数据管理命令来消耗它,任何对源表的数据变化都会被认为是 **INSERT**而不是 **UPDATE**.
为了本演示的目的,让我们向employees_source 表添加几条记录。运行下面的命令来完成。
insert into employees_source values (1,’Ron’,’Higgins’);
insert into employees_source values (2,’Joseph’,’Geller’);
insert into employees_source values (3,’Charlie’,’Bricks’);
insert into employees_source values (4,’Mathew’,’Smith’);
insert into employees_source values (5,’Daisy’,’Whelsh’);
insert into employees_source values (6,’Scott’,’Hall’);
insert into employees_source values (7,’Jose’,’Martinez’);
insert into employees_source values (8,’Bryan’,’Son’);
insert into employees_source values (9,’Nisha’,’Grant’);
insert into employees_source values (10,’Hamilton’,’Gell’);
insert into employees_source values (11,’Larry’,’Armstrong’);
insert into employees_source values (12,’Emilia’,’Rodrigez’);
insert into employees_source values (13,’Kate’,’Becket’);
**第5步:**在继续之前,让我们查看流中的变化日志。
select * from employee_stream;
正如你所看到的,这里有记录和元数据字段。有3个额外的META列(METADATA$ROW_ID,METADATA$ISUPDATE, 和METADATA$ACTION)被引入,它们使我们非常容易检测到某行是否被更新、删除或插入。而且,由于这是一个初始加载,所有的东西都被插入了。
现在,在目标表中没有记录,因为它们还在流中。
**第6步:**让我们使用语句将记录移动到目的地。 **MERGE**语句。
Use CDC_STREAM;
MERGE into employees_destination as T
using (select *
from employee_stream) AS S
ON T.id = s.id
when matched AND S.metadata$action = ‘INSERT’ AND S.metadata$isupdate
THEN
update set T.first_name = S.first_name, T.last_name = S.last_name
When matched
And S.metadata$action = ‘DELETE’ THEN DELETE
when not matched
And S.metadata$action = ‘INSERT’ THEN
INSERT (id,
first_name,
last_name)
VALUES (S.id,
S.first_name,
S.last_name);
现在,数据已经转移到目的地,流中将没有任何东西。在MERGE 命令消耗完后,流对象将变成空的。
循环往复,流将继续记录employees_source 表中发生的所有变化。
**第7步:**现在让我们查看目标表。运行下面的命令来做。
select * from employees_destination;
正如你所看到的,目标表被更新了记录。
是什么使 Hevo 的 Snowflake ETL 流程成为同类中最好的?
如果你有大量的数据,提供一个高质量的ETL解决方案可能是一个困难的任务。Hevo 的自动化,无代码平台使你拥有一切你需要的东西,以实现顺利的 Snowflake 更改数据捕获和数据复制经验。
看看是什么让 Hevo 令人惊奇。
- 完全管理。Hevo不需要管理和维护,因为它是一个完全自动化的平台。
- 数据转换。Hevo提供了一个简单的界面来完善、修改和充实你要传输的数据。
- 更快的洞察力生成。Hevo提供近乎实时的数据复制,所以你可以获得实时的洞察力生成和更快的决策。
- 模式管理。Hevo可以自动检测传入数据的模式,并将其映射到目标模式。
- 可扩展的基础设施。Hevo有内置的100多个来源的集成(有40多个免费来源),可以帮助你根据需要扩展你的数据基础设施。
- 实时支持。Hevo团队24小时不间断地通过聊天、电子邮件和支持电话向客户提供特殊支持。
**第8步:**现在,是时候展示Snowflake变化数据捕获。为此目的,继续在源表中进行更改。让我们更新一条记录并观察流。
update employees_source
set last_name="Harper"
where id=1;
这基本上是将 **last_name**作为 "Harper",用于 **id=1**.
-
在观察流时,你会发现 2 条记录,
INSERT和DELETE。这是因为原来的last_name(即Higgins)被删除了id=1,新的last_name(即Harper)被更新。 -
使用
MERGE命令来更新目标表,如下图所示。
Use CDC_STREAM;
MERGE into employees_destination as T
using (select *
from employee_stream
Where Not (metadata$action = ‘DELETE’ AND metadata$isupdate = TRUE)) AS S
ON T.id = s.id
when matched AND S.metadata$action = ‘INSERT’ AND S.metadata$isupdate
THEN
update set T.first_name = S.first_name, T.last_name = S.last_name
When matched
And S.metadata$action = ‘DELETE’ THEN DELETE
when not matched
And S.metadata$action = ‘INSERT’ THEN
INSERT (id,
first_name,
last_name)
VALUES (S.id,
S.first_name,
S.last_name);
**第9步:**运行下面的命令,看一下目标表。
select * from employees_destination;
在这里,你将能够清楚地观察到对源表所做的更改在目标表中的更新。就这样,这就是 Snowflake 变更数据捕获的简单性。
为了更好地理解,您可以通过删除或更新源表中的其他记录来尝试 Snowflake 更改数据捕获。而且,不要忘记使用MERGE 命令来反映在目标表中的变化。
结论
Snowflake 变更数据捕获已经完全取代了实施 CDC 的旧方法。虽然 Snowflake 已经是一个行业领先的基于云的数据平台,以其速度和灵活的仓储选项而闻名,但 Snowflake CDC 使它更值得使用。
在每天有数百万条记录被处理,但你只想更新修改过的记录的情况下,Snowflake 更改数据捕获被证明是非常有用的。做一个完整的负载会消耗你的资源和时间,所以只需利用 Snowflake 更改数据捕获并使用MERGE 命令来更新目标。
然而,如果没有专门的工程资源,手工编码的 CDC 基础设施可能被证明是一项繁琐的任务。投资于像Hevo 这样的开箱即用的工具要有效得多。
Hevo数据与100多个来源的强大集成,使你不仅可以从来源导出数据,并实时加载数据到目的地,如Snowflake,但也可以转换和丰富你的数据,并使其准备好分析,这样你就可以专注于你的关键业务需求,并使用BI工具进行深入的分析。
给Hevo数据一个尝试,今天注册一个14天的免费试用。Hevo为不同的使用情况和业务需求提供计划和定价,请检查他们
在下面的评论部分分享您在Snowflake变更数据捕获(CDC)方面的工作经验。