维度是看待事情发生的角度,是维度建模的基础和灵魂。
我们在维度建模中,把度量称为事实,将环境称为维度。
举个例子,在电商业务中有这么个需求:
我需要统计昨日所有店铺的成交金额。这里的维度就是:日期、店铺;度量(也就是事实)是:成交金额。
所以延伸下来,电商业务中的基础维度有:日期、店铺、买家、卖家、商品、类目、地区等;而事实有成交金额、购买人数、购买件数等。
维度属性指的就是维度的列。一般是我们在数据分析时用到的过滤条件、分组、排序等,所以维度属性越丰富,可以观察的角度就越多。
如果从SQL查询的角度上看,维度属性通常是放在where和group by、sort by后的列。
维度的设计过程,就是维度属性的确定过程。
Kimball:“数仓的能力如何,跟维度属性的深度和质量成正比。”
下面我们用商品维度表的设计为例对维度设计的方法进行详细说明。
在建设维度表中,要保证其在数仓中的唯一性,也就是说只允许有一个商品维表。
维度是有层次的,也是反范式的。拿商品维表举例,
类目层次:一级类目 》二级类目 》三级类目
这种层次结构常用在什么场景?数据钻取。
什么是数据钻取?
数据钻取分为上钻(维度减少)和下钻(维度增多)。简单来说就是想点开年份看详细的月份或者天数据,就叫下钻;如果由每天的维度变为看季度、年维度,那就是上钻。
常见的维度层次结构有以下几个:日期,地址,类目等。
我们只要细心看上面商品表,会发现其实如果我们把类目当成一个单独的维度表抽离出来也是可行的。于是变成以下两张表:
【类目维表】(类目ID,一级类目ID,一级类目名称,二级类目ID,二级类目名称,三级类目ID,三级类目名称)
这种方法在维度建模中是允许存在的,当然我们更建议把类目维表的信息反规范化到商品维表中。这两种方法有个专业名称,叫星型模型和雪花模型。
星型模型和雪花模型中,都只有一个事实表,但是对于大多数业务而言都过于理想话,最后,由于事实表的增加,星型模型和雪花模型都会演化成最终的星座模型。
星座模型里会有多个事实表跟维度表公用。
将不同数据域(后面章节详细介绍,大概意思是不同业务模块的数据)的事实数据,根据同一个维度做合并的情况就叫交叉探查。
电商数据中最常见的是日志域和交易域的交叉探查。
假设有两张事实表:
【交易域.用户购买商品事实表】(用户ID,商品ID,成交金额)- B表,两个维度外键
用一条伪SQL举例:
如果不一致,将会导致数据出错,只能过滤掉部分数据。
如果觉得例子麻烦,那只需要记住一点即可,要想交叉探查数据无误,就一定要保证:一致性维度。
Kimball的数据仓库总线架构提供了种分解企业级数据仓库规划任务的合理方法,通过构建企业范围内一致性维度和事实来构建总线架构。 —— 《阿里巴巴大数据之路》
意思是维度建模要求必须有一致性维度。换句话说维度是统一设计的,每个维度表都是唯一不重复的,要做到全局通用。否则会导致数据查询的时候不一致甚至错误。
如何才能保证有一致性维度呢?有三种方法:
当一张维度表中包含多个类别、加工逻辑十分困难、有部分维度属性可以单独处理或者不常用时,考虑将维度拆分。
无论是维表是分还是合,都需要从以下角度权衡:
通常来说,拆分方法有以下几种:
我们假设航旅的商品和普通的商品,都属于商品,都有商品价格、标题、类型、上架时间、类目等维度属性,但是航旅的商品除了有这些公共属性外,还有酒店、景点、门票、旅行等自己独特的维度属性。我们应该如何去设计维度?针对此问题,有两种解决思路:
当航旅类别的商品频繁更新、变化较大或者业务关联程度较低时,应当选择方案1,建单独的一张航旅商品维表进行维护。在大型系统中,基于这种思路,商品维表可能会被拆分成N个不同的子商品维表,而各个子维表的维度属性必定会比【商品维表】多。
维度数据日积月累会有不少记录是废用的,我们应该给数据量大的维度表,新建一张历史维度表做数据归档。但如何去识别不用的数据进行历史归档?
《阿里巴巴大数据之路》中给出三个思路:
数据仓库中另一重要的特点是——反映历史变化。缓慢变化维度,这里的缓慢是跟(快速变化)事实表相对的。还是以商品维表举例,缓慢变化维一般就三种解决方法:
阿里巴巴不建议用缓慢变化维处理维度的变化。
一方面是缓慢变化维需要生成全局唯一的代理键,对于阿里庞大的数据量来说,成本开销太高;二是加入了代理键后会增加ETL的复杂程度。基于这两点,阿里用的是快照维度,顾名思义就是一天生成一个表切片,每天的全量数据都存储到对应的历史分区。当我们取任意一天的事实时,可以通过时间对应到每一天的维度历史中进行关联即可。但是此方法最大的问题是太浪费存储!
所以,阿里又推出了极限存储方案。不过需要注意的是,极限存储的底层是历史拉链存储,所以我们下面先讲讲什么是历史拉链,以及拉链表的优缺点,然后再介绍极限存储。
历史拉链存储是基于处理缓慢变化维的第三种方法来加工的,也就是:新建维度行。
历史拉链一般用天作为一次记录变更的最细单位,新数据进来后,旧数据就置为历史状态,新数据打上最新标记。本质其实就是为了节省存储,其次才是为了反映历史变化。如果一天内变化多次,那就以当天最后一次变更记录为最新。但如果变化不太频繁,按天存储产生太多无用数据,也可以按周、月等做变更单位。
历史拉链存储一般应用场景:针对变化频率不频繁的维度表或者是周期性事实表(后面章节会介绍事实表的设计),如修改商品名称、修改身份证名称、订单状态变更、用户状态变更等。
举个例子:商品维度表
商品ID
商品名称
1001
阿玛尼手表,新到货!
1002
香奈儿唇膏
1003
片仔癀
绿色代表新品,红色代表修改
商品ID
商品名称
1001
阿玛尼手表,新到货!
1001
阿玛尼手表新名称
1002
香奈儿唇膏
1002
香奈儿唇膏新名称
1003
片仔癀
1004
苹果手机
所以最后会发现,如果每条数据每日都变化,天拉链会没有意义。反之,每天所有商品数据都不发生变化,此时,只需要存储一天的数据即可,也不需要拉链。
极限存储
其实阿里的极限存储底层依然还是历史拉链表,但是它按月做拉链,另外还封装了一层hook,当用户查询历史时,先从最近的历史快照中获取映射,再去历史拉链里面查。感觉就是历史拉链存储做了些许延伸,不细说。
维度的递归层次,按照层级是否固定分为均衡层次结构和非均衡层次结构。比如类目,有固定数量的级别,分别是叶子类目、五级类 目、四级类目、三级类目、二级类目、 级类曰:地区,分别是乡镇/街道区县、城市、省份、国家。对于这种具有固定数量级别的递归层次,称为“均衡层次结构”。反之,对于数量级别不固定的递归层次,称为“非均衡层次结构”。
类目ID
类目名称
父类目ID
是否叶子结点
1001
1002
1001
1003
1001
1004
1003
1005
1002
1006
1002
1007
1006
其关系如下图:
对于递归层级维度,当树的高度不深的时候,我们只需要把它扁平化处理。
如生成下面的类目维度表:
【类目维度表】(类目ID,类目名称,类目层级,一级类目ID,一级类目名称,二级类目ID,二级类目名称,三级类目ID,三级类目名称... ... ,是否叶子类目)
其中如果只有高层级类目,没有低层级类目,就将低层级类目置空。
有些数据库或者数仓查询引擎是不支持递归查询的,递归的类目层级需要用语言特殊处理。
通过事实表发生的事实计算出来的维度,称为行为维度或事实衍生维度。如按照交易金额划分的等级维度、卖家的信用度等。
按照加工方式,行为维度可以划分为以下几种:
对于行为维度,一般有两种处理方式,一是新建维表;二是冗余到现有的维度表中。
如果一个事实表的某一条记录在维度表中找到多条记录对应,就成为多值维度。
如:电商系统一般会把订单分为大订单和小订单,一个大订单可以购买2个以上商品,小订单每单是1个商品。
如果从大订单事实表去关联商品维表,那明显是又问题的。
针对多值维度,可以通过以下两种思路解决:
源业务系统中往往会有特别多的枚举值、指示符或者低基数标志字段、开关字段等。如:订单状态、微信场景、广告渠道、是否XXX(01标记)等。一般来说,如果这种维度少的话,可以在事实表中存储,但是如果特别多,建议剥离出事实表,单独存储到一张杂项维度表中,生成对应的代理键后,事实表只需保存维度的代理键即可。
例如,在销售订单中,可能存在有很多离散数据(yes-no这种开关类型的值),如:
我们需要新增一个名为sales_order_attribute_dim的杂项维度表,该表包括四个yes-no列:verification_ind、credit_check_flag、new_customer_ind和web_order_flag。每个列可以有两个可能值中的一个,Y 或 N,因此sales_order_attribute_dim表最多有16(2^4=16)行。
注意:
假设这16行已经包含了所有可能的组合,并且不考虑杂项维度修改的情况,则可以直接通过笛卡尔积生成记录后插入到杂项维度表中。但如果基数大,生成的笛卡尔积数量爆炸式增长,则不建议直接生成所有组合的完整的杂项维度表,我们只需要在抽取的过程中遇到新的组合就生成相应记录即可。
具体表结构如下图所示:
注意:上述的这种维表只归属于订单,针对公共性强(多个事实表都可用)的杂项维度,还是可以考虑单独给他建一个统一的维表存放的。
本篇简单阐述了维度的概念,类型,设计维度的方法,模型等内容。可以说所有的内容都是奔着一个议题去的:
如何把维度设计规范化、简单易用、统一使用?如何尽可能地节省存储维度的空间?
维度建模中的维度表设计是在确定业务需求和数据粒度后开展的,而维度设计之后咱们将在下一篇继续讨论事实表的设计。
在数据分析中,日期维度表是一个非常重要也是使用频率很高的一个维度表,用于存储日期相关的信息,如年、月、日、星期,等等,它可以作为其他事实表的外键,用于连接事实表和其他维度表,提供灵活的时间分析和报表功能。在元表纪中可以非常轻松简单的构建日期维度表,并生成日期数据信息
一、数据仓库诞生的原因历史数据积存:历史数据使用频率过低,堆积在业务数据库中,会导致查询性能下降企业数据分析需要:各个部门自己建立独立的数据抽取系统,导致数据不一致,资源 浪费严重,数据库权限也会存在风险二、数据仓库的基本概念数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库顾名思义,是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,对多样的业务数据
实例:修改表 emp 的 ename 字段,将 varchar(10) 改为 将 varchar(20)mysql> alter table emp modify ename varchar(20);实例:表 emp 新增字段 age,类型为 intmysql> alter table emp add age int;... ...
# 如何实现“DIM维度 数据仓库”在数据仓库的构建中,维度建模是一项关键任务。DIM(Dimension,维度)表是数据仓库的核心,用于提供数据的上下文。本文将指导刚入行的小白如何构建DIM维度数据仓库,从流程到代码实现,帮助你一步步理解这一过程。## 一、整个流程以下是实现DIM维度数据仓库的整体流程:| 步骤 | 描述 ||---
# 数据仓库时间维度表的科普在数据仓库(Data Warehouse)中,时间维度表是一个重要的组成部分。它不仅为数据分析提供了时间的上下文,还使数据分析师能够轻松地处理时间序列数据。本文将介绍时间维度表的概念、结构以及如何实现一个简单的时间维度表,最后以代码示例来加深理解。## 什么是时间维度表?时间维度表是一个用于存储与时间相关信息的表,其中包含有关日期、周、月份、季度等多种时间粒
# 数据仓库维度表更新在数据仓库中,维度表是用来描述事实表的属性的表,它包含了关于业务过程的维度信息,用来对事实数据进行分析和查询。维度表的更新是数据仓库中非常重要的一个环节,因为它直接影响到数据的准确性和分析结果的有效性。本文将介绍数据仓库维度表更新的相关知识,并提供代码示例帮助理解。## 什么是维度表?维度表是数据仓库中描述业务过程的表,它包含了业务过程的各种属性信息。维度表通常包
# 数据仓库日期维度表实现流程## 1. 简介在数据仓库中,日期维度表是非常重要的一个维度表,用于存储日期相关的信息,如年、月、日、星期等。它可以作为其他事实表的外键,用于连接事实表和其他维度表,提供灵活的时间分析和报表功能。## 2. 实现步骤下面是实现数据仓库日期维度表的步骤,以及每一步需要做什么。| 步骤 | 描述 || ---- | ---- || 1. 创建日期维度表
1.维度建模被广泛应用所满足的需求(维度建模的优势):以商业用户更易理解的方式发布数据提高查询性能2.星型模型和OLAP多维数据 在关系型数据库中实现的维度模型称为星型模型,因其结构类似星型结构。在多维数据库中实现的维度模型通常称为联机分析处理(OnLine Analytical Processing,OLAP)多维数据库。 如何理解实体表、维度表、事实表?实体表:实体表就是一个实际对
目录维度建模基本概念事实表维度表事实表与维度表总结维度建模三种模式数据仓库分层好处数仓分层思想维度建模基本概念维度模型是数据仓库领域大师Ralph Kimall所倡导,他的《数据仓库工具箱》,是数据仓库工程领域最流行的数仓建模经典。维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。维度建模是专门应用
第一步:选择维度或新建维度。作为维度建模的核心,在企业级数 据仓库中必须保证维度的唯一性。以淘宝商品维度为例,有且只允许有 一个维度定义。第二步:确定主维表。此处的主维表一般是 ODS 表,直接与业务 系统同步。以淘宝商品维度为例, s_auction_auctions 是与前台商品中心 系统同步的商品表,此表即是主维表。第三步:确定相关维表。数据仓库是业务源系统的数据整合,不同业务系统或者同 一
(一)维度设计的基础知识在建设以Hadoop为技术核心的数据仓库时,维度建模是目前应用最广泛的建模方法论,虽然无法说它一定是最合适的,但针对维度建模所涉及的超大规模平台建设已经有了比较成功的应用案例。因此针对维度建模中最基本的维度与事实的概念,需要有一定比较深入的了解,以理解在超大规模平台下如何使用和维护。维度是维度建模最重要的建设项目,是描述平台表及业务过程的重要表述方式。通常一张维度表是一个主
维度维度在数据仓库中主要对事实指标进行过滤和重新组织提供指导。可以将用户对事实的查询结果按照维度指标进行筛选,只允许与维度指标相关的数据返回给用户。维度一般具有如下特性:可以形成一个维度体系,具备访问和过滤事实的能力,能够提供相关的非标准实体,包括一个完整的维度体系编码、关键词以及相关的表示,可以映射到用户所需要信息的列。在物理数据仓库中是较小的表,可以对前台用户的应用程序进行数据填充,或引用红花
数据仓库建模方法论维度建模)1 什么是数据模型 数据模型是抽象描述现实世界的一种方法,是通过抽象的实体及实体之间的联系来表示现实世界中事务的相互关系的一种映射。 数据仓库模型是数据模型中针对特定的数据仓库应用系统的特定模型。由下图四部分内容组成: l 业务建模,主要解决业务层面的分解和程序化。l&nb
数据仓库什么是数据仓库数据仓库(Data Warehouse)是一个面向主题的、集成的、稳定的且随时间变化的数据集合,用于支持管理人员的决策基础知识事实表 事实表是指保存了大量业务数据的表,或者说保存了一些真实的行为数据的表。例如:销售商品所产生的订单数据。维度表 维度指的就是一个对象的属性或者特征,例如:时间维度,地理区域维度,年龄维度这是维度的概念。维度表里面存放的其实就是刚才所说的那些维度相
1、星型模型事实表(Fact Table)和维表(Dimension Table)组成。每个维表中都会有一个维作为主键,所有这些维的主键结合成事实表的主键。事实表的非主键属性称为事实,它们一般都是数值或其他可以进行计算的数据。 在多维分析的商业智能解决方案中,根据事实表和维度表的关系,又可将常见的模型分为星型模型和雪花型模型。在设计逻辑型数据的模型的时候,就应考虑数据是按照星型模型还是雪花型模型
在商业智能项目的实施过程中,维度建模技术和企业数据仓库建模是两种不同的方法论,以下是以应用驱动、提供快速原型的商业智能项目的实施和规划过程中使用的维度建模方法时的标准实施过程。具体到项目中则根据项目的规模及所涉及的业务范围而有所补充或裁减。1. 商业智能项目规划a) 数据仓库项目的定义及范围 b) 项目准备评估 c) 业务合理性证明2. 商业智能项目业务需求定义a) 业务需求收集 b) 业务需求审
文章目录数仓分层为什么要分层数据运营层:ODS(Operational Data Store)数据仓库层:DW(Data Warehouse)维表层:DIM(Dimension)数据明细层:DWD(Data Warehouse Detail)数据中间层:DWM(Data WareHouse Middle)数据服务层:DWS(Data WareHouse Servce)主题数据层:DWT(Data
目录1-背景2-解决方案2.1-重写维度值2.2-插入新的维度行2.3-添加新的维度列2.4-拉链表处理 1-背景众所周知,虽然维度表属性相对稳定,但是并不是一成不变的,尽管相当缓慢,维度值仍会随时间而变化。比如商品类目的改变,医院等级的改变。在一些情况下,保留历史数据没有什么分析价值,而在另一些情况下,保留历史数据是非常重要的。2-解决方案2.1-重写维度值在维度表中,仅需以当前值重写先前存在
本文导航前言:model对于数仓是最核心的东西,数据模型是数据组织和存储方法,模型的好坏,决定了数仓能支撑企业业务多久。为什么大多数企业,数仓都要重建,这不仅仅是业务拓展、发展迅速,很大一部分是因为模型建的很烂。01. 基本概念维度建模,是数据仓库大师Ralph Kimball提出的,是数据仓库工程领域最流行的数仓建模经典。维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它
如果机器人在启动的时候,电脑是锁屏状态,那么PC机会中断与桌面的Session会话,就会造成流程执行报错。 RPA的锁屏运行及时 着实有点困难目前大致梳理出三个实现方式 1、方案3 防睡眠软件 使用锁频和解锁两种流程组件功能,在业务流程绘制中手动控制解锁和锁屏业务; &nbs
本文介绍了四个关于岛屿的算法问题及解法。101题计算孤岛总面积,通过DFS将边界相连陆地置0后统计剩余1的数量;102题沉没孤岛,先将边界相连陆地标记后转换,实现孤岛沉没;103题高山流水,使用DFS从两组边界出发搜索可到达的中间点;104题建造最大岛屿,通过标记各岛屿面积后计算水格变陆地能连接的最大岛屿面积。每个问题都采用DFS/BFS遍历二维数组,配合标记和统计等技巧解决特定条件下的岛屿问题。
网页设计遇到最大的麻烦之一莫过于网页对不同浏览器的兼容性问题了,因为IE 6.0 / IE 7.0 / firefox 2 / Opera 9等主流浏览器对CSS解析不近相同,导致设计的页面效果不一样,所以用什么方法可以有效解决不同浏览器不同页面效果的问题呢?广泛被使用的方法就是CSS Hack,即使用特别的CSS定义显示网页在不同浏览器的设计风格,针对不同的浏览器去写不同的CSS,最大化兼容浏览
Metasploitable2的安装,完成之后是用不了的,得将它的数据库名称设置成dbname=owasp10方可正常使用。正是如此,我有了一个机会去接触vi编辑模式,刚开始对着教程把命令敲上去后进入了vi编辑模式,真是让人头大呀。一脸懵逼地看着屏幕,什么指令都打不出来,花了好一段时间才发现这是vi编辑模式,后来百度解决了问题。Vi模式下输入命令Ctrl+u:向文件首翻半屏;Ctrl+d:向文件尾