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

一、数据仓库基石:核心理论、分层艺术与 ETL/ELT 之辨

随着企业数据爆炸式增长,如何有效地存储、管理和分析这些数据,从中提炼价值,成为现代企业核心竞争力之一。数据仓库 (Data Warehouse, DW) 正是为此而生关键技术。理解其基础理论对于构建高效数据驱动决策体系至关重要。

一、数据库 vs 数据仓库:日常运营与战略决策的“左右手” 🤝

虽然数据库 (Database, DB)数据仓库 (Data Warehouse, DW)存储数据,但它们的设计目标、应用场景和特性有着本质的区别

  • 数据库 (DB) - 面向日常运营 (OLTP - Online Transaction Processing)

    • 核心目标支持企业日常业务操作,如订单处理、库存管理、客户注册等。
    • 数据特点
      • 实时性高:数据频繁更新,反映当前最新状态。
      • 原子性操作:强调事务的ACID特性 (原子性、一致性、隔离性、持久性)。
      • 规范化程度高:通常采用三范式等设计,减少数据冗余,保证数据一致性
      • 查询特点:多为简单的、点状的查询和小范围增删改操作。
    • 用户群体业务人员、操作员、应用程序
    • 数据量级:通常相对较小 (GB级别)。
  • 数据仓库 (DW) - 面向分析决策 (OLAP - Online Analytical Processing)

    • 核心目标支持管理层战略决策和业务分析,如趋势分析、市场洞察、绩效评估等。
    • 数据特点
      • 历史性数据:数据通常是多个业务系统 定期抽取、清洗、转换而来,积累大量历史记录。
      • 主题集成:数据围绕特定业务主题 (如客户、产品、销售) 进行组织和集成
      • 相对稳定:数据一旦写入数仓,一般不轻易修改,主要用于查询分析
      • 非规范化/反规范化:为了提高查询性能,可能存在一定数据冗余,采用星型模型或雪花模型
      • 查询特点:多为复杂的、聚合性的查询,涉及大量数据扫描和分析
    • 用户群体数据分析师、业务决策者、管理层
    • 数据量级:通常非常庞大 (TB、PB级别)。

在这里插入图片描述

二、数据分层的艺术:构建清晰、高效的数仓架构 🏛️

直接将来自各个业务系统原始数据 堆砌在一起进行分析,往往会导致 混乱、低效难以维护。因此,现代数据仓库通常采用分层架构的思想。

  • 典型的数据分层架构 (以常见的三/四层为例)

    1. ODS (Operational Data Store) - 操作数据层 / 数据引入层

      • 作用:作为数据仓库数据入口直接对接 各个业务系统 (如ERP, CRM, SCM等)。
      • 数据特点尽可能 保留业务系统原始数据原貌 (或只做少量格式转换和清洗),数据粒度源系统保持一致。ODS层的数据通常是临时的、可覆盖的,主要用于后续数据抽取和加工
      • 好处解耦数据仓库与源业务系统减少对源系统的直接访问压力
    2. DWD (Data Warehouse Detail) - 数据明细层 / 公共维度层

      • 作用:对 ODS 层的数据进行清洗、转换、规范化处理,去除脏数据统一数据格式。同时,在此层构建企业级公共维度模型 (如时间维度、地区维度、产品维度等)。
      • 数据特点:数据相对干净、一致粒度仍然较细,但已经过初步的整合和标准化。此层数据通常长期保留
      • 好处:为后续数据聚合和分析提供高质量、一致性明细数据基础
    3. DWS (Data Warehouse Summary/Service) - 数据汇总层 / 服务层

      • 作用:基于 DWD 层的数据,按照不同业务主题或分析维度进行轻度或中度聚合操作,形成面向特定分析场景宽表或汇总表
      • 数据特点:数据粒度比 DWD 层更粗包含预计算指标和统计值
      • 好处提高常见分析查询的性能减少重复计算。
    4. ADS/APP (Application Data Store / Application Layer) - 应用数据层 / 数据集市层

      • 作用直接面向 最终用户或应用 (如报表、BI工具、数据挖掘模型等)。根据具体业务需求,从 DWS 或 DWD 层抽取数据,进行高度聚合或个性化数据组织,形成数据集市 (Data Mart)定制化数据产品
      • 数据特点:数据高度定制化、面向特定应用查询性能极高
      • 好处满足不同业务部门或应用的个性化数据需求提供 快速、便捷数据服务

在这里插入图片描述

  • 数据分层的好处 ✨
    1. 清晰的结构:使数据流向数据关系更加清晰明了易于理解和维护
    2. 数据血缘追踪方便追踪数据的来源和加工过程快速定位数据问题。
    3. 减少重复开发公共的计算逻辑 (如维度处理、基础指标计算) 可以在底层 统一完成避免不同应用中 重复建设
    4. 提高数据质量:通过逐层清洗和校验保证最终应用层数据准确性和一致性
    5. 提升开发效率不同层次开发人员可以并行工作专注于各自负责的层面
    6. 屏蔽底层复杂性上层应用可以直接使用已经加工好数据服务无需关心底层的复杂数据处理逻辑

三、ETL vs ELT:数据流转的两种“姿势” 🌊

将数据源系统 加载数据仓库,并进行必要的转换,是数仓建设核心环节。ETL 和 ELT 是两种常见数据集成模式。

  • ETL (Extract - Transform - Load) - “先处理,后加载”

    1. Extract (抽取):从源数据库或文件系统抽取所需数据。
    2. Transform (转换):在专门的 ETL 服务器或引擎上对抽取出来的数据进行清洗、格式转换、数据校验、业务规则应用、数据集成复杂操作
    3. Load (加载):将转换后高质量数据 加载目标数据仓库中。
    • 特点
      • 数据转换加载到数仓前完成。
      • 需要一个独立的处理引擎 (ETL 工具或平台)。
      • 适合数据转换逻辑复杂、数据量中等的场景。
      • 传统数据仓库较为常见
  • ELT (Extract - Load - Transform) - “先加载,后处理”

    1. Extract (抽取):从源系统抽取原始数据。
    2. Load (加载):将原始数据 (或只做少量预处理) 直接加载数据仓库 (通常是数据湖或 Staging Area) 中。
    3. Transform (转换)利用数据仓库本身 (如基于 SQL 的引擎、Spark 引擎等) 的计算能力,在数据仓库内部已加载的数据进行清洗、转换和加工
    • 特点
      • 数据转换加载到数仓后,利用数仓的计算资源完成。
      • 可以处理 更大规模原始数据
      • 更适合 云数据仓库大数据平台 (如 Hadoop, Spark),这些平台本身具备强大分布式计算能力
      • 灵活性更高,可以先存储原始数据后续根据不同需求进行多次不同转换和分析

在这里插入图片描述

四、总结 💡

数据仓库企业数据资产重要组成部分。理解其与日常操作数据库区别,掌握数据分层设计思想优势,以及辨析 ETL 与 ELT不同模式,是构建一个 健壮、高效、可扩展的数据仓库的前提。这些基础理论指导我们实际项目做出更明智架构选择和技术决策最终数据业务 创造更大的价值

相关文章:

一、数据仓库基石:核心理论、分层艺术与 ETL/ELT 之辨

随着企业数据的爆炸式增长,如何有效地存储、管理和分析这些数据,从中提炼价值,成为现代企业的核心竞争力之一。数据仓库 (Data Warehouse, DW) 正是为此而生的关键技术。理解其基础理论对于构建高效的数据驱动决策体系至关重要。 一、数据库…...

智慧能源大数据平台建设方案(PPT)

1、建设背景 2、建设思路 3、建设架构 4、应用场景 5、展望 软件开发全方位管理资料包清单概览: 任务部署指令书,可行性研究报告全集,项目启动审批文件,产品需求规格详尽说明书,需求调研策略规划,用户调研问…...

递归函数(斐波那契数列0,1,1,2,3,5,8,13,21,34,55...)

目录 一、斐波那契数列(兔子问题) 二、迭代法(用while循环推下一项 ) 三、递归函数 (函数的定义中调用函数自身的一种函数定义方式) 四、递归函数的底层逻辑推理 (二叉树推倒最左下节点回退法) 一、斐波那契数列(兔子问题&…...

Python 从 SQLite 数据库中批量提取图像数据

Python 从 SQLite 数据库中批量提取图像数据 flyfish 实现了一个可扩展的 SQLite 图像导出工具,能够自动检测图像格式、处理数据前缀,并将数据库中的二进制图像数据导出为文件系统中的标准图像文件 import os import sqlite3 from typing import Dict…...

rust-candle学习笔记12-实现因果注意力

参考:about-pytorch 定义结构体: struct CausalAttention {w_qkv: Linear,dropout: Dropout, d_model: Tensor,mask: Tensor,device: Device, } 定义new方法: impl CausalAttention {fn new(vb: VarBuilder, embedding_dim: usize, ou…...

vue3使用tailwindcss报错问题

npm create vitelatestnpm install -D tailwindcss postcss autoprefixernpx tailwindcss init 4. 不过执行 npx tailwindcss init 的时候控制台就报错了PS E:\vite-demo> npx tailwindcss init npm ERR! cb.apply is not a function npm ERR! A complete log of this run c…...

MySQL COUNT(*) 查询优化详解!

目录 前言1. COUNT(*) 为什么慢?—— InnoDB 的“计数烦恼” 🤔2. MySQL 执行 COUNT(*) 的方式 (InnoDB)3. COUNT(*) 优化策略:快!准!狠!策略一:利用索引优化带 WHERE 子句的 COUNT(*) (最常见且…...

5.Redission

5.1 前文锁问题 基于 setnx 实现的分布式锁存在下面的问题: 重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如 HashTable 这样的代码中,他的方法都是使用 sync…...

RAG 赋能客服机器人:多轮对话与精准回复

一、引言 在人工智能技术飞速发展的今天,客服机器人已成为企业提升服务效率的重要工具。然而,传统客服系统在多轮对话连贯性和精准回复能力上存在明显短板。检索增强生成(Retrieval-Augmented Generation, RAG)技术通过结合大语言…...

rust-candle学习笔记13-实现多头注意力

参考:about-pytorch 定义结构体: use core::f32;use candle_core::{DType, Device, Result, Tensor}; use candle_nn::{embedding, linear_no_bias, linear, ops, Dropout, Linear, Module, VarBuilder, VarMap};struct MultiHeadAttention {w_qkv: Li…...

PyTorch API 5 - 全分片数据并行、流水线并行、概率分布

文章目录 全分片数据并行 (FullyShardedDataParallel)torch.distributed.fsdp.fully_shardPyTorch FSDP2 (fully_shard) Tensor Parallelism - torch.distributed.tensor.parallel分布式优化器流水线并行为什么需要流水线并行?什么是 torch.distributed.pipelining&…...

STL-list

一、 list的介绍 std::list 是 C 标准模板库(STL)中的一种双向链表容器。每个元素包含指向前后节点的指针,支持高效插入和删除操作,但随机访问性能较差。 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#x…...

WPF中如何自定义控件

WPF自定义控件简化版:账户菜单按钮(AccountButton) 我们以**“账户菜单按钮”为例,用更清晰的架构实现一个支持标题显示、渐变背景、选中状态高亮**的自定义控件。以下是分步拆解: 一、控件核心功能 我们要做一个类似…...

华为云Git使用与GitCode操作指南

案例介绍 本文档带领开发者学习如何在云主机上基于GitCode来使用Git来管理自己的项目代码,并使用一些常用的Git命令来进行Git环境的设置。 案例内容 1 概述 1.1 背景介绍 Git 是一个快速、可扩展的分布式版本控制系统,它拥有异常丰富的命令集,可以提供高级操作和对内部…...

UniRepLknet助力YOLOv8:高效特征提取与目标检测性能优化

文章目录 一、引言二、UniRepLknet 的框架原理(一)架构概述(二)架构优势 三、UniRepLknet 在 YOLOv8 中的集成(一)集成方法(二)代码实例 四、实验与对比(一)对…...

【软件工程】基于频谱的缺陷定位

基于频谱的缺陷定位(Spectrum-Based Fault Localization, SBFL)是一种通过分析程序执行覆盖信息(频谱数据)来定位代码中缺陷的方法。其核心思想是:通过测试用例的执行结果(成功/失败)和代码覆盖…...

stm32之IIC

目录 1.I2C1.1 简介1.2 硬件电路1.3 时序基本单元1.4 时序实例1.4.1 指定地址写1.4.2 当前地址读1.4.3 指定地址读 2.MPU60502.1 简介2.2 参数2.3 硬件电路2.4 框图2.5 文档 3.软件操作MPU60504.I2C通信外设4.1 简介4.2 I2C框图4.3 基本结构4.4 主机发送/接收4.5 软件/硬件波形…...

阿里云购买ECS 安装redis mysql nginx jdk 部署jar 部署web

阿里云服务维护 1.安装JDK 查询要安装jdk的版本,命令:yum -y list java* 命令:yum install -y java-1.8.0-openjdk.x86_64 yum install -y java-17-openjdk.x86_64 2.安装nginx 启用 EPEL 仓库 sudo yum install epel-release 安装 Nginx sudo yum …...

记录 ubuntu 安装中文语言出现 software database is broken

搜索出来的结果是 sudo apt-get install language-pack-zh-han* 然而,无效,最后手动安装如下 apt install language-pack-zh-hans apt install language-pack-zh-hans-base apt install language-pack-gnome-zh-hans apt install fonts-arphic-uming apt install libreoffic…...

质数和约数

一、知识和经验 把质数和约数放在一起就是因为他们有非常多的联系,为了验证这个观点我们可以先学习唯一分解定理:一个大于 1 的自然数一定能被唯一分解为有限个质数的乘积。 而且一个数不仅能被质数分解,原本也应该被自己的约数分解&#xf…...

OSPF的四种特殊区域(Stub、Totally Stub、NSSA、Totally NSSA)详解

OSPF的四种特殊区域(Stub、Totally Stub、NSSA、Totally NSSA)通过限制LSA的传播来优化网络性能,减少路由表规模。以下是它们的核心区别: 1. Stub 区域(末梢区域) 允许的LSA类型:Type 1-3&#…...

Docker中运行的Chrome崩溃问题解决

问题 各位看官是否在 Docker 容器中的 Linux 桌面环境(如Xfce)上启动Chrome ,遇到了令人沮丧的频繁崩溃问题?尤其是在打开包含图片、视频的网页,或者进行一些稍复杂的操作时,窗口突然消失?如果…...

【从零实现JsonRpc框架#3】线程模型与性能优化

1.Muduo 的线程模型 Muduo 基于 Reactor 模式 ,采用 单线程 Reactor 和 多线程 Reactor 相结合的方式,通过事件驱动和线程池实现高并发。 1. 单线程模型 核心思想 :所有 I/O 操作(accept、read、write)和业务逻辑均…...

Kubernetes资源管理之Request与Limit配置黄金法则

一、从"酒店订房"看K8s资源管理 想象你经营一家云上酒店(K8s集群),每个房间(Node节点)都有固定数量的床位(CPU)和储物柜(内存)。当客人(Pod&#…...

Windows 上使用 WSL 2 后端的 Docker Desktop

执行命令 docker pull hello-world 执行命令 docker run hello-world 执行命令 wsl -d Ubuntu...

OpenLayers根据任意数量控制点绘制贝塞尔曲线

以下是使用OpenLayers根据任意数量控制点绘制贝塞尔曲线的完整实现方案。该方案支持三个及以上控制点,使用递归算法计算高阶贝塞尔曲线。 实现思路 贝塞尔曲线原理:使用德卡斯特里奥算法(De Casteljau’s Algorithm)递归计算任意…...

使用 Jackson 在 Java 中解析和生成 JSON

JSON(JavaScript Object Notation)是一种轻量级、跨语言的数据交换格式,因其简单易读和高效解析而广泛应用于 Web 开发、API 通信和数据存储。在 Java 中,处理 JSON 是许多应用程序的核心需求,尤其是在与 RESTful 服务交互或管理配置文件时。Jackson 是一个功能强大且广受…...

Qt中在子线程中刷新UI的方法

Qt中在子线程中刷新UI的方法 在Qt中UI界面并不是线程安全的,意味着在子线程中不能随意操作UI界面组件(比如按钮、标签)等,如果强行操作这些组件有可能会导致程序崩溃。那么在Qt中如何在子线程中刷新UI控件呢? 两种方…...

封装 RabbitMQ 消息代理交互的功能

封装了与 RabbitMQ 消息代理交互的功能,包括发送和接收消息,以及管理连接和通道。 主要组件 依赖项: 代码使用了多个命名空间,包括 Microsoft.Extensions.Configuration(用于配置管理)、RabbitMQ.Client&a…...

关于ffmpeg的简介和使用总结

主要参考: 全网最全FFmpeg教程,从新手到高手的蜕变指南 - 知乎 (zhihu.com) FFmpeg入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。-CSDN博客 FFmpeg教程(超级详细版) - 个人文章 - S…...

计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 08.阴影

阴影 没有阴影的渲染效果如下,看起来不真实: 有阴影的渲染效果如下,看起来真实: 显示阴影有两种方式,一种是原书中的方式,另一种是采用光线追踪技术,该技术可以参考ShaderToy学习笔记 08.阴…...

[面试]SoC验证工程师面试常见问题(七)低速接口篇

SoC验证工程师面试常见问题(七)低速接口篇 摘要:低速接口是嵌入式系统和 SoC (System on Chip) 中常用的通信接口,主要用于设备间的短距离、低带宽数据传输。相比高速接口(如 PCIe、USB 3.0),低速接口的传输速率较低(通常在 kbps 到几 Mbps 范围),但具有简单…...

算法训练营第十三天|226.翻转二叉树、101. 对称二叉树、 104.二叉树的最大深度、111.二叉树的最小深度

递归 递归三部曲: 1.确定参数和返回值2.确定终止条件3.确定单层逻辑 226.翻转二叉树 题目 思路与解法 第一想法: 递归,对每个结点进行反转 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, le…...

电子电器架构 --- 车载网关的设计

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界…...

`C_PiperInterface` 类接口功能列表

C_PiperInterface 类接口功能列表 C_PiperInterface 提供了全面的接口,用于控制 Piper 机械臂的运动、查询状态、设置参数以及管理 SDK 限制。 官仓链接 以下是 C_PiperInterface 类中所有接口的功能总结: 1. 初始化与连接相关接口 __new__: 实现单例…...

D. Apple Tree Traversing 【Codeforces Round 1023 (Div. 2)】

D. Apple Tree Traversing 题目大意 有一个包含 n n n 个节点的苹果树,初始时每个节点上有一个苹果。你有一张纸,初始时纸上没有任何内容。 你需要通过以下操作遍历苹果树,直到所有苹果都被移除: • 选择一个苹果路径 ( u , v…...

Docker镜像搬运工:save与load命令的实战指南

在日常的容器化开发中,镜像的搬运和部署是每个开发者必须掌握的技能。今天我们将深入探讨Docker的"save"和"load"这对黄金搭档,揭秘它们在镜像管理中的妙用。 一、基础认知:镜像的打包与解包 docker save 和 docker loa…...

查看Electron 应用的调试端口

以下是一些可以知道已发布第三方 Electron 应用调试端口的方法: * **通过命令行参数查看** : * 如果该 Electron 应用在启动时添加了类似 --remote-debugging-portxxxx 或 --inspectxxxx 的参数,那么其调试端口就是该参数指定的端口号。比…...

各种环境测试

加载测试专用属性 当在测试时想要加入某些配置且对其他测试类不产生影响是可以用Import注释添加配置 测试类中启动web环境 默认为none不开启...

腾讯云低代码实战:零基础搭建家政维修平台

目录 1. 欢迎与项目概览1.1 教程目的与受众1.2 项目愿景与目标:我们要搭建一个怎样的平台?1.3 平台核心构成与架构解析1.4 技术栈选择与考量1.5 如何高效阅读本教程 欢迎来到“腾讯云云开发低代码实战:从零搭建家政维修服务平台”开发教程&am…...

居然智家亮相全零售AI火花大会 AI大模型赋能家居新零售的进阶之路

当人工智能技术以摧枯拉朽之势重构商业世界时,零售业正在经历一场静默而深刻的革命。在这场变革中,居然智家作为新零售领域的创新标杆,凭借其在AI技术应用上的超前布局和持续深耕,已悄然构建起从消费场景到产业生态的智能化闭环。…...

微服务6大拆分原则

微服务6大拆分原则 微服务拆分是指将一个大型应用程序拆分成独立服务的过程,在微服务拆分时,需要考虑以下6大微服务拆分原则 一、单一职责原则 微服务单一职责原则,是指每个微服务应该专注于解决一个明确定义的业务领域或功能,…...

进程间通信--管道【Linux操作系统】

文章目录 进程间通信(IPC)进程间通信的目的1. 数据交换2. 资源共享3. 进程协同4. 系统解耦5. 分布式计算IPC 的典型方式对比总结 进程间通信的前提 匿名管道匿名管道的原理创建匿名管道的过程如果不关闭不需要的读写端会怎样?为什么父进程要同…...

模型实时自主训练系统设计

模型实时自主训练系统设计 一、系统架构 #mermaid-svg-MLuTBuo7ehvStoqS {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MLuTBuo7ehvStoqS .error-icon{fill:#552222;}#mermaid-svg-MLuTBuo7ehvStoqS .error-text{f…...

5.1 神经网络: 层和块

1 层(Layer) 1.1 定义 层是深度学习模型中的基本构建单元,它由一组神经元组成,负责对输入数据进行特定的数学运算和变换,以提取数据的某种特征或表示。每一层可以看作是一个函数,它接收输入数据&#xff…...

鸿蒙系统使用ArkTS开发语言支持身份证阅读器、社保卡读卡器等调用二次开发SDK

har库导入: { "license": "", "devDependencies": {}, "author": "", "name": "entry", "description": "Please describe the basic information.", &qu…...

【Bootstrap V4系列】学习入门教程之 组件-输入组(Input group)

Bootstrap V4系列 学习入门教程之 组件-输入组(Input group) 输入组(Input group)Basic example一、Wrapping 包装二、Sizing 尺寸三、Multiple inputs 多输入四、Multiple addons 多个插件五、Button addons 按钮插件六、Buttons with dropdowns 带下拉按钮七、Custom for…...

图像处理篇--- HTTP|RTSP|MJPEG视频流格式

文章目录 前言一、MJPEG (Motion JPEG)基本概念技术特点编码方式传输协议数据格式 优势实现简单低延迟兼容性好容错性强 劣势带宽效率低不支持音频缺乏标准控制 典型应用 二、RTSP (Real Time Streaming Protocol)基本概念技术特点协议栈工作流程传输模式 优势专业流媒体支持高…...

`RotationTransition` 是 Flutter 中的一个动画组件,用于实现旋转动画效果

RotationTransition 是 Flutter 中的一个动画组件,用于实现旋转动画效果。它允许你对子组件进行动态的旋转变换,从而实现平滑的动画效果。RotationTransition 通常与 AnimationController 和 Tween 一起使用,以控制动画的开始、结束和过渡效果…...

养生:开启健康生活的密钥

在快节奏的现代生活中,养生已成为追求健康的重要方式。从饮食、运动到生活习惯,每一个细节都关乎身体的健康。以下为你介绍科学养生的实用方法,助你打造健康生活。 饮食养生:均衡营养,滋养身体 合理的饮食是养生的基…...