面试官:你有没有做过模型设计相关的优化?【面试吹牛草稿系列】

最先回答

做过,我之前做过一个缓慢变化维表的模型设计优化

第一步讲:为什么做?

  • 数据仓库的重要特点之一是反映历史变化,所以如何处理维度的变化是维度设计的重要工作之一。缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流逝发生缓慢的变化,与数据增长较为快速的事实表相比,维度变化相对缓慢。
  • 如果维度的历史信息不需要保存,那么每天直接覆盖是不是就可以了呢?但是,大多数场景下,历史维度信息都需要保存下来,供业务分析使用。此时,如何更好地处理缓慢变化维就显的至关重要。

第二步讲:别人怎么做?

分区全量表:开发简单;取数简单;浪费存储

dt=0305(第一天)

id    status
1001    1
1002    1
1003    1

dt=0306(新增两条数据1004和1005,并且修改一条数据1001和删除一条数据1002)

id    status
1001    2
1003    1
1004    3
1005    1

第三步讲:我怎么做?

拉链表:开发难度大;取数难理解;节约存储

第一天初始化一级分区和二级分区

dt_start=0305  dt_end=9999
id    status
1001    1
1002    1
1003    1

如果需要查询0305当天数据,查询语句如下:

select * 
from table
where dt_start <= 0305 and dt_end > 0305

第二天新增两条数据1004和1005,并且修改一条数据1001和删除一条数据1002,需要做如下操作:

dt_start=0305  dt_end=9999
id    status
1003    1

dt_start=0305  dt_end=0306
id    status
1001    1
1002    1

dt_start=0306  dt_end=9999
id    status
1001    2
1004    3
1005    1

如果需要查询0306当天数据,查询语句如下:

select *
from table
where dt_start <= 0306 and dt_end > 0306

第四步讲:带来的收益

使用拉链表这种方式对xx维表优化后,减少了5GB的存储,占用磁盘存储降低了50%

第五步讲:未来的思考(开始吹牛)

paimon表:开发简单;取数简单;节约存储;涉及技术架构迭代

这个关乎到数仓整体架构的优化,如果将paimon作为整个数仓的底层存储架构,那么我们就不需要像拉链表那样去维护不同时刻的版本,paimon的snapshot就可以实现这个能力,用户可以通过最新的快照来访问表的最新数据,同时可以通过时间旅行,访问表的过去状态。

#数据人的面试交流地##牛客创作赏金赛#
大数据开发面试笔记 文章被收录于专栏

包括大数据篇、计算机语言篇、计算机基础篇、算法刷题篇、面试经验篇等五大篇章: 大数据篇包括框架原理、源码解析、调优技巧、大数据场景题、项目实战、数仓理论等模块;计算机语言篇包括Java、Linux、大厂常考SQL面试题等模块;计算机基础篇包括计算机网络、操作系统、数据库、数据结构等模块;算法刷题篇包括大厂高频算法题、刷题速成计划等模块 面试经验篇包括BAT、美团、字节、快手、京东等大厂的面经合集

全部评论

相关推荐

投递虾皮信息等公司9个岗位
点赞 评论 收藏
分享
二面是要求线下面试,这也是我第一次线下,没啥经验,提前半小时到的,填了张面试信息表大概用了十分钟,之后等到两点左右,面试官准时来了。#牛客AI配图神器#首先是个人介绍,学校、专业、项目、竞赛。看你是26届的,为什么这么早就开始实习,学校还有课吗?既然学的是软件工程,偏向后端开发,为什么要报数仓开发,你觉得一个后端开发的来数仓开发有什么优势?看你既会Java又会Python,这些语言跟数仓开发之间的联系?之后直接挑明了问简历上俩项目就是网上找的用来练手的吧,那么这种练手项目让你从中学到了什么?说一下用过的数据库有哪些,其中哪些是最熟悉的?(MySQL、Redis)你写SQL写得很多吗,你个人更偏向数仓开发还是数据分析?说一下数据治理的概念。(这个问题是全程唯一一个答偏了的,因为这个词接触得太少了,我硬着头皮把数据分析的概念说了一遍,面试官只是笑笑,没多说话,后边结束了问了学哥才知道概念解释错了)看你数仓都是用了五层规划,每层的作用是什么?你说ODS层的数据是不变的,那后续每日更新的数据是怎么获取的?(Maxwell主从复制,增量同步)如果其它层的数据需要进行更新,该怎么办?(周期快照事实表、拉链表)既然提到拉链表了,说一下它是怎么使用的?(我把拉链表的概念说了一遍)你刚才说的是拉链表的概念,如果现在有a表和b表,其中a表是拉链表,b表数据改变,怎么让a表的数据进行更新?请你看一下这个sql语句,说一下它最后取出来的数值的意义。(那是一个写得极其冗余的sql语句,嵌套了好多层,还join了四次同一张表,我最后没表达清楚,说这个语句是为了得到朝阳区最新的日期的数据,面试官说答得有些不对,其实是为了得到朝阳区最新的日期的空气质量。其实我就是这个意思,当时已经面了30分钟,嘴里开始发苦了,脑子想出来了嘴上没说好)实习最久能待几个月?(12个月)反问咱们公司的业务主要是哪些方面的?每天几点下班?你们的数仓团队现在有多少人?需要出差吗?后续流程需要多久,还会有三面吗?最后跟面试官说聊得很开心。出来后才想起来了没谈薪资的事情,虽然初筛的时候HR问过,但是还是有些后怕啊,不再跟我确认一遍吗写面经攒人品,希望能一把过#数仓面试##数据开发##数仓开发#
查看15道真题和解析
点赞 评论 收藏
分享
#牛客AI配图神器#上来自我介绍,个人信息、在校所学专业、毕业时间、为什么学习大数据。询问出生年份。(没懂为什么专门问这个)介绍项目,离线数仓的五层是怎么设计的,DataX做首日的全量采集、Maxwell做后续每日的增量采集,Flume传输数据,Kafka起缓存作用,解耦各个组件。大数据竞赛拿了全国一等奖,那么这个竞赛中做的是什么业务?学校主修课是什么,大数据是否是自学?介绍一下简历中的离线数仓。说一下Maxwell的底层实现原理。讲一下Hive&nbsp;On&nbsp;Spark引擎的特点。介绍一下简历中的实时数仓。说一下checkpoint机制和精准一次。Docker的常用命令。Doris需要更新数据吗,怎么更新数据的,是用update吗?Doris在项目中的作用。Kafka的偏移量需要手动维护吗。项目的数据来自哪里,是真实的数据吗?数据量有多少,能达到什么级别,有一亿条数据吗?HBase在项目中是怎么使用的,为什么维表存到HBase中?为什么没有存到Redis中?FastJson了解吗,说一下。SpringBoot的拦截器和过滤器的区别。现在是否在校?反问工作压力大吗?公司有食堂吗?(我在想没食堂&nbsp;可以买拼好饭吃😋)刚才回答的内容还算可以吗?(面试官:回答得没问题,学生能学到这个程度,已经可以了)写面经攒人品,希望能一把过#数仓面试##数据开发##数仓开发#
查看19道真题和解析
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务