离线数仓经验之谈三-数仓流程规范

2023-11-15

数仓流程规范

目录

1. 目的

2. 适用范围

3. 总体流程

4. 测试

5. 任务标准

1. 目的

  • 确保数据的准确性、及时性、一致性、完整性
  • 数据开发过程中避免重复无效沟通、信息不完整

2. 适用范围

数仓开发、报表开发、数据分析、数据BP等数据相关人员

3. 总体流程

数据流程总体分为:数仓开发、报表开发、数据拉取。

  • 数仓开发:将源数据抽取到指定目标的过程。

  • 数据服务:将指定数据通过图表方式进行可视化的过程。

  • 数据拉取:根据业务需求通过代码实现数据输出的过程。

工期超过3个工作日,需要给出相应的排期计划;工期超过5个工作日,需要提供相应的设计文档。

所有的QS都必须提交测试,是否需要测试由测试决定。

  • 代码审核
项目名称 产品负责人 代码互审人
xxx xxx xxx

3.1. 数仓开发流程

3.1.1. 需求分析

  • 了解需求背景
  • 分析需求所需要实现的功能,确认需求范围
  • 理解需求后与需求方确认双方理解一致
  • QS状态为【接受】与工期评估

3.1.2. 数据源与数据探查

  • 确认数据来源

a) 业务数据库确认连接信息;日志数据确认日志服务器与日志目录

b) 梳理需要同步的数据清单(如:库、表、日志、数据范围)

  • 数据探查

数据来源分两类:一类业务数据(DB);一类行为数据(日志)。两类数据都需要对结构、字段、字段值、字段解释进行探查。

    • 表、日志结构

表结构或日志结构实际是否与文档描述一致,如:业务方说某字段在表中是唯一,但实际表结构并未设置唯一键问题;防止发生少表问题。

    • 字段

实际是否与文档描述一致,防止发生缺少字段、新加字段问题。

    • 字段值

实际检查枚举值、状态值等是否与文档描述一致,防止与业务方描述不一样问题。

    • 解释

表结构、日志结构、字段都应当有具体文档解释说明。

3.1.3. 数据模型设计

数据仓库中的ODS、DW层统一由ETL开发完成,ETL开发需要负责ETL数据过程与目标表设计与创建。

  • ODS层模型

ODS层模型结构与源数据结构基本上是完全一致的,只有在特定情况下会新增字段。如:分表、分库表则会添加一个source_table字段用来区分数据来源。

  • DW层模型

    • 范式设计
  1. 对业务数据不熟悉且又需要满足业务数据需求
    • 合并
  1. 数据粒度一样,如:用户信息,用户扩展信息等
  2. 数据业务,业务数据80%都会一起使用,可以将属性信息合并
    • 拆分
  1. 数据量非常大属性信息非常多且部分数据没有关联。可进行数据拆分存储
    • 实体建模
  • DM层模型

    • 维度建模
  1. 星型模型
  2. 雪花模型
  3. 星座模型
    • 用户画像
  1. 用户画像
  • DA层模型

DA层模型则根据具体业务需求设计。

3.1.4. ETL开发

  • 确定数据抽取频次(时、天、周、月)
  • 确定数据抽取口径(全量、增量)
  • 确定数据清洗逻辑(非ODS层,ODS层暂不做处理)
  • 确定数据装载策略
    • 增量(不会更新)
    • 全量
    • Merge
  • 实现ETL开发
    • 确定数据主表
    • 确定主表关系(1:1、N:1)
    • 公用数据创建数据临时表
    • 多指标计算使用union all后聚合

3.1.5. 测试

  • 任务开发脚本和数据测试在测试库完成;
  • 如果是表结构变更需要在测试库将历史数据跑全;
  • 按业务重要等级区分备份与下游依赖重要等级区分备份;
  • 正式上线表切换Rename脚本准备;
  • 表切换前先前目标表进行备份;(备份表上线一周后手动清理)
# 切换操作
alter table 库名.目标表 rename to test.目标表_QSID_old;
alter table test.目标表 rename 库名.目标表;

# 回滚操作
alter table 库名.目标表 rename to test.目标表_QSID_new;
alter table test.目标表_QSID_old rename 库名.目标表;

3.1.6. ETL上线

  • 代码部署系统上线
  • 【项目开发】创建Hive脚本,仅对HQL\SQL脚本
  • 【调度系统】创建定时调度,配置任务依赖、调度时间、任务试跑
  • 常规ETL任务错误邮件预警必须在一个工作日内处理完成;对外提供服务的ETL任务错误邮件预警必须在一个小时内处理完成。
  • 调度系统调度的任务脚本必须是GitLab管理脚本;调度任务之间任务依赖设置

3.1.7. 数据质量校验

  • 常规任务必须配置至少一条以上校验规则
  • 对外提供服务数据至少两条以上校验规则,必须是交叉验证规则
  • 周一至周五收到调度、数据质量邮件预警必须在一个小时处理完成,周六周日收到调度、数据质量邮件预警则必须当天处理完成

3.1.8. 验收

需求开发完成上线通知数据使用方验收,确认当前数据没有问题即可。

3.2. 数据服务开发流程

3.2.1. 需求分析

  • 了解需求背景
  • 分析需求所需要实现的功能,确认需求范围
  • 理解需求后与需求方确认双方理解一致
  • QS状态为【接受】与工期评估

3.3.2. 数据来源

  • 与数据BP确认每个字段数据来源
  • 将自己理解与数据BP讲解确保双方理解一致

3.2.3. 模型设计与开发

  • 确认维度指标且采用维度建模方式
  • 模型数据代码开发

3.2.4. 模型数据测试

3.2.5. 数据服务开发

  • 固定报表开发

    • 确定报表数据表名称与数据集
    • 确定报表控件、格式、布局、显示名称
    • 《数据报表平台》报表菜单配置
  • 数据分析开发

    • 根据《数据分析系统》接入模板填写
  • 数据文件开发

    • 根据需求开发完成后,将文件同步接口维护到《数仓数据服务清单.xlsx》文档中
  • API接口开发

    • 根据需求开发完成后,将API接口维护到《数仓数据服务清单.xlsx》文档中

3.2.6. 测试

  • 固定报表测试

    • 报表数据可视化和数据测试在测试目录完成;
    • 按业务重要等级区分备份;
    • 报表切换前先将目标报表进行备份;(备份上线一周后手动清理)
# 切换操作
报表另存为【报表名_QSID_old】
将测试报表Rename【报表名】

# 回滚操作
将已上线的报表Rename【报表名_QSID_new】
将【报表名_QSID_old】Rename【报表名】
  • 分析报表测试

创建临时表将原表数据导入后,然后同时将临时表Rename成正式表,正式表Rename成旧表。参考报表测试操作。

  • 数据文件测试

测试文件数据与源表数据一致且数据导出过程中出错通过调度任务邮件预警。配置数据质量预警,如:规定时间未出数据。

  • API接口测试

API接口数据与源表数据一致且调用接口时查询与源表数据一致。配置数据质量预警,如:规定时间未出数据。

3.2.7. 上线

  • 《数据报表平台》报表菜单用户权限访问配置

  • 按照《数据分析平台》接入模板填写将QS转交给志强无问题

  • 指标录入《元数据系统》

  • 接口、数据文件按维护到《数仓数据服务清单.xlsx》文档中

3.2.8. 验收

  • 数据BP将报表访问地址开放给需求方且需求方验收没有问和关闭QS

3.3. 数据拉取流程

3.3.1. 需求分析

  • 了解需求背景
  • 分析需求所需要实现的功能,确认需求范围
  • 理解需求后与需求方确认双方理解一致
  • QS状态为【接受】与工期评估

3.3.2. 数据来源

  • 与数据BP确认每个字段数据来源
  • 将自己理解与数据BP讲解确保双方理解一致

3.3.3. 需求实现

  • 实现数据需求代码开发,遵守开发流程与开发规范

3.3.4. 测试

3.3.5. 结果导出

  • 根据需求导出数据上传QS且通知数据BP,代码则按data-analysis规范合并到项目中

3.3.6. 验收

  • 数据BP核验无误将数据结果提交给需求方,需求方验收没有问题和问关闭QS

4. 测试

4.1. 单元测试

4.2. 联调测试

数据环节有依赖关系时需要进行联调测试,前提必须先做完单元测试;比如:报表开发,可以分两个环节测试,第一步测试数据是否装载到DM表且导入到可视化查询存储(MySQL、Kylin)。第二步测试报表查询结果。

4.3. 全链路测试

暂无

4.4. 准入测试标准

准入测试标准如下:

  1. 单元测试无误
  2. 提供相关的需求文档
  3. 提供相应的目标表ETL字段级映射文档
  4. 提供涉及到目标表加工处理流程图(注:标注哪些是新增表、已有的表)
  5. 提QS给到产品负责人由产品负责人转接测试人员
  6. 提供上线影响范围(数据层面、代码层面)

5. 任务标准

确保数据的准确性、一致性、完整性、及时性

月新QS任务数据问题不超过3次,月历史QS任务数据问题不超过2次

数据问题定义:一个QS任务包含ETL开发、调度任务、数据质量、报表开发等环节,如其中某个环节出错,则表示此QS是有数据问题;相同一个任务出错N次则算N-1次数据问题

注:所有QS开发的前提是遵循《数仓开发规范V1.0》和《数仓流程规范V1.0

5.1. 完整性

完整性是指数据信息是否缺失,信息缺失分为:记录缺失,字段缺失

  • 记录缺失

记录缺失是指数据的记录数丢失,如:100万条变成90万条数据问题。

  • 字段缺失

字段缺失是指表数据记录中缺少某个字段数据。

5.2. 准确性

是指数据仓库【源】到【目标】、【源】到【可视化】整个过程的数据准确性

a) 数据处理后不存在处理逻辑BUG,导致数据不准确。

b) 数据中记录的信息和数据是准确的,不存在异常或者错误的信息。

5.3. 一致性

数据一致性可分为:业务一致性,数据一致性

  • 业务一致性

是指业务指标分支,对于同一份数据,指标结果必须保证一致性。

  • 数据一致性

是指数据仓库数据统一数据格式、数据处理后数据致是一致

如:相同字段数据类型、格式不一样、字段错位;数据处理后变成乱码等问题。

5.4. 及时性

及时性分为:任务及时性,数据及时性,报表及时性

  • 任务及时性

任务在合理的预估工期内按质量完成任务

  • 数据及时性

对外服务的数据需要在8点之前将任务数据跑出;其它API、数据文件则按业务方需求按时出数据;

DW层单个脚本执行时长不能超过2k秒,DM层单个脚本执行时长不能超过1K秒。

  • 报表及时性

对外服务的报表数据打开页面响应时长不超过3秒,明细数据除外但需要满足业务方需求。

注:展示在《数据报表平台》、《数据分析系统》上的指标录入《元数据管理平台》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

离线数仓经验之谈三-数仓流程规范 的相关文章

  • Flink实战之实时风控规则引擎

    问题导读 1 怎样构建一个风控业务架构 2 风控规则模型有哪些 3 怎样实现Flink CEP 动态更新 一 项目背景 目前钱大妈基于云原生大数据组件 DataWorks MaxCompute Flink Hologres 构建了离线和实时
  • 数据中台-让数据用起来-7

    文章目录 第七章 数据体系建设 7 1 数体系规划 7 2 贴源数据层建设 全域数据统一存储 7 2 1 相关概念 7 2 2 贴源数据表设计 7 2 3 贴源数据表实现 7 3统一数仓层建设 标准化的数据底座 7 3 1 相关概念 7 3
  • hive中判断一个字符串是否包含另一个子串的四种方法,sql中也可用

    hive中判断一个字符串是否包含另一个子串的四种方法 如果你有一个数据需求 需要从一个字段中 判断是否有一个字符串 你该怎么做 一 方法1 like和rlike 最能想到的方法 用like或者rlike select i want to t
  • 离线数仓经验之谈三-数仓流程规范

    数仓流程规范 目录 1 目的 2 适用范围 3 总体流程 3 1 ETL开发流程 3 1 1 需求分析 3 1 2 数据来源与数据探查 3 1 3 数据模型设计 3 1 4 ETL开发 3 1 5 测试 3 1 6 ETL上线 3 1 7
  • Hive Sql 最强最完整学习笔记

    一 DDL语句 数据定义语句 对数据库的操作 包含创建 修改数据库 对数据表的操作 分为内部表及外部表 分区表和分桶表 二 DQL语句 数据查询语句 单表查询 关联查询 hive函数 包含聚合函数 条件函数 日期函数 字符串函数等 行转列及
  • Hudi 基础入门篇

    Hudi 诞生 Apache Hudi由Uber开发并开源 该项目在2016年开始开发 并于2017年开源 2019年1月进入 Apache 孵化器 且2020年6月称为Apache 顶级项目 目前最新版本 0 9 0版本 Hudi 一开始
  • Hive【Hive(一)DDL】

    前置准备 需要启动 Hadoop 集群 因为我们 Hive 是在 Hadoop 集群之上运行的 从DataGrip 或者其他外部终端连接 Hive 需要先打开 Hive 的 metastore 进程和 hiveserver2 进程 meta
  • benchmark TPC-H postgreSQL

    写在前面 个人对TPCH benchma的理解 我接到这个任务的时候 描述是这样的 呀 用benchMarke生成TPC H然后测试一下 我第一反应就是benchMark是什么 TPCH是什么 现在把这个弄完一遍后来说一下我的理解 首先什么
  • Databend 设计概述

    Databend 是一个开源的 完全面向云架构的新式数仓 它提供快速的弹性扩展能力 并结合云的弹性 简单性和低成本 使 Data Cloud 构建变得更加容易 Databend 把数据存储在像 AWS S3 Azure Blob 这些云上的
  • Hive中如何定位数据倾斜

    1 概述 在hive中执行sql任务时 当任务在reduce阶段一直卡在99 时 很有可能出现了数据倾斜 这个时候如果我们 的sql很长 需要判断出是哪段sql导致的数据倾斜 才便于我们解决问题 2 定位数据倾斜 下面以一条sql为例子 记
  • Hive千亿级数据倾斜解决方案

    数据倾斜问题剖析 数据倾斜是分布式系统不可避免的问题 任何分布式系统都有几率发生数据倾斜 但有些小伙伴在平时工作中感知不是很明显 这里要注意本篇文章的标题 千亿级数据 为什么说千亿级 因为如果一个任务的数据量只有几百万 它即使发生了数据倾斜
  • 数仓分层理论

    数据仓库 在实际工作中 数仓分层 元数据管理 数据质量管理一直是一个持续优化的过程 我们公司业务也是在持续的做数仓的优化工作 在数据治理这方面还是欠缺很多的经验的 下面先简单整理了一下第一个理论部分的相关笔记 数据仓库理论 数据仓库四大特征
  • clickhouse导入数据 DBeaver大坑

    测试数据有一亿条需要导入数据库 使用DBeaver自带导入数据功能 结果放置一晚才导入一千万条 估计导入设置有问题 于是寻找合适方式 记录如下 首先将待导入的csv数据表45G 传输到clickhouse所在的服务器 在数据库中提前建好表
  • GBase 8a 问题处理-集群管理节点无法正常启动

    问题版本 GBase 8a V8 6 2 43 R20 问题简述 在进行迁移工作的数据导入之后 启动集群所有管理节点一直不能正常启动 通过命令service gcware stop 也不能停止 报错信息 gcadmin 报错 Could n
  • Hadoop 之上的数据建模 - Data Vault 2.0

    对比传统的基于 RDBMS 之上的数据仓库和商业智能项目 尝试着说说 Hadoop 之上的数据仓库 从ETL 数据存储 到分析展现 重点围绕数据建模方面做分析 因为这是本文的重点 介绍一份新的数据建模方式 Data Vault 2 0 ET
  • 初学MaxCompute

    MaxComputer是阿里云提供的一种全新的大数据计算服务 其具备更高效的计算及存储能力 本人的理解就是一个类似于HBase Hive的云上的数据仓库 参考官方文档系列 https yq aliyun com articles 85595
  • DTCC 2023丨云原生环境下,需要什么样的 ETL 方案?

    2023年8月16日 18日 第14届中国数据库技术大会 DTCC 2023 于北京隆重召开 拓数派受邀参与本次大会 PieCloudDB 技术专家邱培峰在大会做了 云原生虚拟数仓 PieCloudDB ETL 方案设计与实现 的主题演讲
  • 数据仓库灵魂30问之数仓基础理念理解

    主题 主题是一个抽象概念 是在较高层次上将数据综合 归类并进行分析利用的抽象 每一个主题都对应一个宏观的分析领域 在实际上 每一个主题对应这个分析领域的所有的分析对象 比如销售主题对应所有和销售这个领域有关的数据 主题域 主题域通常是联系较
  • 3. ClickHouse数据类型和表结构

    3 1 数据类型 整数类型 整数类型有Int8 Int16 Int32 Int64 分别表示8位 16位 32位和64位有符号整数 适用场景 存储整数值 如年龄 数量等 浮点类型 浮点类型有Float32和Float64 分别表示32位和6
  • ClickHouse进阶(十六):clickhouse优化-表优化

    进入正文前 感谢宝子们订阅专题 点赞 评论 收藏 关注IT贫道 获取高质量博客内容 个人主页 含各种IT体系技术 IT贫道 大数据OLAP体系技术栈 Apache Doris Kerberos安全认证 CSDN博客 订阅 拥抱独家专题 你的

随机推荐

  • python3-常用方法和函数总结(字符串)

    方法与函数的差别 调用方式 作用域 方法 对象 方法名 不释放空间 函数 函数名 自动释放空间 字符串常用函数与方法 函数 方法 说明 举例 capitalize 方法 将首字母变为大写 非首字母变为小写 str hEllo print s
  • UE4 DDC共享

    本人用的是源码引擎编译的 内网使用DDC 先创建一个共享文件夹 这个文件夹来保存共享资源 修改引擎的baseengine ini cpp DerivedDataBackendGraph Shared Type FileSystem Read
  • 栈内存与堆内存的区别

    栈内存和堆内存都是计算机中用于存储数据的内存区域 它们之间的主要区别在于 存储方式 栈内存采用 先进后出 的存储方式 而堆内存采用随机存储的方式 空间大小 栈内存的空间大小通常比堆内存的空间大小要小得多 生命周期 栈内存的生命周期比堆内存的
  • 使用Kotlin做一个简单的HTML构造器

    最近在学习Kotlin 看到了Kotlin Koans上面有一个HTML构造器的例子很有趣 今天来为大家介绍一下 最后实现的效果类似Groovy 标记模板或者Gradle脚本 就像下面 这是一个Groovy标记模板 这样的 html lan
  • Linux 下查看进程运行时长

    因为有一个Java程序运行中会持续输出大量的日志文件 可能导致磁盘空间不足 为了规避这个风险 需要根据程序运行时长估算磁盘使用量 1 查看进程的PID ps ef grep java 2 指定进程查看运行时长 PID ps o etime
  • SpringBoot优化

    一 SpringBoot全局异常处理 任何项目发生异常是不可避免的 使用全局异常捕获发生的异常是十分必要的 SpringBoot框架对全局异常捕 获提供了很好的支持 并且操作非常简单 我们只需要创建一个类和一个方法 并添加两个注解 Cont
  • LSTM分类模型

    LSTM文本分类模型 本文主要固定一个文本分类的流程 分为三个部分 数据处理 对分类文本数据集做简单的预处理 模型数据准备 处理上一步的结果 得到模型的输入样本 模型搭建和训练流程 模型使用BiLSTM 训练过程可以使用cpu或者GPU t
  • shell中的for循环的用法(C语言式)

    C语言式的for循环 用法 exp1 exp2 exp3 是三个表达式 其中exp2是判断条件 for循环根据exp2的结果来决定是否继续下一次的循环 statements是循环体语句 可以有一条 也可以有多条 do和done是shell中
  • Kotlin和Java中的IO操作

    Kotlin的特性 1 Kotlin提供了非常多 File Stream Reader Writer的拓展方法 2 使用use拓展自动关闭资源 3 小文件一次性读写操作 一 首先来看看繁琐的JavaIO操作 来读取一个文件 package
  • 有1、2、3、4四个数字,可以组成多少个互不相同且无重复的三位数?都是多少?

    这个题呢 顾名思义 就是说一个三位数的每一位都是1 2 3 4 个位十位百位上的数字不能重复 编程原理很简单 分别定义三个变量代表个位十位百位 然后使用for循环嵌套每一层循环代表一位数 如果个位十位百位都不相同 则输出 程序如下 incl
  • 微信订阅消息模板推送报错47003 data.time.value i,及解决方案

    今天又是枯燥的一天 依然敲着代码 客户有个微信消息推送的需求 找了下官方文档 微信消息推送文档 大致看了一下 需要模板ID和微信后台的小卡片参数名 随即便敲起了代码 首先定义模板类 代码如下 public class Template pr
  • 微信小程序实现一些炫酷的loading动画

    1 实现效果 2 实现原理 伪元素 css3动画 transform 3 实现代码 从上到下 从左到右依次的代码如下
  • 三款记事本替代工具 哪个最好用?

    三款记事本替代工具 哪个最好用 http www sina com cn 2008年08月27日 08 35 IT168 com Windows操作系统中自带了不少的实用小程序 但是它们大都功能简陋 有时无法满足我们的使用 此外还有一些Wi
  • MatplotLib 第二部分

    1 import numpy as np 2 import pandas as pd 3 import matplotlib pyplot as plt 4 5 导入数据 6 df pd read excel d test xlsx 7 p
  • 在VS中使用命令行参数

    在VS工具中 若要运行带有命令行参数的程序 有两种方法 方法一 在命令提示符中输入要运行的exe的文件名和要输入的参数 各参数之间用空格隔开 如exe文件为test exe 则输入 test 参数1 参数2 参数n 注意 exe文件应放在C
  • 我的软件渲染器终于初步完成了~

    记录一个大好事 在 2021年第一个月的上旬 我的软件着色器终于初具雏形了 中间参考了 很多 资料 最初是 知乎上的系列教程 https zhuanlan zhihu com p 141210744 这个教程是基于 OpenGL 右手坐标系
  • 什么是准双向口,双向口?

    C51的说明书上说 Because Ports 1 2 and 3 have fixed internal pullups they are sometimes called quasi bidirectional ports When c
  • golang 杂技

    Swap 记录一个骚操作 交换数组的两个元素 package main import fmt func main m int 1 2 Swap m 0 1 fmt Println m 2 1 func Swap i int a b int
  • C语言方波转换正弦波,方波转换成正弦波电路

    方波转换成正弦波电路 即利用RDD104可选的4各十进制CMOS除法器和一个MSFS5 开关电容滤波器来构建一个双芯片 失真率为0 2 的正弦波源 RDD104有两个引脚 可以从四个除法器divide by 10 divide by 100
  • 离线数仓经验之谈三-数仓流程规范

    数仓流程规范 目录 1 目的 2 适用范围 3 总体流程 3 1 ETL开发流程 3 1 1 需求分析 3 1 2 数据来源与数据探查 3 1 3 数据模型设计 3 1 4 ETL开发 3 1 5 测试 3 1 6 ETL上线 3 1 7