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

第二十七篇 数据仓库与维度建模指南:从理论到实战的进阶之路

声明:文章内容仅供参考,需仔细甄别。文中技术名称属相关方商标,仅作技术描述;代码示例为交流学习用途,部分参考开源文档(Apache 2.0/GPLv3);案例数据已脱敏,技术推荐保持中立;法规解读仅供参考,请以《网络安全法》《数据安全法》官方解释为准。

目录

    • 一、数据获取与数据分析:OLTP与OLAP的本质差异
      • 1.1 操作型系统 vs 分析型系统
      • 1.2 典型技术栈对比(国内版)
    • 二、企业级数据仓库架构深度解析
      • 2.1 Kimball总线架构增强版
      • 2.2 现代混合架构实践(电商案例)
    • 三、维度建模高级技巧与实战
      • 3.1 星型模式优化策略(增强版)
      • 3.2 缓慢变化维(SCD)工业级实现
    • 四、现代ETL系统架构设计(国产化版)
      • 4.1 流批融合架构
      • 4.2 数据质量保障体系
    • 五、商业智能实战案例(国内场景)
      • 5.1 社区团购GMV预测
      • 5.2 数据大屏技术栈
    • 六、企业级最佳实践
      • 6.1 性能优化Checklist
    • 七、工具矩阵更新
    • 八、常见问题深度解析

一、数据获取与数据分析:OLTP与OLAP的本质差异

1.1 操作型系统 vs 分析型系统

某新零售企业案例(覆盖3000+门店)
OLTP系统(操作型):

  • 每秒处理5000+交易事务(含移动支付)
  • 使用 阿里云PolarDB(国产分布式数据库)
-- 典型OLTP表设计(支持JSON字段)
CREATE TABLE orders (order_id VARCHAR(36) PRIMARY KEY COMMENT '雪花算法ID',user_id VARCHAR(24),product_info JSON COMMENT '商品快照(含实时价格)',payment_data JSON COMMENT '支付渠道数据',create_time DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6)
) ENGINE=InnoDB PARTITION BY HASH(order_id);

OLAP系统(分析型):

  • 分钟级延迟处理PB级行为分析数据
  • 使用 Apache Doris 2.0 + 对象存储OSS
-- 行为分析宽表设计
CREATE TABLE user_behavior_wide (user_id VARCHAR(24),item_id INT,behavior_type SMALLINT COMMENT '1:浏览 2:加购 3:购买',province_code VARCHAR(6),timestamp DATETIME,INDEX idx_user (user_id) USING BITMAP
) ENGINE=OLAP 
DUPLICATE KEY(user_id)
PARTITION BY RANGE(timestamp)()
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES ("storage_type"="column");

1.2 典型技术栈对比(国内版)

类别OLTP系统OLAP系统
数据库阿里云PolarDB/TiDBApache Doris/AnalyticDB
存储引擎InnoDB/RocksDB列存+对象存储OSS
索引策略自适应哈希索引智能索引(倒排+布隆过滤)
典型延迟<10ms亚秒级~分钟级(按场景分级)
国产化认证等保三级+信创适配金融级容灾认证

二、企业级数据仓库架构深度解析

2.1 Kimball总线架构增强版

核心组件升级:

  • 统一元数据中心:基于Apache Atlas实现字段级血缘追踪
  • 智能维度管理:自动识别维度变更并触发SCD处理

2.2 现代混合架构实践(电商案例)

架构演进:

交易系统
实时数据流
Apache Flink
实时特征库-Doris
批量数据
数据湖格式-Iceberg
离线训练
统一查询层
DataWind看板

关键实现:

  1. 流批一体:Flink SQL统一处理实时与离线数据
  2. 湖仓联动:Iceberg表自动同步到Doris加速查询
  3. 国产化适配:全链路支持ARM服务器与麒麟OS

三、维度建模高级技巧与实战

3.1 星型模式优化策略(增强版)

维度降维技术:

-- 基于特征工程的维度压缩(Hologres示例)
CREATE TABLE dim_user_embedding AS
SELECT user_id,pgml.train('user_features', 'embedding_model', ARRAY[age, gender, purchase_freq]) AS feature_vector
FROM raw_user_data;

事实表压缩方案:

原始方案优化技术压缩率(实测)
存储完整JSON日志Protobuf编码+ZSTD压缩15:1
明细级用户行为聚合预计算(RoaringBitmap)100:1

3.2 缓慢变化维(SCD)工业级实现

SCD2完整实现(含国产数据库适配):

-- 达梦数据库语法示例
BEGIN TRANSACTION;-- 关闭旧记录UPDATE DMHR.DIM_EMPLOYEE SET END_DATE = SYSDATE - 1/86400, IS_CURRENT = 'N'WHERE EMPLOYEE_ID = ? AND IS_CURRENT = 'Y';-- 插入新记录INSERT INTO DMHR.DIM_EMPLOYEE(EMPLOYEE_KEY, EMPLOYEE_ID, DEPT_CODE, START_DATE, END_DATE, IS_CURRENT)VALUES(NEXTVAL('SEQ_EMP_SK'), ?, ?, SYSDATE, NULL, 'Y');
COMMIT;

SCD类型选择决策树:

是否需完整历史追溯?
├─ 是 → SCD2或SCD4
└─ 否 → 是否仅需最新值?├─ 是 → SCD1└─ 否 → SCD3(保留有限历史)

四、现代ETL系统架构设计(国产化版)

4.1 流批融合架构

推荐技术栈:

层级组件国产替代方案
数据采集Flink CDCTapData Connector
流处理Apache Flink阿里云实时计算Blink
批处理Spark 3.x + Iceberg腾讯云Oceanus
任务调度Apache DolphinScheduler阿里云DataWorks调度

4.2 数据质量保障体系

三位一体质量监控:

# 使用Great Expectations国产化改造示例
from great_expectations_provider.adapters.alibaba import MaxComputeCheckbatch = context.get_batch(datasource_name="odps_prod",data_connector_name="daily_sales",data_asset_name="fact_sales"
)# 定义质量规则
rules = {"amount_not_null": {"type": "expect_column_values_to_not_be_null", "column": "amount"},"valid_date_range": {"type": "expect_column_values_to_be_between","column": "sale_date","min_value": "2025-01-01","max_value": "2025-12-31"}
}# 执行校验
results = context.run_validation(batch, rules)

五、商业智能实战案例(国内场景)

5.1 社区团购GMV预测

-- 基于Doris的时序预测(兼容MySQL语法)
SELECT city_id,GMV,TS_PREDICT_ARIMA(GMV, 'period=7, p=3, d=1, q=2') OVER (PARTITION BY city_id ORDER BY sale_date) AS predicted_gmv
FROM dwd_daily_city_gmv
WHERE sale_date BETWEEN '2025-01-01' AND '2025-06-30';

5.2 数据大屏技术栈

组件类型国产化方案核心能力
实时计算阿里云Flink百万级TPS事件处理
可视化渲染火山引擎VeDIWebGL级地理数据渲染
数据服务百度OpenAPI身份证/MD5加密数据脱敏
权限控制华为云IAM字段级数据权限管控

六、企业级最佳实践

6.1 性能优化Checklist

云原生优化专项:

  • 启用AnalyticDB弹性并行查询(EPQ)
  • 配置OSS生命周期自动降冷(热/温/冷数据分层)
  • 使用Colocation Group优化关联查询
  • 开启智能压缩(根据数据类型自动选择ZSTD/LZ4)

安全控制方案:

-- 数据脱敏示例(达梦数据库)
CREATE MASKING POLICY phone_mask AS (phone VARCHAR(20) RETURNS VARCHAR(20) BEGINRETURN CONCAT(SUBSTR(phone,1,3), '****', SUBSTR(phone,8));
END;ALTER TABLE customer_info 
MODIFY COLUMN phone SET MASKING POLICY phone_mask;

七、工具矩阵更新

领域开源方案商业方案选型建议
数据集成SeaTunnel阿里云DataWorks政务云项目必选
实时计算Apache Flink火山引擎流式计算短视频场景首选
数据湖Apache Iceberg腾讯云Tencent LakeAI训练推荐
BI工具Superset帆软FineBI传统企业报表首选

八、常见问题深度解析

Q1:如何实现跨境数据仓库合规?

  • 采用 "两地三中心"架构:境内AnalyticDB+境外AWS Redshift
  • 通过 隐私计算中间件 实现数据可用不可见

Q2:实时数仓如何保障Exactly-Once语义?

  • 国产化方案:
Flink CDC
Paimon事务存储
Doris物化视图
DataWind查询

🎯下期预告:《数据获取与数据分析》
💬互动话题:你在学习SQL时遇到过哪些坑?欢迎评论区留言讨论!
🏷️温馨提示:我是[随缘而动,随遇而安], 一个喜欢用生活案例讲技术的开发者。如果觉得有帮助,点赞关注不迷路🌟

相关文章:

第二十七篇 数据仓库与维度建模指南:从理论到实战的进阶之路

声明&#xff1a;文章内容仅供参考&#xff0c;需仔细甄别。文中技术名称属相关方商标&#xff0c;仅作技术描述&#xff1b;代码示例为交流学习用途&#xff0c;部分参考开源文档&#xff08;Apache 2.0/GPLv3&#xff09;&#xff1b;案例数据已脱敏&#xff0c;技术推荐保持…...

【Unity3D】Addressables使用流程

Package Manager - 搜索 Addressables 安装 Window -> Asset Management -> Addressables 打开窗口 New -> 新建Packed Assets 资源组 默认资源组Default xxx (Default) 将资源&#xff0c;如预制体直接拖拽进资源组 Build -> New Build -> Default Buil…...

在Oracle Linux 7上安装Oracle 11gr2数据库

好久没有安装Oracle 11g了&#xff0c;虽然是老版本&#xff0c;但是还是有很多公司在用&#xff0c;自从有了oracle linux感觉安装变简单了。 1.安装先决条件包,此包会配置系统参数,建立oracle用户等: yum install oracle-rdbms-server-11gR2-preinstall 安装完这个oracle自…...

python爬虫概述

0x00 python爬虫概述 以豆瓣的选电影模块为例&#xff0c;当查看源代码搜索猫猫的奇幻漂流瓶是搜不到的 这时服务器的工作方式应该是这样的 客户端浏览器第一次访问其实服务器端是返回的一个框架(html代码) 当客户端浏览器第二次通过脚本等方式进行访问时服务器端才返回的数据…...

Umi从零搭建Ant Design Pro项目(2)

文章目录 前言一、新增登录页面1.登录页面代码2.登录处理3.修改app.tsx 二、说一下逻辑1. 流程图2. 注意点 总结 前言 前面写了创建项目及修改一些配置。这一章写写登录页面。 一、新增登录页面 新增登录页面&#xff0c;会涉及Umi的目录结构。先看一下文档再动手。 1.登录页…...

nginx 配置ip黑白名单

配置ip白名单 nginx.conf内容&#xff0c;以server模块的配置为例。其中&#xff0c;allow和deny可以在http&#xff0c;server&#xff0c;location中配置。 server {listen 80;server_name localhost;# 白名单配置allow 192.168.3.7; # 允许单个IPallow 192.168.3.9…...

【C++】STL库面试常问点

STL库 什么是STL库 C标准模板库&#xff08;Standard Template Libiary&#xff09;基于泛型编程&#xff08;模板&#xff09;&#xff0c;实现常见的数据结构和算法&#xff0c;提升代码的复用性和效率。 STL库有哪些组件 STL库由以下组件构成&#xff1a; ● 容器&#xf…...

Qt 控件概述 QWdiget 1.1

目录 qrc机制 qrc使用 1.在项目中创建一个 qrc 文件 2.将图片导入到qrc文件中 windowOpacity&#xff1a; cursor 光标 cursor类型 自定义Cursor font tooltip focusPolicy styleSheet qrc机制 之前提到使用相对路径的方法来存放资源&#xff0c;还有一种更好的方式…...

python 数据可视化matplotib库安装与使用

要使用 matplotlib 库进行数据可视化&#xff0c;首先你需要确保已经安装了该库。如果你还没有安装&#xff0c;可以通过 Python 的包管理器 pip 来安装它。在你的命令行工具中运行以下命令来安装 matplotlib&#xff1a; pip install matplotlib安装完成后&#xff0c;你就可以…...

C# Exe + Web 自动化 (BitComet 绿灯 自动化配置、设置)

BitComet GreenLight,内网黄灯转绿灯 (HighID), 增加p2p连接率提速下载-CSDN博客 前两天写个这个&#xff0c;每次开机关机后要重来一遍很麻烦的索性写个自动化。 先还是按照上面的教程自己制作一遍&#xff0c;留下Luck 以及 路由器相关的 端口记录信息。 &#xff08;因为自…...

1-1 MATLAB深度极限学习机

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 参考[1]魏洁.深度极限学习机的研究与应用[D].太原理工大学[2023-10-14].DOI:CNKI:CDMD:2.1016.714596. 目录 0.引言 1.ELM-AE实现 2.DE…...

MyBatis源码分析のSql执行流程

文章目录 前言一、准备工作1.1、newExecutor 二、执行Sql2.1、getMappedStatement2.2、query 三、Cache装饰器的执行时机四、补充总结 前言 本篇主要介绍MyBatis解析配置文件完成后&#xff0c;执行sql的相关逻辑&#xff1a; public class Main {public static void main(Str…...

Java 大视界 -- Java 大数据中的知识图谱可视化与交互分析技术(141)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

万字长文详解|蚂蚁数据湖深度探索与业务应用实践

作者介绍&#xff1a;黄超傑&#xff0c;蚂蚁数据智能部实时数据团队数据研发工程师&#xff0c;致力于数据湖技术在蚂蚁落地应用、蚂蚁广告实时数仓建设、蚂蚁数据成本治理等工作。 在开始之前 如果&#xff1a; 你想要提升数据时效&#xff0c;能够接受分钟级延迟你好奇准实…...

网络空间安全(36)数据库权限提升获取webshell思路总结

一、获取数据库访问权限 寻找漏洞&#xff1a; SQL注入&#xff1a;这是最常见的方法之一。攻击者通过SQL注入漏洞&#xff0c;可以在数据库执行任意SQL语句&#xff0c;从而获取数据库中的数据&#xff0c;甚至可能获取数据库的访问权限。配置文件泄露&#xff1a;有时&#x…...

前端面经分享(25/03/19)

北京一家做协同办公软件出海的公司&#xff0c;技术一面&#xff0c;20k-40k&#xff0c;要求3-5年 详细聊了一下上家公司的项目上家公司的项目是不做了吗&#xff0c;离职原因是什么&#xff0c;你觉得公司的这个产品怎么样在做AI类的业务时&#xff0c;作为前端感觉跟常规业务…...

火山引擎(豆包大模型)(抖音平台)之火山方舟的Prompt的使用测试

前言 在大模型的使用过程当中&#xff0c;Prompt的使用非常的关键。原来&#xff0c;我对Prompt的理解不深&#xff0c;觉得Prompt的产生并不是很有必要。但是&#xff0c;自从使用了火山方舟中的“Prompt优解”之后&#xff0c;感受加深了&#xff0c;觉得Prompt是我们和大模型…...

AI助力临床诊疗:AI工具帮助确认病情

在临床诊疗中&#xff0c;准确确认病情是治疗成功的关键。然而&#xff0c;传统的诊疗方法往往依赖医生的经验和有限的检查手段&#xff0c;容易出现误诊或漏诊的情况。随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI工具在临床诊疗中的应用逐渐崭露头角…...

【平台优化】大数据集群一个客户端参数引起的任务性能差的问题

大数据集群一个客户端参数引起的任务性能差的问题 背景介绍排查过程任务慢的具体原因Executor中数据内存往磁盘溢写结果数据写入分区路径 分析解决方案 结语&思考 背景介绍 随着业务量不断扩大&#xff0c;平台逐步发展成HDFS多联邦的架构&#xff0c;这个过程中&#xff…...

【OCR】总结github上开源 OCR 工具:让文字识别更简单

前言 在数字化的时代&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术成为了我们处理文档、图像文字信息的得力助手。它能够将图像中的文字信息转换为可编辑和可处理的文本数据&#xff0c;极大地提高了信息处理的效率。今天&#xff0c;我要给大家介绍一些优秀的开源…...

为wordpress核心functions文件瘦身

在wordpress主题开发过程中&#xff0c;常会用到functions.php这个文件&#xff0c;通过这个文件&#xff0c;可以让wordpress主题变得很强大。但是随着&#xff0c;功能的越来越多functions文件也会变得越来越臃肿庞大。要修改起functions文件来&#xff0c;也就越麻烦。特别是…...

Jmeter使用之http请求默认值

一、添加【HTTP请求默认值】 1、添加方式 【线程组】---->右击【添加】---->【配置元件】---->【HTTP请求默认值】 2、作用 在发送http请求的时候&#xff0c;自带默认值设置的参数&#xff08;常用&#xff1a;【协议】、【服务器名称或IP】、端口号、内容编码&…...

【QT】】qcustomplot的初步使用二

功能预期&#xff1a; 在简单显示曲线&#xff08;&#xff09;基础上加功能&#xff1a; 1.在曲线区域里&#xff0c;X轴可以随鼠标滚轮变化将图像缩放、随鼠标左键进行曲线移动&#xff1b; 2.在曲线区域里&#xff0c;Y轴的量程可以随Y轴数据大小自适应&#xff1b; 3.可以…...

让 Google Play 成为助力 PC 游戏增长的最佳平台

作者 / Google Play 游戏副总裁兼总经理 Aurash Mahbod 我们正在加强多平台游戏产品&#xff0c;并将在今年的游戏开发者大会 (GDC) 上发布激动人心的消息。我们将为用户带来更多游戏&#xff0c;提供更多跨设备畅玩游戏的方式&#xff0c;并进一步优化游戏体验。在游戏开发者大…...

脚本一键式启动Nginx、Mysql、Redis

此脚本包含拉取镜像、数据卷挂载、容器启动三大部分&#xff0c;可一键式安装三大环境 新建一个depoy.sh文件在服务器上&#xff0c;然后复制以下内容。 给脚本文件添加执行权限 chmod x depoy.sh # 文件的当前目录下 如果需要修改数据库MYSQL密码和Reids密码 MYSQL_ROO…...

路径问题(greedy):地下城游戏

题目描述&#xff1a; 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健…...

LS-NET-008-OSPF、BGP、RIP三大路由协议

LS-NET-008-OSPF、BGP、RIP三大路由协议 从网络层级、协议特性和厂商实现三个维度对比OSPF、BGP、RIP三大路由协议&#xff1a; 一、网络协议分层架构对比 graph TD L7[应用层] --> BGP(TCP/179) L7 --> RIP(UDP/520) L4[网络层] --> OSPF(IP协议号89) L4 -->|报…...

electron框架(3.0)主程序与桥梁与渲染,以及之间的通信

每个页面程序通过渲染和主进程通信&#xff0c;主进程根据需求调用Native Api来实现功能。 实际&#xff0c;每个页面和主程序通信时&#xff0c;需要建个桥梁来管理它们的通信&#xff0c;preload.js(自己创建)&#xff0c;来管理实现通信。 ----创建preload.js定义桥梁js&a…...

python写入excel多个sheet表 以及追加sheet表

python写入excel多个sheet表 以及追加sheet表 写入多个sheet表在excel追加sheet表 可将不同DataFrame分别写入指定Sheet&#xff08;如初始写入"箱_4"和"箱_2"&#xff09;&#xff0c;并通过封装函数append_to_excel支持动态追加新Sheet到现有文件&#x…...

【大模型微调】使用Llama Factory实现中文llama3微调

【大模型微调】使用Llama Factory实现中文llama3微调 github链接 为什么不用基座模型&#xff1a;95%用的英文数据训练&#xff0c;训练效果不好 所以用的Llama3-99-Chinese-Chat(别人微调过的再微调)...