经典数仓架构深度解析与演进:从离线处理到新型架构对比
经典数仓架构深度解析与演进:从离线处理到新型架构对比
在数据驱动决策的时代,经典数仓作为企业数据管理与分析的核心基础设施,承载着从数据存储到价值挖掘的重要使命。本文将深入剖析经典数仓的架构、数据处理流程、主流架构模式及其对比,同时展望数仓的未来发展方向。
一、经典数仓的数据源与导入方式
经典数仓的数据源往往通过离线方式导入到关系型数据库中。这种方式适用于对数据实时性要求不高,但数据量庞大的场景,例如企业的历史订单数据、财务报表数据等。
1、常见的离线数据导入流程,会借助 ETL(Extract, Transform, Load)工具,如 Kettle、Informatica 等,将数据从文件系统、业务数据库等数据源抽取出来,经过清洗、转换后,最终加载到像 DB2、Sybase、Or
acle 样的关系型数据库中。
以 Kettle 工具为例,在一个简单的 CSV 文件数据导入到 Oracle 数据库的场景中,操作步骤如下:
在 Kettle 中创建一个新的转换任务。
使用 “文本文件输入” 组件读取 CSV 文件,配置好文件路径、分隔符等参数。
通过 “字段选择” 组件对数据进行格式转换和字段筛选。这利用 “表输出” 组件,配置好 Oracle 数据库的连接信息,将处理后的数据写入到对应的表中。
二、经典数仓的数据处理技术
2.1 关系型数据库的应用
经典数仓的数据处理主要依赖 DB2、Sybase、Oracle 等关系型数据库。这些数据库具备强大的事务管理和 SQL 查询能力,能够处理复杂的数据操作。
例如,在 Oracle 数据库中,使用 SQL 语句进行数据聚合查询:
SELECT product_id, SUM(sales_amount) AS total_sales
FROM sales_data
GROUP BY product_id;
上述 SQL 语句可以计算出每个产品的总销售额。
2.2 离线大数据架构的特点
随着数据量的爆发式增长,离线大数据架构逐渐成为经典数仓的重要组成部分。其特点在于数据源依旧以离线方式导入到离线数仓中,但数据处理采用了 MapReduce、Hive、SparkSQL、Impala 等离线计算引擎。
以 Hive 为例,它将 SQL 语句转换为 MapReduce 任务进行分布式计算,极大提升了大数据处理效率。比如,在 Hive 中执行如下查询:
SELECT year, month, COUNT(*) AS order_count
FROM orders
GROUP BY year, month;
该语句能够统计出每个月的订单数量,借助 Hive 的分布式计算能力,即使面对海量订单数据也能高效完成计算。
三、离线数仓分层架构
离线数仓通常采用分层架构设计,以提高数据管理和处理的效率,一般分为以下几个层次:
3.1 数据源层(ODS,Operational Data Store)
数据源层直接从业务系统抽取原始数据,保持数据的原貌,不做过多处理。它的作用类似于数据的临时存储区,为后续的数据清洗和转换提供原始数据基础。
3.2 数据仓库层(DW,Data Warehouse)
数据仓库层对 ODS 层的数据进行清洗、转换和集成。按照业务主题,如销售、库存、客户等,对数据进行重新组织和存储。这一层的数据是经过处理的、高质量的、面向分析的数据。
3.3 数据集市层(DM,Data Mart)
数据集市层是根据特定业务部门或主题的需求,从数据仓库层抽取数据构建而成。它是一种小型的、面向特定业务的数仓,能够快速响应业务部门的分析需求,例如财务数据集市、销售数据集市等。
四、Lambda 架构
Lambda 架构由 Nathan Marz 提出,旨在解决大数据处理中实时性和准确性的平衡问题。它主要由以下三个部分组成:
4.1 批处理层(Batch Layer)
批处理层负责处理全量历史数据,使用 MapReduce、Hive 等离线计算引擎对数据进行批量处理,生成不可变的数据集。批处理层的优势在于能够保证数据的准确性,但处理数据存在一定的延迟。
4.2 速度层(Speed Layer)
速度层处理实时流入的数据,使用 Storm、Flink 等流处理引擎,以低延迟的方式对数据进行处理,生成近似的查询结果。速度层弥补了批处理层实时性不足的问题。
4.3 服务层(Serving Layer)
服务层将批处理层和速度层的结果进行整合,对外提供统一的查询接口。用户的查询请求会从服务层获取最终的结果,服务层会根据查询需求,选择合适的数据源返回数据。
五、Kappa 架构
Kappa 架构是对 Lambda 架构的改进,它取消了批处理和速度层的分离,所有数据均通过流处理管道写入数据湖。Kappa 架构的核心流程如下:
1、数据源的数据实时流入流处理引擎,如 Flink、Spark Streaming。
流处理引擎对数据进行实时处理,并将处理后的数据写入数据湖。
2、当需要重新处理历史数据时,通过重新消费数据湖中的数据,使用相同的流处理逻辑进行处理,从而避免了 Lambda 架构中批处理和流处理逻辑不一致的问题。
六、Lambda 架构与 Kappa 架构对比
七、未来数仓展望
随着技术的不断发展,数仓也在持续演进,未来数仓将呈现以下发展趋势:
7.1 智能化
结合人工智能和机器学习技术,实现自动化的数据管理、智能数据分析和预测,帮助企业更好地挖掘数据价值。
7.2 实时化
实时数仓将成为主流,满足企业对实时决策的需求,从数据产生到分析结果输出实现秒级响应。
7.3 云化
云数仓凭借其弹性扩展、低成本、高可用性等优势,将被越来越多的企业采用,成为数仓建设的重要方向。
总结
经典数仓从数据源的离线导入,到关系型数据库与离线计算引擎的数据处理,再到分层架构设计,以及 Lambda 和 Kappa 架构的不断演进,在企业数据管理和分析中发挥着关键作用。了解经典数仓的架构和技术,有助于我们把握数据处理的核心逻辑,同时也为探索未来数仓的发展提供了坚实的基础。
如果你在经典数仓的学习和实践过程中有任何问题或想法,欢迎在评论区留言交流!
相关文章:
经典数仓架构深度解析与演进:从离线处理到新型架构对比
经典数仓架构深度解析与演进:从离线处理到新型架构对比 在数据驱动决策的时代,经典数仓作为企业数据管理与分析的核心基础设施,承载着从数据存储到价值挖掘的重要使命。本文将深入剖析经典数仓的架构、数据处理流程、主流架构模式及其对比&a…...
[Python开发] 如何用 VSCode 编写和管理 Python 项目(从 PyCharm 转向)
在 Python 开发领域,PyCharm 一直是广受欢迎的 IDE,但其远程开发功能(如远程 SSH 调试)仅在付费版中提供。为了适应服务器部署需求,很多开发者开始将目光转向更加轻量、灵活且免费扩展能力强的 VSCode。本篇文章将详细介绍,从 PyCharm 转向 VSCode 后,如何高效搭建和管理…...
系统架构-架构评估
质量属性 性能 指系统的响应能力 指标:响应时间、吞吐量等。 设计策略:优先级队列、增加计算资源、减少计算开销、引入并发机制、采用资源调度 可靠性 在意外或错误使用的情况下维持软件系统的功能特性 指标:MTTF、MTBF、MTTR 设计策…...
使用 MQTT - C 访问 IoTDA 平台:一个完整的嵌入式示例
引言 在物联网(IoT)开发领域,设备与平台之间的通信至关重要。MQTT 作为一种轻量级的消息传输协议,因其高效、可靠的特性,在物联网场景中得到了广泛应用。华为的 IoTDA(IoT Device Access)平台为…...
Leetcode594.最长和谐子序列
目录 题目算法标签: 滑动窗口, 哈希表思路滑动窗口代码哈希表代码 题目 594. 最长和谐子序列 算法标签: 滑动窗口, 哈希表 思路 先将数组进行排序, 检查两个相邻的但是不相等的数字的差值是否是 1 1 1, 如果是 1 1 1更新答案 滑动窗口代码 #include <algorithm> #i…...
如何在idea中编写spark程序
在 IntelliJ IDEA 中编写 Spark 程序的详细指南 在大数据处理领域,Apache Spark 凭借其强大的分布式计算能力,成为了众多开发者的首选工具。而 IntelliJ IDEA 作为一款功能强大的集成开发环境(IDE),为编写 Spark 程序…...
人工智能数学基础(一):人工智能与数学
在人工智能领域,数学是不可或缺的基石。无论是算法的设计、模型的训练还是结果的评估,都离不开数学的支持。接下来,我将带大家深入了解人工智能数学基础,包括微积分、线性代数、概率论、数理统计和最优化理论,并通过 P…...
Android Studio 安装 Continue插件
1、Android 插件Studio中安装Continue 2、从本地盘符安装 3、安装后发现Continue为空 Android studio中 Help -> Find Action->Choose Boot Java 设置 4、配置DeepSeek 参考https://juejin.cn/post/7464122534546407461...
【C++】类和对象(4)
目录 1. 类型转换 非explicit的单参数构造函数 示例 explicit的单参数构造函数 示例 不同版本的行为 示例 (单参数) 示例(多参数且其余参数有默认值 ) 示例(多参数且无默认值) 2. static成员变量…...
微信jdk 前端vue获取流程1、
参考链接: 企业微信的JSSDK,调用及使用方法_企业微信jssdk-CSDN博客 1、引用 <script src"//res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script src"https://res.wx.qq.com/open/js/jweixin-1.2.0.js" referrerpolic…...
Linux进程7-signal信号处理方式验证、可重入函数举例、信号集函数验证、信号集阻塞验证
目录 1. signal函数 1.1进程接收到信号后的处理方式 1.2 signal 函数 1.2.1 signal 函数默认处理 1.2.2 signal 函数忽略处理 1.2.3 signal 函数自定义处理 1.2.4 signal 函数返回值 2.可重入函数 2.1如何判断函数是否可重入 2.2自定义信号处理函数举例 2.2.1 sle…...
使用Python在excel里创建柱状图
一、前言 通过使用Python的openpyxl库,在excel里创建柱状图。openpyxl库提供了创建Excel图表的功能,包括柱状图(Bar Chart)。 二、程序展示 1、导入相关模块,新建excel 新建excel后,在excel的第一列创建一些数据。 import op…...
计算机视觉进化论:YOLOv12、YOLOv11与Darknet系YOLOv7的微调实战对比
摘要 YOLO系列作为实时目标检测领域的重要里程碑,持续引领速度与精度的平衡发展。本文围绕YOLOv7(基于Darknet框架)、YOLOv11及YOLOv12,系统、深入地对比了三款模型的架构创新、微调策略、核心技术及应用场景。我们详细解析了三者…...
湖北理元理律师事务所:债务管理领域的平台化创新探索
随着中国居民负债率攀升至62%(央行2023年数据),债务管理从个体需求演变为社会性课题。湖北理元理律师事务所通过“法律科技金融”的融合模式,构建了国内首个全链条债务管理平台,其服务逻辑与行业价值值得深度剖析。 平…...
沐曦玩转 LMDeploy、XTuner 和 InternLM3
学习链接: https://aicarrier.feishu.cn/wiki/O84LwkiBriUU0NkDwurcSufhnVb 一 LMDeploy推理及验证 1.1 下载LMDeploy # 安装addict软件包 pip install addict mmengine mmengine-lite fire accelerate0.32.1 nvidia-ml-py# 解决LMDeploy对tranformers版本要求的…...
【Java面试笔记:进阶】26.如何监控和诊断JVM堆内和堆外内存使用?
监控和诊断JVM内存使用是优化性能和解决内存问题的关键。 1.JVM内存监控与诊断方法 1.图形化工具 JConsole:提供图形化界面,可直接连接到Java进程,查看内存使用情况。VisualVM:功能强大的图形化工具,但注意从Oracle JDK 9开始不再包含在JDK安装包中。Java Mission Contr…...
阿里云服务器云盘扩容
在阿里云服务器上在线扩容了云盘后,如果服务器内部查看容量没有变化,可能是由于分区和文件系统未正确扩展。以下是详细的解决步骤: 1. 确认扩容是否成功 在阿里云控制台检查磁盘容量是否已显示扩容后的新大小。如果控制台显示已扩容&#x…...
【ESP32】st7735s + LVGL移植
LVGL的移植 使用版本1、创建工程2、开始移植2.1、文件准备2.2、修改代码2.3、SDK配置编辑器 3、测试 使用版本 LVGL版本:8.3 链接点这里ESPIDF版本:4.4.8lvgl_esp32_drivers: 链接点这里ESP32型号:ESP32S3 1、创建工程 默认都会…...
Jackson 使用方法详解
Jackson 是 Java 生态中最流行的 JSON 处理库,也是 Spring Boot 的默认 JSON 解析器。它提供了高性能的 JSON 序列化(对象 → JSON)和反序列化(JSON → 对象)功能。以下是 Jackson 的全面使用指南。 1. 基础依赖 Mave…...
TensorFlow深度学习框架:从入门到精通的完整指南
🌟 TensorFlow核心优势 TensorFlow作为Google开发的顶级深度学习框架,具有三大独特优势: 工业级部署能力:支持从移动端到服务器的全平台部署完善的工具链:包含TensorBoard、TF Lite、TF.js等完整生态强大的社区支持&…...
Java 入门宝典--注释、关键字、数据类型、变量常量、类型转换
作者:IvanCodes 发布时间:2025年4月28日🐣 专栏:Java教程 哈喽,各位 CSDN 的小伙伴们!👋 这部分内容虽然基础,但 极其重要,是后续学习所有高级特性的基石。准备好了吗&…...
【含文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现
项目介绍 本课程演示的是一款基于微信小程序的旅游论坛系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 …...
Android开发,实现一个简约又好看的登录页
文章目录 1. 编写布局文件2.设计要点说明3. 效果图4. 关于作者其它项目视频教程介绍 1. 编写布局文件 编写activity.login.xml 布局文件 <?xml version"1.0" encoding"utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:android…...
一种改进的YOLOv11网络,用于无人机视角下的小目标检测
大家读完觉得有帮助记得关注和点赞!!! 摘要 随着无人机(UAV)和计算机视觉技术的快速发展,从无人机视角进行目标检测已成为一个重要的研究领域。然而,无人机图像中目标像素占比极小、物体尺度变…...
linux离线安装zsh
下载zsh 下载仓库后解压 下载地址:https://github.com/zsh-users/zsh 离线安装 安装方法见INSTALL文件 ./configure --prefix[/usr/local] make make install...
Golang|使用函数作为参数和使用接口的联系
函数作为数据类型的一种,可以成为其他函数的参数。在 Go(Golang) 中,函数作为参数 和 接口(interface),本质上都和抽象、灵活调用有关 —— 都是让代码更灵活、更可扩展的手段。不过它们各有侧重…...
Python爬虫实战:获取软科网最新特定专业大学排名数据并做分析,为高考填报志愿做参考
一、引言 在高考升学的重要阶段,志愿填报成为考生和家长关注的核心问题。准确、全面且具有权威性的大学专业排名数据,是考生做出科学志愿决策的关键依据。软科网作为专业的大学排名信息发布平台,其发布的计算机科学与技术专业排名数据,因具有较高的公信力和参考价值,备受…...
【ACL系列论文写作指北12-Deadline管理与科研项目规划】-用节奏赢得高质量科研
科研不是一场冲刺,而是有序推进的系统工程。 引言:掌控时间,才能掌控科研主动权 再好的想法和技术,如果没有良好的时间管理,最终只会沦为“赶DDL”的牺牲品。科研项目规划,是确保质量、效率与心态平衡的关…...
elasticsearch底层模块解析与实践系列
#作者:猎人 文章目录 底层模块深入解析之threadpool1、线程池2、线程池类型3、cpu core数量设置 底层模块深入解析之plugin底层模块深入解析之es node节点角色1、node类型2、master eligible node3、data node4、ingest node5、cooridnating only node6、node data…...
Git-基本操作
前言 安装 git --version sudo apt-get remove git -y #卸载 sudo apt-get install git -y基本操作 创建本地仓库 mkdir gitcodegit init 这个就可以创建本地仓库了 然后当前目录下就有一个.git的文件夹 配置本地仓库 就是配置用户的名称,和用户的email地址 在…...
iVX 图形化编程如何改写后端开发新范式
在数字化转型加速推进的当下,企业对后端系统的需求呈现爆发式增长。Gartner 最新报告指出,2025 年全球企业平均需完成 300 定制化应用开发,而传统编码模式下,单个项目平均交付周期长达 6 - 8 个月。与此同时,Redis、K…...
【数据可视化-42】杂货库存数据集可视化分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
使用 Electron 打包 Windows 可执行程序
使用 Electron 打包 Windows 可执行程序 在使用 Electron 构建桌面应用程序时,通常需要将项目打包为可执行文件(例如 .exe 文件),以便用户可以方便地安装和运行。本文将介绍如何使用 electron-builder 将 Electron 项目打包成 Wi…...
爬虫学习笔记(三)--Http协议
思维导图 上面思维导图提取的原文是2026王道计网P286~290 URL最前面(URL传输过程中遵循HTTP协议) 协议 计算机传输的数据实际上就是二进制0和1,协议就是规定这一串二进制数字的前几位代表什么、中间几位代表什么、后几位代表什么 HTTP&a…...
ai环境cuda cudnn conda torch整体迁移 wsl docker
运行没问题的环境,wsl先关停wsl --shutdown 然后导出复制到迁移机器上wsl --export U24 E:\wsl\u24.tar 使用wsl版挂成虚拟机wsl --import U24 E:\wsl\ubuntu E:\wsl\u24.tar 使用docker版挂成镜像docker import E:\wsl\u24.tar my-ubuntu:custom 启动docker容器&am…...
数据库小技巧-使用开窗函数矫正数据库指定列部分列值重复的数据
需求描述 目前有某表的某列部分值重复,需要批量矫正该列数据,确保该列分组内不会出现重复值。 解决思路 -- 创建个临时表 create table t_tmp_20250428( c_bh varchar(32), -- 主键 c_bh_aj varchar(32), -- 主表外键,分组条件,…...
【优选算法 | 二分查找】二分查找算法解析:如何通过二段性优化搜索效率
算法相关知识点可以通过点击以下链接进行学习一起加油!双指针滑动窗口 在本篇文章中,我们将深入解析二分查找算法的核心原理。从基本概念到实际应用,带你了解如何利用二分查找高效定位元素,提升搜索效率。无论你是刚接触算法的新手…...
AI与IT协同的典型案例
简介 本篇代码示例展示了IT从业者如何与AI协同工作,发挥各自优势。这些案例均来自2025年的最新企业实践,涵盖了不同IT岗位的应用场景。 一、GitHub Copilot生成代码框架 开发工程师AI协作示例:利用GitHub Copilot生成代码框架,…...
5.软考高项(信息系统项目管理师)-成本管理
成本管理非常重要,选择、计算考得非常多,必须要好好学。 过程、输入、工具及输出 过程名(附作用) 通俗解释 输入 工具和技术 输出 规划成本管理 为如何管理项目成本提供指南和方向 编制成本管理计划,这个计划主…...
前端:纯HTML、CSS和JS菜单样式
实现了一个多级折叠菜单系统,使用纯HTML、CSS和JavaScript(无任何框架) 一、二级菜单展开 1、实现效果 初始状态-展示全部一级菜单 选中共状态,一级标题选中共为蓝色背景色,二级标题选中共为蓝色文字,展开右侧图标为-,后缩状态右侧图标为+ 2、实现 HTML结构 …...
案例篇:如何用tcpdump和Wireshark识别潜在威胁
无论是日常浏览网页、观看视频,还是企业开展线上业务、进行数据传输,都离不开网络的支持。然而,网络问题也时有发生,比如网络卡顿,相信大家都遇到过,那种等待页面加载的焦急心情,真的让人抓狂。…...
微信小程序开发中关于首屏加载、本地数据持久化的思考
本文将围绕小程序开发中首屏性能优化与本地存储持久化两大重要主题展开,结合实际项目经验,系统分析常见问题、优化方法与最佳实践,构建流畅且高效的小程序体验。 文章目录 前言一、什么是首屏加载?为什么重要?二、小程…...
媒资管理之视频管理
一:业务概述: 媒资管理这个模块是我负责开发的,主要的管理对象是视频,图片,文档等 包括文件的上传,视频的处理,文件的删除 (在媒资管理界面,有个上传视频的按钮&#…...
windows程序转鲲鹏服务器踩坑记【持续更新中】
1.鲲鹏处理器和Intel处理器的区别 处理器/对比项IntelKunpeng厂家因特尔(美国)华为(中国)指令集X86架构ARM-V8架构与指令集- x86 CISC复杂指令集 - 单核性能强(如至强8380主频3.8GHz) - 三级缓存优化,支持DDR4-3200和Optane内存- ARMv8-A RI…...
【阿里云大模型高级工程师ACP习题集】2.6.用插件扩展答疑机器人的能力边界
习题集: 【单选题】在构建Agent系统时,使用Assistant API创建Agent时,若想让Agent具备查询员工信息和发送请假申请的功能,以下对instructions参数设置最合理的是( ) A. “你可以做任何事情” B. “你能查询员工信息和发送请假申请” C. “你是公司助手,功能有:1.查询员…...
程序进程多任务线程
1.程序 程序(program)是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。 2.进程 进程(process)是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。进程是操作系统资源分配和处理器调度的基本单位,拥有独立的代码、内部数…...
Finish技术生态计划: FinishRpc
finishRpc 简介 纯个人兴趣设计的项目: 因为失业在家摆烂 所以没事就想写点代码 本身也比较喜欢自己写一些好玩的demo 这个项目的设计完全是取悦自己又菜又有一个创造框架的梦想 可以用于提升框架设计思路以及实践一些常用技术的练习 可以用于校园中的练习 , 如果能对你有所…...
《商业世界的开源法则:协议选择与商业模式创新》
引言 在当今数字化时代,开源软件已成为技术生态系统中不可或缺的一部分。从Linux操作系统到Apache Web服务器,从MySQL数据库到React前端框架,开源项目支撑着全球大部分互联网基础设施和企业IT系统。然而,关于开源协议与商业使用之…...
Kubernetes》》k8s》》explain查 yaml 参数
在创建json 和yaml 时,我们可能不知道具体的参数该怎么写。同样 我们可以通过explain这个 命令来查看 每个参数具体的作用与写法 # 查看 pod类性有哪些参数 kubectl explain pod# 查看pod中 spec下面有哪些参数 kubectl explain pod.spec...
Kubernetes(k8s)学习笔记(三)--部署 Kubernetes Master
前文已经使用docker安装了kubeadm,因此本文使用kubeadm部署master节点。 一.先拉取必要的镜像库到本地。 在拉取之前,先配下镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": [&qu…...