数仓面试题——DWS层新增维度字段需求
前言
在数据仓库开发中,数据仓库的设计和维护一直是一个备受关注的话题。随着业务需求的不断变化,数据仓库的结构也需要随之调整。
面试过程中,多次被提问:当DWS构建好后,突然来了一个新的需求,需要添加某个或某几个维度字段时,应该如何处理?是重构现有DWS,还是新建一张DWS?
首先需分析加维度的目的是什么,是原有的dws模型粒度太粗不足以支持业务分析嘛?一般能想到的处理思路如下:
(1)直接修改
好处:效率高、改的快
坏处:粒度变细之后,下游依赖的数据会有问题,如果直接展示明细,很可能一条变两条,妥妥的数据事故。
(2)新建dws
好处:对原有dws无影响
坏处:可能功能重复,逻辑没复用,成本也会陡然上升
(3)新建dws ,且原有dws会依赖新dws(同层级依赖)
优点:逻辑和成本兼顾,下游无影响
缺点:改造成本大
看到大佬分享的一个 思路,借鉴如下:
一、初步思路
面对这样的需求时,首先要明确DWS的设计原则。DWS层的由来:将ADS层多张表引用的公共逻辑下沉到DWS层,通过构建主题宽表的方式实现逻辑复用(模型设计的原则之一)。
因此对于一些业务场景相对简单的数仓,DWS层或许根据没必要创建。
DWS层的主要作用:对数据进行某一颗粒度的轻度聚合,并不涉及复杂的维度扩展需求。
结论:面对新增维度字段的需求,不建议直接进行DWS重构或新增一张DWS表,而是通过其他方式实现需求。
ps: 毕竟,当下游ADS多个指标都用到该新增维度,后期进行模型优化时,才逐步将能够复用的公共逻辑沉淀至DWS宽表。
二、解答思路
(1)DWS只做某颗粒度且不带维度的聚合
在DWS的设计中,我们强调其应专注于某一特定颗粒度的数据聚合,不涉及具体的维度。
这样设计的好处是能够保持数据处理的高效性和简洁性。如果在DWS层面增加过多的维度字段,可能会导致Group By操作变得过于复杂和繁重,影响查询性能和数据处理的效率。
(2)ADS层做宽表,利用颗粒度下的维表进行关联
对于需要添加维度字段的需求,我们可以在ADS(应用数据服务)层进行处理。具体来说,可以通过在ADS层创建宽表,并利用颗粒度下的维表作为驱动表进行关联操作。这样,不仅能够满足新增维度字段的需求,还能保持数据仓库设计的灵活性和扩展性。
三、实际操作步骤
(1)确定新增维度字段的业务需求
在处理新增维度字段需求时,首先需要明确这些维度字段的具体业务含义和使用场景。了解这些信息有助于更好地设计后续的数据模型和处理逻辑。
(2)设计并构建ADS层的宽表
根据新增维度字段的需求,在ADS层设计新的宽表。宽表的设计要充分考虑数据的查询需求和关联操作的性能。在创建宽表时,可以利用现有的维表作为驱动表(主表)进行关联,将新增的维度字段整合到宽表中。
(3)数据处理与同步
在设计好宽表后,需要进行相应的数据处理和同步操作。可以通过ETL(抽取、转换、加载)流程将数据从DWS层抽取出来,按照新的数据模型进行转换,并加载到ADS层的宽表中。
(4)数据校验与优化
在完成数据处理和同步后,需要对数据进行校验,确保新增的维度字段和原有数据的一致性。同时,可以对数据查询性能进行优化,确保在新的数据模型下能够高效地进行查询和分析。
四、DWS层增加维度的潜在风险
在讨论解决方案时,我们还需要明确DWS层增加维度字段的潜在问题和风险:
(1)查询性能下降
在DWS层增加过多的维度字段,可能会导致Group By操作变得复杂,查询性能下降。特别是在处理大规模数据时,这种影响会更加明显。
(2)数据模型复杂化
在DWS层增加维度字段,可能会导致数据模型变得复杂,难以维护和扩展。在实际操作中,往往需要进行大量的调优和调整,增加了开发和运维的成本。
(3)数据一致性问题
在DWS层进行复杂的维度扩展,可能会引发数据一致性问题。特别是在多源数据集成和处理时,需要考虑数据的一致性和完整性,增加了处理难度。
五、总结
在应对DWS新增维度字段需求时,我们不建议直接在DWS层进行重构或新增表,而是通过在ADS层创建宽表,并利用维表进行关联的方式解决问题。这样既能够满足业务需求,又能够保持数据仓库的高效性和灵活性。同时,在实际操作中,需要充分考虑数据处理的性能和一致性,确保数据仓库的稳定运行。
通过上述方法,可以在保持数据仓库设计原则的基础上,灵活应对不断变化的业务需求,构建高效、可靠的离线数据仓库。
参考文章:
数仓有关dws,ads设计策略的一个面试问题记录
相关文章:
数仓面试题——DWS层新增维度字段需求
前言 在数据仓库开发中,数据仓库的设计和维护一直是一个备受关注的话题。随着业务需求的不断变化,数据仓库的结构也需要随之调整。 面试过程中,多次被提问:当DWS构建好后,突然来了一个新的需求,需要添加某个…...
Qt实现MDI应用程序
本文记录Qt实现MDI应用程序的相关操作实现 目录 1.MDM模式下窗口的显示两种模式 1.1TabbedView 页签化显示 1.2 SubWindowView 子窗体显示 堆叠cascadeSubWindows 平铺tileSubWindows 2.MDM模式实现记录 2.1. 窗体继承自QMainWindow 2.2.增加组件MdiArea 2.3.定义统一…...
逆向案例二十六——webpack自执行函数是完整的,但我们只需要加载器,某职业技术学校登陆密码逆向
网址:统一身份认证平台 找到登陆包,搜索找到加密位置。 找到加密位置,打上断点 分析,E就是加密结果 进入n.i函数,就是t.i,看一下这个函数,传一个值,然后不变的返回,所以没什么意义 …...
容器安全最佳实践和工具
容器安全最佳实践和工具 什么是容器安全 容器安全是指保护容器化应用程序和基础设施免受潜在威胁和攻击的措施和策略。容器化技术(如Docker、Kubernetes)使得应用程序能够在隔离的环境中运行,这既提供了灵活性,也引入了新的安全…...
牛客周赛 Round 51
目录 A.小红的同余 B.小红的三倍数 C.小红充电 D.小红的gcd E.小红走矩阵 F.小红的数组 这次周赛题目比较简单,算法题也基本上是板子题,出得很好(~ ̄▽ ̄)~ A.小红的同余 思路:签到题&am…...
【Linux】详解加锁实现线程互斥
一、多线程不加线程互斥可能会引发的问题 下面是一个抢标逻辑。抢票为什么会抢到负数:假设当票数为1时,此时四个进程的判断条件tickets都大于0,都会进入抢票操作,第一个进程抢完票以后tickets0并写回内存,第二个进程再…...
Java学习高级四
JDK8开始,接口新增了三种形式的方法 接口的多继承 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 import javax.swing.*; import java.awt.event.ActionEvent;public class Test {public static void main(String[] args) {// 扩展 内部类在开发中的真实使用…...
mmc-utils 的 MMC 测试工具
MMC 工具介绍 有一个名为 mmc-utils 的 MMC 测试工具,由 Ulf Hansson 维护,您可以在以下公共 git 存储库中找到它: mmc/mmc-utils.git - Unnamed repository; edit this file description to name the repository. 功能 mmc-utils 工具可以…...
使用Python Turtle绘制圣诞树和装饰
简介(❤ ω ❤) 在这篇文章中,我们将探索如何使用Python的Turtle模块来绘制一个充满节日气氛的圣诞树,以及一些可爱的装饰品。Turtle是一个受Logo语言启发的图形库,非常适合初学者学习编程和创建图形。 码农不是吗喽(大学生版&…...
非常好的新版网盘系统,是一款PHP网盘与外链分享程序,支持文件预览
这是一款PHP网盘与外链分享程序,支持所有格式文件的上传, 可以生成文件外链、图片外链、音乐视频外链,生成外链同时自动生成相应的UBB代码和HTML代码, 还可支持文本、图片、音乐、视频在线预览,这不仅仅是一个网盘&a…...
针对【module_or_function】的单元测试,全面覆盖可能的【edge_cases】
针对【module_or_function】的单元测试,全面覆盖可能的【edge_cases】 编写单元测试是为了验证代码模块或函数的正确性和鲁棒性。对于module_or_function,首先需要确定这个模块或函数的具体功能和预期输入范围。一个好的单元测试应该包括以下几个步骤&a…...
OTA测试!
OTA测试,全称“Over-The-Air Testing”,是一种无线通信设备的性能测试方法,主要用于评估设备在无线传输环境中的性能表现。以下是关于OTA测试的详细介绍: 一、定义与目的 OTA测试着重进行整机辐射性能方面的测试,以评…...
[H最短路] lc2959. 关闭分部的可行集合数目(Floyd最短路+二进制枚举+模板题)
文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:2959. 关闭分部的可行集合数目 2. 题目解析 看了看题好像还没啥思路,结果一看数据范围,好家伙…n 最大就 10 啊,那不直接闭眼直接 Floyd枚举所有情况即可吗?&…...
pyinstaller用法详解3
本文使用创作助手。 大家好,时隔多日,我又更新了pyinstaller的用法详解! 当然,这一次要比之前更详细,十分详细。 谢谢大家的支持,我们现在开始! 一、快速开始使用pyinstaller 我之前的文章…...
养猫新手不会挑智能猫砂盆?2024最新挑选干货分享!
不得不说智能猫砂盆真的帮了我很大的忙,四年以来我陆陆续续养了很多的猫咪,但是因为需要上班,所以有时候也对铲屎的工作有些力不从心,后面听了朋友的建议,去入手了智能猫砂盆,不得不说买智能猫砂盆也非常的…...
上海理工大学24计算机考研考情分析!初复试分值比55:45,复试逆袭人数不算多!
上海理工大学(University of Shanghai for Science and Technology),位于上海市,是一所以工学为主,工学、理学、经济学、管理学、文学、法学、艺术学等多学科协调发展的应用研究型大学;是上海市属重点建设大…...
Pandas库学习之DataFrame.drop()函数
Pandas库学习之DataFrame.drop()函数 一、简介 DataFrame.drop 是 Pandas 库中一个非常实用的函数,用于删除 DataFrame 中的行或列。通过指定列名或行索引,可以灵活地从数据集中移除不需要的数据。这对于数据清洗和预处理非常有用。 二、语法和参数 D…...
WHAT - 介绍一个不太一样的 UI 组件库 shadcn/ui
目录 一、介绍主要特点核心组件示例代码社区和支持总结 二、copy/paste1. 高度可定制性2. 避免依赖锁定3. 学习和理解4. 简化调试5. 项目需求变化 官方文档:https://ui.shadcn.com/docs 一、介绍 ShadCN (ShadCN/UI) 是一个现代的 React 组件库,旨在提…...
python--实验 11 模块
目录 知识点 模块基础 模块使用方式 自定义模块示例 模块的有条件执行 Python包结构 定义和导入包 常用第三方库及安装 实例代码 第三方库自动安装脚本 Python标准库介绍 PyInstaller 小结 实验 1.(基础题)制作文本进度条。 2.(基础题) 蒙特卡罗方法计算圆周率…...
Vue3+Vite+TS+Axios整合详细教程
1. Vite 简介 Vite是新一代的前端构建工具,在尤雨溪开发Vue3.0的时候诞生。类似于Webpack Webpack-dev-server。其主要利用浏览器ESM特性导入组织代码,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随起随用。生产中利用…...
【深度学习入门篇 ⑨】循环神经网络实战
【🍊易编橙:一个帮助编程小伙伴少走弯路的终身成长社群🍊】 大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…...
宝塔安装RabbitMq教程
需要放开15672端口,默认账号密码为guest/guest...
韦东山嵌入式linux系列-驱动进化之路:设备树的引入及简明教程
1 设备树的引入与作用 以 LED 驱动为例,如果你要更换LED所用的GPIO引脚,需要修改驱动程序源码、重新编译驱动、重新加载驱动。 在内核中,使用同一个芯片的板子,它们所用的外设资源不一样,比如A板用 GPIO A,…...
长轮询(Long Polling)实现原理和java代码示例
长轮询(Long Polling)背景 长轮询是一种在Web开发中常用的技术,用于实现服务器与客户端之间的即时通信或近乎实时的数据交换。在传统的轮询(Polling)中,客户端会定期向服务器发送请求以检查是否有新数据。…...
OWASP 移动应用 2024 十大安全风险
1. OWASP 移动应用 2024 十大安全风险 开放全球应用程序安全项目 (OWASP) 是一个非营利性基金会,致力于提高软件的安全性。自 2014、2016 年两次发布了移动应用的十大风险后,今年再次发布2024版。这对移动应用软件的检查工具有着…...
Qt界面假死原因
创建一个播放器类,继承QLabel,在播放器类中起一个线程用ffmpeg取流解码,将解码后的图像保存到队列,在gui线程中调用update()刷新显示。 当ffmpeg打开视频流失败后调用update()将qlabel刷新为黑色,有一定概率会使得qla…...
python调用MATLAB出错matlab.engine.MatlabExecutionError无法调用MATLAB函数报错
python调用MATLAB出错matlab.engine.MatlabExecutionError无法调用MATLAB函数报错 说明(废话)解决方案MATLAB异常乱码python矩阵转MATLAB矩阵matlab.engine.MatlabExecutionError 说明(废话) python调用MATLAB,调用m文件中的函数,刚开始都没有问题&…...
[GXYCTF2019]Ping Ping Ping1
打开靶机 结合题目名称,考虑是命令注入,试试ls 结果应该就在flag.php。尝试构造命令注入载荷。 cat flag.php 可以看到过滤了空格,用 $IFS$1替换空格 还过滤了flag,我们用字符拼接的方式看能否绕过,ag;cat$IFS$1fla$a.php。注意这里用分号间隔…...
成为git砖家(1): author 和 committer 的区别
大家好,我是白鱼。一直对 git author 和 committer 不太了解, 今天通过 cherry-pick 的例子搞清楚了区别。 原理 例如我克隆了著名开源项目 spdlog 的源码, 根据某个历史 commit A 创建了分支, 然后 cherry-pick 了这个 commit …...
Lianwei 安全周报|2024.07.15
新的一周又开始了,以下是本周「Lianwei周报」,我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件,保证大家不错过本周的每一个重点! 政策/标准/指南最新动态 01 《人工智能全球治理上海宣言》发布 我们强调共同促…...
哈尔滨营销网站建设/南城网站优化公司
今天我在学习《Python编程:从入门到实践》的时候,发一下一个问题,特此在此记录一下! Geany是一款简单的文本编辑器:它易于安装;让你能够直接运行几乎所有的程序(而无需通过终端来运行ÿ…...
做网站设计是什么专业/宁波网站推广哪家公司好
1、故障现象客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高。2、CPU占用过高问题定位2.1、定位问题进程使用top命令查看资源占用情况,发现pid为…...
为企业设计一个网站/福州百度网站快速优化
PHP的cURL函数是通过libcurl库与服务器使用各种类型的协议进行连接和通信的,curl目前支持HTTP GET 、HTTP POST 、HTTPS认证、FTP上传、HTTP基于表单的上传、cookie和用户名密码的认证等,功能十分强大。在PHP中建立cURL请求的基本步骤: 1、…...
营销型网站建设的费用报价单/中国优化网
react-redux使用小结 react-reduxstorereduceraction整合storereduceraction补充 使用redux-dev-tools让改变reducer后能够即时刷新页面总结需要使用的库redux,react-redux,react-router-redux react-redux 使用一个react-redux 的库使得redux的使用更…...
wordpress占用内存/网络营销推广方案怎么写
1、设计初衷: 身体是革命的本钱,面对生存,各种不规律的生活作息和重压下无法放松的紧张神经,导致我们的身体和心理都不堪重负。同时,在经济条件越来越好的情况下,越来越多的人开始关注起了健康这个亘古不变…...
网站怎么做现场直播视频/抖音网络营销案例分析
1.1 Jenkins是什么? Jenkins是一个强大应用程序,该程序能跨平台对项目能持续集成、持续管理。于此同时,它是一个能处理任何构建或持续集成的开源工具。用户可以把大量的testing和deploym技术集成在Jenkins上。在该学习笔记里,我将…...