初识数据仓库

news2024/12/23 16:21:18

一、什么是数据仓库

数据库 --> OLTP:(on-line transaction processing)翻译为联机事务处理

记录某类业务事件的发生,如购买行为,银行交易行为,当行为产生后,系统会记录是谁在何时何地做了何事,这样的一行(或多行)数据会以增删改的方式在数据库中进行数据的更新处理操作,要求实时性高、稳定性强、确保数据及时更新成功,像公司常见的业务系统如ERP,CRM,OA等系统都属于OLTP

数据仓库 --> OLAP:(On-Line Analytical Processing)翻译为联机分析处理

当数据积累到一定的程度,我们需要对过去发生的事情做一个总结分析时,就需要把过去一段时间内产生的数据拿出来进行统计分析,从中获取我们想要的信息,为公司做决策提供支持,这时候就是在做OLAP了,OLAP支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果

数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。

数据仓库是为企业所有决策制定过程,提供所有系统数据支持的战略集合。

通过对数据仓库中数据的分析,可以帮助企业,改进业务流程、控制成本、提高产品质量等。

数仓并不是数据的最终目的地,而是为主句最终的目的地做好准备。包括:清洗,转义,分类,充足,合并,拆分,统计等。

  1. 面向主题

操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域——用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关

  1. 集成的

面向事务处理的操作型数据库通常与某些特定的应用相关,数据库之间相互独立,并且往往是异构的。而数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。

  1. 相对稳定的

操作型数据库中的数据通常实时更新,数据根据需要及时发生变化。数据仓库的数据主要供查询,数据进入数据仓库以后,一般将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。

  1. 反映历史变化

操作型数据库主要关心当前某一个时间段内的数据,而数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。

二、数据仓库架构

其实数据仓库很早之前就有了很多传统的数仓技术,例如基于Teradata的数据仓库,只不过在大数据背景下我们开始抛弃传统构建数仓的技术,转而选择了更能满足当前时代需求的大数据技术,当然大数据技术并没有完整的、彻底的取代传统的技术实现,我们依然可以在很多地方看见它们的身影

数仓问题

随着数据量暴增、数据源多样化、服务对象变化,传统经典数仓的不足凸显:

  • 传统数据分析更注重对高密度、高价值的结构化数据的业务数据分析,对非结构化、半结构化数据的处理,如图像、文本、音频的存储和分析非常薄弱。

  • 由于传统数据仓库采用结构化存储,当数据从其他系统导入数据仓库时,我们通常会引入ETL过程。ETL与具体的业务有很强的的绑定性,通常需要一个专门的人或者团队与业务部门进行连接,并决定如何进行数据清洗、转换及加载。

  • 随着异构数据源的增加,如视频、文本、图片,要分析数据内容并进入数据仓库,就需要非常复杂的ETL,导致ETL过于庞大且臃肿

  • 数据库范式等约束规则重点解决数据冗余问题,以确保数据的一致性。原则上,数据仓库原始数据是只读的,所以这些约束条件将成为影响性能的因素。

  • 数据量过大时性能称为瓶颈。

离线数仓

Hadoop生态的出现从几个维度解决了传统数仓在数据分析中遇到的瓶颈:

  • 分布式计算。多节点并行计算,强调数据的局部性,并尽量减少节点间的数据传输。

  • 分布式存储。将一份大文件分成若干份,没分独立放在一个节点上。涉及到文件拷贝、碎片化、管理等操作。

  • 检索与存储结合。早期大数据系统中,存储和计算比较单一。大数据框架下的存储不仅存储数据内容自身,还增加了很多元数据。

  • 存算分离。数据库系统出于性能的考虑,主要采用“计算和存储紧耦合”的架构。而在分析大量级的数据时,往往结果间会相互影响,在这种情况下,单个计算引擎无法完全控制数据布局和文件系统。因此,需要存算分离。

离线数仓缺点

  • 分布式存储强调数据的只读性,如HDFS的存储方式不支持更新、写操作不支持并行等。在应用上有一定局限性。

  • 存储的耦合,副本机制造成了扩展和容灾发生时的成本压力和运维压力。

  • 尚缺乏完整的cube工具。虽然目前有部分开源或者商业化的产品,担任存在局限性。如cube缺乏灵活性和稳定性,对于业务支持的灵活性不足。对于报表数量多或复杂的场景,就需要过多的人工定制。

  • 离线处理为主,缺乏实时性。

Lambda架构

在离线大数据架构基础上增加一个加速层(增加一条实时计算链路,并对数据源进行流失改造,实时计算订阅消息完成计算,推送到下游),使用流处理技术直接完成那些实时性要求高的指标计算,然后和离线计算整合从而给用户一个完整的实时计算结果。

Lambda架构存在的问题:

  • 同样的需求要开发两套一样的代码,开发成本、维护成本极高。

  • 同样资源计算两次,资源占用多。

  • 实时链路和离线链路计算结果容易让人误解,昨天和今天看到的数据不一致。

  • 下游需整合实时和离线处理结果。

kappa架构:

使用不可改变的数据流作为主要的记录源,而不使用数据库或文件的时间点来表示。

Kappa架构将数据作为事件写入到持久化的流中,对代码的修改只需要重放过去的事件即可。

kappa架构解决了lambda架构中较冗余的部分,支持数据重放,架构简洁。但实现较为困难。

混合架构:

在实际应用上并不是完全规范的lambda或kappa架构,可以将两者混合,大部分实时指标采用kappa架构完成计算,少量关键指标(金额等)使用lambda架构用批处理重新计算,增加一次校对过程。

数仓整体架构

三、数仓建模

数仓分层

清晰数据结构、数据血缘追踪、减少重复开发、把复杂问题简单化、屏蔽原始数据的异常

ODS层

  1. 保持数据原貌不做任何修改,起到备份数据的作用。

  1. 数据采用压缩,减少磁盘存储空间

  1. 创建分区表,防止后续的全表扫描

DWD层

DWD层需构建维度模型,一般采用星型模型,呈现的状态一般为星座模型。

DWS层

DWS层统计各个主题对象的当天行为,构建主题对象的全量宽表。DWS层的宽表字段,是站在不同维度的视角去看事实表,重点关注事实表的度量值,通过与之关联的事实表,获得不同的事实表的度量值。

ADS层

分别对,如:设备主题、会员主题、商品主题和营销主题进行指标分析,其中营销主题是用户主题和商品主题的跨主题分析案例

维度建模

维度建模一般步骤:选择业务过程→声明粒度→确认维度→确认事实

(1)选择业务过程

在业务系统中,如果业务表过多,挑选我们感兴趣的业务线,比如下单业务,支付业务,退款业务,物流业务,一条业务线对应一张事实表。

(2)声明粒度

数据粒度指数据仓库的数据中保存数据的细化程度或综合程度的级别。

声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以此来应各种各样的需求。

(3)确定维度

维度的主要作用是描述业务是事实,主要表示的是“谁,何处,何时”等信息。例如:时间维度、用户维度、地区维度等常见维度

(4)确定事实

此处的“事实”一词,指的是业务中的度量值,例如订单金额、下单次数等。

在DWD层,以业务过程为建模驱动,基于每个具体业务过程的特点,构建最细粒度的明细层事实表。事实表可做适当的宽表化处理。

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

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

相关文章

day11_python虚拟环境安装与配置

文章目录Windows下安装第一步,安装virtualenv改源参考第二步,安装virtualenvwrapper-winUbuntu下安装第一步、安装virtualenv和virtualenvwrapper第二步、配置.bashrc文件,添加下面三行第三步,用下列命令让修改后的.bashrc生效配置…

今天来聊一聊信息差,或许会刷新你的认知

有人会说:现在互联网信息这么发达,获取信息的渠道也越来越多,还会存在信息差吗?我的回答是:会,而且随着社会高速的发展,信息差会越来越明显。这里大家需要了解一个词:信息茧房信息茧…

植物育种中广义遗传力的定义

大家好, 我是邓飞。 今天聊一下广义遗传力的计算方法。 广义遗传力定义 广义遗传力(H2H^2H2)定义为归因于基因型总体遗传变异的表型变异比例。 通常他包括三个解释:(详见我这篇博客的公式推导 回归系数 相关系数 遗…

微信小程序_调用openAi搭建虚拟伙伴聊天

微信小程序_调用openAi搭建虚拟伙伴聊天背景效果关于账号注册接口实现8行python搞定小程序实现页面结构数据逻辑结速背景 从2022年的年底,网上都是chagpt的传说,个人理解这个chatgpt是模型优化训练,我们在用chatgpt的时候就在优化这个模型&a…

九龙证券|连续13周净流入!北向资金爆买“中字头”股票

Wind数据显现,本周北向资金净流入A股达29.33亿元,其间周四净流入121亿元,其他四个交易日均为净流出状况。尽管本周北向资金流入A股力度放缓,可是仍然保持着周度接连净流入态势。 接连第13周净流入 Wind数据显现,从202…

Redis核心知识点

Redis核心知识点Redis核心知识点大全五种数据类型redis整合SpringBoot序列化问题渐进式扫描慢查询缓存相关问题数据库和缓存谁先更新缓存穿透缓存雪崩缓存击穿实际应用超卖问题分布式锁全局唯一ID充当消息队列Feed流附近商户签到HyperLogLog实现UV统计持久化RDBAOF持久化小结事…

整型提升+算术转换——“C”

各位CSDN的uu们你们好呀,今天小雅兰的内容是之前操作符那篇博客中没有讲完的内容,整型提升这个小知识点也非常重要,那现在,就让我们进入操作符的世界吧 隐式类型转换 算术转换 操作符的属性 隐式类型转换 表达式求值的顺序一部…

opencv显示图像

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

带头节点的单链表的就地逆置

目录 1.题目背景 2.思路方法分析 2.1采用循环实现的就地逆置法 2.2 递归方式实现的逆置 3.金句省身 1.题目背景 本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数。L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的…

使用自己的数据集,测试mmrotate新网络rotated_rtmdet,旋转目标检测

1.安装 !!!!一定不要安装mmrotate 1.版本需求 mmcv 2.0.0rc2 mmdet 3.0.0rc5 mmengine 0.5.0 不用安装mmcv-full 下载mmrotate 1.x 源码 (不要下载默认的master,因为新的网络只在1.x版本中) …

【前端】Vue项目:旅游App-(23)detail:房东介绍、热门评论、预定须知组件

文章目录目标过程与代码房东介绍landlord热门评论HotComment预定须知Book效果总代码修改或添加的文件detail.vuedetail-book.vuedetail-hotComment.vuedetail-landlord.vue参考本项目博客总结:【前端】Vue项目:旅游App-博客总结 目标 根据detail页面获…

我用python/C++调用ChatGPT自制了一个聊天问答机器人

目录1 ChatGPT完整版2 Python/C调用ChatGPT2.1 获取API秘钥2.2 测试API功能2.3 设计简单UI3 聊天问答1 ChatGPT完整版 2015年,OpenAI由马斯克、美国创业孵化器Y Combinator总裁阿尔特曼、全球在线支付平台PayPal联合创始人彼得蒂尔等硅谷科技大亨创立,公…

【脚本开发】运维人员必备技能图谱

脚本(Script)语言是一种动态的、解释性的语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。脚本语言具有小巧便捷、快速开发的特点;常见的脚本语言有Windows批处理脚本bat、Linux脚本语言shell以及python、…

Spring缓存Demo

Spring中的缓存用法:有说错请指正 启动类加EnableCache 注解很多,这里举例几个实用的 第一组 value和key都没什么特别的含义,随你自己取,注意key里面是包了一层的 Cacheable(value"user",key "findUsers") 第一次查询的时候,会查数据库,然后将返回结果…

【GlobalMapper精品教程】045:空间分析工具(2)——相交

GlobalMapper提供的空间分析(操作)的方法有:交集、并集、单并集、差异、对称差集、相交、重叠、接触、包含、等于、内部、分离等,本文主要讲述相交工具的使用。 文章目录 一、实验数据二、符号化设置三、相交运算四、结果展示五、心灵感悟一、实验数据 加载配套实验数据(…

Hadoop安装 --- 简易安装Hadoop

目录 1、使用xftp工具 在opt目录下创建install和soft文件 2、使用xftp工具 将压缩包上传到install文件 3、编写shell脚本 3.1、创建目录来放shell脚本 3.2、创建autoinsatll.sh文件并修改权限 3.3、编写autoinsatll.sh 文件 刷新资源 运行文件 格式化 启动所有进程 Ha…

ChatGPT到底有多牛?博主带你亲测

文章目录论文项目代码算法学习情感职业回答知乎ChatGpt网页版与客户端版个人评价论文 问他毕设框架: 让他帮我写一段毕设背景部分: 项目代码 我让他帮我用Django写一个demo网站: 算法 matlab写遗传算法: 问一个数据结构&…

Java是如何创建线程的(二)从glibc到kernel thread

Java是如何创建线程的(二)从glibc到kernel thread 背景 上一节我们讨论了java线程是如何创建的,看了看从java代码层面到jvm层面的源码里都干了什么。 整个流程还是比较复杂的,我将上一节总结的调用时序图贴在下面,方…

Flutter Widget - Container 容器

Container 属性 child 容器包含的子组件color 容器背景色padding 内边距margin 外边距decoration 定义容器形状、颜色alignment 子组件在容器内的对齐方式constraints 定义宽高width 宽(可选)height 高(可选)transform 变换transformAlignment 变换原点的相对位置foregroundDe…

【Unity3D 常用插件】Haste插件

一,Haste介绍 Haste插件是一款针对 Unity 3D 的 Everthing软件,可以实现基于名称快速定位对象的功能。Unity 3D 编辑器也自带了搜索功能,但是在 project视图 和 Hierarchy视图 中的对象需要分别查找,不支持模糊匹配。Haste插件就…