数据仓库-相关概念
简介
数据仓库是一个用于集成、存储和管理大量数据的系统。它用于支持企业决策制定过程中的数据分析和报告需求。数据仓库从多个来源收集和整合数据,并将其组织成易于查询和分析的结构。
数据仓库的主要目标是提供高性能的数据访问和分析能力,以便用户可以从不同的角度和层次上理解和解释数据。它通常包含历史数据,用于支持趋势分析和预测模型的建立。
数据仓库不仅仅是一个存储数据的地方,它还提供了一系列工具和技术来支持数据清洗、转换、集成和加载等过程。这些过程通常被称为ETL(抽取、转换和加载),用于将原始数据从各种源系统中提取出来,并将其转换为适合分析和报告的格式。
通过数据仓库,企业可以更好地理解自己的业务和客户行为,发现潜在的商业机会,改善运营效率,并制定更明智的决策。它在各种行业和领域都被广泛应用,例如零售、金融、医疗保健和制造业等。
OLAP和OLTP
OLAP(联机分析处理)和OLTP(联机事务处理)是两种不同的数据处理方式,用于支持不同的业务需求。
OLAP是一种面向分析和决策支持的数据处理方式。它主要针对复杂的查询和多维度的数据分析,并提供灵活的数据切片、钻取和汇总等功能。OLAP系统通常基于多维数据模型,例如星型模型或雪花模型,它们使用聚集技术和预计算来提供高性能的查询响应。OLAP适用于需要进行复杂数据分析、报告和决策制定的场景,如销售分析、业务智能和预测模型等。
OLTP是一种面向事务处理的数据处理方式。它主要关注数据的录入、修改和查询等操作,以支持日常业务的进行。OLTP系统通常基于关系型数据库,用于处理实时的交易和业务流程。它的目标是提供高并发性、数据一致性和事务处理能力。OLTP适用于需要处理大量事务、保证数据准确性和实时性的场景,如在线银行交易、订单处理和库存管理等。
总结来说,OLAP适用于复杂的分析和决策支持,强调对数据的多维度切片和聚合分析;而OLTP适用于日常的事务处理,强调对数据的录入、修改和查询操作。在实际应用中,两者通常结合使用,以满足不同层次和类型的数据处理需求。
特征
- 面向主题: 主题是一个抽象的概念,是较高层次上
数据综合、归类并进行分析利用的抽象 - 集成性: 主题相关的数据通常会分布在多个操作型 系统中,彼此分散、独立、异构。需要集 成到
数仓主题下 - 非易失性: 也叫非易变性。数据仓库是
分析数据的平台,而不是创造数据的平台。 - 时变性: 数据仓库的数据
需要随着时间更新,以适 应决策的需要
分层

数据仓库为什么要分层
把复杂问题简单化,每一层只处理简单的任务,方便定位问题;
减少重复开发,规范数据分层,通过中间层数据能够减少重复计算,且增加计算结果的复用性;
隔离原始数据,不论是数据的异常还是数据的敏感性,使真实数据与统计数据解耦开。
DW五层架构的特点
细化DW建模,对DW中各个主题业务建模进行了细分,每个层次具有不同的功能。保留了最细粒度数据,满足了不同维度、不同事实的信息;
满足数据重新生产,不同层次的数据支持数据重新生成,无需备份恢复,解决了由不同故障带来的数据质量问题,消除了重新初始化数据的烦恼;
减少应用对DW的压力,以业务应用驱动为向导建模,避免直接操作基础事实表,降低数据获取时间;
快速适应需求变更和维度变化,明细基础数据层稳定,适应前端应用层业务需求变更,所有前端应用层模型之间不存在依赖,需求变更对DW整个模型影响范围小,能适应短周期内上线下线需求。

ODS(Operational Data Store)原始数据层
数据准备区,也称为贴源层。数据仓库源头系统的数据表通常会原封不动的存储一份,以此减少对业务系统的影响,也是后续数据仓库加工数据的来源。业务DB基本上是直接同步过来,LOG主要做结构化。
ODS层数据的来源方式
业务库
可使用Sqoop来抽取,例如每天定时抽取一次;
实时接入,考虑用canal监听MySQL的binlog;
Flume、Sqoop、Kettle等ETL工具导入到HDFS,并映射到HIVE的数据仓库表中。
埋点日志
日志一般以文件的形式保存,可以选择用Flume定时同步;
可以用Spark Streaming或者Flink来实时接入;
Kafka。
消息队列
来自ActiveMQ、Kafka的数据等。
1.3.2 建模方式及原则
从业务系统增量抽取;
保留时间由业务需求决定;
可分表进行周期存储;
数据不做清洗转换与业务系统数据模型保持一致;
按主题逻辑划分。
针对HDFS上的用户行为数据和业务数据,我们如何规划处理?
保持数据原貌不做任何修改,起到备份数据的作用;
数据采用压缩,减少磁盘存储空间;
创建分区表,防止后续的全表扫描。
DWD(Data Warehouse Detail)明细数据层
DWD是业务层与数据仓库的隔离层,主要对ODS数据层做一些数据清洗(去除空值、脏数据、超过极限范围的数据)、规范化、维度退化、脱敏等操作。
1.4.1 建模方式及原则
需要构建维度模型,一般采用星型模型,呈现的状态一般为星座模型(由多个事实表组合,维表是公共的,可被多个事实表共享);
为支持数据重跑可额外增加数据业务日期字段,可按年月日进行分表,用增量ODS层数据和前一天DWD相关表进行merge处理;
粒度是一行信息代表一次行为,例如一次下单。
1.4.2 维度建模步骤
选择业务过程:在业务系统中,挑选感兴趣的业务线,比如下单业务,支付业务,退款业务,物流业务,一条业务线对应一张事实表。如果是中小公司,尽量把所有业务过程都选择。如果是大公司(1000多张表),选择和需求相关的业务线。
声明粒度:数据粒度指数据仓库的数据中保存数据的细化程度或综合程度的级别。声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以此来应各种各样的需求。典型的粒度声明如下:订单当中的每个商品项作为下单事实表中的一行,粒度为每次。每周的订单次数作为一行,粒度为每周。每月的订单次数作为一行,粒度为每月。如果在DWD层粒度就是每周或者每月,那么后续就没有办法统计细粒度的指标了。所以建议采用最小粒度。
确定维度:维度的主要作用是描述业务是事实,主要表示的是“谁,何处,何时”等信息。确定维度的原则是:后续需求中是否要分析相关维度的指标。例如,需要统计,什么时间下的订单多,哪个地区下的订单多,哪个用户下的订单多。需要确定的维度就包括:时间维度、地区维度、用户维度。维度表:需要根据维度建模中的星型模型原则进行维度退化。
确定事实:此处的“事实”一词,指的是业务中的度量值(次数、个数、件数、金额,可以进行累加),例如订单金额、下单次数等。在DWD层,以业务过程为建模驱动,基于每个具体业务过程的特点,构建最细粒度的明细层事实表。事实表可做适当的宽表化处理。
注意:DWD层是以业务过程为驱动。DWS层、DWT层和ADS层都是以需求为驱动,和维度建模已经没有关系了。DWS和DWT都是建宽表,按照主题去建表。主题相当于观察问题的角度。对应着维度表。
DWS(Data Warehouse Service)服务数据层
DWB:data warehouse base 数据基础层,存储的是客观数据,一般用作中间层,可以认为是大量指标的数据层。
以DWD为基础,按天进行轻度汇总。粒度是一行信息代表一天的行为,例如一天下单次数。
1.5.1 功能
DWB是根据DWD明细数据经行清晰转换,如维度转代理键、身份证清洗、会员注册来源清晰、字段合并、空值处理、脏数据处理、IP清晰转换、账号余额清洗、资金来源清洗等;
DWS是根据DWB层数据按各个维度ID进行粗粒度汇总聚合,如按交易来源,交易类型进行汇合。
1.5.2 建模方式及原则
聚合、汇总增加派生事实;
关联其它主题的事实表,DW层可能会跨主题域;
DWB保持低粒度汇总加工数据,DWS保持高粒度汇总数据;
数据模型可能采用反范式设计,合并信息等。
DWT(Data Warehouse Topic)数据主题层
以DWS为基础,按主题进行汇总。粒度是一行信息代表累积的行为,例如用户从注册那天开始至今一共下了多少次单。
1.6.1 功能
可以是一些宽表,是根据DW层数据按照各种维度或多种维度组合把需要查询的一些事实字段进行汇总统计并作为单独的列进行存储;
满足一些特定查询、数据挖掘应用。
1.6.2 建模方式及原则
尽量减少数据访问时计算,优化检索;
维度建模,星型模型;
事实拉宽,度量预先计算;
分表存储。
ADS(Application Data Store)数据应用层
面向实际的数据需求,同步到关系型数据库服务RDS。该层主要是提供数据产品和数据分析使用的数据,一般会存储在ES、mysql等系统中供线上系统使用。我们通过说的报表数据,或者说那种大宽表,一般就放在这里。为应用层,这层数据是完全为了满足具体的分析需求而构建的数据,也是星形结构的数据。应用层为前端应用的展现提现数据,可以为关系型数据库组成。
1.7.1 功能
ST层面向用户应用和分析需求,包括前端报表、分析图表、KPI、仪表盘、OLAP、专题等分析,面向最终结果用户;
适合作OLAP、报表模型,如ROLAP、MOLAP;
根据DW层经过聚合汇总统计后的粗粒度事实表。
1.7.2 建模方式及原则
保持数据量小;
维度建模,星形模型;
各位维度代理键+度量;
增加数据业务日期字段,支持数据重跑;
不分表存储。
1.8 其他层
数据缓存层:用于存放接口方提供的原始数据的数据库层,此层的表结构与源数据保持基本一致,数据存放时间根据数据量大小和项目情况而定,如果数据量较大,可以只存近期数据,将历史数据进行备份。此层的目的在于数据的中转和备份。
临时数据表层:存放临时测试数据表(Temp表),或者中间结果集的表。
相关文章:
数据仓库-相关概念
简介 数据仓库是一个用于集成、存储和管理大量数据的系统。它用于支持企业决策制定过程中的数据分析和报告需求。数据仓库从多个来源收集和整合数据,并将其组织成易于查询和分析的结构。 数据仓库的主要目标是提供高性能的数据访问和分析能力,以便…...
线程的面试八股
Callable接口 Callable是一个interface,相当于给线程封装了一个返回值,方便程序猿借助多线程的方式计算结果. 创建一个匿名内部类, 实现 Callable 接口. Callable 带有泛型参数. 泛型参数表示返回值的类型. 重写 Callable 的 call 方法, 完成累加的过程. 直接通过返回值返…...
Jmeter 配置元件
Jmeter 配置元件 CSV 数据集配置HTTP Cookie 管理器HTTP Header 信息头管理器增加多个用户案列 使用Jmeter发送请求的时候,需要配置元件,配置请求Header、Cookie、数据集合等。可以模拟多个在线用户登录,修改请求头数据。 CSV 数据集配置 C…...
Java- @FunctionalInterface声明一个接口为函数式接口
基本介绍 FunctionalInterface 是 Java 8 中引入的注解,用于声明一个接口是函数式接口。函数式接口是指仅包含一个抽象方法的接口,可以用于支持 Lambda 表达式和方法引用。FunctionalInterface 注解确保该接口只包含一个抽象方法,从而确保其…...
Java使用Netty实现端口转发Http代理Sock5代理服务器
Java使用Netty实现端口转发&Http代理&Sock5代理服务器.md 一、简介1.功能2.参数配置3.程序下载4.程序启动5.源码 一、简介 这里总结整理了之前使用Java写的端口转发、Http代理、Sock5代理程序,放在同一个工程中,方便使用。 开发语言:…...
Linux环境docker安装Neo4j,以及Neo4j新手入门教学(超详细版本)
目录 1、 图数据库Neo4j简介1.1 什么是图数据库1.2 能解决什么痛点1.3 对比关系型数据库1.4 什么是Neo4j1.5 Neo4j的构建元素 2. 环境搭建2.1 安装Neo4j Community Server2.2 docker 安装Neo4j Community Server2.3 Neo4j Desktop安装 3. Neo4j - CQL使用3.1 Neo4j - CQL简介3.…...
C++ inline 关键字有什么做用?
C/C 之中 inline 是一个很有意思的关键字,奇奇怪怪的用法见过不少,今天抽点时间出来聊聊这个东西。 inline 可以用在那些方面?修饰 inline 内链关键字到底有什么作用? OK:started 1、inline 可以用在类成员函数的声明…...
eNSP学习——理解ARP及Proxy ARP
目录 名词解释 实验内容 实验目的 实验步骤 实验拓扑 配置过程 基础配置 配置静态ARP 名词解释 ARP (Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议。ARP表项可以分为动态和静态两种类型。 动态ARP是利用ARP广播报文,动态执行并自动进…...
Unity中UGUI在Mask剪裁粒子特效的实现
在Unity使用Mask是剪裁不了粒子特效的,之前有想过RenderTexture来实现,不过使用RenderTexture不适合用于很多个特效,因为RenderTexture依赖Camera的照射,如果在背包中每种道具都有不同的特效,那使用RenderTexture则需要…...
精通 VS 调试技巧,学习与工作效率翻倍!
✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 1. 什么是调试 当我们写代码时候常常会遇见输出结果不符合我们预…...
yarn 安装包时报“certificate has expired”
在通过yarn包管理器安装 yarn install 时候 报错: info No lockfile found. [1/4] Resolving packages... error Error: certificate has expired at TLSSocket.onConnectSecure (node:_tls_wrap:1539:34) at TLSSocket.emit (node:events:513:28) at…...
Qt5项目拆解第一集解决:中文乱码| 全局字体|注册表|QSS/CSS
# 一、乱码解决代码片段 QTextCodec是Qt中用于处理文本编码和字符集转换的类。它提供了一系列静态函数来实现不同编码的文本转换,包括编码转换、字符集检测和转换、以及数据流中的文本编码处理。QTextCodec类使得Qt可以在不同的编码和字符集之间进行无缝转换,从而方便地处理…...
消息队列RabbitMQ.01.安装部署与基本使用
目录 RabbitMQ的作用 Message queue 释义 问题思考 存在的问题 优化方案 案例分析 带来的好处 消息队列特点 Email邮件案例分析 Docker安装部署RabbitMQ 1.下拉镜像 2.运行RabbitMQ 3.打开防火墙端口号并重新运行防火墙 4.容器启动后,可以通过 docker logs 容器 查…...
1.24号c++
C绪论 c是c语言的扩充,C包含了C的所有属性,换一句话说,C语言在C中都合法。 C语言编程思想:面向过程 c编程思想:面向对象 可以说在C中一切皆对象。 c的三大属性:封装,继承,多态。…...
【GitHub项目推荐--12 年历史的 PDF 工具开源了】【转载】
最近在整理 PDF 的时候,有一些需求普通的 PDF 编辑器没办法满足,比如 PDF 批量合并、编辑等。 于是,我就去 GitHub 上看一看有没有现成的轮子,发现了这个 PDF 神器「PDF 补丁丁」,让人惊讶的是这个 PDF 神器有 12 年的…...
React16源码: React中的PortalComponent创建, 调和, 更新的源码实现
PortalComponent 1 )概述 React Portal之所以叫Portal,因为做的就是和“传送门”一样的事情render到一个组件里面去,实际改变的是网页上另一处的DOM结构主要关注 portal的创建, 调和, 更新过程 2 )源码 定位到 packages/react-…...
Hive-SQL语法大全
Hive SQL 语法大全 基于语法描述说明 CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] path; SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC] (A | B | C)如上语法,在语法描述中出现: [],表示可选,如上[LOCATI…...
编译原理2.3习题 语法制导分析[C++]
图源:文心一言 编译原理习题整理~🥝🥝 作为初学者的我,这些习题主要用于自我巩固。由于是自学,答案难免有误,非常欢迎各位小伙伴指正与讨论!👏💡 第1版:自…...
JUC-CAS
1. CAS概述 CAS(Compare ans swap/set) 比较并交换,实现并发的一种底层技术。它将预期的值和内存中的值比较,如果相同,就更新内存中的值。如果不匹配,一直重试(自旋)。Java.util.concurrent.atomic包下的原…...
Effective C++——关于重载赋值运算
令operator返回一个*this的引用 在重载,,*等运算符时,令其返回一个指向this的引用。 class MyClass {int* val; public:MyClass(int i) : val(new int(i)){}MyClass():val(new int(0)){}void print() {cout << *val << endl;}MyClass& operator(co…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
