首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Integration合并数据

使用Integration合并数据
EN

Stack Overflow用户
提问于 2014-02-25 12:29:06
回答 2查看 432关注 0票数 0

请考虑这一设想:

我的数据库里有张桌子。我希望使用this在我的OLAP数据库中移动这些数据,我可以将所有记录从我的表移动到OLAP database.The,问题是我不知道如何在OLAP environment.For示例中应用更改,如果仅更改了我的表的100条记录,如何应用这些更改,而不是从零开始复制所有记录。

我怎么才能合并这两张桌子?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-25 13:27:25

这方面有两种主要办法:

  • 查找转换-> OLE DB命令/ OLE DB目的地
  • 将所有数据加载到暂存表中,并使用SQL执行合并。

我更喜欢后者,因为更新是基于设置的,但是我确实使用了前者,我知道它主要是插入的。

对于前者,您将得到一个数据流任务,如下所示:

这是OLTP数据库中的OLE源,然后根据OLAP数据库查找代理键。在没有匹配的地方,它简单地将一个新记录插入到OLAP目的地,当有匹配时,它执行条件拆分,如果任何字段已经更改,它将使用OLE命令更新OLAP表。

它显然会变得比这复杂得多,但这涵盖了最简单的例子。

您还可以使用缓慢变化的维度转换打开向导,为您创建数据流,这再次变得更加复杂:

但是,正如前面提到的,我倾向于使用一个暂存表和一个基于集合的更新,因为OLE DB命令逐行执行,所以如果要更新数百万条记录,这需要很长时间。您可以简单地在OLAP数据库上创建一个暂存表,并使用一个简单的OLE源和目标将数据移动到其中,然后使用MERGE更新OLAP:

代码语言:javascript
复制
MERGE OLAP o
USING Staging s
    ON o.BusinessKey = s.BusinessKey
    AND o.Type2SCD = s.Type2SCD     
    AND o.Active = 1
WHEN MATCHED AND o.Type1SCD != s.Type1SCD THEN 
    UPDATE
    SET Type1SCD = s.Type1SCD 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (BusinessKey, Type1SCD, Type2SCD, Active, EffectiveDate)
    VALUES (s.BusinessKey, s.Type1SCD, s.Type2SCD, 1, GETDATE())
WHEN NOT MATCHED BY SOURCE AND o.Active = 1 THEN 
    UPDATE
    SET Active = 0;

以上假设您每个业务键都有一条活动记录,类型1和类型2都在缓慢更改维度时,它将在BusinessKey和Type2SCD上没有匹配的情况下插入一个新记录,此外,它还会将源表中的任何不匹配记录设置为非活动记录。当有匹配,但类型1 SCD是不同的,这将被更新。

值得注意的是,合并有它的缺点,并且您可能想要将基于集合的服务器端写成单独的INSERT和UPDATE语句。我遇到的一个主要问题是,在我的所有维度表中,我在BusinessKey字段WHERE Active = 1上都有一个唯一的筛选索引,以确保只有一个活动记录,我编写的合并应该可以很好地工作,但在此连接项中没有详细说明。虽然这并不是世界末日,但我的ETL中所有合并语句的末尾都必须添加OPTION (QUERYTRACEON 8790);,但这并不理想。

票数 5
EN

Stack Overflow用户

发布于 2014-02-25 12:32:52

听起来你想用增量负载。

前五个教程在这页上应该为您指明正确的方向-我发现它们在过去非常有用。

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

https://stackoverflow.com/questions/22014260

复制
相关文章

相似问题

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