首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查更新的维度数据

检查更新的维度数据
EN

Stack Overflow用户
提问于 2010-08-12 23:39:16
回答 3查看 1.8K关注 0票数 0

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

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

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

我想使用Type2ETL,如果OLTP数据库中的一条记录发生了更改,则会向DW中添加一条新记录。

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

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

我使用的是SQL Server 2005。这似乎不是最有效的方法。还有别的选择吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-13 19:43:36

  • 将LastUpdated引入源系统(OLTP)表中。通过这种方式,您可以使用以下方法提取更少的内容:

WHERE LastUpdated >= some_time_here

您似乎正在使用SQL server,因此您也可以尝试rowversion类型(8字节db范围唯一计数器)。

  • 在将数据导入数据仓库时,请使用ETL工具(SSIS、Pentaho、Talend)。它们都有一个组件网(块、转换)来处理SCD2 (缓慢变化的维度类型2)。以为例。转换所做的正是您想要做的--您所要做的就是指定要监视的列以及在检测到更改时要执行的操作。
票数 1
EN

Stack Overflow用户

发布于 2010-08-12 23:54:47

听起来你是在倒退。执行ETL (提取、测试、加载)的典型方法是:

  1. 从您的OLTP数据库中“提取”数据,并与维度数据进行比较(“

  1. ),以确定是否存在更改或需要将数据加载(“performed
  2. Insert”)到维度表中的任何其他验证。

实际上,在第1步中,您将通过对OLTP数据库中的多个表进行查询来创建一条物理记录,然后将结果记录与维度数据进行比较,以确定是否进行了修改。这是做事情的标准方法。此外,就数据量而言,10000行也是微不足道的。任何RDBMS和ETL进程都应该能够在不超过几秒钟的时间内完成处理。我知道SQL Server有DTS,但我不确定它的名称在最近的版本中是否有更改。对于做这样的事情,这是一个完美的工具。

票数 0
EN

Stack Overflow用户

发布于 2010-08-13 00:00:58

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3469415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档