请考虑这一设想:
我的数据库里有张桌子。我希望使用this在我的OLAP数据库中移动这些数据,我可以将所有记录从我的表移动到OLAP database.The,问题是我不知道如何在OLAP environment.For示例中应用更改,如果仅更改了我的表的100条记录,如何应用这些更改,而不是从零开始复制所有记录。
我怎么才能合并这两张桌子?
谢谢
发布于 2014-02-25 13:27:25
这方面有两种主要办法:
我更喜欢后者,因为更新是基于设置的,但是我确实使用了前者,我知道它主要是插入的。
对于前者,您将得到一个数据流任务,如下所示:

这是OLTP数据库中的OLE源,然后根据OLAP数据库查找代理键。在没有匹配的地方,它简单地将一个新记录插入到OLAP目的地,当有匹配时,它执行条件拆分,如果任何字段已经更改,它将使用OLE命令更新OLAP表。
它显然会变得比这复杂得多,但这涵盖了最简单的例子。
您还可以使用缓慢变化的维度转换打开向导,为您创建数据流,这再次变得更加复杂:

但是,正如前面提到的,我倾向于使用一个暂存表和一个基于集合的更新,因为OLE DB命令逐行执行,所以如果要更新数百万条记录,这需要很长时间。您可以简单地在OLAP数据库上创建一个暂存表,并使用一个简单的OLE源和目标将数据移动到其中,然后使用MERGE更新OLAP:
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);,但这并不理想。
发布于 2014-02-25 12:32:52
听起来你想用增量负载。
前五个教程在这页上应该为您指明正确的方向-我发现它们在过去非常有用。
https://stackoverflow.com/questions/22014260
复制相似问题