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

最先回答

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

第一步讲:为什么做?

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

第二步讲:别人怎么做?

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

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、美团、字节、快手、京东等大厂的面经合集

全部评论

相关推荐

03-11 00:05
已编辑
北京邮电大学 Java
(先说结果,面完秒挂,面试官有病听不懂人话,把我的回答从对的改成错的,同样的项目和话术其他面试官都听得懂,她听不懂,随便吧,遇见她算我倒霉)1.自我介绍2.问上段实习中的学习方法3.(面试官要开始发力了)看我项目说用有限状态机解决了接口幂等性的问题,我是怎么做的。我回答说:经过业务考虑和技术选型,我的接口是改变数据状态的接口,只能从a状态变到b状态是正确的,而不是像新增一条数据的操作,所以我选了有限状态机来解决我接口的幂等性问题。我也考虑过市面上其他的一些幂等性场景和解决方法,例如重复下单的场景,为了防止一个用户多次点击下单按钮或重复传入表单,这种因为是数据库记录新增操作,所以需要使用redis里面存放有过期时间的唯一token或者使用数据库唯一行来约束,但我没有这个场景所以用不到面试官:你项目是使用redis和有限状态机来幂等的啊,你能说具体点吗我:我没用redis啊,我只用了有限状态机,redis那个方案是我在网上看其他的幂等性问题是这么解决的来参考的方案,而且在我发现和我的业务不匹配后也否决了。面试官:你有限状态机在分布式环境下怎么做的啊我:?我的服务是分布式的但我的数据库是单机的啊,而且就算是数据库也做了水平分库分表也不用考虑什么分布式场景啊,这跟我有限状态机改变一个状态有影响吗。面试官:我还是不太明白你在这个分布式环境下怎么用的redis和有限状态机做的幂等性我:?我没用redis啊面试官:那我们下一个问题吧4.什么是接口幂等性,有哪些接口操作是天生幂等的我:接口幂等性就是同样的请求申请同样的接口,不会造成系统的不一致,例如重复下单中相同的下单请求数据库只会新增一条。至于天生幂等的操作的话,修改指定id的数据为指定数据或删除唯一id的数据或查询请求都是天生幂等的面试官:你说的不对,重复删除会报错,所以不幂等。(我:我??唯一id重复删除你还能删成啥样,你删了就没了哪影响幂等性了。你报错影响的接口幂等性吗?)。而且你说的幂等性定义也不对,幂等性是相同的参数申请同样的接口我:我说的同样的请求,同样的请求参数不一样吗面试官:我不知道你有没有回放听,但你说的肯定不是相同的请求。(哈哈)5.如果系统发生oom,怎么排查(这个很正常就过了)6.给你出个场景题目,假如有100G的数据a,100G的数据b,然后需要用a&nbsp;join&nbsp;b得到c,同时一个mysql数据库只能操作10G的数据,那你怎么做。(在我说了分库分表,引入中间件,一致性哈希算法,在a&nbsp;join&nbsp;b的时候使用多线程异步技术并行执行,之后,又追问很多相关细节,然后又问我里面可以用java做哪些操作,最后她得出结论我太理想化了,考虑不全)7.反问:我要提升的面试官:我还是没听懂你的接口幂等性怎么用的redis解决的,在分布式环境下你的有限状态机没问题吗。(哈哈)我反应过来了,这面试官应该是个大数据开发或数仓开发那种,一直问我hadoop,spark,sql语句这种,遇见她我是真倒霉啊😅
のミク:你的翻版,我面数开人家问我会不会设计模式和springboot
点赞 评论 收藏
分享
投递虾皮信息等公司9个岗位
点赞 评论 收藏
分享
二面是要求线下面试,这也是我第一次线下,没啥经验,提前半小时到的,填了张面试信息表大概用了十分钟,之后等到两点左右,面试官准时来了。#牛客AI配图神器#首先是个人介绍,学校、专业、项目、竞赛。看你是26届的,为什么这么早就开始实习,学校还有课吗?既然学的是软件工程,偏向后端开发,为什么要报数仓开发,你觉得一个后端开发的来数仓开发有什么优势?看你既会Java又会Python,这些语言跟数仓开发之间的联系?之后直接挑明了问简历上俩项目就是网上找的用来练手的吧,那么这种练手项目让你从中学到了什么?说一下用过的数据库有哪些,其中哪些是最熟悉的?(MySQL、Redis)你写SQL写得很多吗,你个人更偏向数仓开发还是数据分析?说一下数据治理的概念。(这个问题是全程唯一一个答偏了的,因为这个词接触得太少了,我硬着头皮把数据分析的概念说了一遍,面试官只是笑笑,没多说话,后边结束了问了学哥才知道概念解释错了)看你数仓都是用了五层规划,每层的作用是什么?你说ODS层的数据是不变的,那后续每日更新的数据是怎么获取的?(Maxwell主从复制,增量同步)如果其它层的数据需要进行更新,该怎么办?(周期快照事实表、拉链表)既然提到拉链表了,说一下它是怎么使用的?(我把拉链表的概念说了一遍)你刚才说的是拉链表的概念,如果现在有a表和b表,其中a表是拉链表,b表数据改变,怎么让a表的数据进行更新?请你看一下这个sql语句,说一下它最后取出来的数值的意义。(那是一个写得极其冗余的sql语句,嵌套了好多层,还join了四次同一张表,我最后没表达清楚,说这个语句是为了得到朝阳区最新的日期的数据,面试官说答得有些不对,其实是为了得到朝阳区最新的日期的空气质量。其实我就是这个意思,当时已经面了30分钟,嘴里开始发苦了,脑子想出来了嘴上没说好)实习最久能待几个月?(12个月)反问咱们公司的业务主要是哪些方面的?每天几点下班?你们的数仓团队现在有多少人?需要出差吗?后续流程需要多久,还会有三面吗?最后跟面试官说聊得很开心。出来后才想起来了没谈薪资的事情,虽然初筛的时候HR问过,但是还是有些后怕啊,不再跟我确认一遍吗写面经攒人品,希望能一把过#数仓面试##数据开发##数仓开发#
查看15道真题和解析
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务