Skip to content

数据中台 (数据开发 / 数仓建模 + 数据资产 / 治理)

此场景需要使用的应用: 数据治理, 数据集成, 离线数仓 & 实时数仓, 数据调度
通过以下 4 步构建完整的离线数据仓库

数据仓库建模摘要

数据仓库是面向数据分析与处理场景而构建的, 需要宏观考虑以下几个方面以便在性能、成本、效率和数据质量之间找到最佳平衡点

  • 维度建模: 数据仓库依照维度建模理论, 将数仓分为原始数据层 (ODS)、通用维度层 (DIM)、明细数据层 (DWD)、汇总数据层或主题数据层 (DWS)、应用数据层 (ADS) 来设计和构建数据仓库的
  • 访问性能:能够快速查询所需的数据,此方面无需用户考虑, 本平台已经优化了数据仓库的读写、查询、分析性能, 对用户透明
  • 数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数据系统中的存储成本和计算成本, 此方面是构建数据仓库需要着重考虑的地方, 对应数据仓库层级就是明细数据层 (DWD) 和 汇总数据层 (DWS), 要充分考虑整体业务场景需求数据复用, 这两个层级一个是对原始数据的维度处理和事实处理, 一个是承担应用需求访问分析的数据基础, 同时要考虑未来需求扩展等
  • 使用效率:改善用户应用体验,提高使用数据的效率, 这部分主要在应用数据层 (DWS) 考虑, 如何对接需求和分析处理上一层数据
  • 数据治理:改善数据统计口径的不一致性,减少数据计算错误的可能性,提供高质量的、一致的数据访问平台

因此在构建数据中台时

  • 整理业务需求, 将以前、现在和未来的需求都要考虑到, 总结业务过程, 划分业务数据领域, 不同数据领域的数据尽量不要交叉, 围绕业务过程建立数据仓库
  • 数据标准定义, 目的是统一统计口径, 比如相同或相似的指标, 就要有统一的命名, 同一数据仓库层级的命名规则也要有统一的命名规范
  • 数据集成阶段, 为了避免对业务系统造成压力, 同时将业务数据使用分布式文件系统来备份数据, 所以要将业务数据使用数据集成同步到数据仓库的原始数据层 (ODS), ODS 的原则是对业务数据基本不做处理, 原封不动保存
  • 数据仓库层级设计, 依照数据仓库建模理论, 通常会建立四层原始数据层 (ODS), 明细数据层 (DWD), 汇总数据层或主题数据层 (DWS), 应用数据层 (ADS), 跟据具体业务复杂程度可在 DWS 和 ADS 之间自定义其他层级, 但是要遵守数据流向原则, 上一层数据仅可流向同层或者下面的层级, 不可回流上一层, 下一层数据的来源仅可为同一层或者上一层
  • 任务调度规划, 在完成了数据仓库建模与建表之后, 需要创建任务与调度实现数据从业务系统到最终的数据流转
  • 数据应用共享, 此阶段主要是开放与管理 API, 以便数据可以通过权限和策略管理的方式控制访问

整理业务需求

  • 按照业务过程划分层级结构, 也就是纵向划分哪些数据处理放在明细数据层 (DWD), 哪些汇总放在汇总数据层 (DWS) 等等
  • 按照业务领域划分数据领域, 也就是横向划分哪些数据归属于同意业务领域, 可以建一个分类, 将该层级涉及的表归类到该分类下

数据标准定义

定义数据标准, 包括名词字典、字段标准、命名规则、标准代码、度量单位

创建名词字典

在数据指标场景下管理业务名词, 用于组成命名规则的候选词组

  • 点击应用数据治理 - 数据标准
  • 点击名词字典
  • 首次创建需创建分类, 以分类 业务 - 考核 为例, 点击 + 号新建分类 考核, 点击分类 业务 再点击 创建子分类 - 考核
  • 点击分类 业务 - 考核, 点击 新增 新建名词
  • image.png

创建字段标准

在数据指标场景用于定义指标标准, 创建类似指标时可引用字段标准快速创建指标

  • 点击应用数据治理 - 数据标准
  • 点击字段标准
  • 首次创建需创建分类, 以分类 业务 - 考核 为例, 点击 + 号新建分类 考核, 点击分类 业务 再点击 创建子分类 - 考核
  • 点击分类 业务 - 考核, 点击 新增 新建字段标准
  • image.png

定义命名规则

在数据指标场景用于定义指标体系表名命名规则, 旨在确保命名的一致性和可读性

  • 点击应用数据治理 - 数据标准
  • 点击命名规则
  • 首次创建需创建分类, 以分类 数据指标 - 指标体系 为例, 点击 + 号新建分类 数据指标, 点击分类 数据指标 再点击 创建子分类 - 指标体系
  • 点击分类 数据指标 - 指标体系, 点击 新增 新建命名规则
  • 指标体系中共有 3 层, 每层都需要设置命名规则
    • 明细数据层: 对应数据仓库中明细数据层 (DWD), 例如 dwd_业务_自定义
    • 汇总数据层: 对应数据仓库中明细数据层 (DWS), 例如 dws_业务_汇总周期_自定义
    • 应用数据层: 对应数据仓库中明细数据层 (ADS), 例如dwd_业务_报表类型_自定义
  • image.png

创建标准代码

在数据指标场景用于定义某些字段标准的取值范围, 用于设置可选择的数据的内容、编码以及范围

  • 点击应用数据治理 - 数据标准
  • 点击标准代码
  • 首次创建需创建分类, 以分类 业务 - 考核 为例, 点击 + 号新建分类 业务, 点击分类 业务 再点击 创建子分类 - 考核
  • 点击分类 业务 - 考核, 点击 新增 新建标准代码 评分等级
  • image.png
  • 选择标准代码 评分等级, 点击 代码, 点击 新增, 新增标准代码取值
  • image.png

创建度量单位

在数据指标场景用于定义指标的度量单位, 系统已预置度量单位,可自定义创建新的度量单位

  • 点击应用数据治理 - 数据标准
  • 点击度量单位
  • 首次创建需创建分类, 以分类 业务 - 考核 为例, 点击 + 号新建分类 业务, 点击分类 业务 再点击 创建子分类 - 考核
  • 点击分类 业务 - 考核, 点击 新增 新建度量单位 千瓦时
  • image.png

数据集成阶段

操作步骤类似应用场景: 数据同步 / 数据集成, 目的是实现外部业务系统 -> 数据仓库的数据汇集
本案例以 MySQL -> Doris 并且过滤掉 age 字段为例创建简单的数据同步任务

创建数据连接

  • 数据集成 - 数据连接管理 - 创建数据连接
    • 创建 MySQL 类型的源头 MySQLSourceExample
    • 创建 Doris 类型的目标 DorisSinkExample

创建同步任务

每个任务必须有源头和目标

  • 点击应用数据集成 - 数据同步
  • 点击批处理任务 , 点击创建任务
    • 选择 Zeta 引擎, 任务命名为 mysql_doris_batch_zeta.conf, 点击 确定 继续
    • 拖拽数据源头 - MySQLSourceExample & 数据目标 - DorisSinkExample到画布中
    • 拖拽转换节点 - FilterFieldTransform 选择 age 字段过滤
    • 用箭头按顺序依次连接 MySQLSourceExampleFilterFieldTransformDorisSinkExample

发布同步任务

  • 将数据同步任务配置发布到数据调度应用
    • 数据集成 - 数据同步 - 批处理任务 & 流处理任务列表 - 点击发布 到应用数据调度文件路径
      • 首次使用未创建文件路径, 请点击提示跳转数据调度 - 资源中心创建文件路径, 即创建文件夹 example
      • 回到发布页面中点击刷新, 文件路径选择 example

创建调度工作流

通过数据调度应用创建调度工作流运行数据同步任务

  • 点击应用数据调度 - 项目管理
  • 点击 创建项目
    • 首次使用需创建项目, 数据调度中的工作流是以项目为维度管理的
    • 创建项目 数据集成 Example
  • 点击项目 数据集成 Example - 创建工作流
    • 左侧列表选择 Shell 类型任务节点拖拽至画布中
  • 节点名称命名为 mysql_doris_batch_zeta
    • 节点脚本参数填入如下脚本
    /opt/module/seatunnel-2.3.0/bin/seatunnel.sh \
    # -c 后替换为刚才发布的文件路径
    -c example/mysql_doris_batch_zeta.conf \
    -e local
    ```- 节点**资源**参数选择 `example/mysql_doris_batch_zeta.conf`
    - 保存工作流命名为 `mysql_doris_example`
  • 回到数据集成 Example 项目内, 找到工作流mysql_doris_example
    • 测试运行: 点击上线, 点击运行即可立即运行测试
    • 定时调度: 点击上线, 点击右侧定时按钮使用 CORN 设置工作流执行周期, 并且点击定时管理再点击上线定时, 工作流则会定时执行

架构方案与层级设计

数据仓库设计, 包括架构方案涉及、仓库定义、分层设计、数仓建模, 架构方案主要分为离线数仓和实时数仓

离线数仓

image.png

T + 1 离线
  • 创建数据仓库
    • 点击应用离线数仓
    • 点击菜单数仓建模
    • 点击 新增 - 创建数据仓库
      • 数据仓库名称
      • 库名: 用于创建 Doris 库名称, 英文小写
    • image.png
  • 点击新增的数据仓库, 默认生成 4 层级, 根据需要增减层级, 离线数仓一般采用 5 层
    • ODS 原始数据层 - Doris Table
    • DWD 明细数据层 - Doris Table
    • DIM 通用维度层 - Doris Table
    • DWS 汇总数据层 - Doris Table
    • ADS 汇总数据层 - Doris Table
  • 以 DWC 为例, 点击新增的数据仓库, 点击 新增 - 创建数据层级
  • image.png
  • 依据数仓建模设计, 在对应层级创建对应表, 以 ODS 层建表为例
    • 点击 离线数据仓库
    • 点击层级 ODS
    • 点击 新增 - 创建表
      • 基本信息
        • 表名: 英文小写、下划线
        • 引擎类型: 默认 OLAP
        • 层级
        • 备注: 表备注
      • 表结构设计, 用于编辑字段
      • 属性配置
        • 存储模型配置
          • 存储模型
          • 作为 Key 的字段
        • 分区配置
          • 分区类型
          • 分区字段
        • 分桶配置
          • 分桶类型
          • 分桶字段
          • 分桶数量
        • 属性配置
    • image.png
  • 每层级表设计有所不同
    • ODS 原始数据层: 一般是 UNIQUE KEY 存储模型, 按调度周期分区, 例如每天调度, 按天分区
    • DWD 明细数据层: 一般是 UNIQUE KEY 存储模型, 按调度周期分区, 例如每天调度, 按天分区
    • DIM 通用维度层: 一般是 UNIQUE KEY 存储模型, 不分区
    • DWS 汇总数据层: 一般是 UNIQUE KEY 存储模型, 按调度周期分区, 例如每天调度, 按天分区
N 小时离线
  • 与 T + 1 类似, 每隔几小时定时调度一次, 此处不再介绍

实时数仓

image.png

实时 - 毫秒 / 秒级实时
  • 创建数据仓库
    • 点击应用实时数仓
    • 点击菜单数仓建模
    • 点击 新增 - 创建数据仓库
      • 数据仓库名称
      • 库名: 用于创建 Doris 库名称, 英文小写
    • image.png
  • 点击新增的数据仓库, 默认无层级, 根据需要增加层级, 实时数仓通常采用 4 层
    • ODS 原始数据层 - Kafka Topic
    • DWD 明细数据层 - Kafka Topic
    • DIM 通用维度层 - Doris Table
    • DWS 汇总数据层 - Doris Table
  • 以 ODS 为例, 点击新增的数据仓库, 点击 新增 - 创建数据层级
  • image.png
  • 依据数仓建模设计, 在对应层级创建对应表或者 Topic, 以 ODS 层建 Topic 为例
    • 点击 实时数据仓库
    • 点击层级 ODS
    • 点击 新增 - 创建表
      • Topic 名称
      • 层级
      • 分区数量: 一般为 3
      • 副本数量: 一般为 2
      • 消息过期时间: 默认 168 小时即 7天
    • image.png
  • 依据数仓建模设计, 在对应层级创建对应表或者 Topic, 以 DWS 层建表为例
    • 点击 实时数据仓库
    • 点击层级 DWS
    • 点击 新增 - 创建表
      • 基本信息
        • 表名: 英文小写、下划线
        • 引擎类型: 默认 OLAP
        • 层级
        • 备注: 表备注
      • 表结构设计, 用于编辑字段
      • 属性配置
        • 存储模型配置
          • 存储模型
          • 作为 Key 的字段
        • 分区配置
          • 分区类型
          • 分区字段
        • 分桶配置
          • 分桶类型
          • 分桶字段
          • 分桶数量
        • 属性配置
  • 每层级 Topic 或者表设计有所不同
    • ODS 原始数据层: Kafka Topic, 一般 3 分区 2 副本, 消息过期时间 7 天
    • DWD 明细数据层: Kafka Topic, 一般 3 分区 2 副本, 消息过期时间 7 天
    • DIM 通用维度层: 一般是 UNIQUE KEY 存储模型, 不分区
    • DWS 汇总数据层: 一般是 UNIQUE KEY 存储模型, 按调度周期分区, 例如每天调度, 按天分区
微批实时 - 分钟级实时
  • 创建数据仓库
    • 点击应用实时数仓
    • 点击菜单数仓建模
    • 点击 新增 - 创建数据仓库
      • 数据仓库名称
      • 库名: 用于创建 Doris 库名称, 英文小写
    • image.png
  • 点击新增的数据仓库, 默认无层级, 根据需要增加层级, 微批实时数仓通常采用 4 层
    • ODS 原始数据层 - Kafka Topic
    • DWD 明细数据层 - Doris Table
    • DIM 通用维度层 - Doris Table
    • DWS 汇总数据层 - Doris Table
  • 以 ODS 为例, 点击新增的数据仓库, 点击 新增 - 创建数据层级
  • image.png
  • 依据数仓建模设计, 在对应层级创建对应表或者 Topic, 以 ODS 层建 Topic 为例
    • 点击 实时数据仓库
    • 点击层级 ODS
    • 点击 新增 - 创建表
      • Topic 名称
      • 层级
      • 分区数量: 一般为 3
      • 副本数量: 一般为 2
      • 消息过期时间: 默认 168 小时即 7天
    • image.png
  • 依据数仓建模设计, 在对应层级创建对应表或者 Topic, 以 DWS 层建表为例
    • 点击 实时数据仓库
    • 点击层级 DWS
    • 点击 新增 - 创建表
      • 基本信息
        • 表名: 英文小写、下划线
        • 引擎类型: 默认 OLAP
        • 层级
        • 备注: 表备注
      • 表结构设计, 用于编辑字段
      • 属性配置
        • 存储模型配置
          • 存储模型
          • 作为 Key 的字段
        • 分区配置
          • 分区类型
          • 分区字段
        • 分桶配置
          • 分桶类型
          • 分桶字段
          • 分桶数量
        • 属性配置
  • 每层级 Topic 或者表设计有所不同
    • ODS 原始数据层: Kafka Topic, 一般 3 分区 2 副本, 消息过期时间 7 天
    • DWD 明细数据层: Kafka Topic, 一般 3 分区 2 副本, 消息过期时间 7 天
    • DIM 通用维度层: 一般是 UNIQUE KEY 存储模型, 不分区
    • DWS 汇总数据层: 一般是 UNIQUE KEY 存储模型, 按调度周期分区, 例如每天调度, 按天分区

任务调度规划

定义工作流实现数据仓库内部从低层级向高层级数据流转

工作流规则

  • 一般是一个层级一个工作流或者一个数据仓库一个工作流
  • 工作流之间可以通过在工作流 B 内部添加 SUB_PROCESS 节点选择 工作流 A, 实现先执行工作流 A, 再执行工作流 B 的执行顺序
  • 工作流由 Table、Topic、Job 类型节点相连而成, 其中 Table、Topic 类似为数据存储类型节点, Job 为数据处理任务节点
  • 存储节点仅可与任务节点相连, 任务节点仅可与存储节点相连
    • 如下图含义为从 Table ads_plant_xxx 读取数据, 经过 SQL plant_rm_xxx 处理, 写入 Table plant_rm_xxx
    • image.png
  • 工作流可以以存储节点或者任务节点开头或结尾
  • 存储节点不可以单独存在, 任务节点可以单独存在不与其他节点相连, 单独存在即作为一条数据处理的链路的开头
  • 一个工作流内可存在多个开头即多个数据处理链路, 同一个工作流多个开头之间并行执行,
  • 存储节点、任务节点都可作为工作流内一条数据处理链路的结尾

定义工作流

  • 点击应用数据调度
  • 点击菜单项目管理
  • 点击 创建项目, 以数据仓库为例, 创建项目 - 数据仓库
  • 点击新增的项目
  • 点击创建工作流, 左侧选择拖动 Table 节点 或者 Job 节点 到画布中构建工作流内表与任务关系
    • 存储节点, 无编辑功能, 仅用于构建关系时标记存储节点
      • 点击左侧 数据仓库 Tab 页
      • 选择离线
        • 离线: 指离线数仓应用
        • 实时: 指实时数仓应用
      • 选择数仓层级
        • 离线数仓中, 可选 Table 类型节点
        • 实时数仓中, 可选 Table、Topic 类型节点
      • 拖动 Table 或 Topic 到画布中
    • 任务节点, 用于配置数据处理逻辑的任务节点
      • 点击左侧 任务节点 Tab 页
        • DATA_QUALITY: 数据质量任务
        • FLINK: Flink 批处理任务
        • FLINK_STREAM: Flink 流处理任务
        • PYTHON: Python 类型脚本任务
        • SHELL: Shell 类型脚本任务
        • SPARK: Spark 任务
        • SQL: SQL 脚本任务
        • SUB_PROCESS: 逻辑节点, 子流程, 用于引用其他工作流
      • 拖动任务节点到画布中
  • 数据仓库通常有很多存储节点、很多任务节点, 下图为 指标数据仓库工作流日调度 案例
  • image.png

上线工作流

回到数据仓库 项目内, 找到工作流

  • 测试运行: 点击上线, 点击运行即可立即运行测试
  • 定时调度: 点击上线, 点击右侧定时按钮使用 CORN 设置工作流执行周期, 并且点击定时管理再点击上线定时, 工作流则会定时执行

数据调用

通过 API 接口的方式开放数据访问

创建数据 API

  • 点击应用数据服务 - API 开发
  • 点击 +新建分类 - 数据仓库
  • 点击分类 数据仓库 - 创建 API
  • 填写基本信息
    • 服务地址: 网关地址
    • API 路径: 可自定义, 要求不重复
    • 请求方式: 选择 POST
    • API 类型: 选择公有, 公有为所有用户可见, 私有仅当前用户可见
  • 填写参数配置
    • 配置模式: 选择向导模式
    • 来源: 选择应用离线数仓或者实时数仓
    • 选择数据仓库
    • 选择层级
    • 选择参数: 点击加载选择请求参数、返回参数、是否必填
    • 字段排序: 字段排序点击添加设置字段升序
  • 保存后点击 发布 可发布 API, 发布后才可访问 API
  • 点击 调试 可测试 API 连通性、请求返回字段是否正确

配置 API 策略

  • 点击应用数据服务 - API 管理
  • 点击 API 策略 , 点击分类 数据仓库 - 点击策略
  • 参考场景: 数据服务 / 共享/ 统一 - 配置 API 策略

设置 API 授权

此步骤用于向用户或者用户组授权 API, 用户组内的用户看作一个整体共享同一个 API 授权 Key, 首次使用需要创建用户和用户组

新增用户
  • 点击应用数据服务 - 用户管理
  • 点击用户 - 新增
    • 手动创建: 用于创建平台外第三方的用户, 即此用户仅可以调用 API 而没有使用平台系统的权限
    • 用户中心: 可以由整个平台系统内的用户中心的用户引用创建数据服务应用内的用户, 即此用户可调用 API 也可登录平台系统
  • image.png
新增用户组
  • 点击应用数据服务 - 用户管理
  • 点击用户组 - 新增
    • 用户组成员: 可选单个或者多个用户, 组内用户看作一个整体
  • image.png
API 授权
  • 点击应用数据服务 - API 管理
  • 点击 API 策略, 点击分类 数据仓库 - 选择 API - 点击 授权
    • 授权类型: 用户、用户组
    • 授权用户 / 授权用户组: 选择所要授权访问该 API 的用户 / 用户组
    • 授权范围
      • 请求参数: 选择该授权可以发送的请求参数
      • 返回参数: 选择该授权可以发送的返回参数
    • 有效期
      • 固定时长
      • 永久
  • image.png

测试 API

  • 点击应用数据服务 - API 管理
  • 点击 API 测试
    • 选择对象
      • 用户
      • 用户组
    • 测试对象: 选择测试的用户 / 用户组身份
    • API 名称: 选择所要测试的 API, 该用户 / 用户组未被授权的 API 将被过滤掉不提供选择

上线指标 API

  • 点击应用数据服务 - API 管理
  • 点击API 策略 - 点击分类数据仓库 - 选择 API - 点击上线
    • API 上线后才可正式被访问, 若未上线即使授权了也无法调用

调用 API

需要使用 API Key 调用 API

  • 点击应用数据服务
  • 点击菜单用户管理
  • 点击用户或者用户组, authKey 即为授权的 API Key
  • 点击菜单API 管理
  • 点击 API 策略, 选择 API, API 路径 即为 API 调用访问路径