2023企业级数仓建设概要

2023-11-13

一、前言

1.1 背景

无忧搬家数据以前很多都是数仓同学从业务库负责接入数据至ods层,然后就由各个下游分析师取ods贴源层数据然后进行取数计算分析,数仓这边缺乏沉淀公共层数据,从而有以下问题:

 

  1. 直接从ods贴源层取数据,业务研发侧一改造则下游链路级联影响改动很大

  2. 各数据分析下游从源头贴源层就直接各自依赖计算,数据链路十分零散不好管理

  3. 贴源层数据与业务侧保持一致,存在业务侧数据质量问题导致污染各数据下游风险

  4. 数据指标缺乏公共层沉淀,各下游数据分析重复计算资源浪费

1.2 解决方案

基于以上的背景,为提高数据的易用性和复用性、减少数据冗余、提高数据产出效率,数仓开发这边协同调研并结合下游BI需求,搭建无忧搬家主题域公共层数仓模型,包含无忧搬家订单主题、无忧搬家小哥主题等等,现在无忧搬家主题域沉淀了数仓公共层以后,以上问题可以得到有效缓解,下游能依赖数仓公共层(dwb&dws) 的任务则直接优先依赖使用该层级表,这样可以做到

  1. 尽可能地屏蔽业务侧改造对下游的直接影响,提升下游数据分析的稳定性

  2. 提效BI同学和运营同学的数据分析需求,提升数据的易用性和复用性、提高数据链路产出效率

  3. 公共层表沉淀了核心基础字段供下游使用,公共通用的基础指标和字段避免了下游重复计算

  4. 承担起数据质量保障环节,在关键核心表设计 大禹 数据治理平台监控规则告警及熔断机制

  5. 收敛了数据任务分散情况,优化数据链路,构建良好的血缘关系和数据架构

二、数仓建设

讲完上面的背景和解决方案,接下来就来分享下无忧搬家数仓建设的实际落地过程,数仓建设这个对于数仓开发工程师来说是必备的能力,比如当你面临着一个新业务的开启,就需要从0到1开始搭建数据仓库或者数据集市,这时候就要考虑数据如何组织和设计才能使下游数据分析团队提效以及增强数仓模型的健壮性。

2.1 数仓概述

数据仓库具有面向主题的特性,那么就会有主题的概念,同时,数仓建设是遵循纵向分层开发,横向划分主题域设计,遵循以下这个架构图,我们就可以以类似二维图清晰地定位出数据,这也从宏观上体现了数据资产中的数据组织。

2.2 建设步骤

2.2.1 业务调研

数仓开发是承上对接业务研发侧&承下对接数据分析侧,在数仓建设前期要对上游业务过程和对下游数据分析指标体系有所了解和熟知,然后拉齐上下游沟通数据口径和梳理设计数仓表搭建。

无忧搬家的整体的业务流程

先是邀约部门针对获取到的已有线索,邀约感兴趣成为平台搬家小哥的成员,然后来到货拉拉各城市的培训点进行面试,然后注册认证并交保证金成为我们平台的一位搬家小哥,搬家小哥也会有角色,比如小哥队长和小哥队员等,成为搬家小哥后就可以开始接单和做单了,当然搬家小哥由于各种原因也可以从平台退保证金之后退出平台,这是搬家小哥的大致业务过程。对于用户而言,下无忧搬家单其实跟下货运单无过多差别,货运单跟无忧搬家单的区别就在于后者会提供搬运服务且参与对象多了搬家小哥这个主体。

2.2.2 主题域划分

数仓主题域:主题域通常是联系较为紧密的数据主题的集合,根据业务需求分析的视角进行划分抽象归类。

划分方法:主题域划分的方法一般有几种

  • 要么按照业务过程来划分,一个业务过程抽象出一个主题域,比如业务系统中的商品、交易、物流等

  • 要么按照业务部门来划分,一个业务部门抽象出一个主题域,比如中台部门、业务运营部门、供应链部门等

  • 要么按照业务系统来划分,一个业务系统抽象出一个主题域,比如搬家系统、erp系统 等

无忧搬家业务的数仓建设项目,是一个面向搬家业务部门级的数据集市,因为其业务特性和定位,无忧搬家是公司业务中一个独立的业务线,所对应的业务系统和数据库也是跟其他系统独立开的,比如无忧搬家订单数据没有整合到货运交易订单中,以及搬家小哥这个角色在货运整体业务线中也不存在该实体,那么这时候采用上面第3点划分方法,在已有企业级数仓中,按照业务系统来划分,新增一个无忧搬家主题域,就不会在建设过程中出现一些‘扯皮’操作,出现数据边界归属问题。

小结:主题域的划分一般比较谨慎,一旦定下来了避免频繁变动,虽然数仓建设是迭代建设的,不能保证一次性初始化好,但我们的主题域划分和主题划分要尽可能地涵盖企业的所有业务,以及在新业务进来时能够无影响地被包含进来和可扩展主题域和主题,企业级数仓做主题划分和主题域划分,建议还是要站在全局的视角来看,然后先划分出主题域,再接着在主题域里面划分出各个主题,比如几个核心大域,货运交易订单域、货运用户域、货运司机域

2.2.3 主题划分

数仓主题:是在较高层次上将企业生产上的各个系统中某一分析对象的数据进行整合、归类并分析的一种范围,属于一个抽象概念,简单点说每一个主题对应一个宏观分析领域。

划分方法:说白了主要就是要识别出分析对象主体,比如上面的主题域划分完了后就产生一个搬家主题域,如果把搬家分析作为一个分析领域,那么‘搬家分析’所涉及到的主要分析对象就有用户、订单、搬运工 等,则数仓的主题就可以划分为订单主题、搬运工主题 等下游数据分析师关注度高的数据主题聚焦分析。

2.2.4 输出总线矩阵

即业务过程和维度,组建成的矩阵。

输出总线矩阵

2.2.5 数仓分层设计模型表开发

数仓分层的每一层建设都有其专属的职责和侧重点,数仓分层设计很重要,但如何分层以及命名其实没有固定的标准,各层之前的职责在各行业和公司也各有理解和应用,我建议是无需深究概念,不追究千篇一律都一致,但要知其各层主要职责划分和按公司内部约定好的规范应用遵守。

货拉拉的数仓分层设计

  • 「ODS贴源数据层」:主要同步业务库数据与其保持一致,不做数据清洗动作

  • 「DWD明细数据层」:存储各个单一业务过程的明细数据,采用表视图方式,对ODS层数据清洗数据清洗和数仓规范化,降低存储成本,并给上下游留下了改造兼容的缓冲层

  • 「DWB基础宽表层」:此层主要采用宽表思路,用来做主题基础明细宽表,面向主题把不同业务过程的DWD明细表和视图关联起来做数据横向整合,结合下游数据指标分析做打标签化,沉淀指标复杂口径逻辑

  • 「DWS轻度汇总层」:存放同主题业务下的通用汇总数据,这一层通常是抽象出一些通用指标和原子指标,会涉及复杂的数据逻辑计算而得出一些公共通用指标

无忧搬家主题域的模型表分层设计架构图

健壮性评估

当后续搬家主题域业务新增,还可以轻松地扩展出其他主题,毕竟按照上面的划分法,搬家的数据基本都划分在搬家主题域,剩下的就是搬家有新业务进来时扩展新主题或包含进已有主题。

模型表开发举例讲解

表名:无忧搬家订单费用基础宽表

设计:把dwd费用明细表,纵表打横成为横表(宽表) ,屏蔽各个type费用项对应的映射关系取值,统一由数仓来做解析,提升下游对费用明细数据的易用性。

做法:收敛粒度到order_id每笔订单,对应各自的费用项,并处理出一个各费用项的拼接标识去重数组,使得下游使用时可以区分出这笔订单到底是没有这个费用项还是这笔费用项本来值就为0。

优势:提升了数据易用性,收敛了数据量。

2.2.6 数据质量保障

传统数据开发流程中,往往是大数据调度平台线上执行脚本代码后,大数据集群计算再写入数据表,我们只根据数据任务的执行状态(成功or失败)来判断数据任务是否成功产出,但数据质量却没有得到保障,比如数据任务执行成功但数据未写入,比如字段数据错位,比如不合理的数据空值插入等等各种数据质量问题,所以我们有必要增加一个环节-数据质量监控 ,辅助我们做到故障升级前及时感知,故障升级后快速定位。

监控规则设计思路 & 实践

以下思路最终形成的实现逻辑借助大数据内部自研数据治理平台-大禹 来配置监控规则及时感知业务数据以及熔断数据质量避免污染传递下游。

  • 表数据量波动监控

监控数据量波动情况有助于我们识别出暴涨暴跌场景。

比如:全量表数据量一般只可能大于上一天数据量,跌了or等于都可能代表着数据异常了。

  • 表字段枚举值值域监控

枚举值值域监控主要针对的是业务侧改动场景,改动频率不高但设计这类监控可以让我们及时感知到业务侧的数据变动调整。

比如:主订单表的order_status主订单状态枚举值 和 搬运订单表的order_status搬运订单状态枚举值,监控业务侧改动场景。

  • 表核心指标异常监控

通过一些数据场景来监控数据是否异常。

比如:一般订单主表内每笔订单都会携带地理位置信息的addr_info字段json数组数据,通过对addr_info解析出来的地理位置信息数据设计null校值验,从而就能发现无忧搬家地理位置解析表的地理位置信息数据异常。

  • 表多源join抽样监控

因为宽表层会有较多的join场景和字段很多,所以可以按每个join子查询抽样监控一两个关键指标。

三、结语

自此无忧搬家主题域数据仓库建设目前已介绍完毕。无忧搬家主题域目前建设了无忧搬家订单主题&无忧搬家小哥主题,从依赖到 数仓 公共层(dwb&dws)下游链路来看:

目前就覆盖满足了下游数据分析团队的上千个数据分析任务,数据链路不再像以前各自分散不好管理,且 业务 改造也不会直接影响到 数据分析师 们的任务,由数仓公共层数据模型为其保障了数据质量,以更加良好的数据模型和数据架构赋能业务,助力货拉拉业务更好更快的向前发展。

当然,无忧搬家公共层模型现在还不算完善,这也不止无忧搬家业务线,货运业务线的其他主题域公共层模型也需要持续迭代升级,以及历史存量不规范和无效任务治理,数据质量监控设计还没完全覆盖,我们会在未来继续迭代,夯实数仓公共层模型,沉淀好数据资产。

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

2023企业级数仓建设概要 的相关文章

  • Ubuntu下ftp服务器配置方法 (高级配置)

    Ubuntu下ftp服务器配置方法 Ubuntu自 带的FTP服务器是vsftpd 1 安装vsftpd Ubuntu安装软件倒不是件困难的事 输入 sudo apt get install vsftpd 安装了之后会在 home 下建立一
  • 《啥是佩奇》,python程序员眼中的佩琦

    啥是佩奇 从前天晚上开始 朋友圈就被这条广告刷屏 也许很多人 看完这个短片也有这样的想法 没错 佩奇是容易被忽略的亲情 明明是一个广告 都能这么吸引人 让人笑中带泪 泪中含笑的 告诉爷爷 你需要什么东西 爷爷给你准备 佩奇 什么是佩奇呀 这
  • Neo4j:入门基础(二)之导入CSV文件

    CSV文件 1 csv文件推荐是utf 8编码 否则会造成中文乱码 2 csv文件默认需要放在import目录下 如需从远程或者其他本地目录导入 则需要修改conf neo4j conf load csv时文件路径 默认需要放在 NEO4J

随机推荐

  • Cesium 之加载ArcGIS Server 4490切片服务(含orgin -400 400)

    对于ArcGIS Server发布的切片服务 在地理坐标系中Cesium默认只支持wgs84的4326坐标系 无法通过ArcGisMapServerImageryProvider直接加载CGCS2000的4490坐标系 虽然可以使用WebM
  • openGL之API学习(六十七)glTexParameter glTextureParameter

    设置纹理对象的参数 这两个函数其实是一个功能 void glTexParameterf GLenum target GLenum pname GLfloat param target Specifies the target to whic
  • DC-7靶机渗透测试

    文章目录 DC 7靶机渗透测试 1 信息收集 1 1 主机扫描 1 2 端口扫描 1 3 目录扫描 2 SSH远程登录 3 漏洞发现 4 漏洞利用 5 提权 DC 7靶机渗透测试 1 信息收集 1 1 主机扫描 netdiscover r
  • 数据结构 - 栈 与 队列 - (java)

    前言 本篇介绍栈和队列 了解栈有顺序栈和链式栈 队列底层是双链表实现的 单链表也可以实现队列 栈和队列的相互实现和循环队列 如有错误 请在评论区指正 让我们一起交流 共同进步 文章目录 前言 1 栈的认识 1 1 栈的使用 栈实现队列 2
  • 模拟电路设计(6)--- J-FET之实际使用注意事项

    上篇我们分析了J FET的输出 转移特性曲线 今天我们来说说J FET的实际使用注意事项 J FET的常用参数 J FET的等效电路数学模型 准确来说 FET是一个非线性器件 但对交流小信号来说 它可以等效成一个线性电路 该模型可用于小信号
  • Jupyter notebook工作空间默认路径的设置

    Jupyter notebook 安装后 启动后 默认的工作空间是当前用户目录 为了方便对文档进行管理 往往需要自行设置工作空间 修改配置文件 打开Anaconda的cmd 如果在windows中直接安装 就开windows的 在cmd中输
  • vue路由跳转时定位到页面顶部的方法汇总

    背景 在做vue项目时 发现路由跳转之后 页面默认停留在当前浏览的位置 但是很多时候我们想要的是路由跳转之后 页面重新定位到顶部 下面介绍一下可以实现的方法 方式一 在main js中添加以下代码即可 router beforeEach t
  • 【华为OD机试真题 Java】数字序列比大小

    006 数字序列比大小 前言 本专栏将持续更新互联网大厂机试真题 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于大厂机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda e
  • 常用矩阵名词解释

    共轭矩阵 Hermite阵中每一个第i行第j列的元素都与第j行第i列的元素的共轭相等 然而矩阵A的共轭矩阵并非Hermite阵 自共轭矩阵是矩阵本身先转置再把矩阵中每个元素取共轭得到的矩阵 a bi的共轭是a bi 单位矩阵 主对角线上的元
  • 解决mysql一段时间后不能启动

    问题 同样的问题其实已经发生过好几次 就是本地计算机上的mysql服务器突然无法启动 在控制面板中尝试启动服务的时候报错 本地计算上的mysql服务启动后停止 某些服务在未由其他服务或程序启动时将自动停止 以前曾经 解决 过这个问题 加引号
  • webcore简易教程(一)

    简介 tms 公司出品 2018年推出 现在最新的1 3版本 原理 pas转换成html js pas2js 特点 可以直接在各种浏览器上运行 优点 1 生成js 跨平台 2 可以使用fnc组件 功能扩展较好 3 chrome浏览器上可以调
  • Python复习的知识点

    python语言程序设计基础的复习笔记 第一章内容 1 在python语言中解释和编译的区别 编译 编译是将源代码转换成目标代码的过程 源代码是计算机高级语言的代码 而目标代码则是机器语言的代码 执行编译的计算机程序称为编译器 Compil
  • T1 载波速率 为什么是1.544Mbps?

    这是大二时上的一节网络通信技术基础上学的内容 期末时却没能写出来 一直觉得有些遗憾 所以写在博客的第一篇 希望自己可以激励自己 知错则改 不断进步 分割线 人的话音信道在4Mhz之内 根据奈奎斯特采样定理按照2倍8MHz采样 并128级量化
  • 大工17春计算机组成原理,大工17春《计算机组成原理》在线作业3

    谋学网http doc wendoc com 一 单选题 共 10 道试题 共 50 分 V 1 是构成控制信号序列的最小单位 A 微程序 B 微操作命令 C 微指令 D 控制存储器 2 寻址方式中的寄存器间接寻址 其操作数处在 A 通用寄
  • win10打印机终结点映射器_解决win8打印机提示“终结点映射器中没有更多的终结点可用”的方法...

    打印机是我们办公是必备的一个设备 因此想必大家在办公室都给电脑安装了打印机吧 最近有位Win8用户在给电脑安装打印机的时候遇到了一个错误提示 虽然成功的安装了打印机 但是系统却提示 终结点映射器中没有更多的终结点可用 遇到这样的错误提示之后
  • 杂记——11.eclipse中更改Tomcat的配置

    这篇文章讲一下在eclipse中如何更改Tomcat的相关配置 第一步 打开eclipse 第二步 点击下方视窗的Servers 第三步 双击Tomcat 然后如下图所示 第四步 设置Tomcat的启动时间 第五步 启动Tomcat
  • gitee同一台电脑使用多个账号的问题

    官方文档 https gitee com help articles 4238 article header0 目录 一 通过 https ssh 协议推拉代码 二 通过 https 推拉代码但是存在多个账号的问题 三 通过 ssh 推拉代
  • python3 判断列表是一个空列表

    python3 判断空列表 python3 有个判断列表是否为空的需求 试了好多方式 比如 a if a is not None COMMAND a if a 0 is None COMMAND 各种乱七八糟的逻辑 老是无法满足 其实很简单
  • Unity3D笔记第三天——GUI

    GUI GUI是Graphical User Interface的缩写 Unity的图形界面系统能容易和快速创建出各种交互界面 与传统的方法 创建GUI对象 标出位置 再写对应的事件函数不同 只需要用很少的代码 就可以把这些工作搞定 原理是
  • 2023企业级数仓建设概要

    一 前言 1 1 背景 无忧搬家数据以前很多都是数仓同学从业务库负责接入数据至ods层 然后就由各个下游分析师取ods贴源层数据然后进行取数计算分析 数仓这边缺乏沉淀公共层数据 从而有以下问题 直接从ods贴源层取数据 业务研发侧一改造则下