离线数仓和bi开发的实践和思考

  • 背景
  • 什么是数据仓库
  • 分层设计
  • 维度建模
  • 低代码平台做什么?
  • 理想vs现实,数仓实践中踩坑以及思考

背景

笔者在来唯品会之前主要的工作内容主要是依托于公司自研的bi低代码平台进行报表、图表开发工作,在此基础上做产品化的探索。因此在离线数仓建模和开发有过一些实践,也有一些思考,在此尝试做一点简要的梳理。

什么是数据仓库

首先先简单说明一下,什么是数据仓库。数据仓库是一个数据存储的集合,其创建目的是为了企业经营数据分析以及决策支持。数据仓库的输入是企业各个应用系统产生的数据,通过特定的范式的模型对企业数据进行筛选,整合和存储,再提供给数据应用。可以为企业提供bi能力,目的是更好的控制和指导企业的经营过程。
数仓的架构有Bill Inmon范式和Ralph Kimball范式,在以bi数据报表为最终应用的中小型数据项目上,通常采用Kimball范式作为开发指导模型,不过通常会加多ods层存储业务系统引入的数据,类似一种混合的架构。
Kimball范式

Inmon范式

分层设计

数据引入层(ODS):非结构化数据进行结构化处理,结构数据通常使用离线数据同步的方法全量或者增量同步业务系统的数据,为数据的转换加载做准备。
数据公共层(CDM):1,维度表(DIM),通过业务的梳理,建立一致性的数据分析维度。维度表的统一定义和管理往往是最终项目是否可控的重要因素。2,明细事实表(DWD),基于维度建模,复用关联计算,减少数据扫描。3,公共汇总表(DWS),通常在明细表的基础上进行汇总,构建统一口径的统计指标,建立宽表。
数据应用层(ADS):复杂的,个性化,定制化的计算指标。基于应用的宽表数据组装。

维度建模

如上面所说的,以bi应用出发的建模方式通常采用的Kimball范式,而其逻辑模型为星型模型或者雪花模型。鉴于复杂性控制的考虑,实际开发中我们往往使用星型模型。典型的星型模型的逻辑结构如下图,由一个主题表关联多个维度表,在sql层面通过不同的连接方式以及累加,半累加函数的使用在此基础上出数据,做多维分析。

低代码平台做什么?

基于维度模型,在报表和图表开发的场景中,可以设计ide通过拖拉拽的方式生成模型协议和报表协议。通过引擎解析报表协议元数据动态生成sql,获取数据。以下列出一个模型,协议,报表和动态生成的sql的简单例子。
假设有模型:然后有一个ide接管整个开发流程,ide可以生成主题的元数据,维度元数据,多维模型元数据。
现在的有个报表需求如下图。
那么实施人员就可以通过ide拖拉拽的方法拉取指标和维度,

假设生成这么一份报表协议(只是最简单的示例描述)。

{ “id”:xxx,
“modelid”: 链接多维模型的id,可以拿到表和连接关系,
“reporttype”: “linebar”,
“rows”: [
{
“code”: “xxx”,
“dimid”:“链接维度表的元数据”
“elementname”: “yearmonth”,
“alias”: “年月”
}
],
“indexs”: [
{
“code”: “xxx”,
“factid”:“链接主题表的元数据”
“elementname”: “index”,
“aggregator”: “sum”,
“alias”: “指标”
}
]
}
],
“options”: {前端交互相关的参数协议,比如时间控件的定义},
“echartsoption”: {echarts图表相关的参数}
}
然后在前端请求报表的时候,引擎通过解析报表协议,结合模型和主题维度等元数据以及本次请求前端的传参,动态生成本次请求的sql(基于postgres),类似

select
dim_date.yearmonth as 年月,
sum(fact.index) as 指标
from fact factleft join dim_date dim_date on fact.date=dim_date.datewhere to_char(dim_date.date,'yyyy')='2021'group by dim_date.yearmonth

用这个sql取数,然后拼接返回数据的协议,前端渲染到echarts折线图组件中
这样一个流程,就实现了bi报表的低代码开发。

理想vs现实,数仓实践中踩坑以及思考

1,身处下游的痛苦
离线数仓不可能记录业务系统的所有的操作和操作结果,数据同步只能是周期性的同步数据的快照。如果业务系统出现类似ABA这种问题,这种情况在业务系统影响效果的扩散会导致数据在数据应用里逻辑无法自洽。而排查过程苦不堪言,最终往往帮忙揪出了业务系统藏得比较深的bug。因此业务系统的完善健壮往往是数据仓库能成功的关键因素。

2,olap数据库选型
之前公司数据库的选型用的postgres,号称最先进的开源数据库。从我入职唯品会之后用mysql的对比,还是可以感觉到postgres某些性能方面的强悍。在一些不大的项目上,pg可以撸平etl工作和olap分析。但是数据量一大,再用pg就是小马拉大车有点勉强了。并且在业务上经常遇到一种场景,就是计算指标的同比环比的情况。用上述多维模型和报表引擎这套东西很难直接处理,比如,业务系统同步过来的数据以某些维度看有本年数据但是没有上年数据,这个种数据缺失报表展示经常就无法自洽。而这种情况如果不手撸存储过程出报表那就只能在etl阶段用笛卡尔积先展开所有的维度值,然后再对应update相应的指标,就会导致表数据量膨胀得可怕,一个报表几分钟刷不出来。但是如果把模型拆成好几个,又失去了统一建模的意义。这个一直是个棘手的问题。

3,报表引擎能力边界以及无代码的思考
之前吐槽过平台报表引擎越来越复杂,用报表引擎拖拉拽方法配出一个能用的报表的复杂程度和心智负担不低于直接用sql自己撸一个,大佬说报表引擎并不是只是为了简化开发过程,也有帮助沉淀业务模型的作用。结合很久以前就和小伙伴讨论过,无代码平台如果是想包罗万象那最终的结果只能是搞出另一套图灵完备的语言。由此我有个思考,如果只把业务沉淀在静态的多维模型里面,而交互过程交给一个通用的报表引擎,我认为并不能在应对客户刁钻变化的需求和心智负担明显低于手写sql两个方面兼得。而作为平台开发者,认清自己的边界以及小心翼翼的探索针对特定领域能做哪些事情,是一个巨大的挑战。

离线数仓和bi开发的实践和思考相关推荐

  1. 网易严选离线数仓质量建设实践

    做数仓最重要的是什么?一是模型易用性,二是数据质量.模型易用性我们可以通过建模规范.指标管理等方式去实现.而对于数据质量呢?本篇将以严选数仓为例,从建设目标.保障措施.效果评价等几方面探讨数仓质量建设 ...

  2. 【离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计】

    离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计 离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计 一.DWS层设计要点 二.DWS层设计分析 - 1d/nd 1. ...

  3. Kafka、Flink 数据中台实践:事件模型、调度、实时/离线数仓架构之道

    去年年底,网传阿里董事局主席张勇,在阿里内网发帖称"现在阿里的业务发展太慢,要把中台变薄,变得敏捷和快速."此言一出激起千层浪,难道中台概念真成也阿里败也阿里? 有人戏称阿里&qu ...

  4. 基于 Apache Doris 数仓在作业帮的实践

    1 背景 作业帮大数据团队主要负责建设公司级数仓,向公司各个重要产品线(拉新.教学.BI等)提供面向业务的数据信息,如到课时长.答题情况等.在过去半年多时间内,我们基于Apache Doris,构建了 ...

  5. 离线数仓和实时数仓的区别

    作者介绍 @车云祥 大宇无限  数据产品负责人 主要负责全公司底层数据治理,构建统一指标体系: 主导 BI 系统.用户画像系统.广告投放平台.广告流量优化等设计工作: 推动 Snaptube.Lark ...

  6. 离线数仓(1):什么是数据仓库

    目录 0. 相关文章链接 1. 数据仓库概念 2. 数仓仓库为何而来 2.1. 操作型记录的保存 2.2. 分析型决策的制定 2.3. OLTP环境开展分析可行吗? 2.4. 数据仓库的构建 3. 数 ...

  7. 看这篇就明白大数据实时数仓、离线数仓、数据湖之间的关系

    数仓架构演变 20世纪70年代,MIT(麻省理工)的研究员致力于研究一种优化的技术架构,该架构试图将业务处理系统和分析系统分开,即将业务处理和分析处理分为不同层次,针对各自的特点采取不同的架构设计原则 ...

  8. 大数据-案例-离线数仓-在线教育:MySQL(业务数据)-ETL(Sqoop)->Hive数仓【ODS层-数据清洗->DW层(DWD-统计分析->DWS)】-导出(Sqoop)->MySQL->可视化

    一.商业BI系统概述 商业智能系统,通常简称为商业智能系统,是商业智能软件的简称,是为提高企业经营绩效而采用的一系列方法.技术和软件的总和.通常被理解为将企业中的现有数据转换为知识并帮助企业做出明智的 ...

  9. 离线数仓与实时数仓的比较

    01数仓架构演变 20世纪70年代,MIT(麻省理工)的研究员致力于研究一种优化的技术架构,该架构试图将业务处理系统和分析系统分开,即将业务处理和分析处理分为不同层次,针对各自的特点采取不同的架构设计 ...

最新文章

  1. 隐马尔可夫模型(Hidden Markov Model,HMM)是什么?隐马尔可夫模型(Hidden Markov Model,HMM)的三个基本问题又是什么?
  2. plc原理及应用_施耐德PLC应用技术
  3. 领域驱动设计,盒马技术团队这么做
  4. java由大到小输出整数xvz_【视频+图文】Java经典基础练习题(三):输入3个整数,并将其由小到大输出...
  5. 三星为什么要卖芯片?手机干不过华为小米,半导体好挣钱!
  6. linux pcie命令,setpci命令_Linux setpci 命令用法详解:查询和配置PCI设备的使用工具...
  7. set集合以及知识点补充
  8. 成考期末计算机组成原理,2020年10月自考02318计算机组成原理真题及答案
  9. Visual Studio Code(VS code)简单使用入门以及常用快捷键
  10. 精通JavaScript系列目录
  11. stagefright框架
  12. 走,上高架,看看Momenta“飞轮式L4”的“微操”技巧
  13. Ceph学习——客户端读写操作分析
  14. 苹果所用应用打不开怎么办?论浮标有多重要?
  15. OneDrive不能上了?DNS被污染,解决方法很简单
  16. 最好云计算机,教你怎么挑选最合适自己的云电脑
  17. 如何给电脑重装系统--一点通
  18. openstack项目中遇到的各种问题总结 其一(问题多多)
  19. 途牛:一直被唱衰,就是没倒下
  20. JS中RHS引用和LHS引用的区别

热门文章

  1. WordPress 头像修改【转载】
  2. Matlab科研绘图颜色补充(特别篇3)—320种中国传统颜色
  3. java中QQ号、手机号、邮箱号的正则表达式
  4. 十大最佳Leap Motion体感控制器应用
  5. 狂神说网站免费获取500K币
  6. 百密一疏——特殊的日子
  7. 机器如何识别花的种类
  8. 计算机视觉领域中一些人及研究组
  9. 算法导论11--最小生成树电网长度问题
  10. 计算机电缆yjv,电力电缆YJV3*95+2*50