第三十一篇 数据仓库(DW)与商业智能(BI)架构设计与实践指南
目录
- 一、DW/BI架构核心理论与选型策略
- 1.1 主流架构模式对比
- (1)Kimball维度建模架构
- (2)Inmon企业工厂架构
- (3)混合架构
- 二、架构设计方法论与实施步骤
- 2.1 维度建模实战指南
- (1)模型选择决策树
- (2)ETL开发规范
- 2.2 实时BI技术栈选型
- 三、全链路实施与优化策略
- 3.1 五阶段实施框架
- 3.2 数据治理体系构建
- 四、行业场景深度实践
- 4.1 电商用户行为分析
- 4.2 金融风控实时预警
- 五、关键问题解析
- Q1:如何选择分层架构?
- Q2:历史数据变更如何处理?
- Q3:如何保障实时查询性能?
- 习题解析
一、DW/BI架构核心理论与选型策略
1.1 主流架构模式对比
(1)Kimball维度建模架构
- 核心理念:以业务需求驱动,通过星型模型/雪花模型构建统一维度体系,强调ETL过程中的数据质量与一致性。
- 优势:查询效率高、开发周期短,适合快速响应业务需求。例如,通过
CREATE TABLE dim_product定义缓慢变化维(SCD)以支持历史追踪。 - 典型分层:
-- 星型模型示例 CREATE TABLE fact_sales (product_sk INT,time_sk INT,amount DECIMAL(18,2) ) PARTITIONED BY (dt STRING);
(2)Inmon企业工厂架构
- 特点:基于3NF规范化的企业级数据仓库(EDW),强调原子数据的集中存储。
- 适用场景:大型企业需长期维护单一数据源时,但开发成本高、灵活性低。
(3)混合架构
- 实践方案:在已有EDW基础上叠加数据集市层,兼顾标准化与灵活性,但需处理数据冗余和同步问题。
二、架构设计方法论与实施步骤
2.1 维度建模实战指南
(1)模型选择决策树
(2)ETL开发规范
- 数据质量检查:
INSERT INTO dwd_order SELECT order_id,COALESCE(user_id, -1) AS user_id, -- 空值处理CAST(amount AS DECIMAL(16,2)) AS amount -- 类型强制转换 FROM ods_order WHERE dt='2023-08-20'; - 增量加载策略:通过时间戳或CDC技术(如Debezium)实现高效更新。
2.2 实时BI技术栈选型
| 组件类型 | 开源方案 | 云原生方案 |
|---|---|---|
| 流处理引擎 | Flink | Kinesis Data Analytics |
| 实时存储 | Apache Druid | Amazon Timestream |
| 可视化工具 | Apache Superset | QuickSight |
三、全链路实施与优化策略
3.1 五阶段实施框架
- 需求分析:通过用户故事(User Story)梳理20+核心指标,如GMV、留存率等。
- 模型验证:使用Great Expectations配置数据质量规则:
validator.expect_column_values_to_not_be_null("user_id") validator.expect_column_values_to_be_between("amount", 0, 1000000) - 性能调优:
- 存储优化:采用ORC/Parquet列式存储,分桶策略减少Shuffle
- 计算优化:通过Spark AQE自适应查询优化
3.2 数据治理体系构建
- 元数据管理:使用Apache Atlas实现表级血缘分析。
- 权限控制:
<!-- Apache Ranger策略示例 --> <policy name="Sales-Data-Access"><resources><table>fact_orders</table></resources><accessTypes>SELECT</accessTypes><roles>BI-Analyst</roles> </policy>
四、行业场景深度实践
4.1 电商用户行为分析
技术方案:
[APP日志] -> [Kafka] -> [Flink实时计算] -> [ClickHouse]-> [Spark离线ETL] -> [Hive DWD]
关键指标SQL:
WITH dau AS (SELECT dt, COUNT(DISTINCT user_id) AS uv FROM dwd_user_behavior WHERE event='launch' GROUP BY dt
)
SELECT a.dt, ROUND(b.uv*100.0/a.uv,2) AS 7d_retention
FROM dau a LEFT JOIN dau b ON b.dt = DATE_ADD(a.dt,7)
4.2 金融风控实时预警
流批一体架构:
- 实时特征:Flink CEP检测异常交易模式
- 离线特征:Hive构建用户画像
- 服务化:MLflow部署风控模型API
五、关键问题解析
Q1:如何选择分层架构?
- 中小型企业:三层精简模型(ODS->DWD->ADS),减少数据冗余
- 大型企业:五层扩展模型(增加DIM/DWS),支持复杂分析需求
Q2:历史数据变更如何处理?
SCD Type2实现方案:
MERGE INTO dim_user AS target
USING (SELECT user_id, address FROM staging) AS source
ON target.user_id = source.user_id
WHEN MATCHED THEN UPDATE SET end_dt = CURRENT_DATE
WHEN NOT MATCHED THEN INSERT (user_id, address, start_dt) VALUES (source.user_id, source.address, CURRENT_DATE)
Q3:如何保障实时查询性能?
- 预计算:DorisDB物化视图加速聚合查询
- 缓存策略:Redis缓存热点维度表
- 路由优化:根据时间范围自动选择查询引擎
习题解析
-
问题:星型模型与雪花模型的核心区别是什么?
答案:星型模型通过维度表冗余提升查询性能,雪花模型通过规范化减少存储空间但增加关联复杂度 -
问题:ETL过程中常见的数据质量问题有哪些?
答案:空值异常(8.3%)、值域越界(如金额为负)、枚举值不符(如状态码错误),需通过Great Expectations等工具检测 -
问题:如何评估实时BI架构的可行性?
答案:从数据延迟(<1s)、吞吐量(10w+TPS)、故障恢复时间(<30s)三个维度进行压力测试
🎯下期预告:《Kimball维度建模》
💬互动话题:你在学习SQL时遇到过哪些坑?欢迎评论区留言讨论!
🏷️温馨提示:我是[随缘而动,随遇而安], 一个喜欢用生活案例讲技术的开发者。如果觉得有帮助,点赞关注不迷路🌟
相关文章:
第三十一篇 数据仓库(DW)与商业智能(BI)架构设计与实践指南
目录 一、DW/BI架构核心理论与选型策略1.1 主流架构模式对比(1)Kimball维度建模架构(2)Inmon企业工厂架构(3)混合架构 二、架构设计方法论与实施步骤2.1 维度建模实战指南(1)模型选择…...
智能追踪台灯需求文档
一、项目背景 设计一款具备人体感知与动态追踪能力的智能台灯,实现以下核心目标: 自动开关:检测到人体活动时自动开启光源,无人时关闭以节省能耗。主动追踪:通过机械结构实时调整光照方向,确保用户始终处…...
给语言模型增加知识逻辑校验智能,识别网络信息增量的垃圾模式
给LLM增加逻辑校验模型,赋予其批判性智能。 网络系统上信息不断增长,相当部分是非纯粹的人类生成,而是由各种模型生成输出。模型持续从网络取得信息,生成信息输出到网络,AI生态系统与网络信息池之间陷入信息熵增循环。…...
Electron打包文件生成.exe文件打开即可使用
1 、Electron 打包,包括需要下载的内容和环境配置步骤 注意:Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用程序的框架 首先需要电脑环境有Node.js 和 npm我之前的文章有关nvm下载node的说明也可以去官网下载 检查是否有node和npm环…...
单播、广播、组播和任播
文章目录 一、单播二、广播三、组播四、任播代码示例: 五、各种播的比较 一、单播 单播(Unicast)是一种网络通信方式,它指的是在网络中从一个源节点到一个单一目标节点对的传输模式。单播传输时,数据包从发送端直接发…...
AI生成移动端贪吃蛇游戏页面,手机浏览器打开即可玩
贪吃蛇游戏可计分,可穿墙,AI生成适配手机浏览器的游戏,代码如下: <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <meta name"viewport" …...
Cursor+Claude-3.5生成Android app
一、Android Studio下载 https://developer.android.com/studio?hlzh-tw#get-android-studio 等待安装完成 二、新建工程 点击new project 选择Empty Activity 起一个工程名 当弹出这个框时 可以在settings里面选择No proxy 新建好后如下 点击右边模拟器,…...
NLP高频面试题(九)——大模型常见的几种解码方案
大模型常见的几种解码方案 在自然语言生成任务中,如何从模型生成的概率分布中选择合适的词汇,是影响文本质量的关键问题。常见的解码方法包括贪心搜索(Greedy Search)、束搜索(Beam Search)、随机采样&…...
QT Quick(C++)跨平台应用程序项目实战教程 3 — 项目基本设置(窗体尺寸、中文标题、窗体图标、可执行程序图标)
目录 1. 修改程序界面尺寸和标题 2. 窗体图标 3. 修改可执行程序图标 上一章创建好了一个初始Qt Quick项目。本章介绍基本的项目修改方法。 1. 修改程序界面尺寸和标题 修改Main.qml文件,将程序宽度设置为1200,程序高度设置为800。同时修改程序标题…...
Transformers x SwanLab:可视化NLP模型训练(2025最新版)
HuggingFace 的 Transformers 是目前最流行的深度学习训框架之一(100k Star),现在主流的大语言模型(LLaMa系列、Qwen系列、ChatGLM系列等)、自然语言处理模型(Bert系列)等,都在使用T…...
VSCode 抽风之 两个conda环境同时在被激活
出现了神奇的(toolsZCH)(base) 提示符,如下图所示: 原因大概是:conda 环境的双重激活:可能是 conda 环境没有被正确清理或初始化,导致 base 和 toolsZCH 同时被激活。 解决办法就是 :conda deactivate 两次…...
Android项目实战搭建 MVVM架构
View层 具体代码: activity: /*** description:* 普通Activity基类,不带ViewModel,显示基本加载状态* 需要获取到子类的布局id用于databinding的绑定* author YL Chen* date 2024/9/4 21:34* version 1.0*/ abstract class BaseActivity<VB : ViewD…...
Mybatis的基础操作——03
写mybatis代码的方法有两种: 注解xml方式 本篇就介绍XML的方式 使用XML来配置映射语句能够实现复杂的SQL功能,也就是将sql语句写到XML配置文件中。 目录 一、配置XML文件的路径,在resources/mapper 的目录下 二、写持久层代码 1.添加mappe…...
React:React主流组件库对比
1、Material-UI | 官网 | GitHub | GitHub Star: 94.8k Material-UI 是一个实现了 Google Material Design 规范的 React 组件库。 Material UI 包含了大量预构建的 Material Design 组件,覆盖导航、滑块、下拉菜单等各种常用组件,并都提供了高度的可定制…...
奇迹科技:蓝牙网关赋能少儿篮球教育的创新融合案例研究
一、引言 本文研究了福建奇迹运动体育科技有限公司(简称‘奇迹科技’)如何利用其创新产品体系和桂花网蓝牙网关M1500,与少儿篮球教育实现深度融合。重点分析其在提升教学效果、保障训练安全、优化个性化教学等方面的实践与成效,为…...
分享最近前端面试遇到的一些问题
前情提要(分享个人情况,可以直接跳过) 先说一下我的个人情况,我是2026届的,目前是在找前端实习。 3月初,从3月3日开始在Boss上投简历。 分享我的个人故事,不想看可以直接滑到下面,…...
嵌入式基础知识学习:SPI通信协议是什么?
SPI(Serial Peripheral Interface)是串行外设接口的缩写,是一种广泛应用于嵌入式系统的高速同步串行通信协议,由摩托罗拉公司于20世纪80年代提出。以下是其核心要点: 一、SPI的核心定义与特点 基本特性 全双工同步通信…...
python每日十题(6)
】函数定义:函数是指一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需要调用其函数名即可。函数能提高应用的模块性和代码的重复利用率 在Python语言中,用关键字class来定义类 在Python语…...
1.Go - Hello World
1.安装Go依赖 https://go.dev/dl/ 根据操作系统选择适合的依赖,比如windows: 2.配置环境变量 右键此电脑 - 属性 - 环境变量 PS: GOROOT:Go依赖路径; GOPATH:Go项目路径; …...
优先队列 priority_queue详解
说到,priority_queue优先队列。必须先要了解啥是堆与运算符重载(我在下方有解释)。 否则只知皮毛,极易忘记寸步难行。 但在开头,还是简单的说下怎么用 首先,你需要调用 #include <queue> 在main函数中,声明…...
《信息系统安全》(第一次上机实验报告)
实验一 :网络协议分析工具Wireshark 一 实验目的 学习使用网络协议分析工具Wireshark的方法,并用它来分析一些协议。 二实验原理 TCP/IP协议族中网络层、传输层、应用层相关重要协议原理。网络协议分析工具Wireshark的工作原理和基本使用规则。 三 实…...
C++实现求解24点游戏
力扣原题:679. 24 点游戏 - 力扣(LeetCode) 判断四个数字能否通过加减乘除得到24点 使用回溯遍历四个数字的每一种组合,具体来说,每次从数组中选取两个数字以加减乘除四种方式得到一个新的数字,这样数组的…...
Java-腾讯云短信模板兼容阿里云短信模板-短信模板参数生成
最新版本更新 https://code.jiangjiesheng.cn/article/362?fromcsdn 模板 腾讯云:您好!{}的${},有{}发生{} 阿里云:您好!${orgName}的${monitorName},有${equipName}发生${status} 原腾讯云短信发送的代码…...
简要分析IPPROTO_TCP参数
IPPROTO_TCP是操作系统或网络编程中定义的一个 协议号常量,用于标识 传输控制协议(TCP)。其核心作用是 在传输层指定使用TCP协议,确保数据通过TCP的可靠传输机制进行通信。 一、定义与值 头文件:定义在<netinet/in.…...
SOFABoot-06-健康检查
前言 大家好,我是老马。 sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…...
如何理解java中Stream流?
在Java中,Stream 是 Java 8 引入的一个强大API,用于处理集合(如 List、Set、Map 等)数据的流式操作。它提供了一种声明式、函数式的编程风格,可以高效地进行过滤、映射、排序、聚合等操作。 Stream 的核心概念 流&…...
Android使用RxHttp进行国密4加密解密
国密SM4加解密问题汇总 前言国密4加解密工具类RxHttp统一加解密处理解密前言 为了网络安全需要对app内请求数据接口使用SM4国密4进行加解密操作,在实施的过程中遇到了些问题 也收获颇丰,特此记录 在线SM4加密测试网址: 点击此进入网址. 国密4加解密工具类 这里我使用的是b…...
【自学笔记】Linux基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Linux 基础知识点总览目录Linux 简介文件和目录结构常用命令文件操作目录操作权限管理文本处理 Shell 脚本基础进程管理用户和组管理网络配置 总结 Linux 基础知识点…...
JavaScript与客户端开发
1、简介 简单的讲,JavaScript是一种脚本语言,为网站提供了一种在客户端运行程序的手段,通过它可以实现客户端数据验证、网页特效等功能。 JavaScript是一种基于对象和事件驱动(不懂啥意思,暂不管它)&…...
基于CNN的FashionMNIST数据集识别5——GoogleNet模型
源码 import torch from torch import nn from torchsummary import summaryclass Inception(nn.Module):def __init__(self, in_channels, c1, c2, c3, c4):super().__init__()self.ReLu nn.ReLU()#路径1self.p1_1 nn.Conv2d(in_channelsin_channels, out_channelsc1, kern…...
