2010-08-12 78 views
0

我有一个OLTP数据库,目前正在创建一个数据仓库。 DW(DimStudents)中有一个维度表,其中包含学生数据,例如地址详细信息,电子邮件,通知设置。检查更新后的尺寸数据

在OLTP数据库中,此数据分布在多个表中(因为它是第三种标准形式的标准OLTP数据库)。

目前有10,390条记录,但这个数字有望增长。

我想使用Type 2 ETL,因此如果OLTP数据库中的记录已更改,则会向DW添加新记录。

什么是扫描DW中10,000条记录然后将结果与OLTP中包含的几个表中的结果进行比较的最佳方法?

我正在考虑使用OLTP数据的临时表创建一个“快照”,然后逐行比较DW中的Dimension表中的数据。

我正在使用SQL Server 2005.这似乎不是最有效的方式。有替代品吗?

回答

1
  • 将LastUpdated引入到源系统(OLTP)表中。这样,您有较少的提取使用:

    WHERE LASTUPDATED> = some_time_here

你似乎是使用SQL服务器,所以你也可以尝试rowversion类型(8字节DB-范围唯一计数器)

  • 将数据导入DW时,使用ETL工具(SSIS,Pentaho,Talend)。他们都有一个组件(块,转换)来处理SCD2(缓慢更改维度类型2)。对于SSIS示例see here。转换完全按照您所要做的 - 您所要做的就是指定要监视哪些列以及在检测到更改时要执行的操作。
+0

谢谢,非常有帮助。 – Paul 2010-08-25 15:58:04

0

这听起来像你正在接近这种倒退。执行ETL的典型方式(提取,测试,负载):

  1. 从OLTP数据库中“提取”数据
  2. 比较(“测试”)对三维数据的提取数据,以确定是否有更改或其他需要执行的验证
  3. 将数据(“加载”)插入到维度表中。

实际上,在步骤1中,您将通过针对OLTP数据库中多个表的查询创建物理记录,然后将结果记录与维度数据进行比较以确定是否进行了修改。这是做事的标准方式。另外,10000行对于音量来说相当微不足道。任何RDBMS和ETL过程都应该能够在最多不超过几秒的时间内处理这个过程。我知道SQL Server具有DTS,但我不确定名称是否在更新版本中发生了更改。这是做这种事的最佳工具。

+0

好吧,我正在做的是拍摄我的OLTP数据(提取)的快照,然后将其与OLAP数据库中的数据进行比较。 我的问题确实是比较数据的最佳方式是什么?检查新值很简单,但检查更新后的值比较困难,因为我没有在任何OLTP表上更新日期标志。 什么是通过记录集,检查一个表中的值是否与另一个表中的值不同的最佳方法?不幸的是,基础设施不允许我使用SSIS sop,我需要通过存储过程来完成。 – Paul 2010-08-12 16:02:12

0

您的OLTP数据库是否有审计线索?

如果是这样,那么您可以查询自上次ETL以来被触摸的记录的审计线索。

+0

不幸的是,它没有。除非有简单的方法来检查更改的记录,否则我认为创建审核试用可能更容易,尽管这意味着对OLTP数据库进行了重大更改。 – Paul 2010-08-13 10:20:29