技术标签: # hive 雪花模型 数据仓库 数据仓库模型 星型模型
数据仓库模型是一种合理定义数据仓库内容的结构,方便对数据仓库进行的操作和数据仓库系统的维护,通常包括对数据库、表、视图、索引和数据,使用预定义的设计类型进行定期结构化,例如 Star Schema
、Snowflake Schema
、Galaxy Schema
(也称为 Fact Constellation Schema
)。
模型是描述整个数据库的逻辑描述。在数据仓库中,包括记录的名称和描述。它具有所有数据项以及与数据关联的不同聚合。就像数据库有一个模式一样,它也需要为数据仓库维护一个模式。根据数据仓库中维护的设置和数据,有不同的模式。
事实表和维度表 构成了数据仓库中任何模型的基础,这些表和维度表对于理解很重要。
当所有维表都直接连接到 “事实表” 上时,整个图解就像星星一样,故将该模型称为星型模型,如图 1 。
星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余。
如: 在地域维度表中,存在国家 A 省 B 的城市 C 以及国家 A 省 B 的城市 D 两条记录,那么国家 A 和省 B 的信息分别存储了两次,即存在冗余。
图1. 销售数据仓库中的星型模型
在星型模式中,一个事实表和若干的维度表连接,这种结构类似于星形,因此被称为星形模式。
这里的事实表由数据仓库中的主要信息组成。它围绕较小的维度查找表,这些表将包含不同事实表的详细信息。每个维度中存在的主键与事实表中存在的外键相关。
事实表有两种类型的列,这些列包含维度表的外键和事实表的属性。在星的中心,有一个事实表,星的点是维度表。
事实表采用 3NF
形式,维度表采用非规范化形式。星型模式中的每个维度都应该由唯一的维度表表示。维度表应该连接到一个事实表。事实表应该有一个键和属性。
当有一个或多个维度表没有直接连接到事实表上,而是通过其他维度表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为更小小的维度表,形成一些局部的 " 层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。
如图 2,将地域维表又分解为国家,省份,城市等维表。它的优点是 : 通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余。
图 2. 销售数据仓库中的雪花型模型
星型模型因为数据的冗余所以很多统计查询不需要做外部的连接,因此一般情况下效率比雪花型模型要高。星型结构不用考虑很多正规化的因素,设计与实现都比较简单。雪花型模型由于去除了冗余,有些统计就需要通过表的联接才能产生,所以效率不一定有星型模型高。正规化也是一种比较复杂的过程,相应的数据库结构设计、数据的 ETL、以及后期的维护都要复杂一些。因此在冗余可以接受的前提下,实际运用中星型模型使用更多,也更有效率。
星座模型是由星型模型延伸而来,星型模型是基于一张事实表而星座模式是基于多张事实表,并且共享维度表信息,这种模型往往应用于数据关系比星型模型和雪花模型更复杂的场合。星座模型需要多个事实表共享维度表,因而可以视为星形模型的集合,故亦被称为星系模型
从本质上讲
由于其中可以同时包含星型和雪花模式,因此 Galaxy Schema 已完全标准化。标准化只不过是将信息分解为更多的层次,以促进事实表和维表之间的有意义的关系。这可确保系统中的数据准确、有组织且定义明确。
当系统由连接到维度表 C、D、E、F、G、H、I 的事实表 A 和 B 组成时,可以构建 Galaxy Schema。根据规则,事实表可以相互连接,维度表可以与系统内部的任何事实表和维度表连接,下面的示例将有助于更好地理解Galaxy Schema的底层概念。
在这个例子中,学生数据库有两个事实表——学生和教职员工。两个事实表都可以有共同的维度——专业课程、艺术与科学,基于各自的部门。此外,从学生维度来看,标准化适用于获得合作社和校外工作。这可以进一步细分以提及经验类型和实习。
另一方面,教学人员会给学生布置作业。并且,这些分配维度表可以进一步规范化以定义评估细节。所有这些维度表都可以根据项目提供给设计团队的信息的局限性进一步规范化。
当为项目团队提供多个事实表,而不是单独连接的维度和事实表之间共享的维度时,Galaxy Schema 可以是一个组织良好的解决方案。大多数高级应用程序可能需要多个事实表来共享维度表,而在这种情况下,Galaxy Schema 是一个给定的方法。如果要求同意更多的存储空间、接受低性能、具有多个事实表和多个维度表的结构、规范化的时间和空间,那么 Galaxy Schema 将是该特定数据库系统的最佳解决方案。
维度的层级,标准的星型模型的维度层级只有一层, 而雪花星型的维度可能涉及多层。
星座模型 基本上是很多数据仓库的常态,因为很多数据仓库都是多个事实表的。所以星座不星座只反映是否有多事实表,他们之间是否共享一些维度表。
星座模型区别于前两种,也是基于多个事实表
特征 | 星型架构 | 雪花架构 | 星座模型 |
---|---|---|---|
维护/更改 | 它有更多的冗余数据,因此更难更改或维护 | 由于冗余较少,此模式更易于更改和维护 | 冗余哨,但是架构复杂,难以实现 |
易懂 | 查询的复杂度较低,因此很容易理解 | 应用的查询更复杂,因此难以理解 | 复杂 |
查询执行时间 | 它有更少的外键,因此查询执行速度更快,花费的时间更少。 | 由于外键较多,查询执行时间较多,或者查询执行速度较慢。 | |
数据仓库类型 | 更适合具有单一关系的数据集市,即一对一或一对多 | 更适合复杂的关系,即多对多关系 | 复杂的应用程序 |
连接数 | 它有更多的连接数 | 它的连接数量较少 | 多 |
维度表 | 每个维度只有一个维度表 | 单个维度有一个或多个维度表 | |
可用性 | 如果维度表的大小较小,即行数较少,则首选星型模式。 | 当维度表的大小较大时很好用 | |
规范化和非规范化 | 事实表和维度表都是非规范化的。 | 事实表是非规范化的,而维度表是规范化的 | 复杂 |
数据模型 | 它遵循自上而下的方法 | 它遵循自下而上的方法 |
首先就是星座不星座这个只跟数据和需求有关系,跟设计没关系,不用选择。
星型还是雪花,取决于性能优先,还是避免冗余、灵活更优先。
目前实际企业开发中,不会绝对选择一种,根据情况灵活组合,甚至并存(一层维度和多层维度都保存)。但是整体来看,更倾向于维度更少的星型模型。尤其是 hadoop 体系,减少 join 就是减少 shuffle,性能差距很大。(关系型数据可以依靠强大的主键索引)
雪花模型使用的是规范化数据,也就是说数据在数据库内部是组织好的,以便消除冗余,因此它能够有效地减少数据量。通过引用完整性,其业务层级和维度都将存储在数据模型之中。
相比较而言,星形模型使用的是反规范化数据。在星形模型中,维度直接指的是事实表,业务层级不会通过维度之间的参照完整性来部署。
主键是一个单独的唯一键(数据属性),为特殊数据所选择。在上面的例子中,Advertiser_ID 就将是一个主键。外键(参考属性)仅仅是一个表中的字段,用来匹配其他维度表中的主键。在我们所引用的例子中,Advertiser_ID 将是 Account_dimension 的一个外键。
在雪花模型中,数据模型的业务层级是由一个不同维度表主键-外键的关系来代表的。而在星形模型中,所有必要的维度表在事实表中都只拥有外键。
第三个区别在于性能的不同。雪花模型在维度表、事实表之间的连接很多,因此性能方面会比较低。举个例子,如果你想要知道Advertiser 的详细信息,雪花模型就会请求许多信息,比如Advertiser Name、ID以及那些广告主和客户表的地址需要连接起来,然后再与事实表连接。
而星形模型的连接就少的多,在这个模型中,如果你需要上述信息,你只要将Advertiser的维度表和事实表连接即可。
雪花模型加载数据集市,因此 ETL 操作在设计上更加复杂,而且由于附属模型的限制,不能并行化。
星形模型加载维度表,不需要再维度之间添加附属模型,因此ETL就相对简单,而且可以实现高度的并行化。
雪花模型使得维度分析更加容易,比如“针对特定的广告主,有哪些客户或者公司是在线的?”
星形模型用来做指标分析更适合,比如“给定的一个客户他们的收入是多少?”
事实星座模式是数据仓库最长使用的数据模式,尤其是企业级数据仓库(EDW)。这也是数据仓库区别于数据集市的一个典型的特征,从根本上而言,数据仓库数据模型的模式更多是为了避免冗余和数据复用,套用现成的模式,是设计数据仓库最合理的选择。当然大数据技术体系下,数据仓库数据模型的设计,还是一个盲点,探索中
参考:
https://my.oschina.net/u/4143249/blog/3105223
文章浏览阅读3.8k次。1、将下载好的萤石js插件,添加到SoringBoot项目中。位置可参考下图所示。(容易出错的地方,在将js插件在html页面引入时,发生路径错误的问题)所以如果对页面中引入js的路径不清楚,可参考下图所示存放路径。2、将ezuikit.js引入到demo-live.html中。(可直接将如下代码复制到你创建的html页面中)<!DOCTYPE html><html lan..._ezuikit 测试的url
文章浏览阅读322次。第二步,在弹出的对话框选择,设备驱动—>PLC—>莫迪康—>ModbusRTU—>COM,根据配置软件选择的协议选期期,这里以此为例,然后点击“下一步”。第四步,把使用虚拟串口打勾(GPRS设备),根据需要选择要生成虚拟口,这里以选择KVCOM1为例,然后点击“下一步”设备ID即Modbus地址(1-255) 使用DTU时,为下485接口上的设备地址。第六步,Modbus的从机地址,与配置软件相同,这里以1为例,点击“下一步“第五步,Modbus的从机地址,与配置软件相同,这里以1为例,点击“下一步“_组态王ua
文章浏览阅读9.4k次,点赞22次,收藏19次。安装npm相当于安装node.js,Node.js已自带npm,安装Node.js时会一起安装,npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西_npm安装配置
文章浏览阅读748次,点赞21次,收藏26次。大家好,小编来为大家解答以下问题,python基础训练100题,python入门100例题,现在让我们一起来看看吧!宝子们还在新手村练级的时候,不单要吸入基础知识,夯实自己的理论基础,还要去实际操作练练手啊!由于文章篇幅限制,不可能将100道题全部呈现在此除了这些,下面还有我整理好的基础入门学习资料,视频和讲解文案都很齐全,用来入门绝对靠谱,需要的自提。保证100%免费这不,贴心的我爆肝给大家整理了这份今天给大家分享100道Python练习题。大家一定要给我三连啊~
文章浏览阅读1k次。 为了在 Linux ( Ubuntu) 上安装sublime,一般大家都会选择常见的教程或是 sublime 官网教程,然而在国内这种方法可能失效。为此,需要用安装包安装。以下就是使用官网安装包安装的教程。打开 sublime 官网后,点击右上角 download, 或是直接访问点击打开链接,即可看到各个平台上的安装包。选择 Linux 64 位版并下载。下载后,打开终端,进入安装..._ubuntu 安装sumlime text打不开
文章浏览阅读563次,点赞13次,收藏6次。CrossOver24是一款类虚拟机软件,专为macOS和Linux用户设计。它的核心技术是Wine,这是一种在Linux和macOS等非Windows操作系统上运行Windows应用程序的开源软件。通过CrossOver24,用户可以在不购买Windows授权或使用传统虚拟机的情况下,直接在Mac或Linux系统上运行Windows软件和游戏。该软件还提供了丰富的功能,如自动配置、无缝集成和实时传输等,以实现高效的跨平台操作体验。
文章浏览阅读1.7k次。一个用聊天的方式让ChatGPT帮我写的线程安全的环形List_为什么gpt一写list就卡
文章浏览阅读336次。我们在前面的文章里曾写过Web应用中乱码产生的原因和处理方式,旧文回顾:深度揭秘乱码问题背后的原因及解决方式其中我们提到可以通过Filter的方式来设置请求和响应的encoding,来解..._filterconfig selectencoding
文章浏览阅读651次。转自:http://www.jb51.net/article/36480.htmencodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,decodeURI可以用来把字符还原回来_js encodeur decodeurl
文章浏览阅读1.9w次,点赞6次,收藏3次。前言在日常的Android开发当中,我们肯定要打包apk。但是今天我打包的时候遇到一个很奇怪的问题Android The destination folder does not exist or is not writeable,大意是目标文件夹不存在或不可写。出现问题的原因以及解决办法上面有说报错的中文大意是:目标文件夹不存在或不可写。其实问题就在我们的打包界面当中图中标红的Desti..._the destination folder does not exist or is not writeable
文章浏览阅读94次。一、配置代码编辑区的样式 <1>打开Eclipse,Help —> Install NewSoftware,界面如下: <2>点击add...,按下图所示操作: name:随意填写,Location:http://eclipse-color-th..._ecplise高大上设置
文章浏览阅读2.8k次。一,下载mysql:http://dev.mysql.com/downloads/mysql/; 打开页面之后,在Select Platform:下选择linux Generic,如果没有出现Linux的选项,请换一个浏览器试试。我用的谷歌版本不可以,换一个别的浏览器就行了,如果还是不行,需要换一个翻墙的浏览器。 二,下载完后解压缩并放到安装文件夹下: 1、MySQL-client-5.6.2_linux mysql 安装 mysql-5.6.24-1.linux_glibc2.5.x86_64.rpm-bundle