首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雪花镇疾控中心建设

雪花镇疾控中心建设
EN

Stack Overflow用户
提问于 2022-03-31 21:49:24
回答 1查看 244关注 0票数 0

我的公司正在从Server 2017迁移到雪花,并希望构建捕捉增量更改的历史数据表。在SQL中,这将发生在存储过程中,旧记录将过期(更改为数据),并使用更新的数据插入新行。该设计允许在任何时间点动态检索历史数据。

我的问题是,我如何将这个设计迁移到雪花上呢?据我所读到的过程,它们更像是UDT或标量函数(SQL ),但在javascript .

下面是我们如何在SQL中对表进行CDC操作的简单示例

数据管道会覆盖这个问题吗?如果有人知道雪花101的好教程网站(不是雪花官方文档,那就太可怕了)。将不胜感激

谢谢

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2022-04-01 08:06:10

桌面流是雪花的CDC解决方案

您可以在单个表上设置多个流,它将跟踪特定时间点对表的更改。当您使用流中的数据时,这个时间点就会改变,新的起点是从您使用数据时开始的。这里的消耗是指当您使用数据重新插入另一个表,或者可能将数据插入到日志表中时。简单地说,select语句不使用数据

管道可以是这样的:斯诺管道->暂存表上的流->任务与SP->合并/重新插入目标表

如果您希望保存更改的日志,则可以在暂存表上设置第二个流,并通过将数据插入另一个表来使用该流。

另一个技巧是,如果不想使用第二个流,则修改SP,以便在使用数据之前,在流上运行select,然后立即运行

代码语言:javascript
复制
INSERT INTO my_table select * from table(result_scan(last_query_id()))

这不会消耗流和更改偏移量,并使流数据可供另一个DML操作使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71699521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档