我有一个OLTP数据库,目前正在创建一个数据仓库。 DW(DimStudents)中有一个维度表,其中包含学生数据,例如地址详细信息,电子邮件,通知设置。
在OLTP数据库中,此数据分布在多个表中(因为它是第三范式的标准OLTP数据库)。
目前有10,390条记录,但这个数字预计会增长。
我想使用Type 2 ETL,如果OLTP数据库中的记录发生了变化,则会在DW中添加新记录。
扫描DW中10,000条记录的最佳方法是什么,然后将结果与OLTP中包含的几个表中的结果进行比较?
我正在考虑使用OLTP数据的临时表创建“快照”,然后逐行将结果与DW中Dimension表中的数据进行比较。
我正在使用SQL Server 2005.这似乎不是最有效的方法。还有其他选择吗?
答案 0 :(得分:1)
将LastUpdated引入源系统(OLTP)表。这样您就可以使用以下内容进行提取:
WHERE LastUpdated> = some_time_here
您似乎正在使用SQL Server,因此您也可以尝试使用rowversion类型(8字节db-scope-unique counter)
答案 1 :(得分:0)
听起来你正在接近这种倒退。执行ETL(提取,测试,加载)的典型方法是:
实际上,在步骤#1中,您将通过针对OLTP数据库中的多个表的查询创建物理记录,然后将该结果记录与您的维度数据进行比较,以确定是否进行了修改。这是做事的标准方式。另外,就容量而言,10000行是非常微不足道的。任何RDBMS和ETL过程都应该能够在最多不超过几秒的时间内完成。我知道SQL Server有DTS,虽然我不确定该名称是否在更新的版本中发生了变化。这是做这样的事情的完美工具。
答案 2 :(得分:0)
您的OLTP数据库是否有审计跟踪?
如果是这样,那么您可以仅查询自上次ETL以来已触及的记录的审计跟踪。