嚴華 发表于 2024-7-16 23:55:59

数据仓库(基础篇)——基于维度建模头脑_数据仓库维度穷举举例(2)

https://img-blog.csdnimg.cn/img_convert/3f7ad111c935257a331c1c05f4ab13d0.png
https://img-blog.csdnimg.cn/img_convert/64921adcf4112347b28ab79c10c7c785.png
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技能提拔。
需要这份系统化资料的朋侪,可以戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都接待加入我们的的圈子(技能交流、学习资源、职场吐槽、大厂内推、口试辅导),让我们一起学习发展!

[*]为了解耦合、分布执行、低落出问题的风险。
[*]用空间换时间用多步换取最终利用的数据的高效性。
[*]指标大概报表出问题了,可以快速的举行溯源。
分层更多的是一个逻辑上的概念。
分域: 分为主题域和数据域。主题域与数据域严酷意义上并没有标准划分。主题域一般是面向分析用的,主题域通常是联 系较为紧密的数据主题的聚集, 比如财政主题域、人力主题域、供应链 主题域等。数据域一般指的是一组/ 一串/ 一类业务活动单元的聚集, 如日记、生意业务等。
分类: 严酷意义上来说其不属于数据仓库常见的一个概念,其更多的是对应用系统的数据举行一个分类。我们知道数据仓库的上游基本上都来自于业务数据库、日记的信息、爬虫大概其他的第三方的数据。针对这些数据我们需要举行分类。只有分类才能更好的管理与利用,所以我们一般为了更好的管理数据, 会把数据划分为主数据、生意业务数据、参考数据、元数据等。业务系统数据的一个划分。
维度: 由独立不重叠的数据元素组成的数据集, 所构成的可举行统计的对象。常见的如人、产物、地点。维度普通来说就是我们观察某一事物的一个角度。
究竟: 形貌业务过程的度量(最小单体)。
粒度: 究竟表中一条纪录所表达的业务细节程度。
维度与事务的区分,比如说在sql中,如果能够利用where条件判定的话,那么其就是一个维度。
2. 拓展

业务过程: 业务过程代表一个被管理实体或系统的究竟, 是对业务活动 单元/ 变乱的定义。常见的如下单、付出。基本上把它划分为最小的一个单元体。
原子指标: 原子指标一般情况下划分为基础指标(原子指标)、复合指标、派生(衍生)指标等等,不同公司会稍有不同。原子指标是对业务究竟中度量的统计定义, 与SQL中select内容等价。常见的如付出金额、买家数。
业务限定 : 业务限定是对业务中圈选的统计范围的定义, 与SQL中where条件等价。常见的如商品品类、已付出。
派生指标: 派生指标即常规的统计指标, 通过原子指标与各种业务限定的组合而生成。如最近一天大概最近一个月买家付出金额。
汇总逻辑表: 形貌维度统计信息( 即派生指标) 及维度属性信息的数据 聚集集, 所构成的数据仓库模子。
三、数据仓库建设步骤

1.建设步骤


[*]需求调研
数据仓库与业务关系是较为紧密的。一个数仓项目标成败,很大程度上取决于你对整个公司的了解程度。比如说刚刚对各个主题域的划分。如果说你对你们公司的整体的业务都不熟悉,怎么举行划分。如果对业务不熟,你是构建不出来的。
[*]数据调研
首先我们需要对整个的业务流程有所了解,业务流程是通过怎样的系统承接下来的。在承接的过程中,我们的数据他是什么样的结构,数据量是多少,数据质量如何等等,这些都是我们需要去了解的。
[*]构建总线矩阵
总线矩阵个人以为更多的是为了资助我们更好的同一规划数据仓库,也是为了更加的标准化。关于总线矩阵是怎么划分的?下面简朴的说下,通常为一行代表业务过程。每一列是一个维度。在数仓建设的过程中,对一次性维度、一次性究竟是有要求的。前面说过,在整个数仓的过程中,我们需要同一整个公司的数据的指标的口径,包括数据的一些认知等等,所以需要构建数据的总线矩阵。
[*]构建CRUD矩阵
我们需要对每一个实体的创建、更新、删除等。比如说在整数仓中,我们选择一个维度,一般面临两个步骤:选择主维表和举行维度的主键的设计。在我们选择主维表的时候,如果你连这个维度在哪个系统创建的,在哪个系统更新的,在哪个系统删除的都不知道的话,如果出现这种情况是不太好的,所以我们需要构建CRUD矩阵。
2. 数仓规划(以下表为例)

https://img-blog.csdnimg.cn/4f8a5b0774574a6db564dbc369792042.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiN5rip5Y2c54Gr,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center
数仓的上游同一的称之为数据源。同一生成数据源后,我们会把整个公司的业务举行划分。
比如说对业务线,业务板块举行划分,每一个业务线下大概会有很多业务板块。每个业务板块下面又有许多数据域。
每个数据域下面我们也会举行划分,比如说维度和业务过程。
维度我们设计成维度逻辑表,就是我们刚才所说的,你需要考虑以下三点,一个点就是你的主维表,第二个点就是你的维度的主键的设计,第三个点就是维度属性的选择。我们在做维度逻辑表的时候,我们建议只管把我们的维度属性设计的丰富一点,因为如今的业务变化有点快,丰富一点对于整个数仓的稳定性和健壮性都是有好处的。
划分业务过程形成究竟上的逻辑表,究竟逻辑表包括事务性的究竟,快照性的究竟。更细的划分暂时就不举行细讲了。在此大家知道有这样一个概念就可以了。划分完成过后会形成整个公司的逻辑,包括维度逻辑这样一个表,会形成我们所说的DWD(数仓明细表)。
然后举行一个汇总,汇总我们更多的是根据派生指标包括像时间周期来举行一个指标的汇总,以此来形成汇总逻辑表。
3.数据仓库分层划分

https://img-blog.csdnimg.cn/1e57f84bca474219b740b789bf68e983.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiN5rip5Y2c54Gr,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center
根据上图可以看到数仓一般分为三层。第一层为ods层,我们通常把其叫做原始数据层,大概叫做操作数据层。第二层为中心层,第三层我们面向推荐系统、报表、数据分析等等,划分为ads层。整个数据仓库最重要的设计是中心层的设计,即是从明细层->dws层(数据汇总层)这一块的设计。
具体的分层要根据公司的实际需要来举行分层。
每层的作用:
ods层:在此层中不建议举行太多的数据洗濯、转换。只需要把业务系统中的数据,日记数据等等原汁原味的采集同步过来即可。


[*]这样做的好处:
①低落对业务系统的入侵,淘汰业务系统的压力。
②如果指标出错,ods层数据被改掉的话,只能从业务数据库大概日记数据库查找数据,这样是不利于我们举行血缘追溯和出错排查的。
因此所有的操作我们可以放在ods到dwd时举行,包括我们常见的维度退化、过滤、缺省值处置惩罚,按照业务过程举行拆分,冗余一些属性。
还可以把究竟的粒度低落。
ads层响应整个推荐,包括报表等等响应应用。我们要把更多的一个逻辑划层放在中心层去做。可以保证整个公司的稳定性。
dim层是一个维度的层,维度层是可以各层级调用的,我们可以把部分的维度下沉大概冗余到其他层里面。
在做数仓的时候,我们要只管淘汰Join,因为它不利于数据的处置惩罚。
数仓遵照的原则:不允许跨层调用,跨层出数。比如说在数据建模之后,我们需要对模子举行考评,模子建立的好不好,有一个指标就是看你跨层的调用率,包括你跨层出数的比率。如果上层应用、基本数据都来自于ads层,少部分来自于dws层,那么相对而言这个数仓的建设是比力不错的。
四、问题与思索

1. 维表的主键选择

天然键(NaturalKey),它是业务系统中已经存在的,通常是具有一定业务寄义的一个字符型的标志符,可以唯一地标志维度表中的每一条纪录。比如机构的代码、缩写、时间标签等。
另一种是署理键(SurrogateKey),通常是数据库系统赋予的一个数值,是自增型的,按顺序分配,没有内置寄义但也可以唯一地标识一条维度信息。​
项目履历,推荐采用第二种,即署理键。原因如下:​
首先,天然键虽然在逻辑上可以唯一地标识出一条维度信息,但它通常是字符型的,且一般比力长,若用它作为维度表中的主键,那就意味着在究竟表中也要加入同样的外键信息,而究竟表纪录行数每每是巨大的,在多个维度表上重复这样的做法会使究竟表由于列宽过于膨胀而导致性能的急剧降落。​
其次,署理键可以作为数据仓库与源系统之间的“缓冲”。天然键通常具有一定的业务寄义,但日久天长,这些信息是有大概发生变化的,比如身份证号码,由最初的15位变成了如今的18位。如果这种主键一旦发生了变化,由于它同时作为究竟表中的外键,必然会对究竟表产生影响,因为已有的究竟纪录已经找不到与之匹配的维度纪录,这就带来了很大的麻烦。但若采用署理键作为维度表中的主键,就完全可以把这些变化屏蔽在维度表内,不会对究竟表产生任何影响(当然这个还要结合迟钝变化维度的处置惩罚)。​
最后,从关联服从考虑,数值型的关联要比字符型的关联快很多。
2. 迟钝变化维(SCD)


[*]维度保持稳定;
[*]直接举行维度的替换。如果发生变化,直接采用最新的,但是利用此方法想看到历史是什么样子就看不到了;
[*]增加维度行大概维度列,此方法并不是太好。
以纬度行举例:增加纬度行以后,想把某一个究竟全部关联成一个维度,这是非常难去处置惩罚的,所以其对处置惩罚这一块是不好的。
以维度枚举例:增加维度列以后,确实是可以解决看历史看如今的问题。但是如果没变化一次就加一列的话,最终会导致表不利于维护,除此之外也不利于后续的数据分析。
[*]利用拉链表,不外我们在利用拉链表的时候是需要举行细节考虑的。
[*]维度快照,个人以为更方面处置惩罚各种情况。我们可以提宿世成一个维度快照,比及查看的时候只需通过不同的快照去查就可以了,但是这样做的话,会增加我们的存储,会产生一定的浪费。
个人以为拉链表与维度快照是解决迟钝变化维比力好的方法。
3. 主数据与oneID的关系?

如果是传统型公司的话,大概会有这样一个问题。他们大都大概有这样一个问题:我们的主数据与oneID有什么样的一个关系?我们在建设数仓大概数据中台的时候,要不要先上一个主数据的系统呢?大概就是这样一个问题,如果遇到这种问题,我们应该如何回答呢?
说了oneID,我们就不得不说onedata。如今的数据中台很多都是基于onedata理论构建的。下图为onedata方法论。
https://img-blog.csdnimg.cn/b39d37d0de844411a7e40c729098fe44.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiN5rip5Y2c54Gr,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center
OneData体系是阿里数据中台的焦点方法论,其包罗了三个方面内容:OneModel 即建立企业同一的数据公共层,从设计、开辟、部署和利用上保障了数据口径规范和同一,实现数据资产全链路管理,提供标准数据输出。OneID 即建立业务实体要素资产化为焦点,实现全域链接、标签萃取、立体画像,其数据服务理念根植于心,强调业务模式。OneService 即数据被整合和计算好之后,需要提供给产物和应用举行数据消耗,为了更好的性能和体验,需要构建数据服务层,通过同一的接口服务化方式对外提供数据服务。
由于问题为主数据与oneID的关系。所以此部分简朴介绍oneID。
https://img-blog.csdnimg.cn/7fb5f59041de4fac96341ff52a03b571.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiN5rip5Y2c54Gr,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center
在阿里巴巴数据中台官方宣传资料中,我们看到这样的定义:“OneID是以商业要素资产化为焦点,实现全域链接、标签萃取、立体画像,数据应用服务整体解决方案。”这里的商业要素就是消耗者、企业、内容、商品、位置等焦点业务实体数据,传统上我们称其为主数据。而OneID也叫数据萃取中央,就是通过标签技能、知识图谱技能、画像技能在虚拟的网络世界实现商业要素(主数据)的唯一身份识别,保证企业焦点数据的身份唯一性、一致性、完备性、相关性和准确性。所以,OneID可以理解为主数据管理,只是用的技能更先进些罢了。
个人以为:“阿里数据中台的OneID,本质上就是企业主数据管理”。但我相信一定也有人反对这个观点,因为在现行的主数据管理方案中,总体上还是趋于用标准、制度、流程、集成技能等手段解决主数据的问题,标签体系、知识图谱、画像技能、混淆云技能等先进的技能现在还没有大规模用在主数据管理领域,但是我相信这终将是主数据发展的趋势!技能推动社会发展,主数据管理又岂能固步自封!
4. 如何举行模子调优?

我们知道数据仓库焦点的是业务,那么业务又是怎么通过数仓来表现的,其焦点是模子。那么模子如何举行调优和优化就是一个比力重要的问题。
在举行模子调优之前,我们需要先判定数据模子的好坏。具体步骤如下:
①美满度


[*]汇总数据能直接满足多少查询需求,即应用层访问汇总层数据的查询比例
[*]跨层引用率:ODS 层直接被 DWS/ADS/DM 层引用的表,占所有 ODS 层表比例
[*]可以快速响应业务方的需求
比力好的模子,利用方是可以直接从该模子获取所有想要的数据的,如果dws,ads,dm层直接引用ods层的表比例太大,即跨层引用率太高,则该模子不是最优,可以继承优化
②复用度


[*]模子引用系数:模子被读取并产出下游模子的平均数目
③规范度


[*]主题域归属
[*]分层信息
[*]脚本及任务命名规范
[*]表命名符合规范(清晰、一致,见名知意)
[*]字段命名是依赖于词根
④稳定性


[*]能否保证日常的sla(时效保障)
⑤扩展性


[*]新增加的模子是否和老的模子出现冲突
⑥准确性&一致性


[*]输出的指标数据质量能够保证
⑦健壮性


[*]业务快速更新迭代的情况下不会太影响底层模子
⑧低本钱


[*]计算时间本钱
[*]计算资源本钱
[*]存储本钱
⑨总结


[*]美满度,复用度,规范度基本上是需要了解业务,然后根据元数据信息去做统计分析的
[*]稳定性,低本钱是需要对任务举行优化,比如sql调优等
[*]准确性和一致性是需要一套质量管理系统及指标一致性管理方案的,包括数据源,口径和指标管理平台等。
知道判定模子的方法后,下面就可以针对这些方面举行调优。比如说我们创建维表的时候,选择主维表时,要只管丰富我们的维度属性。我们在做维度设计的时候,一般情况下我们还会举行维表的整合与差分。这样做是为了让模子更加稳定。
五. 对数据仓库的思索

虽然数仓建设能带来诸多的益处,但其是一个庞大复杂耗时的工程,需要一些支持系统的配合,比如说元数据管理系统、调度系统等,而且也并不是所有的业务一开始都要建设数仓,要根据业务发展所处的状态和未来的发展趋势以及分析决策的复杂性等综合评判。
大数据系统,其复杂度之高,是险些不大概在一开始就完备和完善地举行自上而下定义和设计的,其设计过程必然遵守从需求->设计->迭代->理论的过程。大数据的真正价值在于生命性和生态型,其价值是随着利用场景和方式动态变化的。
数据仓库的业务意义,在于从底层的数据采集、数据处置惩罚,到发掘算法、数据应用服务以及数据产物的全链路、标准化的大数据体系。通过这个体系,超过EB级别的海量数据能够高效融合,并以秒级的响应速度,服务并驱动自身的业务和外部千万用户的发展。
数据仓库的技能意义,在于规避重复建设,同一计算口径,有效低落本钱,提拔开辟服从。
文章内容到这里就竣事了,如有不敷请指出~
https://img-blog.csdnimg.cn/20201205234012403.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE2MTQ2MTAz,size_16,color_FFFFFF,t_70#pic_center
https://img-blog.csdnimg.cn/img_convert/68901aac7fbdee073e073e7730c0f90a.png
https://img-blog.csdnimg.cn/img_convert/d0305601f641716516b1698f3ef3bcf3.png
https://img-blog.csdnimg.cn/img_convert/4a4233820092f000dcaf8e563c41c918.png
既有得当小白学习的零基础资料,也有得当3年以上履历的小同伴深入学习提拔的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比力多,这里只是将部分目录截图出来,全套包罗大厂面经、学习条记、源码讲义、实战项目、大纲路线、解说视频,并且后续会持续更新
需要这份系统化资料的朋侪,可以戳这里获取
egB9GK-1715463211297)]
[外链图片转存中…(img-rnLl1YG6-1715463211297)]
既有得当小白学习的零基础资料,也有得当3年以上履历的小同伴深入学习提拔的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比力多,这里只是将部分目录截图出来,全套包罗大厂面经、学习条记、源码讲义、实战项目、大纲路线、解说视频,并且后续会持续更新
需要这份系统化资料的朋侪,可以戳这里获取

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 数据仓库(基础篇)——基于维度建模头脑_数据仓库维度穷举举例(2)