数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

深入探讨数据仓库建模与ETL的实践技巧[3]


发布日期:2021年03月13日
 
深入探讨数据仓库建模与ETL的实践技巧[3]

这里我们首先要确定维度的层次(Hierarchy)和级别(Level)(图四picbmp)如图所示我们在时间维度上按照季度形成了一个层次其中季度成为了这个层次的个级别;同理当我们建立产品维度时我们可以将产品大类产品子类产品划为一个层次其中包含产品大类产品子类产品三个级别

那么我们分析中所用到的这些维度在数据仓库中的存在形式是怎样的呢?

我们可以将个级别设置成一张数据表中的个字段比如时间维度;我们也可以使用三张表分别保存产品大类产品子类产品三部分数据比如产品维度(图五picbmp)

另外值得一提的是我们在建立维度表时要充分使用代理键代理键是数值型的ID号码(例如图六中每张表的第一个字段)它唯一标识了每一维度成员更重要的是在聚合时数值型字段的匹配和比较JOIN效率高便于聚合同时代理键对缓慢变化维度有着重要的意义在原数据主键相同的情况下它起到了对新数据与历史数据的标识作用

在此我们不妨谈一谈维度表随时间变化的问题这是我们经常会遇到的情况我们称其为缓慢变化维度

比如我们增加了新的产品或者产品的ID号码修改了或者产品增加了一个新的属性此时维度表就会被修改或者增加新的记录行这样我们在ETL的过程中就要考虑到缓慢变化维度的处理对于缓慢变化维度有三种情况

缓慢变化维度第一种类型

历史数据需要修改这种情况下我们使用UPDATE方法来修改维度表中的数据例如产品的ID号码为后来发现ID号码错了需要改写成那么我们就在ETL处理时直接修改维度表中原来的ID号码为

缓慢变化维度第二种类型

历史数据保留新增数据也要保留这时要将原数据更新将新数据插入我们使用UPDATE / INSERT比如某一员工年在A部门年时他调到了B部门那么在统计年的数据时就应该将该员工定位到A部门;而在统计年数据时就应该定位到B部门然后再有新的数据插入时将按照新部门(B部门)进行处理这样我们的做法是将该维度成员列表加入标识列将历史的数据标识为过期将目前的数据标识为当前的另一种方法是将该维度打上时间戳即将历史数据生效的时间段作为它的一个属性在与原始表匹配生成事实表时将按照时间段进行关联这种方法的好处是该维度成员生效时间明确

[] [] [] [] [] []

               

上一篇:深入探讨数据仓库建模与ETL的实践技巧[4]

下一篇:深入探讨数据仓库建模与ETL的实践技巧[2]