检查更新的维度数据

时间:2010-08-12 15:39:16

标签: data-warehouse etl

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

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

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

我想使用Type 2 ETL,如果OLTP数据库中的记录发生了变化,则会在DW中添加新记录。

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

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

我正在使用SQL Server 2005.这似乎不是最有效的方法。还有其他选择吗?

3 个答案:

答案 0 :(得分:1)

  • 将LastUpdated引入源系统(OLTP)表。这样您就可以使用以下内容进行提取:

    WHERE LastUpdated> = some_time_here

您似乎正在使用SQL Server,因此您也可以尝试使用rowversion类型(8字节db-scope-unique counter)

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

答案 1 :(得分:0)

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

  1. 从您的OLTP数据库中“提取”数据
  2. 将提取的数据与维度数据进行比较(“测试”)以确定是否存在更改或需要执行的任何其他验证
  3. 将数据(“加载”)插入维度表。
  4. 实际上,在步骤#1中,您将通过针对OLTP数据库中的多个表的查询创建物理记录,然后将该结果记录与您的维度数据进行比较,以确定是否进行了修改。这是做事的标准方式。另外,就容量而言,10000行是非常微不足道的。任何RDBMS和ETL过程都应该能够在最多不超过几秒的时间内完成。我知道SQL Server有DTS,虽然我不确定该名称是否在更新的版本中发生了变化。这是做这样的事情的完美工具。

答案 2 :(得分:0)

您的OLTP数据库是否有审计跟踪?

如果是这样,那么您可以仅查询自上次ETL以来已触及的记录的审计跟踪。