SSIS关于更新的问题

guidahuasheng 2009-12-16 03:00:51
有两表:表1,表2,表1是源表,数据会更新,里面的数据也可能修改,现在让表2的数据同表1一样(既更新了,也更新,修改了也修改)
我的做法是这样的,数据源OLE DB 选表1,拉一个渐变维度组件来,把源绿线拉到该组件,编辑渐变维度组件,表选表2,输入列中一列的键类型选为业务键,其他都不变,下一步中其他的列都选为维度列,更改类型为 变化的,下一步,在变化的类型上打勾.
我这样做可以实现更新与修改的数据.
不知道大家是怎么做的, 还有我这样做的话会不会影响性能,因为做BI的话数据量很大的,
请大家介绍一下自己的方法.
...全文
976 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa931033765 2012-03-05
  • 打赏
  • 举报
回复
在选择业务键 后面的两步所有的勾 都不要勾 完成后 渐变维度会自动生成一个ole db 命令 和一个ole db 目标
这样在导数据的时候 渐变维度组件 检测到 不存在的就插入 存在的就更新
guidahuasheng 2010-12-22
  • 打赏
  • 举报
回复
看到很多文章介绍用时间戳,不过一直没时间验证下
aiolion4161 2010-11-04
  • 打赏
  • 举报
回复
也困扰同样的问题,楼主有找到解决办法了?
gwt0729 2010-05-12
  • 打赏
  • 举报
回复
一般维度处理采用渐变维度是可以的,大维度就可能不行了。
ASPNETCXCCN 2010-05-11
  • 打赏
  • 举报
回复
SSIS主要是的用途之一:数据清洗,不过楼主要求的实时性,这样的话就对性能提出了一个更高的要求,楼主需要衡量之后再考虑是否用SSIS。
guidahuasheng 2010-05-11
  • 打赏
  • 举报
回复
现在看来可能不用SSIS了的,因为实时性,还有不能在客户系统做任何操作,可能得考虑其他ETL或自己编个JOB来实现了
guidahuasheng 2010-05-10
  • 打赏
  • 举报
回复
目前我用的是比较的方法,就是两表中拿一字段来比较,当这一字段发生变化,更新变化的字段,当这一字段没发生变化,而其他字段发生变化了,更新其他变化了的字段,但这种方法比较耗时,当数据量很大或远程网络不是很好时,不是需要很多时间吗?
我想考虑用查看日志来判断那些数据是变化了的,就直接更新这些变化的数据,但对日志操作我不熟悉,还有不同数据库日志好象也不同,这样分析起来就比较麻烦了的。
网上有的人说利用时间戳,要在源表加个标识什么,但源表触发器都不让弄,还可以加标识什么吗???

继续请教数据更新问题,就是把不同源数据抽取进数据仓库,怎样有效实现数据更新且效率也还可以的方法。
guidahuasheng 2010-05-10
  • 打赏
  • 举报
回复
更新频率1个小时
pbsh 2010-01-29
  • 打赏
  • 举报
回复
请说明更新频率
wolfdgy 2010-01-29
  • 打赏
  • 举报
回复
也可以考虑用SQLServer的发布与订阅功能,有实时性较高的方案。
Ray_Zhang 2010-01-15
  • 打赏
  • 举报
回复
是否可以考虑变通一下,数据是不是一定要同步更新,如果不一定,那自己写个JOB定时复制数据到你需要的地方,也可以呀
muzhenxing013 2009-12-25
  • 打赏
  • 举报
回复
1、缓慢变化维度 数据流

2、update、insert 执行sql任务

3、 service broker ,触发存储过程,实时性高,但是如果数据量大分解xml需要时间
hery2002 2009-12-17
  • 打赏
  • 举报
回复
同步复制?
guidahuasheng 2009-12-16
  • 打赏
  • 举报
回复
如果表1是客户的业务数据表,他不让在他的表上做触发器,而表2是数据仓库的表,这样的话只能通过ETL工具了啊
dawugui 2009-12-16
  • 打赏
  • 举报
回复
如果两表完全一样,貌似你的需求没什么意义,直接用一个表即可.

如果非要这么用,参考触发的作用.

--触发器的操作1

create table 化验室纱组(本厂编号 int,客户 int,色号 int,纱支 int)
create table 化验室布组(本厂编号 int,客户 int,色号 int,布类 int)
go
create trigger my_trig on 化验室纱组 for insert ,update ,delete
as
if not exists(select 1 from inserted)
delete 化验室布组 from deleted t where 化验室布组.本厂编号 = t.本厂编号
else if not exists(select 1 from deleted)
insert into 化验室布组(本厂编号 ,客户 ,色号) select 本厂编号 ,客户 ,色号 from inserted
else
update 化验室布组 set 客户 = t.客户 , 色号 = t.色号 from inserted t where 化验室布组.本厂编号 = t.本厂编号
go

--1、insert 对化验室纱组插入数据,然后查看化验室布组表的数据
insert into 化验室纱组 values(1 , 2 , 3 , 4)
insert into 化验室纱组 values(5 , 6 , 7 , 8)
go
select * from 化验室布组
/*
本厂编号 客户 色号 布类
----------- ----------- ----------- -----------
1 2 3 NULL
5 6 7 NULL

(所影响的行数为 2 行)
*/

--2、update , 更改化验室纱组表中本厂编号=1的色号=6
update 化验室纱组 set 色号 = 6 where 本厂编号 = 1
go
select * from 化验室布组
/*
本厂编号 客户 色号 布类
----------- ----------- ----------- -----------
1 2 6 NULL
5 6 7 NULL

(所影响的行数为 2 行)
*/

--3、delete 化验室纱组表中本厂编号=1的那条数据
delete from 化验室纱组 where 本厂编号 = 1
go
select * from 化验室布组
/*
本厂编号 客户 色号 布类
----------- ----------- ----------- -----------
5 6 7 NULL

(所影响的行数为 1 行)
*/

drop table 化验室纱组 , 化验室布组
guguda2008 2009-12-16
  • 打赏
  • 举报
回复
要求实时更新?表的操作数据量多大?
dawugui 2009-12-16
  • 打赏
  • 举报
回复
那不如用触发器了.

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧