本文朋友在广东逛街的时候突然想到的...最近就有想写几篇关于维度数据仓库的笔记,所以回家到之后就奋笔疾书的写出来发表了
1 维度表
在星型模式中,每一个维度表都分配有一个代理键(surrogate key,SK)。该列是维度表的唯一标识符,是维度表的现实主键(这里现实主键是指现实意义上的主键,能唯一标识维度表中的一行),只在数据仓库中创立。代理键在星型模式的加载过程当中分配和维护。代理键没有内在的含义,通常表现为一个整数。代理键偶然指的是warehouse key,是维度表的主键。
维度表中也包含类似操纵型系统中存在的用于唯一辨别实体的键列。这些操纵型系统中的键通常称为自然键(natural key,NK)。NK在维度表中未必唯一标识一条记载,即并非维度表的现实主键。
在数据仓库中,辨别代理键和自然键的目标是跟踪在操纵性系统中无须考虑的数据变化情况。例如,假设客户A在操纵型系统中以customer_id 10711标识。如果客户的位置产生变化,操纵型系统中只要对customer_id为10711的记载修改;而从分析角度考虑,可能需要根据地区统计,因此不能直接覆盖维度表中相关记载。因为星型模式的客户维度表中不以customer_id作为现实主键,仅作为NK,因此可以存储多个版本的客户A的信息,这些版本都拥有雷同的customer_id。不同版本的信息可以通过不同的代理键加以辨别。这样就通过增长带有序号的自然键的方法对变化停止跟踪。代理键可以基于单一的列实现现实表和维度表之间的连接操纵。
这与缓慢变化维有关。
维度表中包含的列应当尽可能全面。如对于操纵型系统中为代码(如,使用0和1代表男和女)的列,维度表中应当包含该代码(0或1)和代码描述(男或女)。
2 现实表
- 现实表由紧凑的包含引用维度和现实的外键形成。
- 现实表应当包含所有与过程有关的现实,即使某些现实可以由其他现实盘算得来。
- 类似比率等非可加现实应当分解为完整可加的组成部分,其盘算应当在创立报表时执行。
- 现实表是稀疏的,只有当某些现实产生时才产生相应的记载行。
- 对现实表粒度的声明非常重要,要么以维度术语声明,要么以业务术语声明。
- 存储在现实表中的维度被称为退化维度。这种技巧通常用于拥有较高基数(cardinality)的事务标识符中。
记载在现实表中的行表现业务活动的产生情况,这意味着现实表中的行没有包含所有可能的维度组合。出现在现实表中的组合数量远远小于可能存在的组合数量。现实表的这项特性称为稀疏性。例如,某客户在某天未从某销售商处购买特定产品,则不会有此项记载。
多数情况下,模式设计者会防止在将数据加载到现实表之前聚合数据。尽可能坚持最细粒度的数据,星型模式就能处理范围更加宽泛的分析型需求(即扩展性更好)。无论采取何种数据仓库结构(多维数据仓库或企业信息化工厂,CIF),这一指导原则都广泛适用。对多维数据仓库来讲,现实表包含细粒度数据至关重要,因为多维数据仓库是细节数据的集中存储仓库。对于CIF,这一指导原则可以宽松一些,因为数据仓库中包含细粒度数据,因此数据集市的现实表可以聚集数据,而不用担心丢失信息。不过这些数据集市可能没法满意新需求。
存储到现实表中的维度列被称为退化维度,简称退化维。虽然被存储在现实表中,但该列仍被视为维度。与其他表中的维度列一样,其值仍然可以用于过滤查询、控制聚合层次、排序数据、定义主从关系等。应当改谨慎使用退化维度,因为现实表累计记载的速度很快,包含退化维度可能会造成存储空间的适度消费,特别是当退化维度为文本元素时。多数情况下,适合选作退化维度的维度最好放置到杂项维度中,事务标识除外。
事务标识通常作为退化维度存储。它也可以作为现实表中行的唯一标识,并用于定义现实表的粒度。
3 缓慢变化维
维度表中的数据来源于操纵型系统。在多维数据仓库(Kimball)或独立型数据集市中,数据直接来源于操纵型系统。在企业信息化工厂(Inmon)中,来自于操纵型系统的数据首先移到企业数据仓库中,然后进入多维数据集市。进入到维度表中的信息,在操纵型系统中可能产生变化。因此维度设计中需要确定维度表如何处置数据源的产生变化的情况,这种维度表称为缓慢变化的维度,简称缓慢变维。
由于维度表引入了代理键作为其主键,因此不需要与源系统采取雷同的处置方法。操纵型系统可以跟踪数据变化的历史情况,也可以简略地采取重写变化值的方法。对于任何一种情况,星型模式都可以采取两种响应方法:变化类型1、变化类型2。
变化类型1在响应数据源变化时,重写维度属性。这样维度表不鞥反映历史情况,已存在现实的历史环境被改变了。
变化类型2在源数据值产生改变时,创立一个新版本的维度行。变化类型2保存了变化的历史现实。描述变化前的事件的现实与从前的值关联,描述变化后的事件的现实将与新值关联。多数操纵型系统的变化采取变化类型2处置。
4 OWB操纵
使用OWB的“维”右键“新建”“使用时间向导”创立完成后,会生成对应的表、序列、映射、维。注意四者的部署次序,若次序错误,会报错或正告,一般按表、序列、映射、维的次序。
owb中每种操纵跟sql的对应关系如下:
Owb operator |
Sql |
复制器Deduplicator |
Distinct |
过滤器Filter |
where |
连接器Joiner |
join |
关键字查找Key lookup |
join |
挪动表头区Pivot |
一条记载拆分成多条 |
Unpivot |
与pivot相反 |
映射序列Sequence |
Currval,nextval |
集合运算Set |
Union,union all,intersect,minus |
排序器Sorter |
Ordre by |
拆分器Spliter |
Mutiple table where |
聚集函数Aggregator |
Group by,having |
常数Constant |
参考资料:
[1]Star Schema完整参考手册——数据仓库维度设计权威指南
[2]Oracle_WareHouse_Builder操纵指南
文章结束给大家分享下程序员的一些笑话语录:
IBM和波音777
波音777是有史以来第一架完全在电脑虚拟现实中设计制造的飞机,所用的设备完全由IBM公司所提供。试飞前,波音公司的总裁非常热情的邀请IBM的技术主管去参加试飞,可那位主管却说道:“啊,非常荣幸,可惜那天是我妻子的生日,So..”..
波音公司的总载一听就生气了:“胆小鬼,我还没告诉你试飞的日期呢!”
---------------------------------
原创文章 By
维度和数据仓库
---------------------------------