查看: 1807| 回复: 8
跳转到指定楼层
上一主题 下一主题
收起左侧

SQL Query面经题求解

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
看到一道面经关于大数据query效率,想问下应该怎么回答,这是哪方面的知识,有没有什么学习的网站,请大家不吝赐教!
.google  и

最后一个问题挺难的,他说现在我想在这个database里找一个人(name = a) 从x date到y date之间借了几本书,然后他自己写了一个query大概是select count(xx) where name = A and start date > x date and end date < y date (query不太对反正就这个意思吧)。然后他说这个query在large system里特别慢,为什么。然后又问如何改进这个query,让他变得快一点。大家自己开动小脑筋想想吧,总之就是他本身的那个query是loop了database两边,O(n2), 他想把它变成O(n)。用到了Binary search的概念,而且先loop name还是先loop时间都是有讲究的。我反正是连蒙带猜的答出来了。. 1point 3acres

上一篇:Orcale 面试如何准备
下一篇:社招三年DA转DS如何破局
全局:
插个眼学习一下
回复

使用道具 举报

🔗
yz9 2021-3-17 11:07:44 | 只看该作者
本楼:
全局:
why O(n2)?
回复

使用道具 举报

🔗
Jimmy_Xu 2021-3-23 20:03:48 | 只看该作者
全局:
如果底表是一张分区表,且以date作为分区字段的话,可以先做一个子查询从底表里选出需要的分区部分,再做name的筛选和count;
另外,如果不需要去重的话,可以直接count(1),也能稍微快点

评分

参与人数 1大米 +2 收起 理由
wujiayikelly + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
 楼主| wujiayikelly 2021-3-24 08:46:21 | 只看该作者
全局:
Jimmy_Xu 发表于 2021-3-23 20:03. check 1point3acres for more.
如果底表是一张分区表,且以date作为分区字段的话,可以先做一个子查询从底表里选出需要的分区部分,再做na ...

那如果是以name字段分区的,就先name筛选再count?等于是要看hadoop底层是按照什么区分的?. .и

那个count(1)能再解释一下么?谢谢!
回复

使用道具 举报

🔗
Jimmy_Xu 2021-3-24 23:42:52 | 只看该作者
全局:
本帖最后由 Jimmy_Xu 于 2021-3-24 23:46 编辑
wujiayikelly 发表于 2021-3-24 08:46
那如果是以name字段分区的,就先name筛选再count?等于是要看hadoop底层是按照什么区分的?. 1point 3acres

那个count ...

分区表的话,先把分区筛出来会减少不必要的分区查询,以我目前遇到过的数仓表而言,绝大部分都是以dt作为分区的,如果是name做分区那也可以先把需要的name分区筛出来(不过数仓的表应该一般不会这么设计)
count(1)其实就是把符合where条件的所有明细总行数统计(不能去重)出来,比制定某一列名count略微快一点。

评分

参与人数 1大米 +2 收起 理由
wujiayikelly + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
 楼主| wujiayikelly 2021-3-24 23:54:23 | 只看该作者
全局:
Jimmy_Xu 发表于 2021-3-24 23:42
分区表的话,先把分区筛出来会减少不必要的分区查询,以我目前遇到过的数仓表而言,绝大部分都是以dt作为 ...

谢谢!那为什么一般以date分区呢?是比较常用么?
回复

使用道具 举报

🔗
Jimmy_Xu 2021-3-25 00:00:46 | 只看该作者
全局:
wujiayikelly 发表于 2021-3-24 23:54
谢谢!那为什么一般以date分区呢?是比较常用么?

我这边主要用到的是交易类的明细表数据,一般表的lifecycle都很长,大概有接近一年,如果不做日期分区的话,查询就会对整张表进行查询和筛选,但其实很多分析可能只需要取近30天或者更短时间,所以一般数仓的技术同学会把这些明细底表做成dt分区表,我们分析的同学就可以按需选取所需要的日期分区后,再做进一步的分析查询和聚合计算; ..
这样做的好处是能减少不必要的计算资源开销,而因为日期是我们所有业务团队最常用的筛选条件,所以一般带分区的表至少都会有一个dt的日期做分区;
也有些分区表除了dt分区外,还有业务场景的枚举值变量作为分区,用来选取自己需要的特定一个或几个场景;

评分

参与人数 1大米 +2 收起 理由
wujiayikelly + 2 很有用的信息!

查看全部评分

回复

使用道具 举报

全局:
我的个人经验是需要 collect stats on join/search keys. 如果 date 不是 key,那 > & < 这种是特别的费时间。前边 Jimmy 说的很有道理,可以先区间search,然后再match。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表