关于网站集约化建设的讲话,河北承德网,网页设计与网站建设在线第二章,手机网站底部广告代码0. 思维导图 第 1 章 数据仓库概述
1.1 数据仓库概述 数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个信息源的大量数据#xff0c;借助数据仓库的分析能力#xff0c;企业可从数据中获得宝贵的信息进而改进决策。同时#xff0c;随着时间的…0. 思维导图 第 1 章 数据仓库概述
1.1 数据仓库概述 数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个信息源的大量数据借助数据仓库的分析能力企业可从数据中获得宝贵的信息进而改进决策。同时随着时间的推移数据仓库中积累的大量历史数据对于数据科学家和业务分析师也是十分宝贵的。 1.2 数据仓库核心架构 第 2 章 数据仓库建模概述
2.1 数据仓库建模的意义 数据模型就是数据组织和存储方法它强调从业务、数据存取和使用角度合理存储数据。只有将数据有序的组织和存储起来之后数据才能得到高性能、低成本、高效率、高质量的使用。 高性能良好的数据模型能够帮助我们快速查询所需要的数据。低成本良好的数据模型能减少重复计算实现计算结果的复用降低计算基本。高效率良好的数据模型能极大的改善用户使用数据的体验提高使用数据的效率。高质量良好的数据模型能改善数据统计口径的混乱减少计算错误的可能性。 2.2 维度模型 维度模型将复杂的业务通过事实和维度两个概念进行呈现。事实通常对应业务过程而维度通常对应业务过程发生时所处的环境。 注意业务过程可以概括为一个个不可拆分的行为事件例如电商交易中的下单取消订单付款退单等都是业务过程。 下图为一个典型的维度模型其中位于中心的SalesOrder为事实表其中保存的是下单这个业务过程的所有记录。位于周围每张表都是维度表包括Date日期Customer顾客Product产品Lopcation地区等这些维度表就组成了每个订单发生时所处的环境即何人、何时、在何地下单了何种产品。从图中可以看出模型相对清晰、简洁。 维度模型以数据分析作为出发点为数据分析服务因此它关注的重点是用户如何更快的完成需求分析以及如何实现好的大规模复杂查询的响应性能。
第 3 章 维度建模理论之事实表
3.1事实表概述 事实表作为数据仓库维度建模的核心紧紧围绕着业务过程来设计。包含与业务过程有关的维度引用维度表外键以及该业务过程的度量通常是可累加的数字类型字段。
1. 事实表特点 事实表通常比较“细长”即列较少但行较多且行的增速快。
2. 事实表分类 事实表有三种类型分别是事务事实表、周期快照事实表和累计快照事实表每种事实表都具有不同的特点和适用场景。
3.2 事务型事实表
1. 概述 事务事实表用来记录各业务过程它保存的是各业务过程的原子操作事件即最细粒度的操作事件。粒度是指事实表中一行数据所表达的业务细节程度。 事务事实表可用于分析与各业务过程相关的各项统计指标由于其保存了最细粒度的记录可以提供最大限度地灵活性可以支持无法预期地各种细节层次的统计需求。
2. 设计流程
设计事务事实表一般可遵循以下四个步骤
选择业务过程声明粒度确认维度确认事实
1选择业务过程 在业务系统中挑选我们感兴趣的业务过程业务过程可以概括一个个不可拆分的行为事件例如电商交易中的下单取消订单付款退单等都是业务过程。通常情况下一个业务过程对应一张事务事实表。 2声明粒度 业务过程确认后需要为每个业务过程都声明粒度。即精确定义每张事务事实表的每行数据表示什么应该尽可能选择最细粒度以此来满足各种细节程度的需求。 典型的粒度声明如下 订单事实表中一行数据表示的是一个订单中的一个商品项。 3确定维度 确定维度具体是指确定与每张事务事实表相关的维度有哪些。 确定维度时应尽量多的选择与业务过程相关的环境信息。因为维度的丰富程度就决定了维度模型能够支持的指标丰富程度。 4确定事实 此处的“事实”一词指的是每个业务过程的度量值通常是可累加的数字类型的值例如次数、个数、件数、金额等。 经过上述四个步骤事务型事实表就基本设计完成了。
第一步选择业务过程可以确定有哪些事务事实表。第二步可以确定每张事务事实表的每行数据是什么第三步可以确定每张事务事实表的维度外键。第四步可以确定每张事务事实表的度量值字段。
3. 不足 事务事实表可以保证所有业务过程的最细粒度的操作事件故理论上可以支撑与各业务过程相关的各种统计粒度的需求。但对于某些特定类型的需求其逻辑可能会比较复杂或者效率会比较低下。例如 1存量型指标 例如商品库存账号余额等。此处以电商中的虚拟货币为例虚拟货币业务包含的业务过程主要包括获取货币和使用货币两个业务过程各自对应一张事务型事实表一张存储所有的获取货币的原子操作事件另一张存储所有使用货币的原子操作事件。 假定现有一个需求要求统计截至当日的各用户虚拟货币余额。由于获取货币和使用货币均会影响到余额故需要对两张事务事实表进行聚合且需要区分两者对余额的影响加或减另外需要对两张表的全表数据进行聚合才能得到统计结果。 可以看到不论是从逻辑还是效率上考虑这都不是一个好的方案。 2多事务关联统计 例如先需要统计最近30天用户下单到支付的时间间隔的平均值。统计思路应该是找到下单事务事实表和支付事务事实表过滤出30天的记录然后按照订单id对两张事实表进行关联之后用支付时间减去下单时间然后再求平均值。 逻辑上虽然并不复杂但是其效率较低因为下单事务事实表和支付事实事实表均为大表大表join大表的操作应尽量避免。 可以看到在上述两种场景下事务型事实表的表现并不理想。下面介绍的另外两种类型的事实表就是为了弥补事务型事实表的不足。
3.3 周期型快照事实表
1. 概述 周期快照事实表以具有规律性的、可预见的时间间隔来记录事实主要用于分析一些存量型例如商品库存账户余额或者状态型空气温度行驶速度指标。 对于商品库存、账号余额这些存量型指标业务系统中通常就会计算并保存最新结果所以定期同步一份全量数据到数据仓库构建周期型快照事实表就能轻松应对此类统计需求而无需再对事务事实表中的大量历史记录进行聚合。
2. 设计流程
1确定粒度 周期型快照事实表的粒度可由采样周期和维度描述故确定采样周期和维度后即可确定粒度。 采样周期通常选择每日。 维度可根据统计指标决定例如指标为统计每个仓库中每种商品的库存则可确定维度为仓库和商品。 确定完采样周期和维度后即可确定该表粒度为每日-仓库-商品。 2确认事实 事实可根据统计指标决定例如指标为统计每个仓库中每种商品的库存则事实为商品库存。
3. 事实类型 此处的事实类型是指度量值的类型而非事实表的类型。事实度量值共分为三类分别是可加事实半可加事实和不可加事实。
1.可加事实 可加事实是指可以按照与事实表相关的所有维度进行累加例如事务型事实表中的事实。
2.半可加事实 半可加事实是指只能按照与事实表相关的一部分维度进行累加例如周期快照事实表中的事实。以上述各仓储中各商品的库存每天快照事实表为例这张表中的库存事实可以按照仓库或者商品维度进行累加但是不能按照时间维度进行累加因为将每天的库存累加起来是没有意义的。
3.不可加事实 不可加事实是指完全不具备可加性例如比率型事实。不可加事实通常需要转化为可加事实例如比率可转换为分子和分母。
3.4 累积型快照事实表
1. 概述 累计快照事实表是基于一个业务流程中的多个关键业务过程联合处理而构建的事实表如交易流程中的下单、支付、发货、确认收货业务过程。 累积型快照事实表通常具有多个日期字段每个日期对应业务流程中的一个关键业务过程里程牌。 累计型快照事实表主要用于分析业务过程里程牌之间得时间间隔等需求。例如前文提到得用户下单到支付的平均时间间隔使用累积型快照事实表进行统计就能避免两个事务事实表的关联操作从而变得十分简单高效。
2. 设计流程 累积快照事实表的设计流程同事务事实表类似也可以采用以下四个步骤下面重点描述与事务事实表的不同之处。 选择业务过程-》声明粒度-》确认维度-》确认事实 1选择业务过程 选择一个业务流程中需要关联分析的多个关键业务过程多个业务过程对应一张累积型快照事实表。 2声明粒度 精确定义每行数据表示的是什么尽量选择最小粒度。 3确认维度 选择与业务过程相关的维度需要注意的是各业务过程都需要一个日期维度。 4确认事实 选择各业务过程的度量值。
第 4 章 维度建模理论之维度表
4.1 维度表概述 维度表是维度建模的基础和灵魂。前文提到事实表紧紧围绕业务过程进行设计而维度表则围绕业务过程所处的环境进行设计。维度表主要包括一个主键和各种维度字段维度字段称为维度属性。
4.2 维度表设计步骤
1确定维度表 在设计事实表时已经确定了与每个事实表相关的维度理论上每个相关维度均需对应一张维度表。需要注意到可能存在多个事实表与同一个维度都相关的情况这种情况需保证维度的唯一性即只创建一张维度表。另外如果某些维度表的维度属性很少例如只有一个则可不创建该维度表而把该表的维度属性直接增加到与之相关的事实表中这个操作称为维度退化。 2确定主维表和相关维表 此处的主维表和相关维表均指业务系统中与某维度相关的表。例如业务系统中与商品相关的表有sku_info,spu_info,base_trademark,base_category3,base_category2,base_category1等其中sku_info就称为商品维度的主维表其余表称为商品维度的相关维表。维度表的粒度通常与主维表相同。 3确定维度属性 确定维度属性即确定维度表字段。维度属性主要来自于业务系统中与该维度对应的主维表和相关维表。维度属性可直接从主维表或相关维表中选择也可通过进一步加工得到。 确定维度属性时需要遵循以下要求
尽可能生成丰富的维度属性维度属性的丰富程度直接影响到数据模型能够支持的指标的丰富程度。尽量不使用编码而使用明确的文字说明一般可以编码和文字共存。尽量沉淀出通用的维度属性。
4.3 维度设计要点
1. 规范化与反规范化 规范化是指使用一系列范式设计数据库的过程其目的是减少数据冗余增强数据的一致性。通常情况下规范化之后一张表的字段会拆分到多张表。 反规范化是指将多张表的数据冗余到一张表其目的是减少join操作提高查询性能。在设计维度表时如果对其进行规范化得到的维度模型称为雪花模型如果对其进行反规范化得到的模型称为星型模型。 数据仓库的主要目的是用于数据分析和统计所以是否方便用户进行统计分析决定了模型的优劣。维度表一般是很不规范化的。
2. 维度变化 维度属性通常不是静态的而是会随时间变化的数据仓库的一个重要特点就是反映历史的变化所以如何保持维度的历史状态是维度设计的的重要工作之一。保存维度数据的历史状态通常有以下两种做法
全量快照表拉链表
1全量快照表 离线数据仓库的计算周期通常为每天一次所以可以每天保存一份全量的维度数据。这种方式的有点和缺点都很明显。
优点是简单高效开发和维护成本低且方便理解和使用。缺点是浪费存储空间尤其是当数据的变化比例比较低时。
2拉链表 拉链表的意义就在于能够更加高效的保存维度信息的历史状态。 1什么是拉链表
2为什么要做拉链表
3如何使用拉链表
3. 多值维度 如果事实表中一条记录在某个维度表中有多条记录与之对应称之为多值维度。例如下单事实表中的一条记录为一个订单一个订单可能包含多个商品所会商品维度表中就可能有多条数据与之对应。 两种解决方案如下
降低事实表的粒度例如将订单事实表的粒度由一个订单降低为一个订单中的一个商品项。在事实表中采用多字段保存多个维度值每个字段保存一个维度id。这种方案只适用于多值维度个数固定的情况。
4. 多值属性 维表中的某个属性同时有多个值称之为“多值属性”例如商品维度的平台属性和销售属性每个商品均有多个属性值。 针对这种情况通常有可以采用以下两种方案。
第一种将多值属性放到一个字段该字段内容为key1:value1key2:value2的形式例如一个手机商品的平台属性值为“品牌:华为系统:鸿蒙CPU:麒麟990”。第二种将多值属性放到多个字段每个字段对应一个属性。这种方案只适用于多值属性个数固定的情况。
第 5 章 数据仓库设计
5.1 数据仓库分层规划 优秀可靠的数仓体系需要良好的数据分层结构。合理的分层能够使数据体系更加清晰使复杂问题得以简化。每一层都是一系列的表。以下是分层规划。
5.2 数据仓库构建流程 以下是构建数据仓库的完整流程。
1. 数据调研 数据调研重点要做两项工作分别是业务调研和需求分析。这两项工作做的是否充分直接影响着数据仓库的质量。 1业务调研 业务调研的主要目标是熟悉业务流程、熟悉业务数据。 熟悉业务流程要求做到明确每个业务的具体流程需要将该业务所包含的每个业务过程一 一列举出来。 2需求分析 典型的需求指标如最近一天各省份手机品类订单总额。 分析需求时需要明确需求所需的业务过程及维度例如该需求所需的业务过程就是买家下单所需的维度有日期、省份、商品品类。 3总结 做完业务分析和需求分析之后要保证每个需求都能找到与之对应的业务过程及维度。
2. 明确数据域 3. 构建业务总线矩阵 业务总线矩阵中包含维度模型所需的所有事实业务过程以及维度以及各业务过程与各维度的关系。矩阵的行是一个个业务过程矩阵的列是一个个的维度行列的交点表示业务过程与维度的关系。 一个业务过程对应维度模型中一张事务事实表一个维度则对应维度模型中的一张维度表。所以构建业务总线矩阵的过程就是设计维度模型的过程。但是需要注意的是总线矩阵中通常只包含事务事实表另外两种类型的事实表需要单独设计。 按照事务事实表的设计流程选择业务过程-》声明粒度-》确认维度-》确认事实得到的最终的业务总线矩阵如下 后续的DWD层以及DIM层的搭建需参考业务总线矩阵。
4. 明确统计指标 明确统计指标具体的工作是深入分析需求构建指标体系。构建指标体系的主要意义就是指标定义标准化。所有指标的定义都必须遵循同一套标准这样能有效的避免指标定义存在歧义指标定义重复等问题。 1指标体系相关的概念 1原子指标 原子指标基于某一业务过程的度量值是业务定义中不可再拆解的指标原子指标的核心功能就是对指标的聚合逻辑进行了定义。原子指标包含三要素分别是业务过程,度量值,聚合逻辑。 例如订单总额就是一个典型的原子指标其中的业务过程为用户下单、度量值为订单金额聚合逻辑为sum()求和。需要注意的是原子指标只是用来辅助定义指标一个概念通常不会对应有实际统计需求与之对应。 2派生指标 派生指标基于原子指标其与原子指标的关系如下图所示。 3衍生指标 衍生指标是在一个或多个派生指标的基础上通过各种逻辑运算复合而成。例如比例、比例等类型的指标。衍生指标也会对应实际的统计需求。
2指标体系对于数仓建模的意义 通过上述两个剧吐案例可以看出绝大多数的统计需求都可以使用原子指标、派生指标以及衍生指标这套标准去定义。同时能够发现这些统计需求都直接的或间接的对应一个或者多个派生指标。 当统计需求足够多时必然会出现部分统计需求对应的派生指标相同的情况。这种情况下我们就可以考虑将这些公共的派生指标保存下来这样做的主要目的就是减少重复计算提高数据的复用性。 这些公共的派生指标统一保存再数据仓库的DWS层。因此DWS层设计就可以参考我们根据现有的统计需求整理出的派生指标。派生指标如下图所示
5. 维度模型设计 维度模型的设计参照上述得到的业务总线矩阵即可。事实表存储在DWD层维度表存储在DIM层。
6. 汇总模型设计 汇总模型的设计参考上述整理出的指标体系主要是派生指标即可。汇总表与派生指标的对应关系是一张汇总表通常包含业务过程相同、统计周期相同、统计粒度相同的多个派生指标。请思考汇总表与事实表的对应关系是
一个汇总表对应一个事实表一个事实表对应多个汇总表