数据开发全流程介绍

上次写了一下大数据开发的日常工作以及实习的一些工作流程总结,这次就具体的写一下数据开发过程中,完成一个模型的产生或者说一个需求方案的产出是怎么完成的。本文的内容对于大家在面试中的意义是在于结合到自己已有的项目以及数据开发的流程,去完善自己项目的细节,比如说很多同学学习了尚硅谷的数仓项目,但是不知道怎么去描述,或者在面试杯问到容易出现疏漏,那么就可以按照本文去梳理整个项目的流程。

岗位选择:https://www.nowcoder.com/discuss/462382334675779584?sourceSSR=users

学习路径:https://www.nowcoder.com/discuss/463804300381245440?sourceSSR=users

日常工作:https://www.nowcoder.com/discuss/466545985922035712?sourceSSR=users

1 OneData数据实施体系(数仓建设)

如果学大数据,大家应该都听过阿里巴巴的OneData大数据体系。其实在整个OneData体系中,对于数据实施的流程也有一些描述,那么什么是OneData,官方定义如下:

阿里云 OneData 数据中台解决方案基于大数据存储和计算平台为载体,以 OneModel 统一数据构建及管理方法论为主干,OneID 核心商业要素资产化为核心,实现全域链接、标签萃取、立体画像,以数据资产管理为皮,数据应用服务为枝叶的松耦性整体解决方案。其数据服务理念根植于心,强调业务模式,在推进数字化转型中实现价值。

数据中台到如今的建设成果主要体现在两方面:一个是数据的技术能力,另一个是数据的资产。

今天阿里的各个业务都在共享同一套数据技术和资产。阿里内部为这个统一化的数据体系命名为 “OneData”。OneData 又主要抽象成三个部分,分别是:OneID、OneModel、OneService。

  • 第一部分:OneModel 致力于实现数据的标准与统一;
  • 第二部分:OneID 致力于实现实体的统一,让数据融通而非以孤岛存在,为精准的用户画像提供基础;
  • 第三部分:OneService 致力于实现数据服务统一,让数据复用而非复制。

1-数据调研

数据调研分为业务调研、需求分析两部分,主要是对整个数据需求的背景用途进行调研

业务调研:对业务系统的业务进行了解。在实际开发中,除了有扎实的数仓理论技术支撑,业务的理解甚至重要性更高,业务背景的细微差异都会导致数据的大不同。所以在实际工作中,数据实施的首要前提是开发人员对业务的了解。所以要构建大数据仓库,就需要了解各个业务领域、业务线的业务有什么共同点和不同点,以及各个业务线可以细分为那几个业务模块,每个业务模块具体的业务流程又是怎样的。

需求分析:在明确了需求的业务背景后,那么下沉到具体的需求,每一个数据模型我们最后是要落实到运营、分析人员的使用上。所以需要根据具体的需求,了解数据的用途或报表的需求,这样我们才能设计出更灵活的模型。

2-架构设计

数据域划分:数据域是指面向业务分析,将业务过程或者维度进行抽象的集合业务过程可以概括为一个个不可拆分的行为事件,如下单、支付、退款为保障整个体系的生命力,数据域需要抽象提炼,并且长期维护和更新但不轻易变动。在划分数据域时,既能涵盖当前所有的业务需求,又能在新业务进入时无影响地被包含进已有的数据域中或者扩展新的数据域。

构建总线矩阵:在进行充分的业务调研和需求调研后,就要构建总线矩阵了。需要做两件事情:明确每个数据域下有哪些业务过程;业务过程与哪些维度相关,并定义每个数据域下的业务过程和维度。

3-规范定义

定规范将是数仓建设的核心步骤,因为前期规范如果没定义好,后面所有的开发、迭代都会稀里糊涂,最直接的影响就是数据的使用效率低下,更长远的将会极大提高数据治理的成本。规范定义主要定义指标体系,包括原子指标、修饰词、时间周期和派生指标。

时间周期

用来明确数据统计的时间范围或者时间点,如最近 30 天、自然周、截至当日等。

业务限定

是对业务的一种抽象划分。业务限定从属于某个业务域,如日志域的访问终端类型涵盖无线端、 PC 端等修饰词。

度量 / 原子指标

原子指标和度量含义相同,基于某一业务事件行为下的度量,是业务定义中不可再拆分的指标,具有明确业务的名词,如支付金额。

维度

维度是度量的环境,用来反映业务的一类属性,这类属性的集合构成一个维度,也可以称为实体对象。维度属于一个数据域,如地理维度(包括国家、地区、省以及城市等级的内容)、时间维度(其中包括年、季、月、周、日等级别的内容)

派生指标

派生指标 = 一个原子指标+多个业务限定(可选)+时间周期。 可以理解为对原子指标业务统计范围的圈定。如原子指标:支付金额,最近一天海外买家支付金额则为派生指标

原子指标、业务限定及修饰词都是直接归属于业务过程下,其中修饰词继承修饰类型的数据域。

派生指标的种类

派生指标可以分为三类:事务型指标、存量型指标和复合型指标。按照其特性不同,有些必须新建原子指标,有些可以在其他类型原子指标的基础上增加修饰词形成派生指标。

4-模型设计

模型设计主要包括维度及属性的规范定义,维表、明细事实表和汇总事实表的模型设计。

操作数据层(ODS)

把业务系统数据几乎无处理地存放在数据仓库中。

  • 同步:结构化数据增量或者全量同步到 MaxCompute
  • 结构化:非结构化(日志)结构化处理并存储到 MaxCompute
  • 累积历史、清洗:根据数据业务需求及稽核和审计要求保存历史数据、清洗数据。

公共维度模型层(CDM)

存放明细事实数据、维表数据及公共指标汇总数据,其中明细事实数据、维表数据一般根据 ODS 层数据加工生成;公共指标汇总数据一般根据维表数据和明细事实数据加工生成。

CDM 层又细分为 DWD 层和 DWS 层,分别是明细数据层和汇总数据层,采用维度模型方法作为理论基础,更多地采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联,提高明细数据表的易用性。

同时在汇总数据层,加强指标的维度退化,采取更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工。其主要功能如下:

  • 组合相关和相似数据:采用明细宽表,复用关联计算,减少数据扫描。
  • 公共指标统一加工:基于 OneData 体系构建命名规范、口径一致和算法统一的统计指标,为上层数据产品、应用和服务提供给公共指标;建立逻辑汇总宽表。
  • 建立一致性维度:建立一致的数据分析维表,降低数据计算口径、算法不统一的风险。

应用数据层(ADS)

存放数据产品个性化的统计指标数据,根据 CDM 层与 ODS 层加工生成。

  • 个性化指标加工:不公用性、复杂性(指数型、比值型、排名型指标)
  • 基于应用的数据组装:大宽表集市、横表转纵表、趋势指标串

5-总结

OneData 的实施过程是一个高度迭代和动态的过程,一般采用螺旋式实施方法。在总体架构设计完成后,开始根据数据域进行迭代示模型设计和评审。

2 数据模型实施(模型设计开发)

那么我们在实际做一个模型的设计开发的流程较OneData体系更为简洁,但是也更注重细节。

1-方案设计

方案设计要考虑的问题包括:数据产出、链路设计、源表说明、口径说明、表结构设计。

数据产出:

首先设计出整个数据链路的拓扑图,举个例子:

这里需要注意用到的每个表的最晚产出时间,这决定了你的ads最表最终产出的时间是几点。所以在选择上游依赖表的时候需要考虑到上游表的产出时间,避免影响新模型的产出,或者新模型等待时间过长

链路设计:

这里就是对上面拓扑图的解释,每一次聚合或者 join 得到什么结果。一般而言,具体的代码开发,也是按照这个链路来完成的,详细的计算逻辑落实下去即可。

源表说明:

介绍上面拓扑图中用到的表,从中获得什么数据。最好列举一个表格说明。

口径说明:

阐述一些计算的逻辑,比如:

  • where 的条件:看过视频就算还是看过 3s 以上才算?视频还是直播?
  • group by 的字段:用什么聚合?
  • 时间:聚合 7 天还是 30 天?

表结构设计:

产出的表有哪些字段、数据类型(比如百分数,存 0.35 还是 35?)、增量还是全量等。

2-链路性能与耗时

计算上面拓扑图中各个节点产出的资源消耗(CPU 核数、内存大小)和用时,比如:

  • CPU[300, 110]:表示 CPU 最大消耗 300 核,平均消耗 110 核;
  • Mem[2]:表示运行时存储最大消耗 2T;
  • Time[16, 3:00]:表示任务产出耗时 16min,3:00 左右产出;
  • Store[35, 30]:表示表单日分区存储 35G,数据量 30E。

3-数据查询

因为 Hive 表最终要推到 ES 或者 CH 才能供后端调用,所以这里需要记录 ES 的数据源是哪个 Hive 表,用在前端页面上的哪个模块。即 ES - Hive - UI 界面 的对应关系。并给出 SQL 查询的示例,让后端开发人员知道如何用怎样的 SQL 语句去查询。

4-数据回溯

开发完后回溯历史数据。

具体考虑的问题还是很多的,并不是直接的运行代码跑历史分区那么简单。

5-值域说明

这一部分也很重要,比如:

  • 算比例,分母为 0 怎么办?
  • 空值用 NULL 还是 0 还是其他?

6-数据完整性

例行任务也在写,自动回溯也在写,手动回溯也在写,怎么保证 Hive 表里面的数据是完整的?一般而言,通常需要提前考虑风险,如果可以解决,直接在数仓内部完成解决方案落实。如果容易产生资损,那么可以考虑牺牲部分数据,但需要提前与业务方沟通

以上就是整个的数据开发流程啦,希望对大家在编写简历的项目经验或者总结实习经历有帮助。

接下来我会总结一下之前我自己整理的大数据面试八股文,大家有兴趣可以持续关注。

#数据人的面试交流地##我的求职思考##我的实习求职记录##阿里##23届找工作求助阵地#
全部评论
2 回复 分享
发布于 2023-03-28 14:43 浙江
学长主打的就是一个专业😍
1 回复 分享
发布于 2023-03-27 22:20 陕西
谢谢大佬的分享,大数据专业学的太杂了也没有一样精通,问一下大佬走数据库方向怎么学习呢😭
1 回复 分享
发布于 2023-04-05 15:56 广西
数据链路的拓扑图里 agg是什么意思呀
1 回复 分享
发布于 2023-04-18 16:26 上海

相关推荐

10-17 10:05
已编辑
北华大学 全栈开发
牛客872465272号:掉头发了哥
点赞 评论 收藏
分享
14 85 评论
分享
牛客网
牛客企业服务