事实表的填充

0
请问大家一下,我们在填充完多张维度表之后,如何用这些维度表来填充事实表,我的理解是将这些维度表进行笛卡尔基取出各维度表中的代理键,然后根据维度表中的其他字段通过聚集函数得到事实表中的度量,那也就是说事实表中的每一行元组都是有与之相关的维度表得来的吗??如果这样的话,那这些维度表笛卡尔基之后不就是一张超大的表吗?这样再插入到事实表中岂不是会花很久的时间吗?
已邀请:
0

BAO胖子 - 15年BI经验,涉足电力,快消品,医药,信息服务等行业的BI老兵。 2015-09-08 回答

1. 首先,维度表中虽然有代理键,但一定会存在自然键(或者自然键+有效开始时间)作为候选键,它和代理键是一一对应的。自然键主要指源系统中带过来的客户编码, 商品编码等等。

2. 事实表大部分源自源系统的交易表。比如商场里面卖商品给客户,不可能每个客户购买了所有的商品(这个就是你说的笛卡尔积场景),因此构建事实表的时候,就是将客户编码,商品编码转换成对应的代理键。

3. 什么情况下会用到一点笛卡尔积?这个场景也是有的,一种是本期和去年同期对比这一类,有可能去年同期存在的数据项目本期不存在,这个时候会用笛卡尔积将数据项填满然后join本期,去年同期,本年累计之类的数据。还有一种情况是做计划/forecasting之类的,需要使用总量数据进行分摊计算,这个时候会用到笛卡尔积填满数据项。但!!!以上两种场景都发生在汇总级别数据,因此即使做笛卡尔积运算也不会带来超级规模的数据。

以上。
0

牟瑞 - 大数据 Hadoop 讲师 Hadoop入门课程地址:http://www.hellobi.com/course/39 有架构师,技术总监,CTO的职位请联系我! 2015-09-08 回答

不会的!我们关注维度的时候,总是关注从某一些维度的值来看待问题,比如某个区域内的,某一个时间段内容,这就限定了查询的范围。而且事实表表与维度表想关联,一般都是按照主键来关联,是有索引的,这个效率是非常高的。如果是微软的数据仓库,实际上他是有Cube的,利用事实表和维度表提前聚合好了度量值,是基于Key-Value的方式保存数据的!所以查询起来非常快。
另外。数据仓库保留的是历史数据,一般都是顺序插入,所以往事实表中插数据效率不会很低。
 
以上,我的一个简单的回答,另外我给你邀请了大牛,看看能不能更详细的回答一下。

要回复问题请先登录注册