漫谈大数据-基于sparksql的离线数仓

昊昊该干饭了      2022-04-16     609

关键词:

目录

知识补充

离线数仓的分层设计

数据分层 ODS

数据分层 DW

数据分层 APP

数据建模


知识补充

在正式阅读之前,首先需要理解以下基本概念以帮助你更好的了解数据仓库:

  • 业务板块:比数据域更高维度的业务划分方法,适用于庞大的业务系统。
  • 维度:维度建模由Ralph Kimball提出。维度模型主张从分析决策的需求出发构建模型,为分析需求服务。维度是度量的环境,是我们观察业务的角度,用来反映业务的一类属性。属性的集合构成维度,维度也可以称为实体对象。例如,在分析交易过程时,可以通过买家、卖家、商品和时间等维度描述交易发生的环境。
  • 属性(维度属性):维度所包含的表示维度的列称为维度属性。维度属性是查询约束条件、分组和报表标签生成的基本来源,是数据易用性的关键。
  • 度量:在维度建模中,将度量称为事实,将环境描述为维度,维度是用于分析事实所需要的多样环境。度量通常为数值型数据,作为事实逻辑表的事实。
  • 指标:指标分为原子指标和派生指标。原子指标是基于某一业务事件行为下的度量,是业务定义中不可再拆分的指标,是具有明确业务含义的名词,体现明确的业务统计口径和计算逻辑,例如支付金额。
    • 原子指标=业务过程+度量。
    • 派生指标=时间周期+修饰词+原子指标,派生指标可以理解为对原子指标业务统计范围的圈定。
  • 业务限定:统计的业务范围,筛选出符合业务规则的记录(类似于SQL中where后的条件,不包括时间区间)。
  • 统计周期:统计的时间范围,例如最近一天,最近30天等(类似于SQL中where后的时间条件)。
  • 统计粒度:统计分析的对象或视角,定义数据需要汇总的程度,可理解为聚合运算时的分组条件(类似于SQL中的group by的对象)。粒度是维度的一个组合,指明您的统计范围。例如,某个指标是某个卖家在某个省份的成交额,则粒度就是卖家、地区这两个维度的组合。如果您需要统计全表的数据,则粒度为全表。在指定粒度时,您需要充分考虑到业务和维度的关系。统计粒度常作为派生指标的修饰词而存在。

 

离线数仓的分层设计

传统数仓:

数仓为什么要分层呢?

  • 清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
  • 数据血缘追踪:简单来讲一张业务表的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
  • 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
  • 屏蔽原始数据的异常:屏蔽业务的影响,不必改一次业务就需要重新接入数据。

所以我们从理论上先来理解分层:

 我们来做一个抽象,可以把数据仓库分为下面三个层,即:数据运营层、数据仓库层和数据产品层。

数据分层 ODS

ODS全称是Operational Data Store,操作数据存储。

“面向主题”的数据贴源层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的ETL之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。


 

数据分层 DW

这一层是数据仓库的总体,它包含:

  • 公共汇总粒度事实层(DWS):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。

    公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数据。

  • 明细粒度事实层(DWD):以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。

    明细粒度事实层的表通常也被称为逻辑事实表。

数据分层 APP

数据产品层(APP),这一层是提供为数据产品使用的结果数据。

在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在es、mysql等系统中供线上系统使用,也可能会存在 Hive 或者Druid中供数据分析和数据挖掘使用。
 

当然在实际中,根据需要我们还可以扩充层次架构:

数据建模

 首先当然是明确需求:

  • 业务量(DAU),数据量(GB/TB/PB量级),增长率?
  • 用于离线数据分析场景,是否需要支持实时分析?可能涉及复杂查询?需要支持上层报表系统,是否开放给非技术人员使用?
  • 业务部门目前有没有明确的数据需求,半年内是否有数据监测分析和指标统计等需求?
  • 是否有采购商业级产品的预算,是否所以优先使用开源产品?

之后就是考虑成本:这里不做建议

然后考虑规模:

  • 对于未来一段时期内的数据量,需要有大致的评估
  • Oracle RAC支持少量节点集群和scale up场景
  • Hadoop集群可以进行水平扩展(scale out)
  • PG加上proxy 也可以水平分片
  • 除了引擎,外围系统同样需要考虑数据规模
  • 除了数据规模,还需要考虑租户用量

之后就是易用性、运维等等

再之后我们搭建数仓分层和引擎架构:

 相关技术栈:

可以参考下面的技术选型:

 

 那么这样的数据仓库,sparksql有什么优势呢?

sparksql在其中有自己的架构体系:

 

 最后我们来看一个真实的数仓架构:

 

写在最后,数据仓库也是很多表组成的,请永远记住什么是数据仓库?

数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

更多数据仓库的介绍,请移步:

漫谈大数据 - 实时数据仓库以及大厂实际应用_昊昊该干饭了的博客-CSDN博客数据库是面向事务的设计,数据库一般存储在线交易数据, 数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据库是为捕获数据而设计。数据仓库是面向主题设计的,数据仓库存储的一般是历史数据,数据仓库在设计是有意引入冗余,采用反范式的方式来设计,数据仓库是为分析数据而设计。https://blog.csdn.net/qq_52213943/article/details/124132686?spm=1001.2014.3001.5502

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

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

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

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

实时数据仓库的演进

...言:1.实时数仓1.02.实时数仓2.03实时数仓3.0前言:数据处理现状:当前基于Hive的离线数据仓库已经非常成熟,数据中台体系也基本上是围绕离线数仓进行建设。但是随着实时计算引擎的不断发展以及业务对于实时... 查看详情

实时数仓与离线数仓架构对比flink消费流程

...构图:离线数仓:与离线数仓区别:MySQL业务数据采集改用FlinkCDC;FlinkCDC与Maxwell处理方式和Cannal一样通过监控binlog方式(行级别),而Sqoop是通过MR方式处理数据,这种方式太慢日志数据,离线数仓... 查看详情

离线数仓:什么是数据仓库

目录0.相关文章链接1.数据仓库概念2.数仓仓库为何而来2.1.操作型记录的保存2.2.分析型决策的制定2.3.OLTP环境开展分析可行吗?2.4.数据仓库的构建3.数据仓库主要特征3.1.面向主题性3.2.集成性3.3.非易失性3.4.时变性4.数据仓库、... 查看详情

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

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

离线数仓(代码片段)

...kaban概论1.1为什么需要工作流调度系统  1)一个完整的数据分析系统通常都是由大量任务单元组成:    Shell脚本程序,Java程序,MapReduce程序、Hive脚本等  2)各任务单元之间存在时间先后及前后依赖关系  3)为了很... 查看详情

02-开始建表_离线数仓项目(代码片段)

 一. 建表,导数据1.创建库createdatabasegmall; 2.创建表start_log,ods层表droptableifexistsods_start_log;CREATEEXTERNALTABLEods_start_log(`line`string)PARTITIONEDBY(`dt`string)STOREDASINPUTFORMAT‘com.had 查看详情

离线数仓同步数据(代码片段)

第2章离线数仓同步数据2.1用户行为数据同步2.1.1数据通道用户行为数据由Flume从Kafka直接同步到HDFS,由于离线数仓采用Hive的分区表按天统计,所以目标路径要包含一层日期。具体数据流向如下图所示。2.1.2日志消费Flume配... 查看详情

离线数仓中的同步策略flumekafka

离线数仓当中Sqoop采集MySQL中数据同步策略有:增量全量新增及变化特殊;Sqoop怎么处理?where判断日期:新增:where创建时间=当天;全量:where1=1;新增及变化:创建时间or修改时间等于今... 查看详情

大数据数仓项目架构

参考技术A云上数据仓库解决方案:https://www.aliyun.com/solution/datavexpo/datawarehouse离线数仓架构离线数仓特点基于Serverless的云上数据仓库解决方案架构特点实时数仓架构[图片上传失败...(image-ec3d9a-1629814266849)]实时数仓架构特点秒级延... 查看详情

离线数仓搭建_12_dwd层业务数据创建(代码片段)

文章目录13.2DWD层(业务数据)13.2.1评价事实表(事务型事实表)13.2.2订单明细事实表(事务型事实表)13.2.3退单事实表(事务型事实表)13.2.4加购事实表(周期型快照事实表,每日快照࿰... 查看详情

火山引擎dataleap:揭秘字节跳动数据血缘架构演进之路

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群DataLeap是火山引擎数智平台VeDI旗下的大数据研发治理套件产品,帮助用户快速完成数据集成、开发、运维、治理、资产、安全等全套... 查看详情

flume配置项目离线数仓项目(代码片段)

...志.通过selector选择器把这两个日志分开,并且过滤一些空数据.我们先写选择器吧.1.建立一个工程.maven工程<?xmlversion="1.0"encodi 查看详情

数仓系列第11篇:实时数仓

目录导读:1.数据仓库简介2.数据仓库的发展3.数据仓库建设方法论4.数据仓库架构的演变5.实时数仓案例6.实时数仓与离线数仓的对比导读:本文将从数据仓库的简介、经历了怎样的发展、如何建设、架构演变、应用案例... 查看详情

使用docker搭建离线数仓环境(代码片段)

文章目录前言一、Docker安装1.1CentosDocker安装1.2UbuntuDocker安装【推荐】1.3MacOsDocker安装1.4WindowsDocker安装【不推荐】二、容器准备2.1拉取镜像2.2启动并创建容器2.3进入容器三、环境准备3.1安装必要软件3.2配置SSH免密登录3.3设置时区3.4... 查看详情

基于flink构建企业级实时数仓(附项目源码)

离线数仓是大数据技术发展至今最耀眼的明星,然而随着业务需求的不断升级,对于一些延时较高的场景,要把链路延时降低到秒级,就需要基于Flink的实时数仓出马了。企业级实时数仓的应用场景很多,比如... 查看详情

腾讯云官方课:emr数仓全套教程重磅首发

...;学起来腾讯云开发者社区带着干货来了腾讯云×尚硅谷大数据研究院强强联手重磅推出新年第一弹腾讯云EMR数仓教程发布腾讯云开发者社区“公开课”直达:https://mc.tencent.com/JLIcWlY0扫码加入“腾讯云大数据EMR交流群”免费获... 查看详情