数据仓库基础知识
什么是数据仓库?
数仓,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. 求矩阵的鞍点
输入样例: 3 4 1 2 3 4 1 2 3 4 1 2 3 4输出样例: 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 职责: 1.负责web前端架构的搭建,核心业务功能开发和核心代码编写。 2.配合产品经理,实现产品UI和交互方面的需求,持续界面优化,提升用户体验。 3.参与相关业务需求变更评审。 4.…...
从源程序到可执行文件的四个过程
从源程序到可执行文件的四个过程 预处理编译汇编链接 程序要运行起来,必须要经过四个步骤:预处理、编译、汇编和链接,如下图所示: -E选项:提示编译器执行完预处理就停下来,后边的编译、汇编、链接就先不执…...
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下载可能比较慢,选择 下载有问题&…...
Redis学习路线(9)—— Redis的场景使用
默认做好了其它的前提,只专注于Redis使用 一、短信登录 在没有Redis数据库时,我们会基于Session实现登录(利用令牌进行授权),是怎么实现的呢? (一)基于Session的短信登录功能 1、…...
糟了,数据库主从延迟了!
前言 在实际的生产环境中,由单台MySQL作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面 因此,一般来说都是通过集群主从复制(Master-Slave)的方式来同步数据&…...
VUE,子组件给父组件传递参数,props 自定义属性,ref
<template><div><!-- 子传父 --><!-- 通过父组件给子组件传递函数类型的props实现:子给父传递数据 --><AA :getAAname"getAAname"/><h1>AA:{{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官网:MySQLhttps://www.mysql.com/ 下载社区版(免费,但不提供技术支持) 简单说明一下rpm和tar包的区别: tar 只是一种压缩文件格式,所以,它只是把文件压缩打包 rpm…...
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库,最近一直蠢蠢欲动想要试一下这个库 所以就下载了源码并进行了编译(过程比较简单,有文档的) 然后在VS2022中引入了Boost环境…...
【更新公告】Airtest更新至1.3.0.1版本
1. 前言 本次更新为Airtest库更新,版本提升至1.3.0.1版本,主要新增了一些iOS设备相关的装包等接口,以及封装了一些tidevice常用接口。更多更新详情,详见我们下文的描述。 2. 新增iOS设备接口 1)iOS安装接口…...
SQL语句集锦
题记:SQL语句就是一种编程语言,我们平时项目中我们需要从数据库种调取数据,然后通过增删改查的接口对数据库进行操作,当然我们也可以用数据库自己的编程语言进行数据库里边数据的操作。 1.select * from users; 从use…...
【多线程中的线程安全问题】线程互斥
1 🍑线程间的互斥相关背景概念🍑 先来看看一些基本概念: 1️⃣临界资源:多线程执行流共享的资源就叫做临界资源。2️⃣临界区:每个线程内部,访问临界资源的代码,就叫做临界区。3️⃣互斥&…...
抖音seo短视频矩阵系统源代码开发技术分享
抖音SEO短视频矩阵系统是一种通过优化技术,提高在抖音平台上视频的排名和曝光率的系统。以下是开发该系统的技术分享: 熟悉抖音平台的算法 抖音平台的算法是通过分析用户的兴趣爱好和行为习惯,对视频进行排序和推荐。因此,开发人员…...
flutter实战(01)windows桌面版 修改应用logo、名称、显示位置、显示大小
说明:该系列文章主要为flutter在windows桌面平台实战中遇到的一些坑。 1 修改logo 只需要在flutter项目/windows/runner/resources目录下替换原来的应用图标 app_icon.ico即可。 2 修改应用名称、显示位置、显示大小 修改flutter项目/windows/runner/main.cpp 文…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
