我的公司正在从Server 2017迁移到雪花,并希望构建捕捉增量更改的历史数据表。在SQL中,这将发生在存储过程中,旧记录将过期(更改为数据),并使用更新的数据插入新行。该设计允许在任何时间点动态检索历史数据。
我的问题是,我如何将这个设计迁移到雪花上呢?据我所读到的过程,它们更像是UDT或标量函数(SQL ),但在javascript .
下面是我们如何在SQL中对表进行CDC操作的简单示例
数据管道会覆盖这个问题吗?如果有人知道雪花101的好教程网站(不是雪花官方文档,那就太可怕了)。将不胜感激
谢谢
update h
set h.expiration_date = t.effective_date
from data_table_A_history h
join data_table_A as t
on h.account_id = t.account_id
where h.expiration_date is null
and (
(isnull(t.person_name,'x') <> isnull(h.person_name,'x')) or
(isnull(t.person_age,0) <> isnull(h.person_age,0))
)
---------------------------------------------------------------------
insert into data_table_A_history (account_id,person_name,person_age)
select
account_id,person_name,person_age
from
data_table_A t
left join data_table_A_history h
on t.account_id = h.account_id
and h.expiration_date is null
where
h.account_id is null发布于 2022-04-01 08:06:10
桌面流是雪花的CDC解决方案
您可以在单个表上设置多个流,它将跟踪特定时间点对表的更改。当您使用流中的数据时,这个时间点就会改变,新的起点是从您使用数据时开始的。这里的消耗是指当您使用数据重新插入另一个表,或者可能将数据插入到日志表中时。简单地说,select语句不使用数据
管道可以是这样的:斯诺管道->暂存表上的流->任务与SP->合并/重新插入目标表
如果您希望保存更改的日志,则可以在暂存表上设置第二个流,并通过将数据插入另一个表来使用该流。
另一个技巧是,如果不想使用第二个流,则修改SP,以便在使用数据之前,在流上运行select,然后立即运行
INSERT INTO my_table select * from table(result_scan(last_query_id()))这不会消耗流和更改偏移量,并使流数据可供另一个DML操作使用。
https://stackoverflow.com/questions/71699521
复制相似问题