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

数仓建模:数仓设计中的10个陷阱

目录

0 引言

1 主要内容

1.1 过于迷恋技术,而没有将重点放在业务需求和目标上

1.2 没有或无法找到一个有影响的、平易近人的、明白事理的高级管理人员作为数仓建设的发起人

1.3 将项目处理为一个巨大的持续多年的项目,而不是追求更容易管理的、虽然仍然具有挑战性的迭代开发工作

1.4 分配大量的精力去构建规范化数据结构, 在最终呈现数据之前,用尽所有的预算

1.5 将主要精力投入到后端操作型性能和易开发性,而没有重点考虑前端查询的性能和易用性

1.6 使存在于应用层的可查询数据设计的过于复杂,应该通过简化解决方案开发出更适合需要的产品

1.7.烟囱式开发,不考虑使用可共享的、一致性维度将数据模型联系在一起

1.8只将汇总数据加载到数据仓库中

1.9.臆想业务、业务需求及分析,其涉及的数据及支持技术都是静态的

1.10 忽略数据仓库的成功直接来源于业务的认可。如果用户未将数据仓库系统当成他们制定决策的基础,那么所有的工作都是徒劳

2小结


0 引言

在Ralph Kimball和Margy Ross的《数据仓库工具箱》一书中,提到了数据仓库设计中的10个常见陷阱,本文针对每个陷阱添加了一条与数据仓库设计经验有关的附加解释。在着手进行数据仓库项目之前,可以了解一下数这10个常见陷阱。这样才可以不被数据仓库设计的陷阱所困扰,避免这10个常见的陷阱可以在构建数仓的过程少走些弯路。

1 主要内容

1.1 过于迷恋技术,而没有将重点放在业务需求和目标上

数仓归根结底是要解决业务问题的,狂拽酷炫的数据架构和层出不穷的新技术通常会比去了解用户需求更具有吸引力。其实,也没有完美的技术架构,只要是能够满足当下及未来可见的业务需求即可,合适就好。应当把时间投入在理解和梳理业务上,这样才能够构建出相对合理的数据模型,从而提高模型的复用性,及时响应业务需求。另外建数仓的目的是什么,或者说数仓有哪些价值呢,其实最终还是要凸显数据的价值,做了一堆表、设计一堆模型,如果只是停留在这个层面,那数仓将毫无意义。通过数据产品透出数据并能够指导业务,才是我们做数仓多应该思考的一个问题。

1.2 没有或无法找到一个有影响的、平易近人的、明白事理的高级管理人员作为数仓建设的发起人

数仓建设是多部门合作的结果,只有这样才能够真正的实现数据赋能业务。所以没有高层的支持和重视,数仓的建设将会很难推进。这种情况在传统的企业尤其重要,一般互联网公司,数据是内置在基因里面的,对数据重视程度是非常高的,所以利用数据指导业务是顺其自然的事情。对传统的中小企业而言,前期没有数据沉淀,基本上靠手工报表解决一些简单统计,这个时候要去推进一些数仓项目,能有个影响力的领导者是非常重要的,否则将很难推进。

1.3 将项目处理为一个巨大的持续多年的项目,而不是追求更容易管理的、虽然仍然具有挑战性的迭代开发工作

这是一个经常出现的陷阱,试图建设一个庞大的,无所不包的系统,通常是不可取的。似乎只要建设一个“巨型无比”的系统就可以完成任何工作,解决任何问题一样,其实结果往往会适得其反。更糟的是,管理这些项目的人往往没有与业务进行足够详细的协商,从而开发有用的产品。一言以蔽之,银样镴枪头,中看不中用。小步快跑、快速迭代是个非常好的选择,尤其是对于还没有数仓沉淀的情况,可以先run起来,支撑起业务,后面在慢慢迭代即可。这样通过不断产出价值,才能够得到更多部门的支持和配合。

1.4 分配大量的精力去构建规范化数据结构, 在最终呈现数据之前,用尽所有的预算

这个陷阱不像其他陷阱一样重要,在Kimball的方法论中,对维度模型进行更改所带来的业务风险要比更改源事务数据库小。所以应该留出足够的资源来构建它们,但是很少有中小型企业在资源上进行投资以创建完全一致的事实和维度表,更不用说OLAP数据立方体了,所以再多的理论也解决不了实际的问题,先跑起来才重要,不管姿势是否完美。模型真的重要吗,毫无疑问是重要的,但是也是有轻重缓急的时候,为了设计完美的模型而不支持需求就大错特错了,实际的操作过程中有很大的弹性空间,不可被理论禁锢,停滞不前。

1.5 将主要精力投入到后端操作型性能和易开发性,而没有重点考虑前端查询的性能和易用性

为用户提供易于阅读的数据展示形式并具有良好的查询性能会很重要。

1.6 使存在于应用层的可查询数据设计的过于复杂,应该通过简化解决方案开发出更适合需要的产品

通常,大多数业务用户都希望简化数据表示方式。此外,对这些数据的访问应限于尽可能少入口。提高获取数据的易用性,会大大提升数仓的价值。

1.7.烟囱式开发,不考虑使用可共享的、一致性维度将数据模型联系在一起

当维度在整个数据仓库中不一致时,就是典型的烟囱式开发。其实,我们使用的维度在本质上是相同的,但是由于数据来自于不同的业务源,并会被随意更新。典型的例子是“时间”维度,在维模型不一致的情况下,最终用户通常完全不知道为什么一个报表中的数据可能与其他地方生成的报表有显着差异。一种好的做法是将数据模型与主数据管理(MDM)解决方案联系在一起,该解决方案包含可以在整个数据仓库中普遍使用的参考数据

1.8只将汇总数据加载到数据仓库中

在事务数据库和数据仓库之间创建的每个ETL(提取,转换和加载)过程中,不能只将汇总的数据装载到数仓中,要确保有一份原子数据存储在数仓中,即将数据同步一份放在准备区(ODS层)。

1.9.臆想业务、业务需求及分析,其涉及的数据及支持技术都是静态的

尽量不要开发仅限于某个特定业务需求和分析的数据模型,因为业务在不断地发生变化。一个差劲的模型设计通常是开发重复的数据模型及不一致的命名约定。在设计一个“完美”的事实表、维表与规范化程度之间取得平衡并不是一件容易的事情,但是开发出可伸缩的以适应业务发展的数据模型是非常重要的

1.10 忽略数据仓库的成功直接来源于业务的认可。如果用户未将数据仓库系统当成他们制定决策的基础,那么所有的工作都是徒劳

这个是很致命的陷阱,如果从一开始都没有得到业务和高层的重视和认可,那么数仓项目多半是会夭折。从用户的角度出发,如果用户对建立的数仓不买账,根本就不会去使用它,结局只会game over。

2小结

本文对《数据仓库工具箱》一书中,提到的数据仓库设计中的10个常见陷阱进行了总结和分析,针对这10个问题,特别是刚开始建设数仓或进行数字化建设的公司来说,这10条经验尤非常值得借鉴。数仓的建设是需要统筹规划的,而不是随便一个取数的Ad-Hoc,与业务系统有着本质的区别,数仓的建设最怕的就是业务分析人员或业务开发人员直接拿来当业务系统使用,最后做成与传统的数据库没什么区别。数仓的建设涉及了多部门的参与与合作,再加上原有的数据不规范性、脏数据、异常数据比较多的情况下,多部门的配合就显得尤为重要,这时候就需有权威的领导出面牵头数仓的建设。

阅读了本文后,您觉得哪一条对你目前公司更重要呢?评论区留下你的意见

 

数字化建设通关指南
专栏原价99,现在活动价29.9,按照阶梯式增长,直到恢复原价

主要内容:
(1)SQL进阶实战技巧
可以参考如下教程,具体链接如下

SQL很简单,可你却写不好?也许这才是SQL最好的教程_sql语句写的很烂怎么办-CSDN博客

上面链接中的文章及技巧会不定期更新。

(2)数仓建模实战技巧和个人心得
       1)新人入职新公司后应如何快速了解业务?

       2)以业务视角看宽表化建设?

       3)  维度建模 or 关系型建模?

       4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?

       5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系                           该由谁来搭建?

       6)如何优雅设计DWS层?DWS层模型好坏该如何评价?

       7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?

       8) 数据架构的选择,mpp or hadoop?

       9)数仓团队应如何体现自己的业务价值,讲好数据故事?

       10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关                          系?

       11)数据部门如何与业务部门沟通,并规划指引业务需求?

文章不限于以上内容,有新的想法也会及时更新到该专栏。

具体专栏链接如下:

数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

相关文章:

数仓建模:数仓设计中的10个陷阱

目录 0 引言 1 主要内容 1.1 过于迷恋技术,而没有将重点放在业务需求和目标上 1.2 没有或无法找到一个有影响的、平易近人的、明白事理的高级管理人员作为数仓建设的发起人 1.3 将项目处理为一个巨大的持续多年的项目,而不是追求更容易管理的、虽然…...

Vue如何将网页转换成图片或PDF并上传

一.使用html2canvas获取页面元素并绘制成图片 htmlcanvas中文文档 npm install --save html2canvas<template><div><button click"uploadImg">上传</button><div ref"yourDom"><!-- ...图片中页面内容 --><img s…...

【引领数据分析革命】TaskWeaver框架全景解读与入门指南!

亲爱的技术爱好者们&#xff0c;我是你们的老朋友—— 一个热爱.NET和AI相关技术的博主&#xff0c;在今天这个信息与数据爆炸的时代&#xff0c;我们始终寻求着处理数据分析任务的更优雅、更高效的方式。Microsoft团队推出了一个叫做TaskWeaver的神器&#xff0c;这可不仅仅是…...

LabVIEW灵活集成与调试的方法

在LabVIEW开发中&#xff0c;为了构建一个既便于调试又能灵活集成到主VI中的控制VI&#xff0c;开发者需要采用适当的编程方式和架构。常见的选择包括模块化设计、状态机架构以及事件驱动编程。这些方法有助于简化调试过程、提高系统的稳定性&#xff0c;并确保代码的重用性和可…...

网络药理学:分子对接之二:PDB数据库的使用(已知PDB ID)、PubChem数据库如果没有3D结构

PDB数据库使用 官方地址&#xff1a;https://www.rcsb.org/ 首页如下&#xff1a; 我们以热休克蛋白HSP90AA1为例&#xff0c;其PDB ID为7DHG&#xff0c;所以我们在搜索栏输入7DHG&#xff1a; 主要关注红框里的几个地方。 Download 下载文件&#xff0c;一般选择PDB For…...

JS获取页面中video标签视频的封面和时长

从HTML中提取Video信息 /*** 从html字符串中提取video标签* 入参&#xff1a; {String} htmlString* 出参&#xff1a;{Array} 数组*/ function extractVideosFromHTML(htmlString) {const dom new DOMParser().parseFromString(htmlString, text/html);const videos Arr…...

LLM大模型学习:AI Agent综述

AI Agent是什么 将LLM思想链接到一起&#xff0c;自主实现用户设定的任何目标。只需要告诉AutoGPT一个目标&#xff0c;能自主生成执行计划。 吴恩达&#xff1a;“与其争论哪些工作才算是真正的 Agent&#xff0c;不如承认系统可以具有不同程度的 Agentic 特性。” 核心在于…...

极米科技:走出舒适圈,推动数据架构现代化升级 | OceanBase 《DB大咖说》

《DB 大咖说》第 13 期&#xff0c;邀请到了极米科技软件与创新产品线高级架构师施刘凡来进行分享。 在小红书平台上&#xff0c;“是否应将家里的电视升级为投影仪&#xff1f;”这一话题激发了上百万篇笔记的分享与推荐&#xff0c;反映出年轻群体对投影仪的偏好。随着手机、…...

IP学习——Fiveday

设备排错 [R1]display ip interface brief 查看路由器接口的IP地址信息 [R1]display current-configuration int g0/0/1.10 查看路由器接口的IP地址信息 TG---> trunk查看vlan指令:displayvan其中UT--->accessc.vlan确认完成后 即链路层配置完成排查网络层错误 排查终端主…...

格式化的硬盘能恢复数据吗?拯救数据的可能性

在信息技术高速发展的今天&#xff0c;硬盘作为计算机的核心存储部件&#xff0c;承载着大量的数据和文件。然而&#xff0c;有时因为误操作或其他原因&#xff0c;我们可能需要对硬盘进行格式化&#xff0c;这往往导致重要数据的丢失。 那么&#xff0c;格式化后的硬盘数据是否…...

亚信安全出席第五届国际反病毒大会 探究AI现代网络勒索治理

近日&#xff0c;第二届网络空间安全&#xff08;天津&#xff09;论坛正式开幕。本届论坛由天津市政府主办&#xff0c;国家计算机病毒应急处理中心、天津市公安局、天津市滨海新区政府承办&#xff0c;国家网络与信息安全信息通报中心协办&#xff0c;围绕“共建网络安全 共治…...

C语言从头学58——学习头文件math.h(一)

math.h 头文件提供了很多数学计算方面的函数。 一、使用数学函数前需要了解的两个类型、两个宏 1、float_t&#xff1a;当前系统能够有效执行float运算的类型&#xff0c;宽度不少于float。 2、double_t&#xff1a;当前系统能够有效执行double运算的类型&#xff0c;宽度不…...

前端JS常见面试题

数据双向绑定 Bug解决 集成工作涉及 版本node 依赖包报错 版本问题&#xff01;&#xff01;&#xff01;ElementUI、Cesium、ant-design 配置、代码和其他 混入 在Vue中&#xff0c;混入&#xff08;Mixins&#xff09;是一种非常有用的功能&#xff0c;它允许你创建可复…...

利用深度学习实现验证码识别-4-ResNet18+imagecaptcha

在当今的数字化世界中&#xff0c;验证码&#xff08;CAPTCHA&#xff09;是保护网站免受自动化攻击的重要工具。然而&#xff0c;对于用户来说&#xff0c;验证码有时可能会成为一种烦恼。为了解决这个问题&#xff0c;我们可以利用深度学习技术来自动识别验证码&#xff0c;从…...

IDC基础学习笔记

一、数据中心介绍 1、数据中心级别划分&#xff1a; 2、数据中心结构&#xff1a; 3、IT系统组成 二、数据中心硬件知识 1、服务器组件 服务器的正面接口&#xff1a; 服务器的反面接口&#xff1a; &#xff08;1&#xff09;CPU CPU定义&#xff1a;中央处理器&#xff08…...

Mysql基础练习题 1527.患某种疾病的患者 (力扣)

查询患有 I 类糖尿病的患者 ID &#xff08;patient_id&#xff09;、患者姓名&#xff08;patient_name&#xff09;以及其患有的所有疾病代码&#xff08;conditions&#xff09;。I 类糖尿病的代码总是包含前缀 DIAB1 。 题目链接&#xff1a; https://leetcode.cn/proble…...

Mysql链接异常 | [08001] Public Key Retrieval is not allowed

Datagrid报错 [08001] Public Key Retrieval is not allowed 这个错误通常是由于 MySQL 8.0 中的新特性导致的。默认情况下&#xff0c;MySQL 8.0 使用 caching_sha2_password 作为认证插件&#xff0c;而你需要在连接 URL 中明确允许公钥检索或者使用老版本的认证方式 mysql…...

vue3项目中如何动态循环设置ref并获取使用

前言&#xff1a;vue2可通过ref来获取当前的dom&#xff0c;但是vue3有个问题&#xff0c;就是必须定义ref的变量名&#xff0c;才能使用&#xff1b;倘若有多个ref&#xff0c;一个个去定义未免过于繁琐&#xff0c;还有一种情况就是dom是使用v-for循环出来的&#xff0c;那么…...

stm32之SPI通信协议

文章目录 前言一、SPI通信协议1.1 SPI简介1.2 SPI通信特点1.3 SPI与I2C对比 二、SPI硬件电路三、SPI通信原理四、SPI时序单元4.1 起始和终止条件4.2 交换一个字节(模式1)4.3 交换一个字节(模式0)4.4 交换一个字节(模式2和3) 五、SPI时序5.1 发送指令5.2 指定地址写5.3 指定地址…...

Unity 摄像机(Camera)详解

文章目录 0.前言1.相机属性介绍2.Unity 中多个相机画面堆叠显示2.1 3D 摄像机2.2 UI 摄像机2.3 摄像机的Culling Mask设置 0.前言 本文介绍的是使用Unity默认的内置渲染管线下的Camera组件&#xff0c;使用URP或HDRP则不同。 1.相机属性介绍 Clear Flags&#xff1a; 清除标记…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...