数仓入门:数据分析模型、数仓建模、离线实时数仓、Lambda、Kappa、湖仓一体

news2024/9/23 23:24:44

往期推荐

大数据HBase图文简介-CSDN博客

数仓分层ODS、DWD、DWM、DWS、DIM、DM、ADS-CSDN博客

数仓常见名词解析和名词之间的关系-CSDN博客

目录

0. 前言

0.1 浅谈维度建模

0.2 数据分析模型

1. 何为数据仓库

1.1 为什么不直接用业务平台的数据而要建设数仓?

1.2 数据仓库特征

1.3 数据仓库和数据库区别

1.4 以银行业务为例 

2. 数仓架构

2.1 离线数仓架构

2.1.1 数据集市架构

2.1.1.2 独立数据集市

2.1.1.2 从属数据集市

2.1.2 Inmon企业信息工厂架构

2.1.3 Kimball数据仓库架构

2.1.4 混合型数据仓库架构

2.2 实时数仓架构 

2.2.1 Lambda架构

2.2.1.1 传统的Lambda实时开发

2.2.1.2 升级的Lambda实时开发

2.2.2 Kappa架构

Kappa和Lambda对比

2.2.3 数据湖出现原因:批流一体

2.2.3 湖仓一体—数据湖


0. 前言

  1. 1991年,数据仓库之父 比尔·恩门 著书《Building the DataWarehouse》,要求构建数据仓库时,遵循范式建模,即从关系型数据库中提取的范式数据,仍按范式存储到数据仓库中,这样就导致数仓中有很多小表,查询的时候必然会有很多表的关联,极大地影响查询效率和性能。
  2. 1994年,拉尔夫·金博尔 著书《The DataWarehouse Toolkit》,提出维度建模和数据集市的概念维度建模是反范式建模,自下而上,然而这种方式仍有缺点:那就是每个业务平台的数据有各自的数据集市,集市之间数据隔离,存在数据不一致、重复的情况。
  3. 1998-2001年,比尔·恩门派和金博尔派合并,比尔·恩门提出CIF架构:数仓分层,不同层采用不同的建模方式,同时解决了数据不一致和查询效率低的问题。

0.1 浅谈维度建模

维度建模主要面向分析场景,分为维度表和事实表,建模过程和关系型数据库的建表很像,下图中,商家ID、产品ID、时间ID就是不同的维度列,而订单额就是度量值维度+度量值=事实表每个维度列也有自己的维度表

那么基于以上,有如下两种数据分析模型。

0.2 数据分析模型

对比

  • 查询效率:雪花模型有很多小表,看起来更为范式化,但这导致查询时需要关联很多表,查询效率比星型模型低
  • 数据冗余:星型模型的表通常是宽表,伪范式,即表有很多字段,这导致星型模型存在较多的数据冗余

1. 何为数据仓库

  • 数据仓库(Data Warehouse)即是存储历史数据的仓库,简写为DW或DWH
  • 数据仓库的目的是构建面向分析的集成化数据环境(OLAP),为企业提供决策支持
  • 仓库的数据来自各个业务平台,业务平台中的数据形式多种多样,可能是 MySQL等关系数据库里的结构化数据,可能是Word、Excel 文档中的非结构化数据,还可能是 HTML、XML 等自描述的半结构化数据。这些业务数据经过一系列的ETL(抽取、转换、加载),最终以一种统一的格式装载进数据仓库。
  • 数据仓库本身并不“生产”任何数据,也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”而不叫“工厂”的原因。

1.1 为什么不直接用业务平台的数据而要建设数仓?

实际在数仓出现之前,确实是这么做的,但是有很多数据分析的先驱者当时已经发现,简单的直接访问方式很难良好工作,原因如下:

  • 由于安全或其他因素不能直接访问某些业务数据。
  • 业务平台存储的是当前数据,存在于RDBMS,并且数据版本变更很频繁,而大数据需要的是历史数据,读多改少。

  • 各个平台数据存储是隔离的,且数据格式不统一,难以建立、维护、汇总数据。

  • 业务系统的表结构(OLTP)为事务处理性能而优化,有时并不适合查询与分析(OLAP)

  • 有时用户要看到的某些数据字段在数据库中并不存在,是后期聚合处理生成的。

  • 业务平台是跑业务的,本身就占用了一定数据库读写资源,大数据分析再从每个表中频繁读取数据,影响业务平台的性能,不够专业。

1.2 数据仓库特征

  • 面向主题
    传统数据库中,最大的特点是面向应用进行数据的组织,各个业务系统可能是相互分离的。而数据仓库则是面向主题的。主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象
  • 集成性
    通过对分散、独立、异构的数据库数据进行ETL并汇总得到了数据仓库的数据,这样保证了数据仓库内的数据的一致性。 数据仓库中的综合数据不能从原有的数据库系统直接得到。因此在数据进入数据仓库之前,必然要经过统一与综合,这一步是数据仓库建设中最关键、最复杂的一步,需要完成的工作有:
    • 统一源数据中所有矛盾之处,如字段的同名异义、异名同义、单位不统一、字长不一致等等。
    • 进行数据综合和计算。数据仓库中的数据综合工作可以在从原有数据库抽取数据时生成,但许多是在数据仓库内部生成的,即进入数据仓库以后进行综合生成的。
  • 包含历史数仓反应的是某段时间内的历史数据,这也是数仓和数据库的区别之一。
  • 不可修改:数据进入数据仓库以后,一般情况下被较长时间保留。数据仓库中一般有大量的查询操作,但修改删除操作很少,只需定时加载更新即可。
  • 时效性:数仓存储的是历史数据,按照时间顺序追加,有时间属性。数仓用户通过分析企业过去一段时间业务的经营状况,挖掘潜在价值。但是分析的结果只能反映过去某段时间的情况,随着业务变化时间改变,数仓中的数据就会失去价值,需要载入新数据。
  • 面向全企业
  • 数据快照式的数据获取
  • 面向决策支持
  • 明细的数据存储

1.3 数据仓库和数据库区别

数据库与数据仓库的区别实际讲的是 OLTP 与 OLAP 的区别

  • 操作型处理,叫联机事务处理 OLTP,也可以称面向交易的处理系统,它是针对具体业务在数据库联机的日常操作。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理,像MYSQL,Oracle等关系型数据库一般属于OLTP。
  • 分析型处理,叫联机分析处理 OLAP,一般针对某些主题的历史数据进行分析,支持管理决策。

首先要明白,数据仓库的出现,并不是要取代数据库。数据库是面向事务的设计,数据仓库是面向主题设计的。数据库一般存储业务数据,数据仓库存储的一般是历史数据

  • 数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、 密码等简单数据即可,符合业务应用,但是不符合分析。
  • 数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。

1.4 以银行业务为例 

  • 数据库是事务系统的数据平台,客户在银行做的每笔交易都会写入数据库,被记录下来,可以简单地理解为用数据库记账。
  • 数据仓库是分析系统的数据平台,它从事务系统获取数据,并做汇总、加工,为决策者提供决策的依据。比如,某银行某分行一个月发生多少交易,该分行当前存款余额是多少。如果存款又多,消费交易又多,那么该地区就有必要设立 ATM了。 显然,银行的交易量是巨大的,通常以百万甚至千万次来计算。
  • 事务系统是实时的,这就要求时效性,客户存一笔钱需要几十秒是无法忍受的,这就要求数据库只能存储很短一段时间的数据。 而分析系统是事后的,它要提供关注时间段内所有的有效数据。这些数据是海量的,汇总计算起来也要慢一些,但是,只要能够提供有效的分析数据就达到目的了。
  • 数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”

2. 数仓架构

数仓架构大致分为离线数仓架构和实时数仓架构,数仓架构可以简单理解为构成数仓的各层关系,如ODS、DWM、DWD、DWS,具体分层这里不赘述。 

2.1 离线数仓架构

任何事物都是随着时间的演进变得越来越完善,当然也是越来越复杂,数仓也不例外。

离线数仓架构包括数据集市架构、Inmon企业信息工厂架构、Kimball数据仓库架构、混合型数据仓库架构,接下来就详细说说这几种架构。

2.1.1 数据集市架构

数据集市架构重点在于集市二字,数据集市是按主题域组织的数据集合,用于支持部门级的决策。有两种类型的数据集市:独立数据集市 和 从属数据集市。

2.1.1.2 独立数据集市

独立数据集市集中于部门所关心的单一主题域数据以部门为基础,例如制造部门、人力资源部门和其他部门都各自有他们自己的数据集市。

  • 优点:因为一个部门的业务相对于整个企业要简单,数据量也小得多,所以部门的独立数据集市周期短、见效快
  • 缺点:独立数据集市各自为政。从业务角度看,当部门的分析需求扩展或者跨部门跨主题域分析时,独立数据市场会力不从心。 当数据存在歧义,比如同一个产品在A部门和B部门的定义不同,将无法在部门间进行信息比较。 每个部门使用不同的技术,建立不同的ETL的过程,处理不同的事务系统,而在多个独立的数据集市之间还会存在数据的交叉与重叠,甚至会有数据不一致的情况!
2.1.1.2 从属数据集市

从属数据集市的数据来源于数据仓库,即从属于数据仓库。

优点:

  • 性能:当数据仓库的查询性能出现问题,可以考虑建立几个从属数据集市,将查询从数据仓库移出到数据集市。
  • 安全:每个部门可以完全控制他们自己的数据。
  • 数据一致:因为每个数据集市的数据来源都是同一个数据仓库,有效消除了数据不一致的情况。

2.1.2 Inmon企业信息工厂架构

  • Inmon架构是范式建模
  • 企业级数据仓库是企业级别的,正如Inmon数据仓库所定义的,企业级数据仓库是一个细节数据的集成资源库。其中的数据以最低粒度级别被捕获,存储在满足三范式设计的关系数据库中。
  • 部门级数据集市是企业中部门级别的,是面向主题数据的部门级视图,数据从企业级数据仓库获取。数据在进入部门数据集市时可能进行聚合。数据集市使用多维模型设计,用于数据分析。重要的一点是,所有的报表工具、BI 工具或其他数据分析应用都应该从数据集市查询数据,而不是直接查询企业级数据仓库

2.1.3 Kimball数据仓库架构

  • 对比上一张图可以看到,Kimball与Inmon两种架构的主要区别在于数据仓库的设计和建立。 Kimball的数据仓库包含高粒度的企业数据,使用多维模型设计,是维度建模,这也意味着数据仓库由星型模式的维度表和事实表构成。分析系统或报表工具可以直接访问多维数据仓库里的数据。
  • 在此架构中的数据集市也与Inmon中的不同。这里的数据集市是一个逻辑概念,只是多维数据仓库中的主题域划分,并没有自己的物理存储,也可以说是虚拟的数据集市

2.1.4 混合型数据仓库架构

  • 所谓的混合型结构,指的是在一个数据仓库环境中,联合使用Inmon和Kimball两种架构。
  • 从架构图可以看到,这种架构将Inmon方法中的数据集市替换成了一个多维数据仓库,而数据集市则是多维数据仓库上的逻辑视图
  • 使用这种架构的好处是:既可以利用规范化设计消除数据冗余,保证数据的粒度足够细;又可以利用多维结构更灵活地在企业级实现报表和分析。

2.2 实时数仓架构 

在某些场景中,数据的价值随着时间的推移而逐渐减少。所以在传统大数据离线数仓的基础上,逐渐对 数据的实时性提出了更高的要求。

2.2.1 Lambda架构

2.2.1.1 传统的Lambda实时开发

2.2.1.2 升级的Lambda实时开发

  • 问题:为什么Lambda架构要分成两条线计算?
  • 假如整个系统只有一个批处理层,会导致用户必须等待很久才能获取计算结果,一般有时间延迟。电商数据分析部门只能查看前一天的统计分析结果,无法获取当前的结果,这对于实时决策来说有 一个巨大的时间鸿沟,很可能导致管理者错过最佳决策时机。
  • Lambda架构属于较早的一种架构方式,早期的流处理不如现在这样成熟,在准确性、扩展性和容错性 上,流处理层无法直接取代批处理层,只能给用户提供一个近似结果,还不能为用户提供一个一致准确 的结果。因此Lambda架构中,出现了批处理和流处理并存的现象。 

不管是传统的还是升级后的,Lambda架构严格来说并不是纯正的实时数仓,而是离线+实时

这就导致Lambda有如下缺点:

  • 同样的需求要开发两套一样的代码
  • 集群资源使用增多
  • 离线结果和实时结果可能不一致,当然以离线为主
  • 离线批量计算T+1可能算不完
  • 服务器存储压力大

2.2.2 Kappa架构

Kappa架构是纯正的实时架构,可以看到在实时数仓中,使用kafka来运输数据,但是kafka是消息队列,有如下缺点:

  • kafka主要用来消息缓存,不能支撑海量数据存储,数据存储有时间限制
  • kafka不支持OLAP,即无法用SQL语句进行简单的数据校验
  • 无法复用数据血缘管理体系(数据治理),因为kafka没有schema那种字段
  • kafka中的数据是append追加,不支持数据的更新、插队

Kappa和Lambda对比

2.2.3 数据湖出现原因:批流一体

  • 批流一体既可以处理批数据,又可以处理流数据,从架构角度来看就是Lambda架构;
  • 从计算框架角度来看,就是flink、spark框架,既支持批处理,又支持流处理;
  • 从SQL角度来看,就是数仓各层统一支持SQL,这就弥补了kappa中kafka不支持SQL的缺点;
  • 从存储层面来看,能做到海量数据的存储,而不是像kappa一样存储在kafka缓存中;

那么基于以上痛点,就有了数据湖 

2.2.3 湖仓一体—数据湖

我们看到流批结合的方式与上面几种架构的存储方式发生了变化,由 Kafka 换成 了 Iceberg,IceBerg就是数据湖技术的一种,介于上层计算引擎和底层存储格式之间的一个中间层,我们可以把它定义成一种“数据组织格式”,底层存储还是 HDFS。除此之外还有Hudi(发展最完善)这里不具体阐述。

数据湖支持SQL查询,解决了如下问题:

  • 存储统一
  • 解决了kafka存储量小,数据有时间限制的问题
  • 任意分层都可以OLAP
  • 复用同一套相同的血缘关系
  • 支持数据实时更新,数据可以update/insert

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1976439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT能代替网络作家吗?

最强AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 当然可以!只要你玩写作AI玩得6,甚至可以达到某些大神的水平! 看看大神、小白、AI输出内容的区…

重塑企业知识库:AI搜索的深度应用与变革

在数字化浪潮的推动下,企业知识库已成为企业智慧的核心载体。而AI搜索技术的融入,让海量信息瞬间变得井然有序,触手可及。它不仅革新了传统的搜索方式,更开启了企业知识管理的新纪元,引领着企业向更加智能化、高效化的…

【人工智能】FPGA实现人工智能算法硬件加速学习笔记

一. FPGA的优势 FPGA拥有高度的重配置性和并行处理能力,能够同时处理多个运算单元和多个数据并行操作。FPGA与卷积神经网络(CNN)的结合,有助于提升CNN的部署效率和性能。由于FPGA功耗很低的特性进一步增强了其吸引力。此外,FPGA可以根据具体算法需求量身打造硬件加速器。针对动…

[CR]厚云填补_SEGDNet

Structure-transferring edge-enhanced grid dehazing network Abstract 在过去的二十年里,图像去雾问题在计算机视觉界受到了极大的关注。在雾霾条件下,由于空气中水汽和粉尘颗粒的散射,图像的清晰度严重降低,使得许多计算机视觉…

鸿蒙媒体开发【基于AVCodec能力的视频编解码】音频和视频

基于AVCodec能力的视频编解码 介绍 本实例基于AVCodec能力,提供基于视频编解码的视频播放和录制的功能。 视频播放的主要流程是将视频文件通过解封装->解码->送显/播放。视频录制的主要流程是相机采集->编码->封装成mp4文件。 播放支持的原子能力规…

【从0到1进阶Redis】Jedis 操作 Redis

笔记内容来自B站博主《遇见狂神说》:Redis视频链接 Jedis 是一个用于 Java 的 Redis 客户端库,它提供了一组 API 用于与 Redis 数据库进行交互。Redis 是一个高性能的键值存储数据库,广泛用于缓存、消息队列等场景。Jedis 使得 Java 开发者能…

图欧科技-IMYAI智能助手24年5月~7月更新日志大汇总

上一篇推文盘点了我们图欧科技团队近一年来的更新日志,可以说是跟随着人工智能时代的发展,我们的IMYAI也丝毫不落后于这场时代的浪潮!近三个月以来,我们的更新频率直线上升,现在我们AI网站已经成为一个集GPT、Claude、…

《学会 SpringMVC 系列 · 消息转换器 MessageConverters》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

Inno Setup 安装界面、卸载界面+美化

Inno Setup Inno Setup用Delphi写成,其官方网站同时也提供源程序免费下载。它虽不能与Installshield这类恐龙级的安装制作软件相比,但也当之无愧算是后起之秀。Inno Setup是一个免费的安装制作软件,小巧、简便、精美是其最大特点,…

arduino程序—模拟输出(基础知识)

arduino程序—模拟输出(基础知识) 1-25 模拟输出1-analogWrite电路效果演示模拟输出analog output复合运算符示例程序Analogwrite() 1-26 模拟输出2-PWMPWM概念(极其重要) 1-27 模拟输出3-for电路效果演示程…

【Verilog-CBB】开发与验证(2)——单比特信号CDC同步器

引言 多时钟域的设计中,CDC处理的场景还是蛮多的。单比特信号在CDC时,为保证信号采样的安全性,降低亚稳态,必须要对信号做同步处理。CDC从时钟的快慢关系来说分为两种case:快到慢、慢到快。对于脉冲型的控制信号&…

『C++实战项目 负载均衡式在线OJ』一、项目介绍与效果展示(持续更新)

文章目录 一、项目介绍二、开发环境三、第三方库四、相关技术五、项目整体框架代码目录框架 代码仓库连接 点击这里✈ 一、项目介绍 本项目是实现一个仿 leetcode 的 OJ (Online-Judge)系统。更准确的说应该称之为leetcode 的裁剪版。因为本项目只实现了leetcode中…

‘#‘ is not followed by a macro parameter 关于宏定义的错误

今天在项目代码上想定义一个这样的宏,结果编译错误,这个宏定义类似这样的: #define DELETE_FILE_DPP(key) \ #ifdef PLATFORM_DPP \delete_file(&key); \ #endif 因为有平台之分需要用到编译宏,但不想每个调用的地方都写 #i…

HTML 专业词汇与语法规则

目录 1. 专业词汇 2. 语法规则 1. 专业词汇 标签&#xff08;tag&#xff09;&#xff1a;一堆尖叫号&#xff08;<>&#xff09;&#xff0c; 属性&#xff08;attribute&#xff09;&#xff1a;对标签特征设置的方式&#xff1b; 文本&#xff08;text&#xff0…

【外排序】--- 文件归并排序的实现

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 数据结构 我们之前学习的八大排序&#xff1a;冒泡&#xff0c;快排&#xff0c;插入&#xff0c;堆排等都是内排序&#xff0c;这些排序算法处理的都是…

java对接kimi详细说明,附完整项目

需求&#xff1a; 使用java封装kimi接口为http接口&#xff0c;并把调用kimi时的传参和返回数据&#xff0c;保存到mysql数据库中 自己记录一下&#xff0c;以做备忘。 具体步骤如下&#xff1a; 1.申请apiKey 访问&#xff1a;Moonshot AI - 开放平台使用手机号手机号验证…

SuccBI+低代码文档中心 — 低代码应用(SuccAP)(概论)

概述&#xff1a; 低代码是什么&#xff1f; 低代码就是通过易用的、可视化的操作、加上少量的代码或脚本的方式快速的搭建业务应用。 低代码的优势&#xff1f; 低代码可以提升开发人员的效率&#xff0c;也可以让非开发人员也能进行应用开发。 低代码的分类&#xff1a;…

基于SpringBoot的大学生信息兼职服务网站系统,源码、部署+讲解

目 录 摘 要 Abstract 目 录 绪 论 1 系统分析 1.1可行性分析 1.1.1经济可行性分析 1.1.2技术可行性分析 1.1.3操作可行性分析 1.2需求分析 1.2.1从学生的角度 1.2.2从企业的角度 1.2.3从管理员的角度 1.3用例建模 1.3.1识别参与者用例 1.3.2用…

3.5 菜单资源

菜单分类 窗口的顶层菜单弹出式菜单&#xff08;鼠标右键的那些选项&#xff0c;记事本窗口左上角点击“文件”弹出的这些&#xff09;系统菜单&#xff08;记事本左上角的图标&#xff09; HMENU类型表示菜单&#xff0c;ID表示菜单项 资源相关 资源脚本文件:*.rc文件编译器…

python入门基础篇(一)

基础篇 Python基础安装与配置Python环境理解Python解释器第一个Python程序&#xff1a;"Hello, World!" 基础语法注释与文档字符串变量与数据类型数字类型&#xff1a;整数、浮点数、复数字符串布尔值None值 运算符算术运算符比较运算符逻辑运算符赋值运算符位运算符…