浅析交叉探查
在维度建模的数据仓库中,有一种操作叫Drill Across ,中文一般翻译为“交叉探查”。鉴于经验的局限,在这里我只能进行一下浅显的分析。
在基于总线架构(Bus Architecture)的维度建模中,大部分的维度表是由事实表共有的。比如“营销事务事实表”和“库存快照事实表”就会有相同的维度表,“日期维度”、“产品维度”和“商场维度”。这时,如果有个需求是想按共有维度来对比查看销售和库存的事实,这时就需要发出两个SQL,分别查出按维度统计出的销售数据和库存数据。然后再基于共有的维度进行外连接,将数据合并。这种发出多路SQL再进行合并的操作就是交叉探查。
当这种交叉探查的需求很常用时,有一种建模方法可以避免交叉探查,就是合并事实表(Consolidated Fact Table)。合并事实表是指将位于不同事实表中处于相同粒度的事实进行组合的一种建模方法。即新建立一个事实表,它的维度是两个或多个事实表的相同维度的集合,事实是几个事实表中感兴趣的事实。这个事实表的数据和其他事实表的数据一样来自Staging Area。
合并事实表在性能和易用性上都比交叉探查要好,但是被组合的事实表必须处于相同的粒度和维度层次上。