大数据——一文详解数据仓库概念(数据仓库的分层概念和维度建模详解)

在这里插入图片描述

1、ods是什么?

  • ods层最好理解,基本上就是数据从源表拉过来,进行etl,比如MySQL映射到Hive,那么到了Hive里面就是ods层。
  • ods全称是 Operational Data Store,操作数据存储——“面向主题的”,数据运营层,也叫ods层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。但是,这一层面的数据却不等同于原始数据。在源数据装入这一层时,要进行诸如去噪(例如有一条数据中人的年龄是 300 岁,这种属于异常数据,就需要提前做一些处理)、去重(例如在个人资料表中,同一ID 却有两条重复数据,在接入的时候需要做一步去重)、字段命名规范等一系列操作。

2、数据仓库层dw

数据仓库层(dw),是数据仓库的主体.在这里,从 ods层中获得的数据按照主题建立各种数据模型。这一层和维度建模会有比较深的联系。

  • 数据明细层:DWD(Data Warehouse Detail)
  • 数据中间层:DWM(Data WareHouse Middle)
  • 数据服务层:DWS(Data WareHouse Service)

2.1、dwd明细层

明细层 (ods:Operational Data Store,dwd:data warehouse detail)

  • 概念: 是数据仓库的细节数据层,是对STAGE层数据进行沉淀,减少了抽取的复杂性,同时ods/dwd的信息模型组织主要遵循企业业务事务处理的形式,将各个专业数据进行集中,明细层跟stage层的粒度一致,属于分析的公共资源
  • 数据生成方式: 部分数据直接来自kafka,部分数据为接口层数据与历史数据合成。
  • 这个stage层不是很清晰

2.2、dwm 轻度汇总层( MID dwb data warehouse basis

  • 概念: 轻度汇总层数据仓库中dwd层和dm层之间的一个过渡层次,是对dwd层的生产数据进行轻度综合和汇总统计(可以把复杂的清洗,处理包含,如根据PV日志生成的会话数据)。轻度综合层与dwd的主要区别在于二者的应用领域不同,dwd的数据来源于生产型系统,并未满意一些不可预见的需求而进行沉淀;轻度综合层则面向分析型应用进行细粒度的统计和沉淀
  • 数据生成方式: 由明细层按照一定的业务需求生成轻度汇总表。明细层需要复杂清洗的数据和需要MR处理的数据也经过处理后接入到轻度汇总层。
  • 日志存储方式: 内表,parquet文件格式。
  • 日志删除方式: 长久存储。
  • schema 一般按天创建分区,没有时间概念的按具体业务选择分区字段。
  • 库与表命名。库名:dwb,表名:初步考虑格式为:dwb日期业务表名,待定。
  • 旧数据更新方式: 直接覆盖。

2.3、dws主题层( dm data market dws data warehouse service

  • 概念: 又称数据集市或宽表。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询, OLAP 分析,数据分发等。
  • 数据生成方式: 由轻度汇总层和明细层数据计算生成。
  • 日志存储方式: 使用impala内表,parquet文件格式。
  • 日志删除方式: 长久存储。
  • schema 一般按天创建分区,没有时间概念的按具体业务选择分区字段。
  • 库与表命名。库名:dm,表名:初步考虑格式为:dm日期业务表名,待定。
  • 旧数据更新方式: 直接覆盖。

3、ads

数据产品层(ads),这一层是提供为数据产品使用的结果数据。

主要是提供给数据产品和数据分析使用的数据,一般会存放在 ESMySQL 等系统中供线上系统使用,也可能会存在 Hive 或者 Druid中供数据分析和数据挖掘使用。如我们经常说的报表数据,或者说那种大宽表,一般就放在这里。

应用层

  • 概念: 应用层是根据业务需要,由前面三层数据统计而出的结果,可以直接提供查询展现,或导入至MySQL中使用。
  • 数据生成方式: 由明细层、轻度汇总层,数据集市层生成,一般要求数据主要来源于集市层。
  • 日志存储方式: 使用impala内表,parquet文件格式。
  • 日志删除方式: 长久存储。
  • schema 一般按天创建分区,没有时间概念的按具体业务选择分区字段。
  • 库与表命名。库名:暂定apl,另外根据业务不同,不限定一定要一个库。(其实就叫app_)就好了
  • 旧数据更新方式: 直接覆盖。

在这里插入图片描述

4、数据来源

数据主要会有两个大的来源:

业务库,这里经常会使用 Sqoop 来抽取

我们业务库用的是databus来进行接收,处理kafka就好了。

在实时方面,可以考虑用Canal 监听 MySQLBinlog,实时接入即可。(有机会补一下这个canal)

埋点日志,线上系统会打入各种日志,这些日志一般以文件的形式保存,我们可以选择用 Flume 定时抽取,也可以用用 Spark Streaming 或者 Storm来实时接入,当然,Kafka也会是一个关键的角色。

还有使用filebeat收集日志,打到kafka,然后处理日志

在这层,理应不是简单的数据接入,而是要考虑一定的数据清洗,比如异常字段的处理、字段命名规范化、时间字段的统一等,一般这些很容易会被忽略,但是却至关重要。特别是后期我们做各种特征自动生成的时候,会十分有用。

5、odsdw dim App

在这里插入图片描述

  • 每日定时任务型: 比如我们典型的日计算任务,每天凌晨算前一天的数据,早上起来看报表。 这种任务经常使用 HiveSpark 或者生撸 MR程序来计算,最终结果写入 HiveHbaseMySQLEs或者 Redis 中。
  • 实时数据: 这部分主要是各种实时的系统使用,比如我们的实时推荐、实时用户画像,一般我们会用 Spark StreamingStorm或者 Flink 来计算,最后会落入 EsHbase 或者 Redis 中。

6、维表层dim

维表层主要包含两部分数据:

  • 高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。
  • 低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。 数据量可能是个位数或者几千几万。

7、层级的简单分层图

见下图,对dwd层在进行加工的话,就是DWM层(MID层)(我们的数仓还是有很多dwm层的)。

在这里插入图片描述

dwsdwddimtmp的作用

  • dws 轻度汇总层,从ods层中对用户的行为做一个初步的汇总,抽象出来一些通用的维度:时间、ipid,并根据这些维度做一些统计值,比如用户每个时间段在不同登录ip购买的商品数等。这里做一层轻度的汇总会让计算更加的高效,在此基础上如果计算仅7天、30天、90天的行为的话会快很多。我们希望80%的业务都能通过我们的dws层计算,而不是ods
  • dwd 这一层主要解决一些数据质量问题和数据的完整度问题。比如用户的资料信息来自于很多不同表,而且经常出现延迟丢数据等问题,为了方便各个使用方更好的使用数据,我们可以在这一层做一个屏蔽。(汇总多个表)
  • dim 这一层比较单纯,举个例子就明白,比如国家代码和国家名、地理位置、中文名、国旗图片等信息就存在dim层中。
  • tmp 每一层的计算都会有很多临时表,专设一个DWTMP层来存储我们数据仓库的临时表。

8、主题

主题(Subject是在较高层次上将企业信息系统中的数据进行综合、归类和分析利用的一个抽象概念,每一个主题基本对应一个宏观的分析领域。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。例如“销售分析”就是一个分析领域,因此这个数据仓库应用的主题就是“销售分析”。

9、dwsdwd的关系

9.1、dwsdwd 是并行而不是先后顺序?

答:dwsdwd是并行的,都是数据dw层。

9.2、那其实对于同一个数据,这两个过程是串行的

答:dws 会做汇总,dwdods 的粒度相同,但是这两层之间也没有依赖的关系。

9.3、 dws 里面的汇总没有经过数据质量和完整度的处理,或者单独做了这种质量相关的处理,为什么不在 dwd 之上再做汇总呢?我的疑问其实就是,dws的轻度汇总数据结果,有没有做数据质量的处理?

答:ods 直接到 dws 就好,没必要过dwd,我举个例子,你的浏览商品行为,我做一层轻度汇总,就直接放在 dws了。但是你的资料表,要从好多表凑成一份,我们从四五份个人资料表中凑出来了一份完整的资料表放在了 dwd 中。然后在 app 层,我们要出一张画像表,包含用户资料和用户近一年的行为,我们就直接从dwd中拿资料, 然后再在 dws 的基础上做一层统计,就成一个app表了。当然,这不是绝对,dwsdwd 有没有依赖关系主要看有没有这种需求。

10、ods dwd 区别,有了 ods 层后感觉 dwd 没有什么用了?

答: 嗯,我是这样理解的,站在一个理想的角度来讲,如果 ods 层的数据就非常规整,基本能满足我们绝大部分的需求,这当然是好的,这时候 dwd 层其实也没太大必要。 但是现实中接触的情况是 ods 层的数据很难保证质量,毕竟数据的来源多种多样,推送方也会有自己的推送逻辑,在这种情况下,我们就需要通过额外的一层 dwd来屏蔽一些底层的差异。

dwd 主要是对 ods 层做一些数据清洗和规范化的操作,dws 主要是对 ods 层数据做一些轻度的汇总。

11、app/ads层的作用

11.1、感觉数据集市层是不是没地方放了,各个业务的数据集市表是应该在dwd 还是在 app

答: 主要就是明确一下数据集市层是干什么的,如果数据集市层放的就是一些可以供业务方使用的宽表表,放在 app 层就行。如果数据集市层是一个比较泛一点的概念,那么其实 dwsdwdapp 这些合起来都算是数据集市的内容。

11.2、存到 RedisES 中的数据算是 app层吗?

答: 是的,因为app 层主要存放一些相对成熟的表,能供业务侧使用的。这些表可以在 Hive 中,也可以是从 Hive 导入 Redis 或者 ES 这种查询性能比较好的系统中。

12、图解分层

在这里插入图片描述

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

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

相关文章

突破界限:R200科研无人车,开辟研究新天地

提到科研无人车,大家可能首先想到的是其在自动驾驶和其他先进技术领域的应用。然而,随着科技的不断进步,科研无人车已经在智慧城市建设、商业服务、地质勘探、环境保护、农业技术革新、灾害应急和自动化服务等多个领域发挥着至关重要的作用。…

Linux MTR(My TraceRoute)command

Internet上有许多小型网络测试工具:Ping、Traceroute、Dig、Host等。 但是,这些工具的功能都比较单一。今天会给大家分享一个包含ping和traceroute功能的工具:MTR 文章目录 什么是MTR?MTR可以提供哪些功能Linux MTR可用选项Linux MTR用法推荐…

【UGUI】事件侦听EventSystem系统0学

前言介绍 EventSystem是Unity UGUI中的一个重要组件,用于处理用户输入事件,如点击、拖拽、滚动等。它负责将用户输入事件传递给合适的UI元素,并触发相应的事件回调函数(就是你想要做的事情,自定义函数)。 …

FPGA程序执行相关知识点

1.目前,大多数FPGA芯片是基于 SRAM 的结构的, 而 SRAM 单元中的数据掉电就会丢失,因此系统上电后,必须要由配置电路将正确的配置数据加载到 SRAM 中,此后 FPGA 才能够正常的运行。 常见的配置芯片有EPCS 芯片 &#x…

最新报告!11月美国市场的“遥遥领先”来了,该爆的单总会来!

今年周期最长的大促节点已接近尾声,美区市场的11月份的商品销售战绩已全面来袭: 保健类目竟弯道超车,交出了将近翻倍的成绩单;美妆个护、女装与女士内衣等“她经济”类目持续高涨且“辣眼”单品不断;家居大类目下的市…

JenKins快速安装与使用,Gitlab自动触发Jenkins

一、JenKins 0.准备,配置好环境 1)Git(yum安装) 2)JDK(自行下载) 3)Jenkins(自行下载) 1.下载安装包 进官网,点Download下方即可下载。要下…

使用netconf配置华为设备

实验目的: 公司有一台CE12800的设备,管理地址位172.16.1.2,现在需要编写自动化脚本,通过SSH登陆到设备上配置netconf协议的用户名,密码以及netconf服务,并且通过netconf协议将设备的loopback0接口IP地址配…

一文读懂Asyncio

什么是Asyncio asyncio 是用来编写并发代码的库,使用async/await语法。 asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。 asyncio 往往是构建 IO 密集型和高层级结构化…

Linux创建与编辑视图

本博客将会详细讲解如何在Linux中如何编辑配置文件 输出重定向 对于一台设备而言&#xff0c;存在着两种设备&#xff0c;分别负责输入与输出&#xff1a; 显示器&#xff08;输出设备>&#xff09; 与 键盘&#xff08;输入设备<&#xff09; 对于Linux系统而言&#…

深入理解 Vue 中的指针操作(二)

文章目录 ☘️引言☘️基本用法&#x1f342;v-for指令&#x1f342;v-model指令&#x1f331;v-model适用表单控件&#x1f331;修饰符&#x1f9c4;.lazy 修饰符&#x1f9c4;.number 修饰符&#x1f9c4;.trim 修饰符 ☘️结论 ☘️引言 Vue.js 是一款非常流行且功能强大的…

Golang数据类型(数组)

数组重要概念 数组&#xff08;Array&#xff09;是一种非常常见的数据类型&#xff0c;几乎所有的计算机编程语言中都会用到它 在Go语言中&#xff0c;数组有如下的特点&#xff1a; 数组里的元素必须全部为同一类型&#xff0c;要嘛全部是字符串&#xff0c;要嘛全部是整数…

onelist能让alist聚合网盘拥有海报墙

什么是 onelist &#xff1f; onelist 是一个类似 emby 的专注于刮削 alist 聚合网盘形成影视媒体库的程序。 主要解决以下痛点&#xff1a; alist 挂载云盘后能在网页端看视频&#xff0c;却没有分类&#xff0c;没有海报墙&#xff1b;使用 webdav 挂载本地后&#xff0c;用…

最大熵模型

1. 最大熵原理 学习概率模型时&#xff0c;在所有可能的概率模型(分布)中&#xff0c;熵最大的模型是最好的模型。 假设离散随机变量X的概率分布是P(X)&#xff0c;则其熵为 且满足0<H(P)<logN 当且仅当X的分布是均匀分布时右边的等号成立&#xff0c;即当X服从均匀分布…

卷积神经网络(CNN)注意力检测

文章目录 一、前言二、前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据3. 查看数据 二、数据预处理1.加载数据2. 可视化数据4. 配置数据集 三、调用官方网络模型四、设置动态学习率五、编译六、训练模型七、模型评估1. Accuracy与Loss图2. …

外汇天眼:外汇市场中的“双向交易”是什么意思?

说到外汇市场&#xff0c;总免不了提到它双向交易的优势&#xff0c;很多新手会对这一点有所疑问&#xff0c;今天我们就帮大家解决这一个疑问。 何谓双向交易&#xff1f; 金融市场上&#xff0c;交易者最常接触到的股票&#xff0c;多属于单向交易。 单向交易的模式便是「先…

1145. 北极通讯网络(Kruskal,并查集维护)

北极的某区域共有 n 座村庄&#xff0c;每座村庄的坐标用一对整数 (x,y) 表示。 为了加强联系&#xff0c;决定在村庄之间建立通讯网络&#xff0c;使每两座村庄之间都可以直接或间接通讯。 通讯工具可以是无线电收发机&#xff0c;也可以是卫星设备。 无线电收发机有多种不…

MySQL之redo log

聊聊REDO LOG 为什么需要redolog&#xff1f; 那redolog主要是为了保证数据的持久化&#xff0c;我们知道innodb存储引擎中数据是以页为单位进行存储&#xff0c;每一个页中有很多行记录来存储数据&#xff0c;我们的数据最终是要持久化到硬盘中&#xff0c;那如果我们每进行…

MySQL修改已存在数据的字符集

在实际应用中&#xff0c;如果一开始没有正确的设置字符集&#xff0c;在运行一段时间以后&#xff0c;才发现当前字符集不能满足要求&#xff0c;需要进行调整&#xff0c;但又不想丢弃这段时间的数据&#xff0c;这个时候就需要修改字符集。 在MySQL设置默认字符集和校对规则…

【探索Linux】—— 强大的命令行工具 P.18(进程信号 —— 信号捕捉 | 信号处理 | sigaction() )

阅读导航 引言一、信号捕捉1. 内核实现信号捕捉过程2. sigaction() 函数&#xff08;1&#xff09;函数原型&#xff08;2&#xff09;参数说明&#xff08;3&#xff09;返回值&#xff08;4&#xff09;函数使用 二、可重入函数与不可重入函数1. 可重入函数条件2. 不可重入函…

Pytorch模型编译报错 UserWarning: (Resize(), RandomResizedCrop(), etc.)——解决办法

1、问题描述 使用Pytorch训练模型时&#xff0c;编译报错&#xff1a; UserWarning: The default value of the antialias parameter of all the resizing transforms (Resize(), RandomResizedCrop(), etc.) will change from None to True in v0.17, in order to be consis…