APP推广合作
联系“鸟哥笔记小乔”
数据仓库进阶之路
2020-12-24 17:49:20

本文主要围绕架构、分层、建模三个方面,进一步加深对数仓的了解。

一、数据仓库的架构

从整体上来看,数据仓库体系架构可分为:数据采集层、数据计算层、数据服务层和数据应用层,如下图。

图片

1)数据采集层

数据采集层的任务就是把数据从各种数据源中采集和存储到数据库上,期间有可能会做一些 ETL(即抽取、转换、装载)操作。

其中,日志所占份额最大,存储在备份服务器上的业务数据库中,如 Mysql 中的数据。其他数据的话,如 Excel 等需要手工录入的数据。

实时采集不是一条一条采集,而是根据一些限制条件,一般是数据大小限制(如 512KB 写一批)、时间阈值限制(如 30 秒写一批)。

采集的数据需要数据采集系统分发给下游,一般选取 Flume、Sqoop 等。

2)数据处理层

从数据采集系统出来的数据,分发给下游的数据处理平台,一般有 Hive、MapReduce、Spark Streaming、Storm 以及新兴的 Flink 等,阿里巴巴内部使用的是 StreamCompute。

3)数据服务层

数据服务层,通过接口服务化方式对外提供数据服务,以保证更好的性能和体验。针对不同的需求和数据应用场景,数据服务层的数据源架构在不同的数据库上,如 Mysql、HBase、MongoDB 等。实时的存储且需要支持高并发的话,就选择 HBase。

数据服务层可以使应用对底层数据存储透明,将海量数据方便高效地开放给各业务使用。

4)数据应用层

数据已经准备好,需要通过合适的应用提供给用户,让数据最大化地发挥价值。数据应用表现在各个方面,如报表展示、数据分析、数据挖掘、数据可视化等。

二、数据仓库分层

2.1 为啥要分层?

作为一名数据产品经理,笔者肯定希望自己的数据能够有秩序地流转,数据的整个生命周期能够清晰明确地被设计者和使用者感知到。但是,随着业务的发展,频繁迭代和跨部门的业务变得越来越多。这就容易导致数据仓库出现如下问题:

1)缺乏统一的业务和技术标准,如:开发规范、指标口径不统一。

2)缺乏统一数据质量监控,如:字段数据不完整和不准确等。

3)业务知识体系散乱,导致数据研发人员开发成本增加。

4)数据架构不合理,数据层之间分工不明显,数据流向混乱。

5)缺失统一维度和指标管理

因此,笔者需要一套行之有效的方法来让自己的数据仓库更有秩序,这就需要对数据进行分层,如下图。

图片

2.2 数据分层设计

按照数据操作的流程,笔者将数据模型分为三层:数据操作层(ODS)、数据仓库层(DW)和数据应用层(APP),如下图。简单来讲,ODS 层存放的是接入的原始数据,DW 层存放的是数据仓库中的数据,APP 层存放的是面向业务定制的应用数据。

图片

1)数据操作层(ODS)

数据操作层又叫数据运营层,英文:Opertional Data Source。数据操作层是最接近数据源中数据的一层,数据源中的数据,经过 ETL(即抽取、转换、装载),装入本层。本层中的数据,大多是按照源业务系统的分类方式而分类的。

由于该层是最接近数据源的,所以不建议对该层数据做过多的数据清洗工作,原封不动地接入原始数据就行,至于数据的去噪、去重、去异常值等操作可以放在后面的 DWD 层来做。

2)数据仓库层(DW)

数据仓库层,英文:Data Warehouse,是笔者在设计数据仓库时要核心设计的一层。在这里,从 ODS 层获得的数据按照主题建立各种的数据模型。DW 层又要细分为 DWD(Data Warehouse Detail)层、DWM(Data Warehouse Middle)层和 DWS(Data Warehouse Service)层,如下图。

(1)数据明细层(DWD)

数据明细层,英文:Data Warehouse Detail,该层和 ODS 层一般保持一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层的易用性,该层会采用一些维度退化的方法,将维度退化至事实表,减少事实表和维表的关联。

另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性。

(2)数据中间层(DWM)

数据中间层,英文:Data Warehouse Middle,该层会在 DWD 层的数据基础上,对数据做轻度的聚合,生成一系列的中间表,提升公共指标的复用性,减少重复加工。直观来讲,就是对通用的核心维度进行聚合操作,算出相应的统计指标。

(3)数据服务层(DWS)

数据服务层又叫数据集市或宽表,英文:Data Warehouse Service。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询、OLAP 分析、数据分发等。

一般来讲,该层的数据表会相对比较少,一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称为该层的表为宽表

在实际计算中,如果直接从 DWD 或者 ODS 计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在 DWM 层先计算出多个小的中间表,然后再拼接成一张 DWS 的宽表。由于宽和窄的界限不易界定,也可以去掉 DWM 这一层,只留 DWS 层,将所有的数据放在 DWS 亦可。

3)数据应用层(APP)

数据应用层,英文:Application,该层主要提供给数据产品和数据分析使用的数据。该层的数据一般会存放在 Redis、PostgreSql 等共线上系统使用的系统,也可能会存放在 Hive、Druid 中供数据分析和数据挖掘使用,比如报表数据就可以存放在 Hive 中。

4)维度层(DIM)

维度层,英文:Dimension。建立一致数据分析维表,可以降低数据计算口径和算法不统一风险。以维度作为建模驱动,基于每个维度的业务含义,通过定义维度及维度主键,添加维度属性、关联维度等定义计算逻辑和雪花模型,完成属性定义的过程并建立一致的数据分析维表。同时笔者可以定义维度主子关系,子维度的属性将合并至主维度使用,进一步保证维度的一致性和便捷使用性。

维度层包含两个部分:

(1)高基数维度数据:一般是用户资料表、商品资料表类似的资料表,数据量可以上千万甚至上亿。

(2)低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维度表,数据量大概在几千到几万之间。

三、数据仓库建模

3.1 数仓建模目标

大数据的数据仓库建模需要通过建模的方法更好地组织、存储数据,以便在性能、成本、效率和数据质量之间找到最佳平衡点。具体的建模目标,如下图。

图片

3.2 数仓建模方法

接下来,就聊聊数据仓库中几种经典的数据模型,如关系建模、维度建模、DataVault模型。在实际工作中,通常会根据业务场景选择一种或几种模型。

3.2.1 关系建模

关系建模,是数据仓库之父 Inmon 推崇的,被称为 “实体-关系” 模型,以一种 “标准化” 的方式存在,强调数据之间非冗余,满足 3NF 。关系建模是站在企业角度面向主题的抽象,而不是针对某个具体业务流程的实体对象关系抽象。它更多用于数据的整合和一致性质量。

3.2.2 维度建模

维度建模,Ralph Kimball 博士最先提出这一概念。其最简单的描述就是,按照事实表、维表来构建数据仓库、数据集市。这种方法很多人称之为星形模型。之所以称为星形模型是因为它的表示方法是以一颗 “星” 为中心,周围围绕着其他数据结构,如下图。

图片

星形模型的中心是一张事实表。事实表是包含大量数据值的一种结构。事实表的周围是维表,用来描述事实表的某个重要方面。维表里的数据量要比事实表里的少。

星形模型之所以广泛被使用,在于针对各个维作了大量的预处理,比如按照维进行了预先的排序、分类、统计等。通过这些预处理,能够极大地提升数据仓库的处理能力。特别是针对 3NF 的建模方法,星形模型在性能上占据明显的优势。因此,星形模型仅适用于小范围数据(如一个部门或甚至一个子部门)。

通常星形模型只包含一张事实表。但是在数据库设计中要创建一种雪花结构的复合结构,需要多张事实表结合。如下图,描绘了一个雪花模型。

图片

在雪花模型中,不同的事实表通过共享一个或多个公共维表连接起来。有时称这些共享的维表为一致维表。

维度建模的最大优点在于访问的高效性。如果设计适当,通过星形连接将数据传递给最终用户是非常高效的。为了提高传递信息的效率,必须收集并吸收最终用户的请求。最终用户使用数据的过程是要定义什么样的多维结构的核心。一旦清楚了最终用户的请求,这些请求就可以用来最终确定星形模型,形成最理想的结构。

因此笔者认为,维度建模主要适用于数据集市层,它的最大作用其实是为了解决数据仓库建模中的性能问题。维度建模很难提供一个完整地描述真实业务实体之间的复杂关系的抽象方法。

3.3 Data Vault 模型

Data Vault 是另一种数据仓库建模方法,是 Dan Linstedt 在 20 世纪 90 年代提出的,主要用于企业级的数据仓库建模

Data Vault 需要跟踪所有数据的来源,因此其中每个数据行都要包含数据来源和装载时间属性,用以审计和跟踪数据值对应的源系统。

Data Vault 不区分数据在业务层面的正确与错误,它保留操作型系统的所有时间的所有数据,装载数据时不做数据验证、清洗等工作,这点明显有别于其他数据仓库建模方法。

Data Vault是对 ER 模型更近一步的规范化,由于对数据的拆解更偏向于基础数据组织,在处理分析类场景时相对复杂,适合数据仓库底层构建,目前实际应用场景较少。

1)Data Vault模型定义

Dan Linstedt 将 Data Vault 模型定义为:Data Vault 是面向细节的,可追踪历史的,一组由连接关系的规范化的表的集合。这些表可以支持一个或多个业务功能。它是一种综合了第三范式和星型模型特点的建模方法。

Data Vault 只按照业务数据的原样保存数据,不做任何解释、过滤、清洗、转换。即使从不同数据源来的数据是自相矛盾的,比如:同一个客户有不同的地址,Data Vault 模型会存储多个不同版本的地址数据。

2)Data Vault 模型的特点

(1)所有数据都基于时间来存储,即使数据是低质量的,也不能在 ETL 过程中处理掉。

(2)与源系统越独立越好。

(3)可以适应源系统中数据的各种变化,并可以灵活的实现模型扩展。

(4)数据的来源可以完全追踪,并且数据处理作业可以支持重载。

(5)ETL 作业可以重复执行。

3)Data Vault 模型组成

Data Vault 模型由中心表(Hub)、链接表(Link)、附属表(Satellite)三个主要组成部分。其中,中心表是核心,用于存储业务主键,链接表记录业务关系,附属表记录业务描述。

(1)中心表

中心表用来存储企业每个业务实体的业务主键,业务主键唯一标识某个业务实体。中心表和源系统是相互独立的,即无论业务主键是否用于多个业务系统,它在 Data Vault 中只保留一份,其他的组件都链接到这一个业务主键上。

出于设计上的考虑,中心表一般由主键、业务主键、装载时间戳、数据来源系统四个字段组成。其中主键是系统生成的代理键,仅供内部使用。

(2)链接表

链接表是不同中心表的链接。一个链接表一般在两个或多个中心表之间有关联。一个链接表通常是一个外键,表示一种业务关系,比如:交易表、客户关联账户等。

链接表主要包括主键、外键1、……、外键n、装载时间戳、数据来源系统等字段构成,其中主键对应多个外键的唯一组合,一般是与业务无关的序列数值。

(3)附属表

附属表用来保存中心表和链接表的描述属性,包含所有历史变化数据,附属表有且仅有一个唯一外键关联到中心表或链接表。

附属表主要包括主键、外键、属性1、……、属性n、装载时间、失效时间、数据来源系统,主键用于唯一标识附属表中的一行记录,一般是与业务无关的序列数值。

4)Data Vault 模型设计

根据 Data Vault 模型体系构成,Data Vault 模型设计由此也分成三大部分。

(1)设计中心表

明确企业数据仓库要涵盖的业务范围。

按业务范围划分为若干原子业务实体,比如客户、产品、品类等。

从各个业务实体中抽象出业务主键,该业务主键要在整个业务的生命周期内不会发生变化。

由该业务主键生成中心表。

(2)设计链接表

分析各个中心表代表的业务实体之间的业务关系,并识别对应的中心表,这些业务关系可以是1对1、1对多,或者多对多的。

按业务关系涉及的中心表,提取中心表主键,这些主键将被加入到链接表中,并确定链接表的主键。

在生成链接表的同时,链接表内可以保存交易数据,有两种方法,一是采用加权链接表,二是给链接表加上附属表来处理交易数据。

(3)设计附属表

附属表包含了各个业务实体与业务关联的详细的上下文描述信息。主要是从中心表、链接表出发,提取与中心表、链接表相关的上下文描述信息。

由于同一业务实体的各个描述信息不具有稳定性,会经常发生变化,因此需要按变化频率不同的信息分割开来,为一个中心表建立几个附属表,然后提取主键,作为描述该中心表的附属表的主键。

(4)设计必要的 PIT 表

为了访问数据的方便,可能就用到 PIT 表,PIT 表不是必须的,但如果一个中心表或者链接表有多个附属表,就有可能用到 PIT 表。PIT 表的主键是由附属表关联的中心表提取出来的,有几个附属表就会有几个字段用于记录附属表的变化时间戳。

-END-


运营那些事儿
分享到朋友圈
收藏
收藏
评分

综合评分:

我的评分
Xinstall 15天会员特权
Xinstall是专业的数据分析服务商,帮企业追踪渠道安装来源、裂变拉新统计、广告流量指导等,广泛应用于广告效果统计、APP地推与CPS/CPA归属统计等方面。
20羽毛
立即兑换
一书一课30天会员体验卡
领30天VIP会员,110+门职场大课,250+本精读好书免费学!助你提升职场力!
20羽毛
立即兑换
顺丰同城急送全国通用20元优惠券
顺丰同城急送是顺丰推出的平均1小时送全城的即时快送服务,专业安全,准时送达!
30羽毛
立即兑换
运营那些事儿
运营那些事儿
发表文章38708
确认要消耗 0羽毛购买
数据仓库进阶之路吗?
考虑一下
很遗憾,羽毛不足
我知道了

我们致力于提供一个高质量内容的交流平台。为落实国家互联网信息办公室“依法管网、依法办网、依法上网”的要求,为完善跟帖评论自律管理,为了保护用户创造的内容、维护开放、真实、专业的平台氛围,我们团队将依据本公约中的条款对注册用户和发布在本平台的内容进行管理。平台鼓励用户创作、发布优质内容,同时也将采取必要措施管理违法、侵权或有其他不良影响的网络信息。


一、根据《网络信息内容生态治理规定》《中华人民共和国未成年人保护法》等法律法规,对以下违法、不良信息或存在危害的行为进行处理。
1. 违反法律法规的信息,主要表现为:
    1)反对宪法所确定的基本原则;
    2)危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一,损害国家荣誉和利益;
    3)侮辱、滥用英烈形象,歪曲、丑化、亵渎、否定英雄烈士事迹和精神,以侮辱、诽谤或者其他方式侵害英雄烈士的姓名、肖像、名誉、荣誉;
    4)宣扬恐怖主义、极端主义或者煽动实施恐怖活动、极端主义活动;
    5)煽动民族仇恨、民族歧视,破坏民族团结;
    6)破坏国家宗教政策,宣扬邪教和封建迷信;
    7)散布谣言,扰乱社会秩序,破坏社会稳定;
    8)宣扬淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪;
    9)煽动非法集会、结社、游行、示威、聚众扰乱社会秩序;
    10)侮辱或者诽谤他人,侵害他人名誉、隐私和其他合法权益;
    11)通过网络以文字、图片、音视频等形式,对未成年人实施侮辱、诽谤、威胁或者恶意损害未成年人形象进行网络欺凌的;
    12)危害未成年人身心健康的;
    13)含有法律、行政法规禁止的其他内容;


2. 不友善:不尊重用户及其所贡献内容的信息或行为。主要表现为:
    1)轻蔑:贬低、轻视他人及其劳动成果;
    2)诽谤:捏造、散布虚假事实,损害他人名誉;
    3)嘲讽:以比喻、夸张、侮辱性的手法对他人或其行为进行揭露或描述,以此来激怒他人;
    4)挑衅:以不友好的方式激怒他人,意图使对方对自己的言论作出回应,蓄意制造事端;
    5)羞辱:贬低他人的能力、行为、生理或身份特征,让对方难堪;
    6)谩骂:以不文明的语言对他人进行负面评价;
    7)歧视:煽动人群歧视、地域歧视等,针对他人的民族、种族、宗教、性取向、性别、年龄、地域、生理特征等身份或者归类的攻击;
    8)威胁:许诺以不良的后果来迫使他人服从自己的意志;


3. 发布垃圾广告信息:以推广曝光为目的,发布影响用户体验、扰乱本网站秩序的内容,或进行相关行为。主要表现为:
    1)多次发布包含售卖产品、提供服务、宣传推广内容的垃圾广告。包括但不限于以下几种形式:
    2)单个帐号多次发布包含垃圾广告的内容;
    3)多个广告帐号互相配合发布、传播包含垃圾广告的内容;
    4)多次发布包含欺骗性外链的内容,如未注明的淘宝客链接、跳转网站等,诱骗用户点击链接
    5)发布大量包含推广链接、产品、品牌等内容获取搜索引擎中的不正当曝光;
    6)购买或出售帐号之间虚假地互动,发布干扰网站秩序的推广内容及相关交易。
    7)发布包含欺骗性的恶意营销内容,如通过伪造经历、冒充他人等方式进行恶意营销;
    8)使用特殊符号、图片等方式规避垃圾广告内容审核的广告内容。


4. 色情低俗信息,主要表现为:
    1)包含自己或他人性经验的细节描述或露骨的感受描述;
    2)涉及色情段子、两性笑话的低俗内容;
    3)配图、头图中包含庸俗或挑逗性图片的内容;
    4)带有性暗示、性挑逗等易使人产生性联想;
    5)展现血腥、惊悚、残忍等致人身心不适;
    6)炒作绯闻、丑闻、劣迹等;
    7)宣扬低俗、庸俗、媚俗内容。


5. 不实信息,主要表现为:
    1)可能存在事实性错误或者造谣等内容;
    2)存在事实夸大、伪造虚假经历等误导他人的内容;
    3)伪造身份、冒充他人,通过头像、用户名等个人信息暗示自己具有特定身份,或与特定机构或个人存在关联。


6. 传播封建迷信,主要表现为:
    1)找人算命、测字、占卜、解梦、化解厄运、使用迷信方式治病;
    2)求推荐算命看相大师;
    3)针对具体风水等问题进行求助或咨询;
    4)问自己或他人的八字、六爻、星盘、手相、面相、五行缺失,包括通过占卜方法问婚姻、前程、运势,东西宠物丢了能不能找回、取名改名等;


7. 文章标题党,主要表现为:
    1)以各种夸张、猎奇、不合常理的表现手法等行为来诱导用户;
    2)内容与标题之间存在严重不实或者原意扭曲;
    3)使用夸张标题,内容与标题严重不符的。


8.「饭圈」乱象行为,主要表现为:
    1)诱导未成年人应援集资、高额消费、投票打榜
    2)粉丝互撕谩骂、拉踩引战、造谣攻击、人肉搜索、侵犯隐私
    3)鼓动「饭圈」粉丝攀比炫富、奢靡享乐等行为
    4)以号召粉丝、雇用网络水军、「养号」形式刷量控评等行为
    5)通过「蹭热点」、制造话题等形式干扰舆论,影响传播秩序


9. 其他危害行为或内容,主要表现为:
    1)可能引发未成年人模仿不安全行为和违反社会公德行为、诱导未成年人不良嗜好影响未成年人身心健康的;
    2)不当评述自然灾害、重大事故等灾难的;
    3)美化、粉饰侵略战争行为的;
    4)法律、行政法规禁止,或可能对网络生态造成不良影响的其他内容。


二、违规处罚
本网站通过主动发现和接受用户举报两种方式收集违规行为信息。所有有意的降低内容质量、伤害平台氛围及欺凌未成年人或危害未成年人身心健康的行为都是不能容忍的。
当一个用户发布违规内容时,本网站将依据相关用户违规情节严重程度,对帐号进行禁言 1 天、7 天、15 天直至永久禁言或封停账号的处罚。当涉及欺凌未成年人、危害未成年人身心健康、通过作弊手段注册、使用帐号,或者滥用多个帐号发布违规内容时,本网站将加重处罚。


三、申诉
随着平台管理经验的不断丰富,本网站出于维护本网站氛围和秩序的目的,将不断完善本公约。
如果本网站用户对本网站基于本公约规定做出的处理有异议,可以通过「建议反馈」功能向本网站进行反馈。
(规则的最终解释权归属本网站所有)

我知道了
恭喜你~答对了
+5羽毛
下一次认真读哦
成功推荐给其他人
+ 10羽毛
评论成功且进入审核!审核通过后,您将获得10羽毛的奖励。分享本文章给好友阅读最高再得15羽毛~
(羽毛可至 "羽毛精选" 兑换礼品)
好友微信扫一扫
复制链接