【数据仓库与联机分析处理】多维数据模型
目录
一、数据立方体
二、数据模型
(一)星形模型
(二)雪花模式
(三)事实星座模式
三、多维数据模型中的OLAP操作
(一)下钻
(二)上卷
(三)切片
(四)切块
(五)转轴
数据仓库和OLAP工具是基于多维数据模型的,该模型以数据立方体(Cube)的形式来观察和分析数据。
一、数据立方体
区别于关系数据模型中的二维表,数据立方体是一个多维的数据模型,类似于一个超立方体。它允许从多个维度来对数据建模,并提供多维的视角以观察数据。
数据立方体由维和事实定义。一般来说,维是透视图或是一个组织想要记录的实体。在通常情况下,多维数据模型会围绕某个主题来构建,该中心主题被称为事实,事实是用数值来度量的。
一个分店的销售数据表,如表所示,分店的销售按照时间维(按季度组织)和商品维(按所售商品的类型组织)表示:
XX武汉分店 | ||
---|---|---|
时间(季度) | 商品(类型)(单位:台) | |
笔记本 | 台式机 | |
Q1 | 408 | 887 |
Q2 | 496 | 945 |
Q3 | 522 | 768 |
Q4 | 6000 | 1023 |
下面从三维角度观察销售数据,如表所示,添加一个分店地址维,从时间、商品类型和分店地址来观察数据。
时间(季度) | XX武汉分店 | XX宜昌分店 | XX北京分店 | XX郑州分店 | ||||
商品(类型)(单位:台) | ||||||||
笔记本 | 台式机 | 笔记本 | 台式机 | 笔记本 | 台式机 | 笔记本 | 台式机 | |
Q1 | 408 | 887 | 609 | 1089 | 812 | 1280 | 321 | 654 |
Q2 | 496 | 945 | 688 | 1671 | 1092 | 843 | 431 | 892 |
Q3 | 522 | 768 | 789 | 1230 | 533 | 657 | 450 | 900 |
Q4 | 600 | 1023 | 806 | 1800 | 1288 | 438 | 560 | 732 |
概念上讲,这些数据也能够以三维数据立方体的形式来表示。如果需要四维的数据,可以在上表的基础上再多添加一个供应商维度。虽然不能直观地去想象,但是可以把四维的数据看作是三维数据的序列。例如,供应商1对应一个三维数据立方体,供应商2对应个三维数据立方体……以此类推,就可以把任意n维数据立方体看作是n-1维数据立方体的序列。
需要注意的是,数据立方体只是对多维数据存储的一种抽象,数据的实际物理存储方式并不等同于它的逻辑表示。
二、数据模型
在数据库设计中,通常使用的是实体—联系数据模型,数据的组织由实体的集合和他们之间的联系组成,这种数据模型适用于联机事务处理。然而,对于数据仓库的联机数据分析,则需要使用简明、面向主题的数据模型。目前最流行的数据仓库数据模型是多维数据模型。这种模型常用的模式有三种,分别是星形模式、雪花模式、事实星座模式。
对于这三种模式的定义,将用到一种基于SQL的数据挖掘查询语言(Data Mining Query Language , DMQL)。DMQL包括定义数据仓库的语言原语。数据仓库可以使用两种原语进行定义,一种是立方体定义,一种是维定义。
立方体定义语句具有如下语法形式:
define cube <cube_name>[<dimension list>]:<meature_list>
维定义语句具有如下语法形式:
define dimension <dimension_name> as (<attribute_or_subdimension_list>)
(一)星形模型
星形模式是最常见的模型范例,其包括:
(1)一个大的、包含大批数据、不含冗余的中心表(事实表);
(2)一组小的附属维表。
这种模式图很像是星星,如图所示,维表围绕中心表显示在中心表的射线上。在这个图中,一个销售事实表Sales共有四个维,分别为 time维、branch维、item维和 location维。该模式包含一个中心事实表Sales,它包含四个维的关键字和三个度量 units_sold、dollars_sold 和 avg_sales。
在星形模式中,每个维只用一个维表来表示,每个表各包含一组属性。例如,item 维表包含属性集 {item_key,item_name,brand,type,supplier_type},这一限制可能会造成某些冗余。例如,某些商品属于同一个商标,或者来自于同一个供应商。
图中的星形模式使用DMQL定义如下:
define cube sales_star [time,item,branch,location]:
dollars_sold = sum(sales_in_dollars), units_sold = count(*), avg_sales = avg(sales_in_dollars)
define dimension time as (time_key, day, day_of_the_week, month, quarter, year)
define dimension item as (item_key, item_name, brand, type, supplier_type)
define dimension branch as (branch_key, branch_name, branch_type)
define dimension location as (location_key, street, city, state_or_province, country)
define cube定义了一个数据立方体——sales _star,它对应于图中的中心表 Sales 事实表。该命令说明维表的关键字和三个度量:units_sold、dollars_sold 和 avg_sales。数据立方体有四个维,分别为 time、item、branch 和 location,其中每一个 define dimension 语句分别定义一个维。
(二)雪花模式
雪花模式是对星形模式的扩展,如图所示。在雪花模式中,某些维表被规范化,进一步分解到附加表(维表)中。从而使得模式图形变成类似于雪花的形状。从图中可以看到,location 表被进一步细分出 city 维,item 表被进一步细分出 supplier 维。
图中的雪花模式可以使用DMQL定义如下:
define cube sales_snowflake [time,item,branch,location]:
dollars_sold = sum(sales_in_dollars), units_sold = count (*), avg_sales = avg (sales_in_dollars)
define dimension time as (time_key, day, day _of _the week, month, quarter, year)
define dimension item as (item_key, item_name, brand, type, supplier(supplier_key, supplier_type))
define dimension branch as (branch_key, branch _name, branch_type)
define dimension location as(lacation _key, street, city(city_key, state_or_province, country))
该定义类似于星形模式中的定义,不同的是雪花模式对维表 item 和 location 的定义更加规范。在 sales_snowflake 数据立方体中,sales_star 数据立方体的 item 维被规范化成两个维表: item 和 supplier。注意 supplier 维的定义在 item 的定义中被说明,用这种方式定义 supplier,隐式的在 item 的定义中创建了一个 supplier_key。类似的,在 sales_snowflake 数据立方体中,sales_star 数据立方体的 location 维被规范化成两个维表 location 和 city,city 的维定义在 location 的定义中被说明,city_key 在 location 的定义中隐式地创建。
(三)事实星座模式
在复杂的应用场景下,一个数据仓库可能会由多个主题构成,因此会包含多个事实表,而同一个维表可以被多个事实表所共享,这种模式可以看作是星形模式的汇集,因而被称为事实星座模式。
如图所示,图中包含两张事实表,分别是 Sales 表和 Shipping 表,Sales 表的定义与星形模式中的相同。Shipping 表有五个维或关键字:time_key,item_key,shipper_key,from_location,to_ location。两个度量:dollars_cost 和 units_shipped。在事实星座模式中,事实表是能够共享维表的,例如,Sales 表和 Shiping 表共享 time、 item 和 location 三个维表。
图中的事实星座模式可以使用DMQL定义如下:
define cube sales [time,item, branch,location]:
dollars_sold = sum(sales in dollars), units_sold = count (*), avg_sales = avg(sales_in_dollars)
define dimension time as (time_key, day, day_of _the_Week, month, quarter, year)
define dimension item as (item_key, item_name, brand, type, supplier_type)
define dimension branch as (branch_key, branch_name, branch_type)
define dimension location as (location_key, street, city, state_or_province, country)
define cube shipping [time, item, shipper, from_location, to_location]:
dollars _cost = sum(cost_in _dollars), units _shipped = count(*)
define dimension time as time in cube sales
define dimension item as item in cube sales
define dimension shipper as(shipper_key, shipper_name, location as location in cube sales, shipper_type)
define dimension from_location as location in cube sales
define dimension to_location as location in cube sales
define cube 语句用于定义数据立方体 sales 和 shipping,分别对应图中的两个事实表。注意数据立方体 sales 的 time, item 和 location 维分别可以被数据立方体 shipping 共享,由于这三个维表已经在 sales 中被定义,在定义 shipping 时可以直接通过 “as” 关键字进行引用。
三、多维数据模型中的OLAP操作
在学习多维数据模型中的OLAP操作之前,首先需要认识一下概念分层。
概念分层提出的背景是因为由数据归纳出的概念是有层次的。例如,假定在一个location维表中,location是“华中科技大学”,可以通过常识归纳出 “武汉市” “湖北省” “中国” “亚洲” 等不同层次的更高级概念,这些不同层次的概念是对原始数据在不同粒度上的概念抽象。所谓概念分层,实际上就是将低层概念集映射到高层概念集的方法。
许多概念分层隐藏在数据库模式中。例如,假定 location 维由属性 number、street、city、province、country 定义。这些属性按一个全序相关,形成一个层次,如 “city<province<country”。维的属性也可以构成一个偏序,例如,time 维基于属性 day、week,month、quarter、year 就是一个偏序 “day<month<quarter;week}<year”(通常人们认为周是跨月的,不把它看作是月的底层抽象;而一年大约包含52个周,常常把周看作是年的底层抽象)。这种通过定义数据库模式中属性的全序或偏序的概念分层称作模式分层。
概念分层也可以通过对维或属性值的离散化或分组来定义,产生集合分组分层。例如,可以将商品的价格从高到低区间排列,这样的概念分层就是集合分组分层。对于商品价格这一维,根据不同的用户视图,可能有多个概念分层,用户可能会更加简单地把商品看作便宜、价格适中、昂贵这样的分组来组织概念分层。
概念分层允许用户在各种抽象级别处理多维数据模型,有一些OLAP数据立方体操作允许用户将抽象层物化成为不同的视图,并能够交互查询和分析数据。由此可见,OLAP为数据分析提供了友好的交互环境。
典型的OLAP的多维分析操作包括:下钻(Drill-down)上卷(Roll-up)切片(Slice)切块(Dice)以及转轴(Pivot)等。下面将以表“四个分店的销售数据表”的数据为例分别对这些操作进行详细介绍。
(一)下钻
下钻(Drill-down)是指在维的不同层次间的变化,从上层降到下一层,或者说是将汇总数据拆分成更加细节的数据。如图所示,下钻操作从时间这一维度对数据立方体进行更深一步的细分,从季度下钻到月份,从而能够针对每个月份的数据进行进一步更加细化的分析。
(二)上卷
上卷(Roll-up)实际上就是下钻的逆操作,即从细粒度数据向高层的聚合。如图所示,上卷操作也是从时间这一维度对数据立方体进行操作的,将第一季度和第二李度的数据合开为上半年的数据,将第三季度和第四季度的数据合并为下半年的数据,从而将数据聚合,使得在史高层次上讲行数据分析成为可能。
(三)切片
切片(Slice)是指选择维中特定区间的数据或者某批特定值进行分析。如图所示,对于商品类型这一维度添加限制条件,只针对台式机这个商品类型进行切片操作,就可以单独分析关于台式机的所有四个分店在各个季度的所有数据。
(四)切块
切块(Dice)操作通过在两个或多个维上进行选择,定义子数据立方体。如图所示,展示了一个切块操作,它涉及三个维,并通过指定商品类型、时间和分店这三个限制各件对据立方体进行切块。
(五)转轴
转轴(Pivot)即维的位置的互换,就像是二维表的行列转换。转轴操作只是转动数据的视角,提供数据的替代表示。如图所示,展示了一个转轴操作,转轴实际上只是将时间和分店这两个维在二维平面上进行转动。转轴的其他例子包括转动三维数据方体,或将一个三维立方体变换成二维的平面序列等。
相关文章:
【数据仓库与联机分析处理】多维数据模型
目录 一、数据立方体 二、数据模型 (一)星形模型 (二)雪花模式 (三)事实星座模式 三、多维数据模型中的OLAP操作 (一)下钻 (二)上卷 (三…...
【网络面试(3)】浏览器委托协议栈完成消息的收发
前面的博客中,提到过很多次,浏览器作为应用程序,本身是不具备向网络中发送网络请求的能力,要委托操作系统的内核协议栈来完成。协议栈再调用网卡驱动,通过网卡将请求消息发送出去,本篇博客就来探讨一下这个…...
Kotlin: Jetpack — ViewModel简单应用
ViewModel 概览 Android Jetpack 的一部分。 ViewModel 类是一种业务逻辑或屏幕级状态容器。它用于将状态公开给界面,以及封装相关的业务逻辑。 它的主要优点是,它可以缓存状态,并可在配置更改后持久保留相应状态。这意味着在 activity 之…...
【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)
Java后门机制 — sun.misc.unsafe 打破Java的安全管控关于Unsafe的编程建议实例化Unsafe后门对象使用sun.misc.Unsafe创建实例单例模式处理实现浅克隆(直接获取内存的方式)直接使用copyMemory原理分析 密码安全使用Unsafe类—示例代码 运行时动态创建类超…...
私有云平台搭建openstack和ceph结合搭建手册
OpenStack与云计算 什么是云? 如何正确理解云,可以从以下几个方面。 云的构成。 用户:对用户而言是透明无感知的,不用关心底层构成,只需要知道利用云完成自己任务即可。 云提供商:对云资产管理和运维。 云…...
debug mccl 02 —— 环境搭建及初步调试
1, 搭建nccl 调试环境 下载 nccl 源代码 git clone --recursive https://github.com/NVIDIA/nccl.git 只debug host代码,故将设备代码的编译标志改成 -O3 (base) hipperhipper-G21:~/let_debug_nccl/nccl$ git diff diff --git a/makefiles/common.mk b/makefiles/…...
ros python 接收GPS RTK 串口消息再转发 ros 主题消息
代码是一个ROS(Robot Operating System)节点,用于从GPS设备读取RTK(实时动态)数据并通过ROS主题发布。 步骤: 导入必要的模块: rospy 是ROS的Python库,用于ROS的节点、发布者和订阅者。serial 用于串行通信。NavSatFix 和 NavSatStatus 是从GPS接收的NMEA 0183标准消息…...
2024年网络安全竞赛-页面信息发现任务解析
页面信息发现任务说明: 服务器场景:win20230305(关闭链接)在渗透机中对服务器信息收集,将获取到的服务器网站端口作为Flag值提交;访问服务器网站页面,找到主页面中的Flag值信息,将Flag值提交;访问服务器网站页面,找到主页面中的脚本信息,并将Flag值提交;访问服务器…...
ARM DMA使用整理
Direct Memory Access, 直接存储访问。同SPI,IIC,USART等一样,属于MCU的一个外设,用于在不需要MCU介入的情况下进行数据传输。可以将数据从外设传输到flash,也可以将数据从flash传输到外设,或者flash内部数据移动。 它…...
移动通信原理与关键技术学习(第四代蜂窝移动通信系统)
前言:LTE 标准于2008 年底完成了第一个版本3GPP Release 8的制定工作。另一方面,ITU 于2007 年召开了世界无线电会议WRC07,开始了B3G 频谱的分配,并于2008 年完成了IMT-2000(即3G)系统的演进——IMT-Advanc…...
光明源@智慧厕所技术:优化生活,提升卫生舒适度
在当今数字科技飞速发展的时代,我们的日常生活正在经历一场革命,而这场革命的其中一个前沿领域就是智慧厕所技术。这项技术不仅仅是对传统卫生间的一次升级,更是对我们生活品质的全方位提升。从智能感应到数据分析,从环保设计到舒…...
【Bootstrap学习 day13】
Bootstrap5 下拉菜单 下拉菜单通常用于导航标题内,在用户鼠标悬停或单击触发元素时显示相关链接列表。 基础的下拉列表 <div class"dropdown"><button type"button" class"btn btn-primary dropdown-toggle" data-bs-toggl…...
Shell:常用命令之dirname与basename
一、介绍 1、dirname命令用于去除文件名中的非目录部分,删除最后一个“\”后面的路径,显示父目录。 语法:dirname [选项] 参数 2、basename命令用于打印目录或者文件的基本名称,显示最后的目录名或文件名。 语法:basen…...
Linux-v4l2框架
框架图 从上图不难看出,v4l2_device作为顶层管理者,一方面通过嵌入到一个video_device中,暴露video设备节点给用户空间进行控制;另一方面,video_device内部会创建一个media_entity作为在media controller中的抽象体&a…...
VPC网络架构下的网络上数据采集
介绍 想象这样一个场景,一开始在公司里,所有的部门的物理机、POD都在一个经典网络内,它们可以通过 IP 访问彼此,没有任何限制。因此有很多系统基于此设计了很多点对点 IP 直连的访问,比如中心控制服务器 S 会主动访问物…...
模拟算法(模拟算法 == 依葫芦画瓢)万字
模拟算法 基本思想引入算法题替换所有的问号提莫攻击Z字形变换外观数列数青蛙 基本思想 模拟算法 依葫芦画瓢解题思维要么通俗易懂,要么就是找规律,主要难度在于将思路转换为代码。 特点:相对于其他算法思维,思路比较简单&#x…...
QtApplets-SystemInfo
QtApplets-SystemInfo 今天是2024年1月3日09:18:44,这也是2024年的第一篇博客,今天我们主要两件事,第一件,获取系统CPU使用率,第二件,获取系统内存使用情况。 这里因为写博客的这个本本的环境配置不…...
vue3防抖函数封装与使用,以指令的形式使用
utils/debounce.js /*** 防抖函数* param {*} fn 函数* param {*} delay 暂停时间* returns */ export function debounce(fn, delay 500) {let timer nullreturn function (...args) {// console.log(arguments);// const args Array.from(arguments)if (timer) {clearTim…...
Hive学习(13)lag和lead函数取偏移量
hive里面lag函数 在数据处理和分析中,窗口函数是一种重要的技术,用于在数据集中执行聚合和分析操作。Hive作为一种大数据处理框架,也提供了窗口函数的支持。在Hive中,Lag函数是一种常用的窗口函数,可以用于计算前一行…...
Centos Unable to verify the graphical display setup
ERROR: Unable to verify the graphical display setup. 在Linux下安装Oracle时 运行 ./runInstaller 报错 ERROR: Unable to verify the graphical display setup. This application requires X display. Make sure that xdpyinfo exist under PATH variable. No X11 DISPL…...
Java 说一下 synchronized 底层实现原理?
Java 说一下 synchronized 底层实现原理? synchronized 是 Java 中用于实现同步的关键字,它保证了多个线程对共享资源的互斥访问。底层实现涉及到对象头的 Mark Word 和锁升级过程。 synchronized 可以用于方法上或代码块上,分别对应于方法…...
nginx访问路径匹配方法
目录 一:匹配方法 二:location使用: 三:rewrite使用 一:匹配方法 location和rewrite是两个用于处理请求的重要模块,它们都可以根据请求的路径进行匹配和处理。 二:location使用: 1:简单匹配…...
偌依 项目部署及上线步骤
准备实验环境,准备3台机器 1.作为前端服务器,mysql,redis服务器--同时临时作为代码打包服务器 192.168.2.65 nginx-server 2.作为后端服务器 192.168.2.66 java-server-1 192.168.2.67 java-server-2 安装nginx/mysql #安装nginx [rootweb-nginx ~]…...
PHP特性知识点扫盲 - 上篇
概述 之前在分析thinkphp源码的时候,对依赖注入等等php高级的特性一直想做一个梳理和总结,一直没有时间,好不容易抽一点时间对技术的盲点做一个扫盲和总结。 特性 1.命名空间 命名空间是在PHP5.3中引入,是一个很重要的工具&am…...
Docker一键极速安装Nacos,并配置数据库!
1 部署方式 1.1 DockerHub javaedgeJavaEdgedeMac-mini ~ % docker run --name nacos \ -e MODEstandalone \ -e JVM_XMS128m \ -e JVM_XMX128m \ -e JVM_XMN64m \ -e JVM_MS64m \ -e JVM_MMS64m \ -p 8848:8848 \ -d nacos/nacos-server:v2.2.3 a624c64a1a25ad2d15908a67316d…...
交换机04_远程连接
通过远程管理方式连接交换机 1、telnet简介 telnet 是应用层协议 基于传输层TCP协议的,默认端口:23 采用的是明文密码方式 不是很安全,一般用于内网管理。 2、ssh协议简介 ssh 是应用层的协议,基于传输层的TCP协议&#x…...
ES6定义一个类(函数内部定义属性,,原型定义方法 ), 实现继承?
ES6中使用class关键字定义一个类,使用extends关键字实现继承。下面是一个示例: class Animal {constructor(name) {this.name name;}sayHello() {console.log(Hello, my name is ${this.name});} }class Dog extends Animal {constructor(name, breed)…...
使用 Process Explorer 和 Windbg 排查软件线程堵塞案例分享
目录 1、问题说明 2、线程堵塞的可能原因分析 3、使用Windbg和Process Explorer确定线程中发生了死循环 4、根据Windbg中显示的函数调用堆栈去查看源码,找到问题 4.1、在Windbg定位发生死循环的函数的方法 4.2、在Windbg中查看变量的值去辅助分析 4.3、是循环…...
“智慧”千里眼助力水泵站
泵站是为水提供势能和压能,解决无自流条件下的排灌、供水和水资源调配问题的唯一动力来源,在工农业用水、防洪、排涝和抗旱减灾等方面发挥着重要作用。一旦出现异常,对经济生产将造成难以估量的损失,给水利安全管理造成负担。因此…...
C++多态性——(5)运算符重载(第二节)
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 身先才能率人,律己才能服人…...
怎么用支付宝做发卡网站/品牌营销推广方案怎么做
2019独角兽企业重金招聘Python工程师标准>>> 前言 本文作为《Spark性能优化指南》的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题。 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘…...
乐清做网站公司哪家好/一点优化
这几天重读了一遍,倒没什么特别意图,纯粹是放松自己,也顺便记录在案。书由英国作家蕾秋乔伊斯著,黄妙瑜译,译本读起来还是比较舒服的,只不过文中出现两次关于“北京”的词语,感觉挺突兀的&#…...
中国做的很好的食品网站/网站制作平台
1. 插件kdb_flashback简介 插件kdb_flashback是KingbaseES 的一个扩展插件。主要功能是提供错误数据的快速恢复能力,目前提供的闪回技术包括闪回回收站,闪回查询,闪回版本查询,闪回到任意时间点。 插件名为 kdb_flashback 插件版…...
wordpress vip会员可见/汽车网站建设方案
1. 什么是工厂模式 Factory 工厂模式就是一种静态的类,它具有静态的方法,静态的方法可以根据传入的参数不同,返回不同的类的实例,而返回的不同的类的实例,由于实现了同一接口,因此可以调用同一方法。这样做…...
开发软件下载网站/解释seo网站推广
最关键的部分是计算序列的同时,不会引发无限递归, #:: 表达式的右边只有在被请求时才会被求值。转载于:https://www.cnblogs.com/lianghong881018/p/11193358.html...
微信网页版手机端/太原seo哪家好
2019独角兽企业重金招聘Python工程师标准>>> 在自定义返回按钮的时候,侧滑手势返回往往默认失效了,怎么让侧滑有效呢 UIButton *btn [UIButton buttonWithType:UIButtonTypeCustom]; [btn setTitle:"返回" forState:UIControlStat…...