使用变化数据捕获提高BI报告的准确性

日期: 2012-05-15 作者:Mark Kromer翻译:April 来源:TechTarget中国 英文

在大型商业智能系统或数据仓储上工作时,我们常常面临的问题就是数据及时性。本篇技巧向你介绍了SQL Server 2008中的BI特征:change data capture(CDC),CDC能基于来源处理系统中的数据改变通知帮你在数据仓储或专用数据库实时更新数据。这在数据仓库和商业智能情况中是一个详细定义问题,但是是非常普遍的一个问题。   过去,SQL Server管理员和开发员对解决方案特别依赖,如自定义代码或用SQL复制得到同样的结果。

微软SQL Server 2008 CDC包含以下性能:在ETL过程中解决数据潜伏期问题。由于数据管理和数据仓储中的ETL许多特性,微软知道今天才进入CD……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

在大型商业智能系统或数据仓储上工作时,我们常常面临的问题就是数据及时性。本篇技巧向你介绍了SQL Server 2008中的BI特征:change data capture(CDC),CDC能基于来源处理系统中的数据改变通知帮你在数据仓储或专用数据库实时更新数据。这在数据仓库和商业智能情况中是一个详细定义问题,但是是非常普遍的一个问题。

  过去,SQL Server管理员和开发员对解决方案特别依赖,如自定义代码或用SQL复制得到同样的结果。微软SQL Server 2008 CDC包含以下性能:在ETL过程中解决数据潜伏期问题。由于数据管理和数据仓储中的ETL许多特性,微软知道今天才进入CDC这个领域。今天市场上的其他产品包括Attunity Integration Suite、Informatica PowerExchange CDC和 DataMirror最近都被IBM收购了。那些例子用SQL Server 2008 CDC提高数据源到数据库的数据及时性都是基于SQL Server 2008中的一些特征。

  为什么要安装CDC?

  这里是个很常见的情况:你已经通过从SSIS数据源下载数据安装了数据库或者数据仓库(SQL Server Integration Services)。事物分析师已经对数据业务报告建立了cube。每晚事物用户就会将数据填入数据仓库满足报告需要,你需要跟他们联系。 但是如果你已经开始预习给beta用户的解决方案,那么报告要求就有变化。现在的事务每小时运行一次报告。

  所以,现在你不得不用ETL设计并且每小时更新数据。好的一面就是数据仓库、商业智能以及报告解决方案产生了实际效果并且还能收到。坏的一面就是也许你并没有为频繁更新设计或者架构系统。现在你面临的问题就是如何让数据更新越来越接近实际时间。这些问题涉及的范围从性能到可伸缩性然后再到流通问题。

  CDC主要观念就是基于数据源的notification将数据从数据源迁到数据仓库(典型的是事务数据库系统),即当数据在源处进行更新的时候。这就是说不是每一种数据源订阅 CDC notifications都是合适的。股票贸易数据库或订单登陆系统中的高事务工作量就可能不是很理想。更加合适的可能就是数据源,如CRM客户数据、产品数据或者其他类型的查询数据。

  怎样激活CDC?

  在SQL Server 2008中激活CDC的方法为:首先配置数据库激活该性能。第二,确定文件组保存更改数据,最后就是确定哪个表将出现在CDC notifications中。

  你可以用新的CDC以下两个函数cdc.fn_cdc_get_all_changes_ 和 cdc.fn_cdc_get_net_changes_查询更改数据。这两个函数之间主要的区别就是get all changes函数将所有变化,这些变化出现在日志序列码中的相应表的每个行里。而get net changes函数返回的却是反映该数据多个变化的一个行,所以你就不能收到包含上一个查询以后的每个变化这样一个截然不同的图。除了这些新函数之外,你就必须用CDC函数:sys.fn_cdc_map_time_to_lsn将LSNs映射到时间参数解释合适的LSN。

  只有替换你为捕获源表变化配置的参数你才能用这些函数。用法如下:

  SELECT * FROM
  cdc.fn_cdc_get_all_changes_HR_Department(@from_lsn, @to_lsn,
  'all');

  在上面的这个例子中,我选择返回所有记录,这样就可以包含所有LSN的变化。另外一个选择就是all update old",它可以返回所有的变化,还可以返回更新之前的包含列值的行以及更新后的这个行。如果你想从LSN中获得这些值或者是将这些值潜入LSN中,你应该首先从上面的map函数中找到合适的 LSN,如下:

  DECLARE @from_lsn binary(10), @to_lsn binary(10);
  SELECT @from_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', GETDATE()-1);
  SELECT @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', GETDATE());

  注意单引号中的参数。就是说SQL Server要比使用方法要大/小,包含/不包含和指定值相应的时间查询的记录。你可以选择:largest less than, largest less than or equal, smallest greater than or smallest greater than or equal。

  最后要说的是,其实并没有能够在SQL Server 2008数据库激活CDC的方法以及在数据组中增加数据仓库这种性能的方法。事实上他们在《微软SQL Server联机从书》中总结得很好。

  当你在优化数据仓库或BI时,为激活CDC选择一种合适的数据源是一个很重要的决策。其他的CDC工具在创建和配置时都有一些不同。但是在你将SQL Server源迁入到SQL Server 2008版本中时,这种性能就自然被加上了。然后你可以用SQL Server和SSIS中 built-in函数获取你的ETL程序变化数据。在更短的间隙时间内只采集改变的数据变得越来越常见,这样做将会给你的报告方案事务用户增加数据可用性。

翻译

April
April

相关推荐