数据仓库灵魂30问之数仓基础理念理解

主题

主题是一个抽象概念,是在较高层次上将数据综合、归类并进行分析利用的抽象。每一个主题都对应一个宏观的分析领域,在实际上,每一个主题对应这个分析领域的所有的分析对象。

比如销售主题对应所有和销售这个领域有关的数据。

主题域

主题域通常是联系较为紧密的数据主题的集合。可以根据业务的关注点,将这些数据主题划分到不同的主题域。

比如销售主题的主题域就是这个领域有关的数据的集合。

血缘关系

血缘关系是指某个字段从哪个系统的哪个表产生,经过哪些流程最后被弃用的全过程。
比如我们要从A表,B表,C表生成D表,在整个过程中会生成数个临时表,那么字段经过哪些临时表最终生成D表的链路就是血缘。

拉链表

所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。

代理键

当表中的键都不适合作为主键时,产生一个流水号作为代理键。

维度退化

当一个维度表没有事实表需要的数据的话,就可以退化为一个只有主键的维度表。
比如人员维度表中对于人员的描述在事实表中没有意义,只需要人员id这一个字段,那么就将人员id冗余到事实表中,只使用人员id。

缓慢变化维SCD

维度表在使用中不是一成不变的,也是会发生缓慢的变化。

类型0:原样保留
维度属性值不会发生变化,因此事实表以原始值分组。
类型0适合做标记为“原型”的情况,比如信用卡积分等等。


类型1:重写
维度行中原有的属性值被新值覆盖。此技术破坏了历史情况,尽管不需要建立额外的维度行,但是他会影响聚集事实表或OLAP数据引擎的重复计算。


类型2:增加新行
在维度表中增加新行,新行采用修改的属性值。
使用该方法的前提是维度主键更具有一般性。
增加行时,必须增加三个额外的列:①行有效的日期/时间戳列;②行截止日期/时间戳列;③当前行标识
这样是避免多行描述统一对象(假设A入职某公司后离职,那么A肯定会在人员维度表中留存,多年后A再次入职该公司,那么A在维度表中就有两条记录)。


类型3:增加新属性(列)
一般进行类型0或类型1操作,这种操作不太常用。


类似4:增加微型维度
假设有一个几百万行的销售维度表,那么技术人员肯定不愿意再往里面添加记录,而且他本身查询也到达了瓶颈。
这样为了优化查询,可以在这个维度表上产生一个销售微型维度表,将活性高的数据提出组成一个小表来供查询。
将维度中的一组属快速变化并划分为微型维度。
微型维度被称为快速变化魔鬼维度(魔鬼?)。


类型5:增加微型维度及类型1支架
在类似4上加解读,例如有销售额字段,假设值是123.45,那我干脆弄成1-50,51-100,101-150,…这样的对数据进行整合效果岂不是更好。


类型6:增加类型1到类型2维度
类型6建立在类型2基础上,同时嵌入到类型1中。本质上就是按照类型2读取有效行,按照类型1进行分组或过滤。
现在HBASE或HIVE默认都是类型6。


类型7:双类型1和类型2维度
类型7是一种混合技术,适合沉淀了大量数据,对新数据频繁使用,对旧数据也有使用需求的场景。
第一个类型1维度仅展示活性最高的属性值,第二个类型1和第一个类型2组成类型6对历史概要进行展示。
类型7可以理解为基于类型6及类型1支架。

最简单的处理方式是拉链表。

事实表类型

事务事实表
事务事实表的一行对应空间后时间上某点的度量事件。事务事实表是可维度化且可被表达的事实表,应该确保数据有最小粒度来保证最大健壮性。


周期快照事实表
是事务事实表汇总的某一标准周期,如某天,某周,某月。粒度是周期性的,而不是个体的事务。


累积快照事实表
累积快照事实表是在事务开始时就创建,当事务到达固定的流程时填写对应的度量,在事务结束后这一行才算输入完成。
例如去某宝买东西,浏览就算是事务开始,然后好评才算事务结束,中间所有的度量都是某宝固定好的或者说预测好的。


无事实的事实表
用来记录一个事件的事实表,没有相关的度量,例如记录一天内学生上了什么课,应该有天,学生,老师,地点,课程等本身就很细的外键,没有相关的度量。

原子/派生指标

原子指标是指不加任何修饰词的指标,简单来说就是度量。比如销售量。
派生指标=原子指标+时间周期+修饰词。比如7天销售量,膨化食品销售量。

你可能感兴趣的:(#,---面试题,数据仓库)