数据仓库概念梳理

数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。


数据仓库是分析数据的平台,而不是创造数据的平台。我们是通过数仓去分析数据中的规律,而不是去创造修改其中的规律。因此数据进入数据仓库后,它便稳定且不会改变。
在这里插入图片描述




一、BI平台分为事实表、维表,然后两种表聚合成一个宽表。(注意这里取的BI平台是Davinci:https://edp963.github.io/davinci/)

其维表、事实表的关系图如下:

在这里插入图片描述

一个维表会对应多个事实表,而维表和事实表所有关联起来就形成一个宽表,其关系如同mysql中的外键索引,如A表中有B_id,A作为维表,B作为事实表,A(维表)可通过B_id来关联B(事实表),然后关联汇总生成的SQL就是宽表。


BI系统中可根据事实表和维度表的关系,应遵循如下两种模型的规范:星型模型和雪花型模型
星型表:反范式,数据冗余,查询效率高。
雪花型:数据不冗余,但引用层级深,维护复杂,查询效率较低。
下面举一个星型模型(体验课上课预约记录)的例子来说明如下:
在这里插入图片描述

上图以user_table_course_schedule的部分字段(user_id、table_course_schedule_id、teacher_id、gmt_create)来作为维度,并分别关联到了userinfo、tablec_course_schedule、teacherinfo这三张事实表,然后形成一张宽表。

以上面星型模型的例子,对其进行修改,举一个雪花模型例子来说明如下:

在这里插入图片描述

上面雪花模型中,学生信息事实表的orderId还继续关联了下一个层级体验课记录表,体验课报名记录表还可能会继续往下关联,对于复杂的系统而言,一般会采用雪花模型,关键层级会较多,而星型模型的关联过于单一,层级不够深,无法支持这种操作。

 
理解了上面两种模型的设计,接下来需要确定维度和指标的用法:
维度与指标的规范:
维度:维度用于关联事实表,也可用于做冗余显示(如gmt_create),用于数据检索,所以对于维度设计时,可将其进行分类(看业务扩展需要):
时间维:将时间进行维度细分,如gmt_create划分为年维度、月维度、日维度。
地域维:将地域划分为省维度、市维度、区维度。反例:把省市区 只作为一个维度,而没有拆分,后面进行筛选就不方便。
其他维度按业务进行扩招
指标:用于统计(如总和、平均数、最大值、最小值)、排序等。

可见之前做的那个daac的查询sql就是在利用不同的维度表dim和事实表fact进行雪花模型的关联,然后查出需要的事实表,查询的sql就是宽表。
宽表从字面意义上讲就是字段比较多的数据库表。通常是指业务主题相关的指标、维度、属性关联在一起的一张数据库表。需要维度和指标!而不是机械得认为把维度拆多了,就叫宽表!这个说法才是对的。




二、数据仓库分层

数据仓库架构分层设计包括STG(数据缓冲层)、ODS(数据操作层)、DWD(数据明细层)、DWS(主题汇总层)和ADM(数据应用层)。
在这里插入图片描述

1、STG层
主要完成业务系统结构化数据引入到数据中台,保留业务系统原始数据,缓冲层设计主要保持和数据源的一致性,不做任何类型转换和数据加工处理,为ODS层提供基础数据服务。
2、ODS层
对STG层数据进行类型转换或增量合并处理,得到的全量明细数据,为DWD、DWS和ADM层提供数据服务。
3、DWD层
明细宽表层,用于存放完整详细历史数据。面向业务过程建模,紧紧围绕着业务过程来设计,通过获取描述业务过程的度量来表达业务过程,包含了引用的维度和与业务过程有关的度量。其设计目标是为后续的Data Warehouse Model提供灵活性和扩展性的基础,同时可以在DW层无法支持需求时直接为应用层提供数据。DWD层由于与业务系统耦合程度较高,其稳定性会受到业务系统的影响。
4、DWS层
存放详细历史数据的公共汇总数据层,面向分析主题建模。DWS是核心数据层,是为应用层提供足够的灵活性和扩展性的基础。
5、ADM层
提供直接面向业务或应用的数据,主要对个性化指标数据进行架构处理,如无公用性或复杂性(如指数型、比值型、排名型等指标数据)的指标数据加工。同时为方便实现数据应用、数据消费的诉求,进行面向应用逻辑的数据组装(如打宽表集市、横表转纵表、趋势指标串等)。
6、DIM维度层:主要存储公共的属性数据,比如产品类别、地理位置、时间详情等信息。综上所述,数据仓库建设的主要工作,就是对原始业务数据进行汇聚,进行分层次的数据处理,生成业务需要的数据,提供给前端业务使用。


三 、 具体的看一下数据仓库的各个层级

①STG层是为了从各个数据源接收数据,并保持和源数据的一致。

1、首先是从不同地方收集数据,一般就是客户的数据库,网页和手机端的API, 用户自己手动上传的excel。
SAP的核心产品是ERP系统,是目前世界排名第一的ERP软件,同时也有其他如供应链管理、财务、CRM、支出、人力资源管理等多个企业管理平台。致力于帮助企业高效处理整个企业范围内的数据,实现无缝的信息流。世界500强中有超过80%的公司使用SAP。中国的大型国营、民营企业 90%使用SAP。2003年9月份,SAP公司特意推出SAP Business One中文版ERP软件,专门为中国中小型企业服务。
EPR: ERP系统是企业资源计划(Enterprise Resource Planning )的简称,是指建立在信息技术基础上,集信息技术与先进管理思想于一身,以系统化的管理思想,为企业员工及决策层提供决策手段的管理平台。
CRM: 客户关系管理 ,CRM库是企业集成管理各种客户数据、整理客户行为数据及一切客户相关数据的中心,为市场分析提供依据。
OMS :订单管理系统
WMS和TMS:都是Web地图服务协议。

②进入一些数据清洗,比如类型转换,数据合并之类的存入ODS层
也就是我们常说的ETL过程:抽取,转换,加载

进入cdm层
按照阿里巴巴的数据体系,ods是数据引入层,将非结构化的数据结构化,而cdm层中包含了dim(维度表),dws(公共汇总表),dwd(明细事实表)。简单理解,dim是将需要观察的角度写出来(维度表),dws是将ods的数据汇总(事实表),dwd则是在dim和dws的基础上写出部分指标(明细宽表);

进入ads层,展示给用户看的报表之类的
接着到ADS层,进行面向应用逻辑的数据组装(如打宽表集市、横表转纵表、趋势指标串等),生成一些直接给业务用的表。(我这里接触的一般是用于生成power bi报表和tableau报表)



四 数据工厂
一般情况下,我们数据ETL过程是通过编写本地的sql存储过程或者sparksql进行代码处理的
,然后部署到服务器上自动定时运行。
或者我们也可以将这些ETL的过程放在云上运行,称作数据工厂。


这里我们看看azure微软云的架构
在这里插入图片描述


Infrastructure Architecture

The solution will use following key Azure native products:

*Azure Blob Storage: exist as landing zone for API outputs and outbound zone for exports
*Azure Data Factory: ETL tool to connect to source systems via database direct connection or API call. Load raw data into data warehouse. Schedule job and Monitor

Azure SQL DB:
*data warehouse physical carrier that contains
*staging tables with raw data,
*meta tables with meta control data,
*target tables with cleansed/transformed data,
*export tables, etc

我们可以看到,这里azure并不是直接把数据存入了stg层,而是先放入了azure data factory,再从数据工厂通过缓存blog或者直接的存入azure sql DB。
那什么是数据工厂呢,数据工厂起什么作用呢?
在大数据环境中,原始、散乱的数据通常存储在关系、非关系和其他存储系统中。 但是,就其本身而言,原始数据没有适当的上下文或含义来为分析师、数据科学家或业务决策人提供有意义的见解。
大数据需要可以启用协调和操作过程以将这些巨大的原始数据存储优化为可操作的业务见解的服务。 Azure 数据工厂是为这些复杂的混合提取-转换-加载 (ETL)、提取-加载-转换 (ELT) 和数据集成项目而构建的托管云服务。

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

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

相关文章

初入职场的你,为何频繁跳槽?

大数据统计,初入职场的人跳槽频率相当高,而对于工作了2~3年的来说,跳槽频率也就没有那么频繁了,是什么原因导致了频繁跳槽?如何避免频繁跳槽呢? 是什么原因导致了跳槽? 不适应 从学校毕业&…

JS-异步编程-MDN文档学习笔记

异步JS 查看更多学习笔记:GitHub:LoveEmiliaForever MDN中文官网 异步编程简介 异步编程赋予程序如下特性 通过调用一个函数来启动一个长期运行的操作让函数开始操作并立即返回,这样我们的程序就可以保持对其他事件做出反应的能力当操作最…

【算法与数据结构】200、695、LeetCode岛屿数量(深搜+广搜) 岛屿的最大面积

文章目录 一、200、岛屿数量1.1 深度优先搜索DFS1.2 广度优先搜索BFS 二、695、岛屿的最大面积2.1 深度优先搜索DFS2.2 广度优先搜索BFS 三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、200、岛屿数量 1.1 深度优先搜…

2.Swift Tabbar的使用

Swift Tabbar的使用 在 Swift 中使用 UITabBarController 来创建一个具有选项卡界面的应用程序。下面是一个简单的示例,演示如何在 Swift 中使用 UITabBarController: import UIKitclass RootTabbar: UITabBarController {override func viewDidLoad()…

Redis篇----第十一篇

系列文章目录 文章目录 系列文章目录前言一、Redis 如何做内存优化?二、Redis 回收进程如何工作的?三、都有哪些办法可以降低 Redis 的内存使用情况呢?四、Redis 的内存用完了会发生什么?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…

【前端素材】推荐优质后台管理系统Symox模板(适用电商,附带源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具,它通常作为一个独立的后台界面存在,供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能: 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

LeetCode209长度最小子数组

参考链接&#xff1a;209.长度最小的子数组 注意&#xff1a;本题的子数组是连续的&#xff0c;一串一串的 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int i,j,minDis99999999;int sum0;//j控制子数组末尾&#xff0c;i控制子数…

gentoo安装笔记

最近比较闲&#xff0c;所以挑战一下自己&#xff0c;在自己的台式电脑上安装gentoo 下面记录了我亲自安装的步骤&#xff0c;作为以后我再次安装时参考所用。 整体步骤 一般来将一个linux发行版的安装步骤其实大体上都差不多&#xff0c;基本分为一下几步&#xff1a; 1. …

【算法与数据结构】1020、LeetCode飞地的数量

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;   程序如下&#xff1a; 复杂度分析&#xff1a; 时间复杂度&#xff1a; O ( ) O() O()。空间复杂…

RisingWave分布式SQL流处理数据库调研

概述 RisingWave是一款分布式SQL流处理数据库&#xff0c;旨在帮助用户降低实时应用的的开发成本。作为专为云上分布式流处理而设计的系统&#xff0c;RisingWave为用户提供了与PostgreSQL类似的使用体验&#xff0c;官方宣称具备比Flink高出10倍的性能&#xff08;指throughp…

快速清理_卸载docker_找到不用的进程_centos磁盘爆满_清理磁盘---Linux工作笔记071

查看大文件,并且按照大小排名 cd / | du -h |sort -hr|head -30 可以看到根据不用的结果进行删除 可以看到在/data/dict目录很大,里面的都可以删除 然后再去卸载docker,要不然,没有磁盘是卸载不了的 systemctl stop docker systemctl stop docker.socket yum remove docker-…

【2024上半年数学建模推荐】2024年第九届数维杯大学生数学建模挑战赛报名通知

2024上半年数模人必打的数学建模竞赛&#xff1a;数维杯全国大学生数学建模挑战赛已经开始报名。 赛题难度&#xff1a;四颗星 含金量&#xff1a;国家级二类 参赛对象&#xff1a;在校专科、本科、研究生 推荐理由&#xff1a;获奖率高&#xff0c;赛题难度比国赛略微简单…

Qt _day1

1.思维导图 2.设计一个简单登录界面 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->setWindowTitle("原神启动"); // this->setStyleSheet("background-color:rgb(255,184,64)");this->setStyl…

XSS攻击原理与解决方法

参考&#xff1a; web安全之XSS攻击原理及防范_xss攻击原理与解决方法-CSDN博客 跨站脚本攻击&#xff08;XSS)分类介绍及解决办法_反射型跨站脚本解决方案-CSDN博客 一、概述 XSS攻击是Web攻击中最常见的攻击方法之一&#xff0c;它是通过对网页注入可执行代码且成功地被浏…

ThinkPHP6中使用GatewayWorker

首先是先安装 composer require workerman/gateway-worker composer require workerman/gatewayclient下载demo 服务器开通TCP端口8282、1238 将Applications\YourApp目录随便放ThinkPHP6的哪个位置&#xff0c;我这里放在了app\gateway\ws目录中 配置composer.json "…

【竞技宝】DOTA2-喀山:莫言帕克毁天灭地 IG让一追二力克Neon

北京时间2024年2月21日,喀山未来运动会DOTA2项目在昨天迎来第二个比赛日。本日第二轮第二场比赛由IG对阵Neon。本场比赛两队在前两局各取一胜,决胜局IG的防守反击多次击溃Neon,最终IG让一追二击败Neon。以下是本场比赛的详细战报。 第一局: 首局比赛,IG在天辉方,Neon在夜魇方。…

c++try-catch块的使用和异常处理机制。异常的传播和捕获规则。

ctry-catch块的使用和异常处理机制。 在C中&#xff0c;try-catch块是一种异常处理机制&#xff0c;用于在程序执行期间捕获和处理可能发生的异常。try块用于包含可能抛出异常的代码&#xff0c;而catch块则用于捕获并处理这些异常。 以下是try-catch块的基本用法和异常处理机…

Python自动化部署与配置管理:Ansible与Docker

Ansible 和 Docker 是两种常用于自动化部署和配置管理的工具。Ansible 是一个基于 Python 的自动化运维工具&#xff0c;可以配置管理、应用部署、任务自动化等。而 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&…

算法项目(2)—— LSTM、RNN、GRU(SE注意力)、卡尔曼轨迹预测

本文包含什么? 项目运行的方式(包教会)项目代码LSTM、RNN、GRU(SE注意力)、卡尔曼四种算法进行轨迹预测.各种效果图运行有问题? csdn上后台随时售后.项目说明 本文实现了三种深度学习算法加传统算法卡尔曼滤波进行轨迹预测, 预测效果图 首先看下不同模型的指标: 模型RM…

unity学习(33)——角色选取界面(原版)

10ARPG网络游戏编程实践&#xff08;十&#xff09;&#xff1a;角色选择UI及创建面板制作&#xff08;一&#xff09;&#xff08;流畅&#xff09;_哔哩哔哩_bilibili 角色选择界面教程中是这样的&#xff01;&#xff08;这个美工肯定是不能拿出去卖的&#xff0c;但是是有…