admin管理员组

文章数量:1565352

2024年5月1日发(作者:)

提交维表

维表提供了事实表的上下文。虽然维表通常比事实表小得多,但它却是数据仓库的核心,

因为它提供了查看数据的入口。我们经常说建立数据仓库其实就是建立维度。因此ETL团

队在提交阶段的主要任务就是处理维表和事实表,将最有效的应用方式提交给最终用户。

流程检查

规划与设计:需求/现状 ->

架构

->

实现

-> 测试/发布

数据流:抽取 -> 清洗 -> 规格化 ->

提交

第5章和第6章是本书的关键章节;详细描述了如何将数据提交给最终用户或分析型应

用。虽然可能在数据结构和提交流程中存在相当多变化,但最终ETL维表的结构相对稳定。

请注意我们坚持设计的高度一致性并不拘泥于一成不变的维度模型,关键在于要有一个

可扩展的,可用的,可维护的体系架构。数据仓库的设计与标准的维度模型之间差异越大,

就需要越多的客户化工作。大多数IT开发人员都能够胜任客户化工作,许多人也从开发中

感受了智力挑战。但是在建立可扩展,可用,可维护的体系架构上,过多的客户化工作却是

不可行的。

维度的基础框架

物理上所有的维度都应当是图5.1所示组件的最小子集。主键(Primary Key)是指包含

了一个无意义的,唯一标识数字的字段。我们把这个无意义的数字称为代理(Surrogate)。

数据仓库ETL过程应当常常要创建和插入这些代理键。换句话说,数据仓库拥有这些代理

键值但并不把它赋给任何实体。

图5.1 维表的基础结构

维度的主键用于连接事实表。由于所有的事实表都必须保持查找表的参照完整性,因此

维表的主键所连接的字段就成为事实表的外键(Foreign Key)。在第二章的图2.3的保险案

例中已有所阐述。在大多数关系型数据库中维表和事实表通过单一的字段进行连接可以获得

最佳的性能。最后,当外键是数字型的时候事实表是最为紧凑的。

所有维表将其他的一个或多个字段组成维表的自然键(natural key)。如图5.1所示,ID

和其他的自然键字段组成了NK,自然键并不是无意义的代理键,而是从源系统抽取而来的

有意义的字段。比如,一个静态不变的员工维表中有常见的EMP_ID字段,它是人力资源

部门赋予的员工号。EMP_ID是员工维表的自然键。同时我们也会为其赋予代理键,这主要

是为了满足以后人力资源系统的变化。

当维表是静态的并且不随时间变化时,那么代理键和自然键就是一一对应的关系。但在

本章的稍后会看到有些维是缓慢变化的,那么我们就会为每个自然键产生多个代理键,以记

录维度信息的历史变化。换句话说,在缓慢变化的维度中,代理键与自然键的关系为多对一。

在我们的员工维表的例子中,每个变化的员工信息快照都有不同的唯一代理键与之对应,但

对每个员工而言,都有相同的自然键(EMP_ID)。此逻辑会在本章的缓慢变化维一节中详

细说明。

维度的组成除了主键和自然键外,还有描述属性(descriptive attributes)。 描述属性主

要是文本型的,但也有数值型的。数据仓库架构中对维度会有大量的描述属性,比如员工,

客户,产品等等。在某个维度中包含100个描述属性也不意外,只是希望这些属性都来自于

干净的数据源。稍后会有详细说明。

数据仓库架构中对于周期性出现的指标量不应当出现在维表中,这些指标量通常出现在

事实表中,而非描述属性。所有的描述属性应当是静态的,或者变化很慢,偶尔才发生变化

的。指标事实和数值型属性之间的区别并不像听起来那么复杂。在98%的案例中,区分是

很明显的。剩下的2%中,需要比较明显的参数来判断建模时到底是作为事实还是维度属性。

例如,产品的单价经常是两种角色都会有,在最后的分析中,并不在乎是何种角色,在应用

中可能会根据要求的不同而有所差异,但其信息内容却是相同的。但是如果单价是缓慢变化

的,两种选择的差异就会重要得多。随着变化的频度加快,将会更倾向于指标量作为事实。

生成维度的代理键

通过关系型数据库创建代理键可能是目前最普遍的使用方法。但是,我们也看到这种

趋势正在发生变化。过去,经常是通过数据库触发器创建和插入代理键。后来发现触发器

在ETL过程中会带来严重的瓶颈,应当从进程中清除。而代理键作为数字型能够被接受,

这些整数能够直接被ETL过程调用。数据库中的ETL过程比起数据库触发器,更大的提

高了ETL的性能。但是,使用数据库产生代理键基本上不能保证产生的键值在数据仓库的

各个环节保持同步 – 开发、测试和运营。 由于不同环节会在不同阶段加载,缺乏同步性

会导致测试阶段开发者和用户之间的混淆。

为了效率,可以考虑使用第三方的ETL工具来维护代理键,来确保ETL过程中不同

版本代理键的维护。

一种常见的解决手段是使用源系统的自然键加上时间戳。某些情况下可以采用智能代

理键 – 比如精确的创建时间,但它并不能完全代替基于数字的代理键。比如在下列情况

下智能代理键就不能使用:

本文标签: 代理维度属性事实