一篇文章搞懂数据仓库:维度表(设计原则、设计方法)

目录

1、什么是维度表?

2、维度表设计原则

(1)维度属性尽量丰富,为数据使用打下基础

(2)给出详实的、富有意义的文字描述

(3)区分数值型属性和事实

(4)沉淀出通用的维度属性,为建立一致性维度做好铺垫

(5)退化维度(DegenerateDimension)

(6)缓慢变化维(Slowly Changing Dimensions)

3、维度表设计方法


1、什么是维度表?

维度是维度建模的基础和灵魂。在维度建模中,将度量称为“事实” , 将环境描述为“维度”。

维度表包含了事实表中指定属性的相关详细信息,最常用的维度表有日期维度、城市维度等。

例,小编的日期维表:
num字段名字段中文名描述数据类型
1date日期日期 yyyMMdd格式bigint
2week星期,数字型星期,数字型 0-6bigint
3week_cn星期中文名星期中文名 星期一……string
4year_weeks一年中的第几周一年中的第几周 1 2 3……bigint
5mon_dt本周周一日期本周周一日期bigint
6sun_dt本周周日日期本周周日日期bigint
7month年月年月,yyyyMM格式bigint
8month_short月份简写月份简写,MM格式1~12bigint
9month_cn月份中文名月份中文名 一月……string
10quarter季度季度,yyyyQ1\2\3\4string
11quarter_short季度 数字型季度 数字型 1-4bigint
12quarter_cn季度中文名季度中文名 第一季度……string
13year年份年份,yyyy格式bigint

2、维度表设计原则

维度的作用一般是查询约束、分类汇总以及排序等,我们在进行维度表设计时,应当提前考虑:

(1)维度属性尽量丰富,为数据使用打下基础

比如淘宝商品维度有近百个维度属性,为下游的数据统计、分析、探查提供了良好的基础。

(2)给出详实的、富有意义的文字描述

属性不应该是编码,而应该是真正的文字。在间里巴巴维度建模中, 一般是编码和文字同时存在,比如商品维度中的商品 ID 和商品标题、 类目 ID 和 类目名称等。 ID 一 般用于不同表之间的关联,而名称一般用 于报表标签

(3)区分数值型属性和事实

数值型宇段是作为事实还是维度属性,可以参考字段的一般用途。 如果通常用于查询约束条件或分组统计,则是作为维度属性;如果通常 用于参与度量的计算, 则是作为事实。比如商品价格,可以用于查询约 束条件或统计价格区间 的商品数量,此时是作为维度属性使用的;也可 以用于统计某类目 下商品的平均价格,此时是作为事实使用的。另外, 如果数值型字段是离散值,则作为维度属性存在的可能性较大;如果数 值型宇段是连续值 ,则作为度量存在的可能性较大,但并不绝对,需要 同时参考宇段的具体用途。

(4)沉淀出通用的维度属性,为建立一致性维度做好铺垫

有些维度属性获取需要进行比较复杂的逻辑处理,有些需要通过多表关联得到,或者通过单表 的不同宇段混合处理得到,或者通过对单表 的某个字段进行解析得到。此时,需要将尽可能多的通用的维度属性进 行沉淀。一方 面,可以提高下游使用的方便性,减少复杂度;另一方面,可以避免下游使用解析时由于各自逻辑不同而导致口径不 一致。

(5)退化维度(DegenerateDimension)

在维度类型中,有一种重要的维度称作为退化维度。这种维度指的是直接把一些简单的维度放在事实表中。退化维度是维度建模领域中的一个非常重要的概念,它对理解维度建模有着非常重要的作用,退化维度一般在分析中可以用来做分组使用。

(6)缓慢变化维(Slowly Changing Dimensions)

维度的属性并不是始终不变的,它会随着时间的流逝发生缓慢的变化,这种随时间发生变化的维度我们一般称之为缓慢变化维(SCD),缓慢变化维一般使用代理健作为维度表的主健。

缓慢变化维的三种处理方式:

① TYPE1 直接覆盖原值

适用于:不看历史数据,简单粗暴

undefined

② TYPE2 拉链表

需要在维度行再增加三列:有效日期、截止日期、行标识(可选)。

在旧的一行数据增加关链时间(end_date),新的一行数据增加开链时间关链时间,多条数据加起来是一个完整的时间周期。

image.png

③ TYPE3 增加属性列

undefined

 

3、维度表设计方法

  • 第一步:选择维度或新建维度。作为维度建模的核心,在企业级数 据仓库中必须保证维度的唯一性。以淘宝商品维度为例,有且只允许有 一个维度定义。
  • 第二步:确定主维表。此处的主维表一般是 ODS 表,直接与业务 系统同步。以淘宝商品维度为例, s_auction_auctions 是与前台商品中心 系统同步的商品表,此表即是主维表。
  • 第三步:确定相关维表。数据仓库是业务源系统的数据整合,不同业务系统或者同 一业务系统中的表之间存在 关联性。根据对业务的梳 理,确定哪些表和主维表存在关联关系,并选择其中的某些表用于生成维度属性。
  • 第四步 :确定维度属性 。本步骤主要 包括两个阶段,其中第 一 个阶 段是从主维表 中选择维度属性或生成新的维度属性;第 二个阶段是从相 关维表中选择维度属性或生成新 的维度属性。以淘宝商品维度为例,从 主维表 (s_auction_auctions)和类目、 SPU、卖家、店铺等相关维表中 选择维度属性或生成新 的维度属性。

 

参考文献:阿里巴巴大数据之路

数仓系列爽文:https://blog.csdn.net/weixin_39032019/category_8871528.html

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript 键值转换

for (var i 0; i < headerFields.length; i) {fieldToIndex[headerFields[i]] i;} 转载于:https://www.cnblogs.com/EasonSun/archive/2012/08/03/2621661.html

Github项目:AI消除马赛克实战

目录 1、原理 2、准备工作 3、消除马赛克 4、效果对比 1、原理 该算法利用线性盒滤波器分别处理每个块的事实。对于每个块&#xff0c;它将搜索图像中的所有块像素化以检查直接匹配。 对于大多数像素化图像&#xff0c;Depix能够找到单个匹配结果。它假设这些是正确的。然…

C++继承一览

继承的概念及定义 继承机制是面向对象程序设计是代码可以复用的重要手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生的类称为派生类。继承呈现了面向对象程序设计的层次结构&#xff0c;体现了由简单到复杂的认知过程。…

人工智能能否复制人脑引争论 美媒:目前AI仍存在局限性

来源&#xff1a;网易智能摘要&#xff1a;人们应用人工智能技术&#xff08;AI&#xff09;的所有领域&#xff0c;包括无人驾驶汽车、机器人医生、超过10亿中国公民的社会信用评分系统等&#xff0c;当前都取决于一场关于如何让AI做其不能做的事的辩论。8月6日报道称&#xf…

Tushare免费获取股票数据:实时数据,历史数据,行情数据

一 操作手册 引导用户顺利开始使用Tushare Pro数据&#xff0c;以下步骤将带您开始Tushare数据之旅&#xff1a; 用户注册登录后可调用数据&#xff1a;https://tushare.pro/register?reg399205 二 如何获取TOKEN凭证 1、登录成功后&#xff0c;点击右上角->个人主页 2、…

2012/8/3 Extjs使用TabPanel时需要注意的问题

在创建Ext.TabPanel时&#xff0c;配置项deferredRender经常会被忽略&#xff0c;关于这个配置项&#xff0c;我们来看一下API文档的解释&#xff1a;“内置地&#xff0c;Tab面板是采用Ext.layout.CardLayout的方法管理tabs。此属性的值将会传递到布局的Ext.layout.CardLayout…

排序(冒泡、选择、插入、希尔、快排、堆排、归并)

冒泡排序 冒泡排序时通过无序区中相邻记录的关键字间的比较和位置的交换&#xff0c;使关键字最小的元素如气泡似的逐步上浮直水面。有序区逐渐扩大&#xff0c;无序区逐渐缩小。   冒泡排序算法的原理如下&#xff1a; 比较相邻的元素。如果第一个比第二个大&#xff0c;就…

人民日报:人工智能,务实发展是正道

来源&#xff1a;人民日报摘要&#xff1a;近日&#xff0c;由中国人工智能学会主办的中国人工智能大会在深圳召开&#xff0c;利用这个人工智能领域产、学、研紧密结合的高端前沿交流平台&#xff0c;围绕关键核心技术发展等当前热点话题&#xff0c;学者和业界人士进行了充分…

kudu参数优化设置,让集群飞起来~

根据数据体量&#xff0c;结合集群各节点的CPU、内存、磁盘的表现&#xff0c;合理优化设置kudu参数&#xff0c;让集群飞起来~ 如有雷同&#xff0c;纯属借鉴~ 1.Kudu后台对数据进行维护操作&#xff0c;如写入数据时的并发线程数&#xff0c;一般设置为4&#xff0c;官网建议…

(转)Some awareness before migrating from x86 to x64

本文转自&#xff1a;http://www.cnblogs.com/feishunji/archive/2010/10/20/1856798.html Lets assume we have the following three dlls: anycpu.dll -- compiled "any cpu" x86.dll -- compiled "x86" x64.dll -- compiled &…

大数据技术Hbase 和 Hive 详解

目录 两者的特点 各自的限制 应用场景 大数据技术Hbase 和 Hive 详解&#xff0c; 今天给大家介绍一下关于零基础学习大数据视频教程之HBASE 和 HIVE 是多么重要的技术&#xff0c;那么两者有什么区别呢 ? 下面我们一起来看一下吧。 ApacheHive 是一个构建在 hadoop 基础设…

STL中vector和list的区别

底层结构 vector的底层结构是动态顺序表&#xff0c;在内存中是一段连续的空间。   list的底层结构是带头节点的双向循环链表&#xff0c;在内存中不是一段连续的空间。 随机访问 vector支持随机访问&#xff0c;可以利用下标精准定位到一个元素上&#xff0c;访问某个元素的…

自动驾驶芯片:GPU 的现在和 ASIC 的未来

来源&#xff1a;乐晴智库精选▌车载芯片的发展趋势(CPU-GPU-FPGA-ASIC)过去汽车电子芯片以与传感器一一对应的电子控制单元(ECU)为主&#xff0c;主要分布与发动机等核心部件上。随着汽车智能化的发展&#xff0c;汽车传感器越来越多&#xff0c;传统的分布式架构逐渐落后&…

WAMP PHP开发环境

下载地址&#xff1a;php100.com 安装成功标志&#xff1a;访问localhost能够看到WampServer页面 步骤&#xff1a;(1)新建虚拟目录 php100 (2)在php100下新建test.php文件&#xff0c;用nodepad打开,输入PHP脚本 <?php echo "hello world"; ?>(3)localho…

C++多态面试题汇总

总结了一些常见的面试题&#xff0c;通过查阅资料给出了一些浅薄的解析&#xff0c;欢迎各位批评指教。 1. inliine函数可以实虚函数码&#xff1f; 不可以&#xff0c;因为inline函数没有地址&#xff0c;无法将他存放到虚函数表中。 2. 静态成员可以是虚函数吗&#xff1f…

电动汽车:新一轮三年十倍,“补贴”结束“高端”开启

来源&#xff1a;乐晴智库精选摘要&#xff1a;从最早的十城千辆新能源车示范推广&#xff0c;到2014年正式启动的二级市场新能源车大行情&#xff0c;再到当下新能源乘用车型的快速升级迭代&#xff0c;新能源汽车产业发展和投资已历经8余年。▌新能源汽车投资&#xff0c;推倒…

使用easyUI给datagrid添加pagination

author YHC 这个示例展示我们如何从服务器端加载数据和如何添加pagination 到datagrid. 查看 Demo 创建 DataGrid 从服务器端加载数据, 你应该设置url属性, 在你的服务器端你应该返回JSON格式数据.请看datagrid文档得到更多关于它的数据格式信息. <table id"tt" c…

一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)

目录 写在前面 一、为什么要进行数据仓库建模&#xff1f; 二、四种常见模型 2.1 维度模型 2.1.1 星型模型 2.1.2 雪花模型 2.1.3 星座模型 2.2 范式模型 2.3 Data Vault模型 2.4 Anchor模型 三 数据模型的评价标准 小编有话 写在前面 大数据时代&#xff0c;维度…

学习C语言可以从以下几个方面入手

学习C语言可以从以下几个方面入手&#xff1a; 了解基础知识&#xff1a;首先&#xff0c;你需要了解C语言的基本语法和规则&#xff0c;包括变量、数据类型、运算符、控制结构等。可以通过阅读相关的教材或在线教程来学习这些基础知识。动手实践&#xff1a;理论知识的学习是…

C++多态讲解以及常见面试题

多态的概念 什么是多态 ​ 多态就是在不同继承关系的类对象&#xff0c;去调用同一函数&#xff0c;产生了不同的行为。 实现多态的条件 动态绑定多态&#xff08;在运行时才知道函数的地址&#xff09;&#xff1a; 调用函数的对象是指针或引用。 被调用函数必须是虚函数&a…