大数据开发工程师需要了解的【数仓中的维度设计】(二)

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 笔记

(7)缓慢变化维的处理方式


维度的属性并不是静态的,它会随着时间的流逝发生缓慢的变化。与数据增长较为快速的事实表相比,维度变化相对缓慢。在维度建模理论中,有三种处理缓慢变维的方式:


第一种处理方式: 重写维度值。说白了就是做update,采用此种方式,不保留历史数据,始终取最新数据。

20.png


第二种处理方式: 插入新的维度。采用此种方式,保留历史数据,维度值变化前的事实和过去的的维度值关联。维度值变化后的事实和当前维度值关联。

21.png

第三种处理方式: 添加维度列。采用第二种方式不能将变化前后记录的事实归一为变化前的维度或归一为变化后的维度。

22.png


(8)企业中处理缓慢变化维的最佳方案


在企业 数据仓库实践中,处理缓慢变化维的方法是采用快照方式。


数据仓库的计算周期一般是每天一次,基于此周期,处理维度变化的方式就是每天保留一份全量快照数据。比如商品维度,每天保留一份全量商品快照数据。任意一天的事实均可以获取到当天的商品信息,也可以获取到最新的商品信息,通过限定日期,采用自然键进行关联即可。


此方法既有优点,也有弊端。

优点主要有以下两点:


简单而有效, 开发和维护成本低

使用方便,理解性好。数据使用方只需要限定日期,即可获取到当天的快照数据。任意一 天的事实快照和维度快照通过维度的自然键进行关联即可。

弊端主要体现在存储的极大浪费上。比如某维度,每天的变化量占总体数据量的比例很低,在极端情况下,每天无变化,使得存储浪费很严重。此方法主要就是实现了牺牲存储获取ETL效率的优化和逻辑上的简化。但是一定 要杜绝过度使用这种方法,而且必须要有对应的数据生命周期制度,清除无用的历史数据。


对上述方案的优化:

基于第二处处理方案的基础之,上采用拉链表存储,即我们可以增加两个时间戳字段。

23.png


这个方案的缺陷:

这种存储方式对于下游使用方存在一定的理解障碍,特别是ODS数据面向的下游用户包括数据分析师、前端开发人员等,他们不怎么理解维度模型的概念,因此会存在较高的解释成本。


透明化

底层的数据还是历史拉链表,但是上层做一个视图操作或者在Hive里做一个hook, 通过分析语句的语法树,让查询透明化

select * from A where ds = 20200910

等价于

select * from A where start_dt <= 20200910 and end_dt > 20200910



(9)微型维度到底有没有用


通过将一些属性从维表中移出,放置到全新的维表中,可以解决维度的过渡增长。解决方法有两种,一种是之前讲到的垂直拆分,保持主维度的稳定性;另一种解决方式是采用微型维度。


微型维度的创建是通过将一部分不稳定的属性从主维度中移出,并将他们放置到拥有自己代理键的新表中来实现。这些属性相互之间没有之间关联,不存在自然键。


25.png


一般企业对微信维度用的比较少,原因是:

微型维度是事先用所有可能值的组合加载的,需要考虑每个属性的基数,且必须是枚举值。很多属性可能是非枚举型,比如数值类型,如VIP分数、 信用分数等;时间类型,如,上架时间、下架时间、变更时间等。


(10)特殊维度中的递归层次


递归层次指的是某维度的实例值的层次关系

维度的递归层次,按照层次是否固定分为均衡层次结构和非均衡层次结构。

比如:


均衡层次有:

类目:一级、二级、三级、四级

地区:乡镇、区县、城市、省份、国家

非均衡层次有:

公司(比如公司之间的关系,每个公司可能存在一个母公司,但可能没有固定的一级、二级等层次关系)

26.png

由于很多数据仓库系统和商业智能工具不支持递归SQL,且用户使用递归SQL的成本较高,所以在维度模型中,需要对递归层次进行处理。


方案一:层次结构扁平化,对于均衡层次结构,采用扁平化最有效

27.png


与事实表关联后,有的三级类目为空,导致根据三级类目无法统计交易结果。所以下游为了规避此问题, 如果此类目对应的三级类目为空,则取二级类目;如果二级类目为空,则取一级类目。

所以我们可以采用类目回填的方式,将类目向下虚拟。


方案二: 层次桥接表

针对层次结构扁平化所存在的问题,可以采用桥接表的方式来解决,不需要预先知道所属层级,不需要回填, .也可解决非均衡层次结构的问题。与扁平化方法相比,该方法适合解决更宽泛的分析问题,灵活性好;但复杂性高,使用成本高。

28.png29.png


(11)多值维度的处理方式


事实表的一条记录在商品维表中有多条记录与之对应,比如买家一次购买了多种商品。

30.png


多值维度的处理方式有三种:


第一种:降低事实表的粒度, 将交易订单设置为子订单粒度,对于每个子订单,

只有一种商品与之对应。对于其中的事实,则采用分摊到子订单的方式来解决。


第二种:采用多字段。比如在房地产销售中,每次合同签订都可能存在多个买受

方的情况。如夫妻合买,对于合同签订事实表,每条记录可能对应多个买受方,而合同已经是此事实中的最细粒度,无法通过降低粒度的方式来解决,由于合同签订的买受人不会太多,所以一般采用多字段方式。


第三种:采用较为通用的桥接表。桥接表方式更加灵活、扩展性好。但逻辑复杂、开发和维护成本高。


31.png


桥接表包含和事实表关联的分组KEY,以及作为买买方维表外键的买受方ID.如果事实表的一条记录对应两个买受方,则桥接表针对这两个买受方建立两条记录,分组KEY相同。


(12)多值属性的处理方式


维表中的某个属性字段同时有多个值,称之为多值维度。它是多维度的另一种表现形式。互联网公司的电商项目中存在很多维表,如商品的SKU维表、商品属性维表、商品标签维表等。每个商品均有一到多个SKU、一到多个属性和一到多个标签,所以商品的SKU、属性、标签都是多堆垛的关系。


SPU = Standard Product Unit (标准化产 品单元),SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。例如,iphone4就是一 一个SPU, N97也是一个SPU, 这个与商家无关,与颜色、 款式、套餐也无关。

SKU=stock keeping unit(库存量单位),SKU即库存进出计量的单位,可以是以件、 盒、托盘等为单位。在服装、鞋类商品中使用最多最普遍。例如纺织品中一个SKU通常表示: 规格、颜色、款式。

SKU是物理上不可分割的最小存货单元。在使用时要根据不同业态,不同管理模式来处理。比如一香烟是50条,一条里有十盒,一盒中有20支,这些单位就要根据不同的需要来设定SKU。


常见的多值属性处理方式有三种:


第一种处理方式是保持维度主键不变,将多值属性放在维度的一个属性字段中,通过K-V对的形式

32.png


第二种处理方式是保持维度主键不变,将多值属性放在维度的多个属性字段中。

比如卖家主营类目,由于卖家店铺中可能同时会销售男装、女装、内衣等。所以卖家主营类目可能有多个,但业务需求是计算TopN,


33.png

第三种处理方式是维度主键发 生变化,一个维度值存放多条记录。

主键是商品的ID + SKU的ID

34.png

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
3月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何开发ODPS Spark任务
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
1月前
|
SQL 分布式计算 NoSQL
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
29 1
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
|
25天前
|
分布式计算 大数据 OLAP
AnalyticDB与大数据生态集成:Spark & Flink
【10月更文挑战第25天】在大数据时代,实时数据处理和分析变得越来越重要。AnalyticDB(ADB)是阿里云推出的一款完全托管的实时数据仓库服务,支持PB级数据的实时分析。为了充分发挥AnalyticDB的潜力,将其与大数据处理工具如Apache Spark和Apache Flink集成是非常必要的。本文将从我个人的角度出发,分享如何将AnalyticDB与Spark和Flink集成,构建端到端的大数据处理流水线,实现数据的实时分析和处理。
53 1
|
1月前
|
分布式计算 大数据 Serverless
云栖实录 | 开源大数据全面升级:Native 核心引擎、Serverless 化、湖仓架构引领云上大数据发展
在2024云栖大会开源大数据专场上,阿里云宣布推出实时计算Flink产品的新一代向量化流计算引擎Flash,该引擎100%兼容Apache Flink标准,性能提升5-10倍,助力企业降本增效。此外,EMR Serverless Spark产品启动商业化,提供全托管Serverless服务,性能提升300%,并支持弹性伸缩与按量付费。七猫免费小说也分享了其在云上数据仓库治理的成功实践。其次 Flink Forward Asia 2024 将于11月在上海举行,欢迎报名参加。
195 1
云栖实录 | 开源大数据全面升级:Native 核心引擎、Serverless 化、湖仓架构引领云上大数据发展
|
1月前
|
存储 大数据 分布式数据库
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
35 1
|
28天前
|
数据采集 分布式计算 OLAP
最佳实践:AnalyticDB在企业级大数据分析中的应用案例
【10月更文挑战第22天】在数字化转型的大潮中,企业对数据的依赖程度越来越高。如何高效地处理和分析海量数据,从中提取有价值的洞察,成为企业竞争力的关键。作为阿里云推出的一款实时OLAP数据库服务,AnalyticDB(ADB)凭借其强大的数据处理能力和亚秒级的查询响应时间,已经在多个行业和业务场景中得到了广泛应用。本文将从个人的角度出发,分享多个成功案例,展示AnalyticDB如何助力企业在广告投放效果分析、用户行为追踪、财务报表生成等领域实现高效的数据处理与洞察发现。
52 0
|
3月前
|
消息中间件 存储 大数据
大数据-数据仓库-实时数仓架构分析
大数据-数据仓库-实时数仓架构分析
146 1
|
2月前
|
SQL 分布式计算 大数据
代码编码原则和规范大数据开发
此文档详细规定了SQL代码的编写规范,包括代码的清晰度,执行效率,以及注释的必要性。它强调所有SQL关键字需统一使用大写或小写,并禁止使用select *操作。此外,还规定了代码头部的信息模板,字段排列方式,INSERT, SELECT子句的格式,运算符的使用,CASE语句编写规则,查询嵌套规范,表别名定义,以及SQL注释的添加方法。这些规则有助于提升代码的可读性和可维护性。
48 0
|
2月前
|
SQL 分布式计算 大数据
大数据开发SQL代码编码原则和规范
这段SQL编码原则强调代码的功能完整性、清晰度、执行效率及可读性,通过统一关键词大小写、缩进量以及禁止使用模糊操作如select *等手段提升代码质量。此外,SQL编码规范还详细规定了代码头部信息、字段与子句排列、运算符前后间隔、CASE语句编写、查询嵌套、表别名定义以及SQL注释的具体要求,确保代码的一致性和维护性。
98 0
|
3月前
|
存储 运维 Cloud Native
"Flink+Paimon:阿里云大数据云原生运维数仓的创新实践,引领实时数据处理新纪元"
【8月更文挑战第2天】Flink+Paimon在阿里云大数据云原生运维数仓的实践
279 3

热门文章

最新文章

下一篇
无影云桌面