完成需求阶段的工作后,数据产品经理会产出最终版本的产品需求文档,以供设计人员进行设计工作。
设计工作包含数据探查和系分设计两部分:
数据探查旨在了解来源数据的数据形态,例如数据质量、数据分布等。结合业务场景,帮助分析和判断需求实现的可行性以及找出潜在的数据问题和风险。
系分设计则包括表设计、Mapping设计和调度设计等最实际的设计工作。
设计完毕后,最终将产出供开发人员参照实施开发的ETL设计文档、数据探查文档、调度设计文档,为需求的有效实现打下坚实基础。
设计阶段的流程包括以下步骤:
数据探查
数据探查的目的是了解数据的形态,找到潜在问题与风险。数据探查是决定数据可靠性的关键步骤。数据探查报告可以为后续开发提供指导,并作为依据制定开发计划。
数据探查的内容主要包括但不限于以下内容:
源表数据主键字段重复数。
源表字段空值/异常值的统计数。
源表之间关联关系。
源表字段的数据格式。
源表增量规则。
探查完成后,最终产出数据探查报告。如果发现当前数据无法支撑需求的实现,则要将需求退回给数据产品经理,由数据产品经理发起迭代需求流程。
系分设计
系分设计包括表设计、Mapping设计和调度设计三部分。
表设计
表设计是指依据需求设计目标产出表、中间产出表。包含表名、表名解释、字段名、字段类型、字段注释以及字段安全等级等。表设计的步骤如下所示:
设计表名、字段名:要求相同的字段在不同表中的字段名相同,相关规范请参见命名规范。
设计主键和外键。
设计字段注释:通过标注字段注释、枚举值来表明字段含义,如果枚举值过多,建议为枚举值创建维表。
设计表分区:建议所有表都创建为分区表。
设计数据生命周期。
企业应根据自身实际情况来进行设置,也可以参考如下数值:
数仓分层
说明
ODS层
非去重数据:默认不保留。
ETL临时表:保留14日。
镜像全量表:重要数据建议采用极限存储。
流水全量表:如果不可再生,则永久保存。
DWD层
维度表:按日分区的极限存储模式。
事实表:按日分区且永久保留。
周期性快照事实表:采用极限存储或根据自身情况设置生命周期。
DWS层
汇总指标:自行选择保留月初、特定日期数据。
设计加密技术:根据实际情况对敏感字段设计加密方案。
Mapping设计
Mapping设计采用图形化或伪代码的形式编写规划以下内容:
每个字段的生成逻辑。
表与表之间的关系。
目标字段与原字段间的算法逻辑。
将上述内容产出为ETL文档留存,ETL将作为后续开发流程的第一参考依据。
调度设计
依赖设计
将ETL抽象为多个相互依赖的代码节点形成上下游依赖关系,要求如下:
一个节点仅产出一张表,一张表仅由一个节点产出。
下游节点的输入数据来自于上游节点的产出数据。
多并行、少串行(在分布式系统下可发挥其优势)。
运行周期
如果数据研发的场景是在常见T+1离线计算场景,则应将不同调度任务按照实际业务需求,赋予小时、日、周、月和季度等不同的调度粒度。
说明程序必须支持重跑。
如果SQL语句优化后,单次执行仍超过30分钟,建议拆表重新设计,建议每个节点运行时长不超过1小时。
设置基线:在传统T+1(每日计算的是前一日产生的业务数据)的场景下,数据理应在第二天某个时间点按时产出以支撑BI或其他应用场景,因此应设置如下基线报警策略。详情请参见基线管理。
最终产出任务基线:规定产出最终数据的任务必须在公司规定的X点X分完成,否则视为破线(同时推送相应报警)。
中间任务报警:产出最终数据的任务的上游任务应稳定、按时运行完成。如果出现出错、变慢(运行时间明显长于历史过往平均运行时间)等可能影响最终任务完成时间的事件,则应第一时间推送报警给第一任务责任人。
设置优先级:基于有限的计算资源来设置任务优先级,以保证在已有资源被充分调配利用的情况下,可以按照顺序产出数据,保证重要任务的准时产出。调度设计完成后,需要产出调度设计文档。
数据流设计
ETL过程中,数据流向有如下限制:
数据流向仅支持由低到高,即ODS->DWD->DWS->ADS。
数据不能跨层引用、逆向引用。
DWS层不同集市的数据不能相互引用,必须沉淀到DWD层。