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

数仓面试题——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特性导入组织代码,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随起随用。生产中利用…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

AI,如何重构理解、匹配与决策?

AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...