数仓维度设计模型、事实表、维度表、指标、宽表,常见的三种维度建模设计——星型模型、雪花模型、星座模型

本文主要是介绍数仓维度设计模型、事实表、维度表、指标、宽表,常见的三种维度建模设计——星型模型、雪花模型、星座模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数仓维度设计模型

事实表

事实表,通常我们可以认为它就是数据表

它是指,发生在现实世界中的各种事件所形成的数据,如:

  • 商品购买(产生订单数据)
  • 账户创建(创建账户数据)
  • 退货行为(产生退货数据)

等等,一系列现实世界的操作,会反映在事实表中的记录之上。

维度表

维度表是事实表的补充。维度表的主键可以关联到事实表的外键之上。

维度表描述的是,现实事件信息的补充。

比如,在事实表中仅仅记录了你购买商品的时间戳,但是维度表可以对这个时间戳进行信息补充,如:

  • 当前日期
  • 当日是周几
  • 当日是否是节假日
  • 当日是第几季度
  • 当日是什么季节
  • 当日是全年第几天

等等的一系列额外数据的补充。

又好比,你订单中购买了商品,在事实表中可能记录的只是商品ID,但是基于维度表(商品细节),可以补充:

  • 商品厂家
  • 商品尺寸
  • 商品类别
  • 进价
  • 有效期
  • 供应商

等等一系列补充。

一般情况下,维度表也会分为:

  • 大型维度表
  • 小型维度表

小型维度表,就是如前面对日期做补充的维度表,这类维度表,一年的日期只需要365行数据,就可以对海量的数据进行补充。

大型维度表,就是如前面对商品做补充的维度表,商品越多,维度表内容越多。通常,大型维度表更会愿意被称为:

  • 字典表
  • 同时对应着,事实表也可以称之为 流水表
  • 那么,字典表就是对流水表里面某一列数据的说明。

指标

指标就是对数据分析的需求,或者说是目标Schema。

比如,某个指标是:月热销商品TOP10,这个指标就是一个目标。

在数仓开发中,开发某个指标,就是针对某个目标进行数据建模、分层、处理。

宽表

宽表是指一种大表,是将事实表和维度表进行合并形成的表。

比如日期维度,将对应的日期维度的列,直接添加到事实表中,或者商品维度的列也同步加入到事实表中。

那么这样事实表的列就非常的多,它所涉及到的维度基本都涵盖在了一张表中,俗称All in one

对于这样的表,就称为宽表

基于宽表,我们可以针对这一个表完成许多业务指标的开发。

常见的三种维度建模设计

星型模型

星形模式(Star Schema)是最常用的维度建模方式。星型模式是以事实表为中心,所有的维度表直接连接在事实表上,像星星一样。

星形模式的维度建模由一个事实表和一组维表成,且具有以下特点:

a. 维表只和事实表关联,维表之间没有关联;

b. 每个维表主键为单列,且该主键放置在事实表中,作为两边连接的外键;

c. 以事实表为核心,维表围绕核心呈星形分布;

在这里插入图片描述

雪花模型

雪花模式(Snowflake Schema)是对星形模式的扩展。雪花模式的维度表可以拥有其他维度表的,虽然这种模型相比星型更规范一些,但是由于这种模型不太容易理解,维护成本比较高,而且性能方面需要关联多层维表,性能也比星型模型要低。所以一般不是很常用。

在这里插入图片描述

星座模型

星座模式是星型模式延伸而来,星型模式是基于一张事实表的,而星座模式是基于多张事实表的,而且共享维度信息。

前面介绍的两种维度建模方法都是多维表对应单事实表,但在很多时候维度空间内的事实表不止一个,而一个维表也可能被多个事实表用到。在业务发展后期,绝大部分维度建模都采用的是星座模式。

在这里插入图片描述

这篇关于数仓维度设计模型、事实表、维度表、指标、宽表,常见的三种维度建模设计——星型模型、雪花模型、星座模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/640467

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line

Linux下修改hostname的三种实现方式

《Linux下修改hostname的三种实现方式》:本文主要介绍Linux下修改hostname的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下修改ho编程stname三种方式方法1:修改配置文件方法2:hFvEWEostnamectl命

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误