数据仓库概念一览
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据仓库概念一览
浅析冰山查询―― iceberg query
在数据仓库领域有一个概念叫Iceberg query,中文一般翻译为"冰山查询"。冰山查询在一个属性或属性集上计算一个聚集函数,以找出大于某个指定阈值的聚集值。
以销售数据为例,你想产生这样的一个顾客-商品对的列表,这些顾客购买商品的数量达到3件或更多。这可以用下面的冰山查询表示:
Select P.cust_ID,P.item_ID,SUM(P.qty)
From Purchase P
Group by P.cust_ID,P.item_ID Having SUM(P.qty)=3
这种在给出大量输入数据元组的情况下,使用having字句中的阈值来进行过滤的查询方法就叫做冰山查询。输出结果可以看作"冰山顶",而"冰山"是输
入数据。
这种冰山查询在数据仓库的数据概况分析阶段、数据质量检查阶段和数据
挖掘的购物篮分析中都经常使用。而且,冰山查询也是面试中出现频率非常高
的一道题,经常用来检测SQL能力。
操作集市―― oper mart
在数据仓库领域有一个概念叫Oper Mart,中文一般翻译为"操作集市"。
操作集市是为了企业战术性的分析提供支持,它的数据来源是操作数据存储(ODS)。它是ODS在分析功能上的扩展,使用户可以对操作型数据进行多维分析。
一个操作集市应该有如下特征:
1.操作集市是ODS的子集,数据来源于ODS,用于战略分析和报表。
2.操作集市中的数据和ODS中的数据同步更新。
3.操作集市以多维技术进行建模,即星型结构。
4.操作集市是一个临时的结构,当不在需要时会清掉所有数据,即不保存
历史数据。
操作集市和数据集市很相似,但是它不能用来取代用于战略性分析的数据
集市。由于操作集市的数据来源于ODS,所以它的数据比数据集市的数据要新。但是出于容量的考虑,操作集市中不保存历史数据,是一个临时的结构。
操作数据存储―― operational data store Kimball对操作数据存储的
定义是,面向主题的、集成的、经常更新的细节数据存储,用集成的数据来支
持事务系统。Kimball也认可Inmon对ODS的分类,但是他认为ODS应该以星
型结构来进行建模。
虽然Kimball对操作数据存储(ODS)的定义和Inmon基本上一样,但是他对操作数据存储的理解、作用与实现和Inmon有着较大的不同。
Kimball认为ODS在两种情况下是需要的:第一种情况是提供操作型报表,这些报表需要提供面向主题的、集成的数据,所以操作型的源系统无法提供;
这些报表和数据仓库中的报表也不相同,因为它们可以是一些定制好的,写死
在程序中的报表。第二种情况是需要提供实时的信息时,由于数据仓库的更新
频率一般都是24小时,而用户会有更急切的需求来了解数据源的信息,这时,建立操作数据存储是很有必要的。
对于ODS是保存最细粒度数据的地方的说法,Kimball认为对于最细粒度
数据,即原子数据层,应该保存在数据仓库中,而且应该置于维度框架和总线
架构中。
代理关键字-surrogate key
在数据仓库领域有一个概念叫Surrogate key,中文一般翻译为"代理关键字"。代理关键字一般是指维度表中使用顺序分配的整数值作为主键,也称为"
代理键"。代理关键字用于维度表和事实表的连接。
代理关键字的称呼有surrogate keys,meaningless keys,integer keys,nonnatural keys,artificial keys,synthetic keys等。与之相对的自然关
键字的称呼有natural keys,samat keys等。
在Kimball的维度建模领域里,是强烈推荐使用代理关键字的。在维度表
和事实表的每一个联接中都应该使用代理关键字,而不应该使用自然关键字或
者智能关键字(Smart Keys)。数据仓库中的主键不应该是智能的,也就是说,
要避免通过主键的值就可以了解一些业务信息。当然,退化维度作为事实表的
复合主键之一时例外。
使用代理关键字,有很多优点。
1.使用代理关键字能够使数据仓库环境对操作型环境的变化进行缓冲。也
就是说,当数据仓库需要对来在多个操作型系统的数据进行整合时,这些系统
中的数据有可能缺乏一致的关键字编码,即有可能出现重复,这时代理关键字
可以解决这个问题。
2.使用代理关键字可以带来性能上的优势。和自然关键字相比,代理关键
字很小,是整型的,可以减小事实表中记录的长度。这样,同样的IO就可以读取更多的事实表记录。另外,整型字段作为外键联接的效率也很高。
3.使用代理关键字可以建立一些不存在的维度记录,例如"不在促销之列","日期待定","日期不可用"等维度记录。
4.使用代理关键字可以用来处理缓慢变化维。维度表数据的历史变化信息
的保存是数据仓库设计的实施中非常重要的一部分。Kimball的缓慢变化维处
理策略的核心就是使用代理关键字。
当然,使用代理关键字也有它的缺点,代理关键字的使用使数据加载变得
非常复杂。有关使用代理关键字的维度表和事实表的加载方法在ETL Toolkit
中有详细的描述。使用代理关键字是一个从长远考虑的策略。
多值维度―― multivalue dimension
在维度建模的数据仓库中,有一种维度表叫multivalue dimension,中文
一般翻译为"多值维度"。
多值维度有两种情况,第一种情况是指维度表中的某个属性字段同时有多
个值。举例来说,一个帐户维度表中,帐户持有人姓名,可能会有多个顾客。
这样,一个帐户对应多个顾客姓名,一个顾客也可以有多个帐户,它们之间是
多对多的关系。正因为一个帐户可能会有多个对应的顾客,所以不能直接将顾
客ID放入帐户维度表中。而帐户维度表中的这种情况就叫做多值维度。
多值维度的第二种情况是事实表在某个维度表中有多条对应记录。举例来说,对于一个健康护理单分列项事实表来说,它的粒度是一个健康护理单,但
是该护理单却有可能有多次诊断,即该事实表与诊断维度的是一对多的关系。
这个与事实表粒度不匹配的诊断维度也称之为多值维度。
处理多值维度最好的办法是降低事实表的粒度。如第二种情况中,将健康
护理单分列项事实表的粒度降低到具体的诊断粒度上,这样就避免了多值维度
的出现。这种处理方式也是维度建模的一个原则,即事实表应该建立在最细粒
度上。这样的处理,需要对事实表的事实进行分摊。
但是有些时候,事实表的粒度是不能降低的,多值维度的出现是无法避免的。如第一种情况中,事实表是月帐户快照事实表,这张事实表与顾客维度没
有直接的关系,不能将数据粒度进行细分,即使细分的话帐户余额也很难分摊。这时,可以采用桥接表技术进行处理。在帐户维度表和顾客维度表之间建立个
帐户-顾客桥接表。这个桥接表可以解决掉帐户维度和顾客维度之间的多对多关系,也解决掉的帐户维度表的多值维度问题。
总之,多值维度是应该尽量避免的,它给数据处理带来了很大的麻烦。如
果多值维度不能避免的话,应该建立桥接表来进行处理。
非事实型事实表―― factless fact table
在维度建模的数据仓库中,有一种事实表叫Factless Fact Table,中文
一般翻译为"非事实型事实表"。在事实表中,通常会保存十个左右的维度外键
和多个度量事实,度量事实是事实表的关键所在。在非事实型事实表中没有这