完成需求阶段的工作后,数据产品经理会产出最终版本的产品需求文档,以供设计人员进行设计工作。

设计工作包含数据探查和系分设计两部分:

  • 数据探查旨在了解来源数据的数据形态,例如数据质量、数据分布等。结合业务场景,帮助分析和判断需求实现的可行性以及找出潜在的数据问题和风险。
  • 系分设计则包括表设计、Mapping设计和调度设计等最实际的设计工作。
设计完毕后,最终将产出供开发人员参照实施开发的ETL设计文档、数据探查文档、调度设计文档,为需求的有效实现打下坚实基础。

设计阶段的流程包括以下步骤:

  1. 数据探查

    数据探查的目的是了解数据的形态,找到潜在问题与风险。数据探查是决定数据可靠性的关键步骤。数据探查报告可以为后续开发提供指导,并作为依据指定开发计划。

    数据探查的内容主要包括但不限于以下内容:
    • 源表数据主键字段重复数。
    • 源表字段空值/异常值的统计数。
    • 源表之间关联关系。
    • 源表字段的数据格式。
    • 源表增量规则。

    探查完成后,最终产出数据探查报告。如果发现当前数据无法支撑需求的实现,则要将需求退回给数据产品经理,由数据产品经理发起迭代需求流程。

  2. 系分设计

    系分设计包括表设计、Mapping设计和调度设计三部分。

    • 表设计

      表设计是指依据需求设计目标产出表、中间产出表。包含表名、表名解释、字段名、字段类型、字段注释以及字段安全等级等。表设计的步骤如下所示:

      1. 设计表名、字段名:要求相同的字段在不同表中的字段名相同,相关规范请参见命名规范
      2. 设计主键和外键。
      3. 设计字段注释:通过标注字段注释、枚举值来表明字段含义,如果枚举值过多,建议为枚举值创建维表。
      4. 设计表分区:建议所有表都创建为分区表。
      5. 设计数据生命周期。

        企业应根据自身实际情况来进行设置,也可以参考如下数值:

        数仓分层 说明
        ODS层
        • 非去重数据:默认不保留。
        • ETL临时表:保留14日。
        • 镜像全量表:重要数据建议采用极限存储。
        • 流水全量表:如果不可再生,则永久保存。
        DWD层
        • 维度表:按日分区的极限存储模式。
        • 事实表:按日分区且永久保留。
        • 周期性快照事实表:采用极限存储或根据自身情况设置生命周期。
        DWS层 汇总指标:自行选择保留月初、特定日期数据。
      6. 设计加密技术:根据实际情况对敏感字段设计加密方案。
    • Mapping设计

      Mapping设计采用图形化或伪代码的形式编写规划以下内容:

      • 每个字段的生成逻辑。
      • 表与表之间的关系。
      • 目标字段与原字段间的算法逻辑。

      将上述内容产出为ETL文档留存,ETL将作为后续开发流程的第一参考依据。

  3. 调度设计
    1. 依赖设计

      将ETL抽象为多个相互依赖的代码节点形成上下游依赖关系,要求如下:

      • 一个节点仅产出一张表,一张表仅由一个节点产出。
      • 下游节点的输入数据来自于上游节点的产出数据。
      • 多并行、少串行(在分布式系统下可发挥其优势)。
    2. 运行周期

      如果数据研发的场景是在常见T+1离线计算场景,则应将不同调度任务按照实际业务需求,赋予小时、日、周、月和季度等不同的调度粒度。

      说明
      • 程序必须支持重跑。
      • 如果SQL语句优化后,单次执行仍超过30分钟,建议拆表重新设计,建议每个节点运行时长不超过1小时。
    3. 设置基线:在传统T+1(每日计算的是前一日产生的业务数据)的场景下,数据理应在第二天某个时间点按时产出以支撑BI或其他应用场景,因此应设置如下基线报警策略。
      • 最终产出任务基线:规定产出最终数据的任务必须在公司规定的X点X分完成,否则视为破线(同时推送相应报警)。
      • 中间任务报警:产出最终数据的任务的上游任务应稳定、按时运行完成。如果出现出错、变慢(运行时间明显长于历史过往平均运行时间)等可能影响最终任务完成时间的事件,则应第一时间推送报警给第一任务责任人。
    4. 设置优先级:基于有限的计算资源来设置任务优先级,以保证在已有资源被充分调配利用的情况下,可以按照顺序产出数据,保证重要任务的准时产出。调度设计完成后,需要产出调度设计文档
    5. 数据流设计

      ETL过程中,数据流向有如下限制:

      • 数据流向仅支持由低到高,即ODS->DWD->DWS->ADS。
      • 数据不能且不能跨层引用、逆向引用。
      • DWS层不同集市的数据不能相互引用,必须沉淀到DWD层。