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

数据仓库基础知识

什么是数据仓库?

数仓,DataWarehouse,是一个 面向主题的、集成的、稳定的、与时间相关的 数据集合。

而这个数据集合的建立,是为了支持管理者的决策过程。

也就是说,我们通过建设数仓,为业务中的流程改进、成本计算,产出收入等环节,提供相应的决策指导及流程监控。

数仓有什么特点?

面向主题性

数仓中的所有数据,都是面向特定的业务域而产生的。

比如,某电商APP,就会有面向用户的数仓,面向订单的数仓,面向商品的数仓

我们在建设数仓时,需要在较高层次上把业务拆分为各个域,我们用数据的方式,去定义了这个域,就有了数仓中的面向主题性。

集成性

面向主题性中我们说到,我们的数据需要对应不同的业务域。

那每个业务域中的每个事件产生的数据,都会有最初的底层数据库。

怎么通过这些数据库,抽取我们想要的业务域,集成一个可描述的,有层级的,完整的数据集合,就是数据仓库的建立过程。

这个过程,其实就是抽取零散业务数据构建集合的过程。

所以,数据仓库具有集成性。

稳定性

物理上,数据存储需要稳定性。

业务上,我们要保证数仓建设的结构清晰,层次分明,从而保证整体数仓结构的稳定性。

通俗来说,就是保证数仓结构不要频繁变更

与时间强相关

从物理存储上说,数据仓库随着时间和业务的变化,会不断往里追加数据内容,也会不断删掉旧的数据内容。数仓中的每个表格,都会有对应的“生命周期”。

从业务意义上说,数据仓库反应的是,某一段历史时间内,业务在数据上的表现情况。

数仓的建设方式有哪些?

• K模式

大家可以去搜索一下 Ralph Kimball 这个大佬,他提出的数据仓库架构中的 key模式(敏捷模式),即:关键个体角色目标驱动。

这种方式总体来说,就是明确短期需求后,直接开干。

因为直接开干,所以前期我们整体投入小,见效快。

但是随着业务的发展和迭代,后期肯定需要重构。而重构的成本往往都很高。

• I模式

这又是另一个大佬提出的架构理论,大家可以搜一下 Bill Inmon,他提出的information模式(瀑布模式),即:领域经验知识驱动。

这个和K模式相反,强调前期强规划,一定要想清楚长期目标和需求,再干活。

这种方式,前期投入的成本会高出很多,我们需要规划业务域,数据域,数据层次,表结构等等。

但是后期,整体效果会比K模式好,只是前期见效慢。

整体来说呢

建议前期业务初步发展阶段,先用K模式,但是也要有一个I模式的规划

即:业务发展到什么节点,我们需要开始I模式的搭建。这个需要有个明确的规划。

笔者曾经就有 跑着K模式,后期重构了3次才全部切换成I模式的经历。所以一定要提前做规划。

数仓的层级有哪些?

开局先上图:

从图中我们可以看出,大致可以分为4层:ODS +  DWD + DWS + ADS

其中,DWD 和 DWS 可以统一至 CDM层。

当然,我们还需要对应的维度数据:DIM层

ODS层:操作数据层(Operational Data Store),基本上是数据的源头,我们在这一层只做简单的数据清洗,不做业务逻辑处理,存储所有我们能够存储且需要存储的数据。

DWD层:明细数据层(Data Warehouse Detail),一般和ODS层一样,但是会采用维度退化的方法,将维度退化至事实表中,减少事实表格和维度表格的关联,提高表格的易用性。

DWS层:汇总数据层(Data Warehouse Summary),按照主题划分,采用宽表化的手段,构建对应主题下的数据,用于后续业务的查询。

ADS层:应用数据层(Application Data Store),主要存放数据需求中的个性化统计指标。这一层一般面向展示使用。不同需求下的,不同粒度的,个性化统计指标数据。

DIM层:维度表,一般会有2种数据。

一是业务相关的业务属性数据,如用户画像,商品价格。

二是数据中的配置属性数据,如在某表格的 类型  字段中存储了A,A代表的具体的含义,可以在这种 配置属性数据 的维度表格中映射出来。

分层咱们知道了,那么如何根据分层来构建规范的命名呢?

笔者抛砖引玉,提供一些参考。

我们在表名中,一般需要以下几个信息:

1. 所属业务域:是什么业务线?是什么产品线?

2. 所属主题域:是业务域中的用户数据?还是订单数据?

3. 数据分层:在ODS/DWD/DWS/ADS/DIM中属于哪一层?

4. 存储粒度:是全量还是增量?增量周期是多少?

5. 自定义标签:当前数据的业务过程定义

... ... 

举个例子(以某淘中的订单优惠券数据为例):

mtao_dwd_orders_coupon_day

业务域 + 数据分层 + 主题域 + 自定义标签 + 存储粒度

当然,这仅是抛砖引玉,大家可以按照自己的业务情况,建设相关的规范,适合自己业务最重要。

相关文章:

数据仓库基础知识

什么是数据仓库? 数仓,DataWarehouse,是一个 面向主题的、集成的、稳定的、与时间相关的 数据集合。 而这个数据集合的建立,是为了支持管理者的决策过程。 也就是说,我们通过建设数仓,为业务中的流程改进、…...

M 芯片的 macos 系统安装虚拟机 centos7 网络配置

centos 安装之前把网络配置配好或者是把网线插好 第一步找到这个 第二步打开网络适配器 选择图中所指位置 设置好之后 开机启动 centos 第三步 开机以后 编写网卡文件保存 重启网卡就可以了,如果重启网卡不管用,则重启虚拟机即可 “ ifcfg-ens160 ” 这…...

AcWing 3708. 求矩阵的鞍点

输入样例&#xff1a; 3 4 1 2 3 4 1 2 3 4 1 2 3 4输出样例&#xff1a; 1 4 4 2 4 4 3 4 4 #include<bits/stdc.h> using namespace std; const int N1010; int n,m,a[N][N],x[N],y[N],flag1; int main(){scanf("%d%d",&n,&m);for(int i1;i<n;i…...

web前端开发工程师的具体职责范本(合集)

web前端开发工程师的具体职责范本1 职责&#xff1a; 1.负责web前端架构的搭建&#xff0c;核心业务功能开发和核心代码编写。 2.配合产品经理&#xff0c;实现产品UI和交互方面的需求&#xff0c;持续界面优化&#xff0c;提升用户体验。 3.参与相关业务需求变更评审。 4.…...

从源程序到可执行文件的四个过程

从源程序到可执行文件的四个过程 预处理编译汇编链接 程序要运行起来&#xff0c;必须要经过四个步骤&#xff1a;预处理、编译、汇编和链接&#xff0c;如下图所示&#xff1a; -E选项&#xff1a;提示编译器执行完预处理就停下来&#xff0c;后边的编译、汇编、链接就先不执…...

C++部署学习

gcc -E src/main.c -o src/main.i gcc -S src/main.c -o src/main.s gcc -C src/main.c -o src/main.o gcc src/main.c -o exec ./exec...

linux下lazarus开发ide里 BGRAControls控件库comboBox示例

下载开发工具 ftp://ftp.freepascal.org/pub/lazarus/releases/Lazarus%20Linux%20amd64%20DEB/Lazarus%202.2.6/https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20amd64%20DEB/Lazarus%202.2.6/ sourceforge下载可能比较慢&#xff0c;选择 下载有问题&…...

Redis学习路线(9)—— Redis的场景使用

默认做好了其它的前提&#xff0c;只专注于Redis使用 一、短信登录 在没有Redis数据库时&#xff0c;我们会基于Session实现登录&#xff08;利用令牌进行授权&#xff09;&#xff0c;是怎么实现的呢&#xff1f; &#xff08;一&#xff09;基于Session的短信登录功能 1、…...

糟了,数据库主从延迟了!

前言 在实际的生产环境中&#xff0c;由单台MySQL作为独立的数据库是完全不能满足实际需求的&#xff0c;无论是在安全性&#xff0c;高可用性以及高并发等各个方面 因此&#xff0c;一般来说都是通过集群主从复制&#xff08;Master-Slave&#xff09;的方式来同步数据&…...

VUE,子组件给父组件传递参数,props 自定义属性,ref

<template><div><!-- 子传父 --><!-- 通过父组件给子组件传递函数类型的props实现&#xff1a;子给父传递数据 --><AA :getAAname"getAAname"/><h1>AA&#xff1a;{{aaname}}</h1><!-- 通过父组件给子组件绑定一个自定…...

【Oracle系列】- Oracle数据迁移

【Oracle系列】- Oracle数据迁移 文章目录 【Oracle系列】- Oracle数据迁移一、概述二、数据迁移方案三、模拟迁移方案四、迁移步骤五、迁移方案及其实施细则5.1 exp/imp逻辑备份与恢复5.2 Storage存储迁移5.3 利用data guard迁移 一、概述 最近在做公司软件系统盘点时&#x…...

Linux环境安装MySQL(详细教程)

1、下载MySQL MySQL官网&#xff1a;MySQLhttps://www.mysql.com/ 下载社区版&#xff08;免费&#xff0c;但不提供技术支持&#xff09; 简单说明一下rpm和tar包的区别&#xff1a; tar 只是一种压缩文件格式&#xff0c;所以&#xff0c;它只是把文件压缩打包 rpm&#xf…...

23. Mysql中的排序规则

文章目录 Mysql中的排序规则1. 数据库默认的排序规则2. 查看表的排序规则2.1 查看表排序规则2.2 查看字段排序规则 3.修改排序规则3.1 修改库3.2 修改表3.3 修改字段 Mysql中的排序规则 1. 数据库默认的排序规则 mysql8的默认排序方式是 utf8mb4_0900_ai_ci mysql5的默认排序…...

MongoDB 基础学习记录

MongoDB 基础 mongoDB 是由 C语言编写,基于分布式文件存储的开源数据库系统,是一个 nosql 数据库. 在高负载的情况下,添加更多的节点,保证服务器性能,MongoDB 旨在为 web 引用提供可扩展的高性能存储解决方案,将数据存储为给文档, 数据结构由键值(key,value)对组成,MongoDB 文…...

Visual Studio2022报错 无法打开 源 文件 “openssl/conf.h“解决方式

目录 问题起因问题解决临时解决方案 问题起因 近一段时间有了解到Boost 1.82.0新添加了MySQL库&#xff0c;最近一直蠢蠢欲动想要试一下这个库 所以就下载了源码并进行了编译&#xff08;过程比较简单&#xff0c;有文档的&#xff09; 然后在VS2022中引入了Boost环境&#xf…...

【更新公告】Airtest更新至1.3.0.1版本

1. 前言 本次更新为Airtest库更新&#xff0c;版本提升至1.3.0.1版本&#xff0c;主要新增了一些iOS设备相关的装包等接口&#xff0c;以及封装了一些tidevice常用接口。更多更新详情&#xff0c;详见我们下文的描述。 2. 新增iOS设备接口 1&#xff09;iOS安装接口&#xf…...

SQL语句集锦

题记&#xff1a;SQL语句就是一种编程语言&#xff0c;我们平时项目中我们需要从数据库种调取数据&#xff0c;然后通过增删改查的接口对数据库进行操作&#xff0c;当然我们也可以用数据库自己的编程语言进行数据库里边数据的操作。 1.select * from users&#xff1b; 从use…...

【多线程中的线程安全问题】线程互斥

1 &#x1f351;线程间的互斥相关背景概念&#x1f351; 先来看看一些基本概念&#xff1a; 1️⃣临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源。2️⃣临界区&#xff1a;每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区。3️⃣互斥&…...

抖音seo短视频矩阵系统源代码开发技术分享

抖音SEO短视频矩阵系统是一种通过优化技术&#xff0c;提高在抖音平台上视频的排名和曝光率的系统。以下是开发该系统的技术分享&#xff1a; 熟悉抖音平台的算法 抖音平台的算法是通过分析用户的兴趣爱好和行为习惯&#xff0c;对视频进行排序和推荐。因此&#xff0c;开发人员…...

flutter实战(01)windows桌面版 修改应用logo、名称、显示位置、显示大小

说明&#xff1a;该系列文章主要为flutter在windows桌面平台实战中遇到的一些坑。 1 修改logo 只需要在flutter项目/windows/runner/resources目录下替换原来的应用图标 app_icon.ico即可。 2 修改应用名称、显示位置、显示大小 修改flutter项目/windows/runner/main.cpp 文…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...