当前位置: 首页 > news >正文

离线数据仓库项目搭建——准备篇

文章目录

  • (一)什么是数据仓库
  • (二)数据仓库基础知识
  • (三)数据仓库建模方式
    • (1)星行模型
    • (2)雪花模型
    • (3)星型模型 VS 雪花模型
  • (四)数据仓库分层
    • (1)为什么要分层
    • (2)数据仓库分层设计
    • (3)DWD数据清洗原则
    • (4)数据仓库命名规范
    • (5)典型的数据仓库系统架构
  • (五)项目需求分析

(一)什么是数据仓库

我们前面学习过Hive,说Hive其实就是一个数据仓库,可以这样理解,就是把Hive认为是一种技术,通过Hive这种技术可以实现数据仓库的建设。

数据仓库(Data Warehouse)是一个面向主题的、集成的、稳定的且随时间变化的数据集合,用于支持管理人员的决策

  1. 面向主题
    主题就是类型的意思。
    传统数据库主要是为应用程序进行数据处理,未必会按照同一主题存储数据;
    数据仓库侧重于数据分析工作,是按照主题存储的。
    这一点,类似于传统农贸市场与超市的区别市场里面,针对一个商贩,他卖的萝卜、白菜这些蔬菜以及水果会在一个摊位上;、
    而超市里,蔬菜和水果是分开的,并且在蔬菜里面也会进行分类,不同类型的蔬菜放到不同的地方。也就是说,农贸市场里的菜(数据)是按照商贩(应用程序)去归类(存储)的,而超市里面则是按照蔬菜、水果的类型(同主题)归类的。
  2. 集成
    传统数据库通常与某些特定的应用相关,数据库之间相互独立。而数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。
  3. 稳定
    稳定说的是相对稳定
    传统数据库中的数据通常实时更新,数据根据需要及时发生变化。数据仓库的数据主要供企业决策分析使用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。
  4. 变化
    这里的变化说的是反映历史变化传统数据库主要关心当前某一个时间段内的数据,而数据仓库中的数据通常包含历史信息,它里面记录了企业从过去某一时间点(如开始应用数据仓库的时间)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出分析和预测。

企业数据仓库的建设,是以现有企业业务系统和大量业务数据的积累为基础。数据仓库不是静态的概念,只有把信息及时交给需要这些信息的使用者,供他们做出改善其业务经营的决策,信息才能发挥作用,信息才有意义。而把信息加以整理归纳和重组,并及时提供给相应的管理决策人员,是数据仓库的根本任务。

(二)数据仓库基础知识

1:事实表、维度表
事实表是指保存了大量业务数据的表,或者说保存了一些真实的行为数据的表
例如:销售商品所产生的订单数据

什么是维度表呢?
维度其实指的就是一个对象的属性或者特征,例如:时间维度,地理区域维度,年龄维度
这是维度的概念。
维度表里面存放的其实就是刚才我们所说的那些维度相关的信息。
2:数据库三范式
其实严格意义上来说,关系型数据库的范式是有多种的
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
巴斯-科德范式(BCNF)
第四范式(4NF)
第五范式(5NF)

  1. 首先看第一范式(1NF):
    它的意思是说数据库表的每一列都是不可分割的原子数据项。
  2. 第二范式(2NF)表示在1NF的基础上,数据库表中每一列都和主键相关,不能只和主键的某一部分相关(针
    对联合主键而言)
    也就是说一个表中只能保存一种类型的数据,不可以把多种类型数据保存在同一张表中
  3. 第三范式(3NF): 要求一个数据库表中不包含已在其它表中包含的非主键字段
    就是说,表中的某些字段信息,如果能够被推导出来,就不应该单独的设计一个字段来存放(能尽量外键 join就用外键join)。
    很多时候,我们为了满足第三范式往往会把一张表拆分成多张表

3:维度建模模型:雪花模型、星型模型

(三)数据仓库建模方式

数据仓库建模可以使用多种方式
1:ER实体模型,这种模型其实就是满足数据库第三范式的模型,这就是刚才我们为什么要分析数据库中的三范式了。
ER模型是数据库设计的理论基础,当前几乎所有的OLTP系统设计都采用ER模型建模的方式
Bill Inom提出的数仓理论,推荐采用ER关系模型进行建模,不过这种方式在实际工作中不推荐使用。
2:维度建模模型
Ralph Kimball提出的数仓理论中,提出了维度建模,将数据仓库中的表划分为事实表和维度表。
基于事实表和维度表进行维度建模。
维度建模通常又分为星型模型和雪花模型。
维度建模是我们在构建数据仓库中常用的方式。
3:Data Vault模型
Data Vault是在ER模型的基础上衍生而来,模型设计的初衷是有效的组织基础数据层,使之易扩展、灵活
的应对业务的变化,同时强调历史性、可追溯性和原子性,不要求对数据进行过度的一致性处理;并非针对分析场景所设计。
4:Anchor模型
Anchor是对Data Vault模型做了更近一步的规范化处理,初衷是为了设计高度可扩展的模型,核心思想是所有的扩张只添加而不修改,于是设计出的模型基本变成了k-v结构的模型。
Data Vault模型和Anchor模型,这两种模型大家知道就行了,很少使用。

维度建模模型

(1)星行模型

星型模型和雪花模型主要区别就是对维度表的拆分,
对于雪花模型,维度表的设计更加规范,一般符合3NF;
而星型模型,一般采用降维的操作,利用冗余来避免模型过于复杂,提高易用性和分析效率。
在这里插入图片描述
这里面的中间的订单表是事实表,外面的四个是维度表。
这几个维度表,其实严格意义上来说,只能满足第二范式,是不满足第三范式的。
但是这样的好处是查询效率比较高,在查询的时候不需要关联很多张表。
缺点就是数据有冗余。

(2)雪花模型

在这里插入图片描述
这个里面订单表是一个事实表,其余的都是维度表。
针对商品维度表外层又拆分出来了一个商品类目的维度表,这样拆分之后其实就满足第三范式了,但是这
样就变的复杂了,后期在获取商品维度数据的时候,还需要关联这个商品类目维度表。

(3)星型模型 VS 雪花模型

  • 冗余:雪花模型符合业务逻辑设计,采用3NF设计,有效降低数据冗余;星型模型的维度表设计不符合3NF,反规范化,维度表之间不会直接相关,牺牲部分存储空间
  • 性能:雪花模型由于存在维度间的关联,采用3NF降低冗余,通常在使用过程中,需要连接更多的维度表,导致性能偏低;星型模型违反三范式,采用降维的操作将维度整合,以存储空间为代价有效降低维度表连接数,性能比雪花模型高

在实际工作中我们多采用星型模型,因为数据仓库主要是侧重于做数据分析,对数据的查询性能要求比较
高,所以星型模型是比较好的选择,在实际工工作中我们会尽可能的多构建一些宽表,提前把多种有关联
的维度整合到一张表中,后期使用时就不需要多表关联了,比较方便,并且性能也高。

(四)数据仓库分层

(1)为什么要分层

  1. 清晰的数据结构:每一个分层的数据都有它的作用域,这样我们在使用表的时候能更方便地定位和理
    解。
  2. 数据血缘追踪:简单来讲可以这样理解,我们最终给业务方呈现的是一个能直接使用的业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围,分层之后就很好定位问题,以及可以清晰的知道它的危害范围。
  3. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少重复计算。
  4. 把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性, 当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。

(2)数据仓库分层设计

数据仓库一般会分为4层

  1. ODS层:原始数据层,数据源中的数据,采集过来之后,原样保存。
  2. DWD层:明细数据层:这一层是对ODS层的数据进行清洗,解决一些数据质量问题和数据的完整度
    问题。
  3. DWS层:这一层是对DWD层的数据进行轻度聚合汇总,生成一系列的中间表,提升公共指标的复用
    性,减少重复加工,并且构建出来一些宽表,用于提供后续的业务查询。
  4. APP层:根据业务需要,由前面三层的数据统计而出的结果,可以直接提供查询展现,一般会把APP
    层的数据导出到MySQL中供线上系统使用,提供报表展示、数据监控及其它功能。也有公司把这层
    称为DM层。虽然名字不一样,但是性质是一样的。

在这里插入图片描述

(3)DWD数据清洗原则

  1. 数据唯一性校验(通过数据采集工具采集的数据会存在重复的可能性)
  2. 数据完整性校验(采集的数据中可能会出现缺失字段的情况,针对缺失字段的数据建议直接丢掉,如
    果可以确定是哪一列缺失也可以进行补全,可以用同一列上的前一个数据来填补或者同一列上的后一
    个数据来填补)
  3. 数据合法性校验-1(针对数字列中出现了null、或者-之类的异常值,全部替换为一个特殊值,例如0或
    者-1,这个需要根据具体的业务场景而定)
  4. 数据合法性校验-2(针对部分字段需要校验数据的合法性,例如:用户的年龄,不能是负数)

(4)数据仓库命名规范

  1. 针对数据仓库的每一层都在Hive中创建一个数据库,数据库的命名包含每一层的标识符。
    例如:针对ODS层可以在Hive中创建数据库 ods_mall,把同一层的表都放到一个数据库里面,方便管理
  2. 针对每一层中的表名,在创建的时候可以使用每一层的标识符开头。
    例如:针对ODS层,创建的表名为:ods_user,这样方便后期使用,只要看到表名就可以知道这个表示哪一层的了。
  3. 针对一些临时表,我们可以在对应的分层中创建表名的时候,以_tmp结尾。
  4. 针对一些备份的表,可以在表名后面添加_bak。

(5)典型的数据仓库系统架构

典型的企业数据仓库系统,通常包含数据源、数据存储与管理、数据的访问三个部分
在这里插入图片描述

(五)项目需求分析

想要开发一个完整的数据仓库系统,至少需要以下这几个功能模块。
1:数据采集平台,这个模块主要负责采集各种数据源的数据
2:数据仓库,这个模块负责数据存储和管理
3:数据报表,这个模块其实就是数据可视化展示了
通过这三个模块可以实现数据采集,构建数据仓库,最后基于数据仓库中的数据实现上层应用,体现数据仓库的价值。

相关文章:

离线数据仓库项目搭建——准备篇

文章目录(一)什么是数据仓库(二)数据仓库基础知识(三)数据仓库建模方式(1)星行模型(2)雪花模型(3)星型模型 VS 雪花模型(四…...

十七、本地方法接口的理解

什么是本地方法? 1.简单来讲,一个Ntive method 就是一个Java调用非Java代码的接口.一个Native Method 是这样一个Java方法:该方法的实现由非Java语言实现,比如C,这个特征并非Java所特有,很多其他的编程语言都由这一机制,比如在C中…...

【halcon】模板匹配参数之金字塔级数

背景 今天,在使用模板匹配的时候,突然程序卡死,CPU直接飙到100%。最后排查发现是模板匹配其中一个参数 NumLevels 导致的: NumLevels: The number of pyramid levels used during the search is determined with numLevels. If n…...

jupyter lab安装和配置

jupyter lab 安装和配置 一、jupyter lab安装并配置 安装jupyterlab pip install jupyterlab启动 Jupyter lab默认会打开实验环境的,也可以自己在浏览器地址栏输入127.0.0.1:8888/lab 汉化 pip install jupyterlab-language-pack-zh-CN刷新一下网页&#xff0…...

用Docker搭建yolov5开发环境

拉取镜像 sudo docker pull pytorch/pytorch:latest 创建容器 sudo docker run -it -d --gpus "device0" pytorch/pytorch bash 查看所有容器 sudo docker ps -a 查看运行中的容器 sudo docker ps 进入容器 docker start -i 容器ID 将依赖包全都导入到requiremen…...

Apache Pulsar 云原生消息中间件之王

一、简介 pulsar,消息中间件,是一个用于服务器到服务器的消息系统,具有多租户、高性能等优势。 pulsar采用发布-订阅的设计模式,producer发布消息到topic,consumer订阅这些topic处理流入的消息,并当处理完…...

精选博客系列|公用事业中的VMware:在边缘重新定义价值

VMware 已经成为公用事业行业的核心。您可以在那里找到例如 VMware vSphere(包括基础 Hypervisor ESXi 和 VMware vCenter 建立的整体控制平面)的核心产品。来自软件定义的基础架构带来的诸多好处使 IT 团队将其先前基于硬件的系统转变为 VMware Cloud F…...

数字档案室测评的些许感悟

我是甲方,明明我家是档案“室”,为什么申请的是数字档案“馆”? 笔者正对着手里的一份方案苦笑,甲方爸爸是某机关单位档案室,方案最后的附件赫然写着几个大字:“申请国家级数字档案馆……“。这样的事屡见…...

Java 函数式编程实例

一、函数式编程概念 函数式编程是一种编程的范式和编程的方法论(programming paradigm),它属于结构化编程的一种,主要的思想是把运算的过程尽量通过一组嵌套的函数来实现。 函数式编程的几个特点: 函数可以作为变量、参数、返回值和数据类…...

Ant design Chart onReady函数使用外部变量问题

一、问题描述封装了一个Chart组件,它接收一个boolean类型的props,根据这个boolean的true或false执行不同的操作。经过console.log验证,onReady函数只会在组件初次渲染时取到props值,不管后面的props变化成什么都无法重新取值。二、…...

Unity使用webSocket与服务器通信(一)搭建一个简单地服务器和客户端

你想在unity WebGL里面使用TCP通信吗,那么你可以用一用webSocket。当然,桌面端也可以使用webSocket,这样Unity多平台发布的时候,业务层的通信代码可以使用一套,而不是桌面用socket,网页用http… 一、什么是…...

SpringCloud微服务实战——搭建企业级开发框架(四十九):数据字典注解的设计与实现

数据字典是系统中基本的必不可少的功能,在多种多样的系统中,数据字典表的设计都大同小异。但是使用方式确是多种多样,设计好一套易用的数据字典功能模块,可以使开发事半功倍。 常用的数据字典使用方式: 直接在SQL语句…...

mysql下,实现保存指定用户、ip、命令的查询日志

环境:mysql 8.0.14 社区版 阅读文本需要的背景知识:对数据库的基本概念(触发器、存储过程、事件),mysql下general log的配置指令 背景:因审计需要,对于数据库操作需要留痕。实际访问数据库的有…...

Vue 3.0 学习笔记之基础知识

系列文章目录 提示:阅读本章之前,请先阅读目录 文章目录系列文章目录前言Vue 3.0 创建与Vue2.0对比的变化关闭语法检查setup 组合式函数compositions响应式数据 refreactive 函数Vue3.0 响应原理ref 和 reactive 区别setup 注意点computed 计算函数watch…...

WebGIS行政区炫酷特效——流光特效教程

先来看下效果: 图片截图: 流光特效的思路是从行政区的边界中随着时间不断的取若干段线条换成另一种高亮颜色。 流光的第一步首先是发光,发光的教程在这里: GIS矢量图形多边形地块行政区发光,阴影发光特效实现_疯狂的GISer的博客-CSDN博客 学会发光以后,接下来需要做的…...

2023-3-3 刷题情况

保证文件名唯一 题目描述 给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用&#xf…...

《青浦区加快发展跨境电子商务实施细则(审议稿)》

为进一步贯彻落实《中华人民共和国电子商务法》,上海市《关于促进本市跨境电子商务发展的若干意见》,切实做好青浦区跨境电子商务试点工作,探索和规范跨境电子商务管理,促进跨境电子商务健康快速发展,青浦商务委根据多…...

【React全家桶】React生命周期

React生命周期 1、初始化阶段 componentDidMount:render之前最后一次修改状态的机会 render:只能访问this.props和this.state,不允许修改状态和DOM输出 componentDidMount:成功render并渲染完成真实DOM之后触发 2、旧生命周期 👉👉👉加…...

B. Count the Number of Pairs

原题链接 纯纯水一下; 昨天晚上的比赛,由于半夜打的,精神状态不好,wa了俩发直接睡觉去了,现在白天写写发现,不难,水中水 模拟题吧,题目怎么说就这么作 Kristina has a string ss…...

离线数据仓库项目--技术选择

文章目录(一)技术选型1)数据采集工具2)数据存储3)数据计算4)数据可视化(二)整体架构设计(三)服务器资源规划(一)技术选型 1&#xff…...

GC Garbage Collectors

本质一、算法1、哪些是垃圾?引用计数法:reference countPython中使用了。个对象如果没有任何与之关联的引用,即他们的引用计数都不为 0,则说明对象不太可能再被用到,那么这个对象就是可回收对象。漏洞:循环…...

【网络】-- 网络基础

(本文是网络的宏观的概念铺垫) 目录 计算机网络背景 网络发展 认识 "协议" 网络协议初识 协议分层 OSI七层模型 TCP/IP 五层(或四层)模型 报头 以太网 碰撞 路由器 IP地址和MAC地址 IP地址与MAC地址总结 IP地址 MAC地址 计算机…...

二、Redis安装配置(云服务器、vmware本地虚拟机)

一、自己购买服务器 自己购买阿里云、青牛云、腾讯云或华为云服务器, 自带CentoOS或者Ubuntu环境,直接开干 二、Vmware本地虚拟机安装 1、VMWare虚拟机的安装,不讲解,默认懂 2、如何查看自己的linux是32位还是64位 getconf L…...

【学习Docker(七)】详细讲解Jenkins部署SpringCloud微服务项目,Docker-compose启动

Jenkins部署SpringCloud微服务项目,Docker-compose启动 座右铭:《坚持有效输出,创造价值无限》 本文介绍使用Jenkins部署SpringCloud微服务项目,Docker-compose启动。 之前写过安装Jenkins的过程,这里就不写安装细节了…...

时机将至,名创优品或将再掀起一波消费热浪

北京时间2月28日,名创优品发布2023财年中报,财报显示,2023财年第二季度营收规模有所收窄,但净利润、毛利率、门店数量均实现了不错的增长,总体表现可圈可点。 (资料来源:富途牛牛) …...

深圳大学计软《面向对象的程序设计》实验8 静态与友元

A. 旅馆旅客管理(静态成员) 题目描述 编写程序,实现某旅馆的客人住宿记录功能。 定义一个Customer类,要求输入客人的姓名,创建一个Customer对象。类声明如下: 调用类的Display函数输出客人ID&#xff…...

【基础算法】单链表的OJ练习(2) # 链表的中间结点 # 链表中倒数第k个结点 #

文章目录前言链表的中间结点链表中倒数第k个结点写在最后前言 对于单链表的OJ练习&#xff0c;需要深刻理解做题的思路&#xff0c;这样我们才能够在任何场景都能够熟练的解答有关链表的问题。 关于OJ练习&#xff08;1&#xff09;&#xff1a;-> 传送门 <-&#xff0c…...

vue路由文件拆分管理

随着项目的原来越大&#xff0c;路由越来越多&#xff0c;我们的路由也会越来越多&#xff0c;如果都集中在一个文件中&#xff0c;会很冗杂文件很长。这时候我们可以将路由文件拆分&#xff0c;可读、方便管理。多人合作添加路由也能更多的避免代码冲突 代码拆分目录如图&…...

实例解析Java反射

反射是大多数语言里都必不不可少的组成部分&#xff0c;对象可以通过反射获取他的类&#xff0c;类可以通过反射拿到所有方法&#xff08;包括私有&#xff09;&#xff0c;拿到的方法可以调用&#xff0c;总之通过“反射”&#xff0c;我们可以将Java这种静态语言附加上动态特…...

Android 9适配经验总结

目录四大组件适配Activity启动方式适配Service启动方式适配前台服务需要添加权限限制静态广播的接收限制ContentResolver数据更新操作权限与安全相关主要适配点运行时动态权限申请默认不支持 http 请求SharedPreferences 适配四大组件适配 Android 应用的开发离不开 Android 四…...

温州做模具的网站/山东最新资讯

实例说明代理是Java SE 1.3版新增的特性。使用代理可以在程序运行时创建一个实现指定接口的新类。通常只有在编译时无法确定需要使用哪个接口时才需要使用代理&#xff0c;这对于应用程序员很少见。对于系统程序员而言&#xff0c;代理可以为工具类提供更加灵活的特性。本实例模…...

宁波市建设局网站/视频剪辑培训机构哪个好

实现方法&#xff1a;利用--where参数对关系型数据库数据进行筛选&#xff0c;将结果导入非关系型数据库。根据特殊字段&#xff0c;将日期作为一个查询条件对源数据进行匹配&#xff0c;将符合条件的记录作为结果采集到非关系型数据库中格式&#xff1a;import --connect jdbc…...

球赛投注网站开发/湘潭seo优化

在一个BLOG上看到的,一段挺好的话&#xff0c;适合于做团队领导者的人记得真心诚意&#xff0c;以情感人&#xff1b;推心置腹&#xff0c;以诚待人开诚布公&#xff0c;以理服人&#xff1b;言行一致&#xff0c;以信取人令行禁止&#xff0c;依法治人&#xff1b;设身处地&am…...

怎么做网站免费的/比百度强大的搜索引擎

目标如题&#xff0c;希望在anaconda的某个特定环境中把此环境的gcc版本降级为4.8.* 首先进入anaconda官网&#xff0c;在里面搜索gcc。 会出现很多版本&#xff0c;找到想要的版本&#xff0c;也可以搜索类似gcc_4&#xff0c;gcc4&#xff0c;gcc-4等&#xff08;这个搜索算…...

wordpress 游客留言/怎么自己开网站

前提条件&#xff1a; (1) zabbix服务器端已经成功安装并且运行。 (2) zabbix客户端已经成功建立并且运行。 1 下载并且安装msmtp软件 Wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download tar jxvf msmtp-1.4.32.tar.bz2 cd ms…...

针对网站做搜索引擎做优化/重庆seo网络优化咨询热线

java.lang.StackOverflowError: null springboot 错误原因&#xff1a;service层 自动装配mapper错误 装配成本service了&#xff0c; 出现这个问题的原因是由于深度递归&#xff0c;抛出此错误以指示应用程序的堆栈已耗尽。...