数仓/数开面试题真题总结(二) 数仓工程师面试题
lipiwang 2024-10-18 09:42 12 浏览 0 评论
二.Hive
1.大表join小表产生的问题,怎么解决?
2.udf udaf udtf区别
3.hive有哪些保存元数据的方式,各有什么特点。
4.hive内部表和外部表的区别
5.生产环境中为什么建议使用外部表?
6.insert into 和 override write区别?
7.hive的判断函数有哪些
8.简单描述一下HIVE的功能?用hive创建表几种方式?hive表有几种?
9.线上业务每天产生的业务日志(压缩后>=3G),每天需要加载到hive的log表中,将每天产生的业务日志在压缩之后load到hive的log表时,最好使用的压缩算法是哪个,并说明其原因
10.若在hive中建立分区仍不能优化查询效率,建表时如何优化
11.union all和union的区别
12.如何解决hive数据倾斜的问题
13.hive性能优化常用的方法
14.简述delete,drop,truncate的区别
15.order by , sort by , distribute by , cluster by的区别
16.Hive 里边字段的分隔符用的什么?为什么用\t?有遇到过字段里 边有\t 的情况吗,怎么处理的?为什么不用 Hive 默认的分隔符,默认的分隔符是什么?
17.分区分桶的区别,为什么要分区
18.mapjoin的原理
19.在hive的row_number中distribute by 和 partition by的区别
20.hive开发中遇到什么问题?
21.什么时候使用内部表,什么时候使用外部表
22.hive都有哪些函数,你平常工作中用到哪些
23.手写sql,连续活跃用户
24.left semi join和left join区别
25.group by为什么要排序
26.说说印象最深的一次优化场景,hive常见的优化思路
27.聊聊hive的执行引擎,spark和mr的区别?
28.hive的join底层mr是如何实现的?
29.sql问题,连续几天活跃的用户?
30.建好了外部表,用什么语句把数据文件加载到表里
31.Hive的执行流程?
32.hive的元数据信息存储在哪?
33.sql语句的执行顺序from-where-group by-having -select-order by -limit
34.on和where的区别
35.hive和传统数据库之间的区别
36.hive中导入数据的4种方式
二.Hive
1.大表join小表产生的问题,怎么解决?
mapjoin方案
join因为空值导致长尾(key为空值是用随机值代替)
join因为热点值导致长尾,也可以将热点数据和非热点数据分开处理,最后合并
2.udf udaf udtf区别
UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。
UDAF 接受多个输入数据行,并产生一个输出数据行。像COUNT和MAX这样的函数就是聚集函数。
UDTF 操作作用于单个数据行,并且产生多个数据行-------一个表作为输出。lateral view explore()
简单来说:
UDF:返回对应值,一对一
UDAF:返回聚类值,多对一
UDTF:返回拆分值,一对多
3.hive有哪些保存元数据的方式,个有什么特点。
- 内存数据库derby,安装小,但是数据存在内存,不稳定
- mysql数据库,数据存储模式可以自己设置,持久化好,查看方便。
4.hive内部表和外部表的区别
Hive内部表外部表区别及各自使用场景
5.生产环境中为什么建议使用外部表?
Hive内部表外部表区别及各自使用场景
6.insert into 和 override write区别?
insert into:将数据写到表中
override write:覆盖之前的内容。
7.hive的判断函数有哪些
hive 的条件判断(if、coalesce、case)
8.简单描述一下HIVE的功能?用hive创建表有几种方式?hive表有几种?
hive主要是做离线分析的
hive建表有三种方式
- 直接建表法
- 查询建表法(通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据,一般用于中间表)
- like建表法(会创建结构完全相同的表,但是没有数据)
hive表有2种:内部表和外部表
9.线上业务每天产生的业务日志(压缩后>=3G),每天需要加载到hive的log表中,将每天产生的业务日志在压缩之后load到hive的log表时,最好使用的压缩算法是哪个,并说明其原因
10.若在hive中建立分区仍不能优化查询效率,建表时如何优化
11.union all和union的区别
union 去重
union oll 不去重
12.如何解决hive数据倾斜的问题
Hive调优,数据工程师成神之路
13.hive性能优化常用的方法
Hive调优,数据工程师成神之路
14.简述delete,drop,truncate的区别
delet 删除数据
drop 删除表
truncate 摧毁表结构并重建
15.order by , sort by , distribute by , cluster by的区别
1、 order by可以指定desc降序asc升序
order by会对输入做全局排序,因此只有一个 reducer(多个 reducer无法保证全局有序),然而只有一个 Reducer,会导致当输入规模较大时,消耗较长的计算时间。
2、 sort by不是全局排序,其在数据进入 reducer前完成排序,因此,如果用 sort by进行排序并且设置 mapped. reduce. tasks〉1,则 sort by只会保证每个 reducer的输出有序,并不保证全局有序。(全排序实现:先用 sortby保证每个 reducer输出有序,然后再进行 order by归并下前面所有的 reducer输出进行单个 reducer排序,实现全局有序。)
3、 distribute by(重要)
distribute by是控制在map端如何拆分数据给 reduce端的。hive会根据 distribute by后面列,对应 reduce的个数进行分发,默认是采用hash算法。sort by为每个 reduce产生一个排序文件。在有些情况下,你需要控制某个特定行应该到哪个 reducer,这通常是为了进行后续的聚集操作。distribute by刚好可以做这件事。因此, distribute by经常和 sort by配合使用。
4、 cluster by
cluster by具有 distribute by和 sort by的组合功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC
如何实现组内排序或者组内TopN?语法格式
row number(0)OVER( partition by COLI order by CL2desc)rank先对COL1列进行分区,再对COL2列进行排序。组内排序
16.Hive 里边字段的分隔符用的什么?为什么用\t?有遇到过字段里 边有\t 的情况吗,怎么处理的?为什么不用 Hive 默认的分隔符,默认的分隔符是什么?
hive 默认的字段分隔符为 ascii 码的控制符\001(^A),建表的时候用 fields terminated by '\001'
遇到过字段里边有\t 的情况,自定义 InputFormat,替换为其他分隔符再做后续处理
17.分区分桶的区别,为什么要分区
分区表:原来的一个大表存储的时候分成不同的数据目录进行存储。如果说是单分区表,那么在表的目录下就只有一级子目录,如果说是多分区表,那么在表的目录下有多少分区就有多少级子目录。不管是单分区表,还是多分区表,在表的目录下,和非最终分区目录下是不能直接存储数据文件的
分桶表:原理和hashpartitioner 一样,将hive中的一张表的数据进行归纳分类的时候,归纳分类规则就是hashpartitioner。(需要指定分桶字段,指定分成多少桶)
分区表和分桶的区别除了存储的格式不同外,最主要的是作用:
- 分区表:细化数据管理,缩小mapreduce程序 需要扫描的数据量。
- 分桶表:提高join查询的效率,在一份数据会被经常用来做连接查询的时候建立分桶,分桶字段就是连接字段;提高采样的效率。
有了分区为什么还要分桶?
(1)获得更高的查询处理效率。同为表加上了额外的结构,Hive在处理有些查询时能利用这个结构。
(2)使取样( sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。
分桶是相对分区进行更细粒度的划分。分桶将表或者分区的某列值进行hash值进行区分,如要安装name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。
与分区不同的是,分区依据的不是真实数据表文件中的列,而是我们指定的伪列,但是分桶是依据数据表中真实的列而不是伪列
18.mapjoin的原理
MapJoin通常用于一个很小的表和一个大表进行join的场景,具体小表有多小,由参数hive.mapjoin.smalltable.filesize来决定,该参数表示小表的总大小,默认值为25000000字节,即25M。
Hive0.7之前,需要使用hint提示 /*+ mapjoin(table) */才会执行MapJoin,否则执行Common Join,但在0.7版本之后,默认自动会转换Map Join,由参数hive.auto.convert.join来控制,默认为true.
假设a表为一张大表,b为小表,并且hive.auto.convert.join=true,那么Hive在执行时候会自动转化为MapJoin。
MapJoin简单说就是在Map阶段将小表读入内存,顺序扫描大表完成Join。减少昂贵的shuffle操作及reduce操作
MapJoin分为两个阶段:通过MapReduce Local Task,将小表读入内存,生成HashTableFiles上传至Distributed Cache中,这里会HashTableFiles进行压缩。
MapReduce Job在Map阶段,每个Mapper从Distributed Cache读取HashTableFiles到内存中,顺序扫描大表,在Map阶段直接进行Join,将数据传递给下一个MapReduce任务。
19.在hive的row_number中distribute by 和 partition by的区别
20.hive开发中遇到什么问题?
21.什么时候使用内部表,什么时候使用外部表
Hive内部表外部表区别及各自使用场景
22.hive都有哪些函数,你平常工作中用到哪些
- 数学函数
round(DOUBLE a)
floor(DOUBLE a)
ceil(DOUBLE a)
rand()
- 集合函数
size(Map<K.V>)
map_keys(Map<K.V>)
map_values(Map<K.V>)
array_contains(Array<T>, value)
sort_array(Array<T>)
- 类型转换函数
cast(expr as <type>)
- 日期函数
date_format函数(根据格式整理日期)
date_add、date_sub函数(加减日期)
next_day函数
last_day函数(求当月最后一天日期)
collect_set函数
get_json_object解析json函数
from_unixtime(bigint unixtime, string format)
to_date(string timestamp)
year(string date)
month(string date)
hour(string date)
weekofyear(string date)
datediff(string enddate, string startdate)
add_months(string start_date, int num_months)
date_format(date/timestamp/string ts, string fmt)
- 条件函数
if(boolean testCondition, T valueTrue, T valueFalseOrNull)
nvl(T value, T default_value)
COALESCE(T v1, T v2, ...)
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
isnull( a )
isnotnull ( a )
- 字符函数
concat(string|binary A, string|binary B...)
concat_ws(string SEP, string A, string B...)
get_json_object(string json_string, string path)
length(string A)
lower(string A) lcase(string A)
parse_url(string urlString, string partToExtract [, string keyToExtract])
regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)
reverse(string A)
split(string str, string pat)
substr(string|binary A, int start) substring(string|binary A, int start)
- 聚合函数
count sum min max avg
- 表生成函数
explode(array<TYPE> a)
explode(ARRAY)
json_tuple(jsonStr, k1, k2, ...)
parse_url_tuple(url, p1, p2, ...)
23.手写sql,连续活跃用户
大厂高频面试题-连续登录问题
24.left semi join和left join区别
left semi join和left join区别
25.group by为什么要排序
26.说说印象最深的一次优化场景,hive常见的优化思路
Hive调优,数据工程师成神之路
27.聊聊hive的执行引擎,spark和mr的区别?
28.hive的join底层mr是如何实现的?
29.sql问题,连续几天活跃的用户?
大厂高频面试题-连续登录问题
30.建好了外部表,用什么语句把数据文件加载到表里
31.Hive的执行流程?
32.hive的元数据信息存储在哪?
33.sql语句的执行顺序from-where-group by-having -select-order by -limit
34.on和where的区别
left join(on&where)
35.hive和传统数据库之间的区别
1、写时模式和读时模式
传统数据库是写时模式,在load过程中,提升了查询性能,因为预先解析之后可以对列建立索引,并压缩,但这样也会花费更多的加载时间。
Hive是读时模式,1 oad data非常迅速,因为它不需要读取数据进行解析,仅仅进行文件的复制或者移动。
2、数据格式。Hive中没有定义专门的数据格式,由用户指定,需要指定三个属性:列分隔符,行分隔符,以及读取文件数据的方法。数据库中,存储引擎定义了自己的数据格式。所有数据都会按照一定的组织存储
3、数据更新。Hive的内容是读多写少的,因此,不支持对数据的改写和删除,数据都在加载的时候是确定好的。数据库中的数据通常是需要经常进行修改
4、执行延迟。Hive在查询数据的时候,需要扫描整个表(或分区),因此延迟较高,只有在处理大数据是才有优势。数据库在处理小数据是执行延迟较低。
5、索引。Hive比较弱,不适合实时查询。数据库有。
6、执行。Hive是 Mapreduce,数据库是 Executor
7、可扩展性。Hive高,数据库低
8、数据规模。Hive大,数据库小
36.hive中导入数据的4种方式
- 从本地导入:load data local inpath /home/liuzc into table ods.test
- 从hdfs导入:load data inpath /user/hive/warehouse/a.txt into ods.test
- 查询导入:create table tmp_test as select * from ods.test
- 查询结果导入:insert into table tmp.test select * from ods.test
相关推荐
- 微软Office Open XML中的数字签名漏洞
-
MicrosoftOffice是最广泛使用的办公文档应用程序之一。对于重要文件,如合同和发票,可以对其内容进行签名,以确保其真实性和完整性。自2019年以来,安全研究人员发现了针对PDF和ODF等其...
- Javaweb知识 day12 XML(javaweb中xml作用)
-
一、XML:1.1概念:ExtensibleMarkupLanguage可扩展标记语言*可扩展:标签都是自定义的。<user><student>1.2功能:...
- 易筋洗髓功——内外同修方可致远(易筋洗髓功口诀)
-
达摩祖师所传易筋、洗髓两经,一分为二,二实为一,无非以方便法门接引众生,而归于慈悲清净之心地。修炼《易筋经》是为强身健体,修炼《洗髓经》是为修心养性,此二者相辅相成,内外兼修,缺一不可。这是一套传统中...
- 道家洗髓功修炼要义,洗髓功如何做到丹田聚气?
-
不管是道家洗髓功,还是洗髓经,其修炼的关键点就在于得气、行气、聚气...那么,作为洗髓功修炼者,具体该怎么做呢?在实际修炼中,就洗髓功的修炼方法来讲,我们可以简单的归纳为修炼三部曲,其具体表现如下:一...
- 「清风聊练功」师门传我易筋经:聊聊我的学习经历和正身图感受
-
一个人的眼界认识,是随着是自身的知识积累和水平不断成长的。开篇为什么要说这么一句呢?是从我的学习经历上感受明显的这句话:一处不到一处迷。我们学传统武术,内功功法,也是从小白到明白一步步走的,走的越远,...
- 内功外练功介绍(练内功 外功)
-
这里介绍我练习的两套动功心得体会。是老道长的八部金刚功、长寿功和增演易筋洗髓经。八部金刚功外练奇经八脉,练出健康强壮的好身体还是可以的,长寿功也是内练功法。这部功法很好的预防效果。这个大家都认同的。说...
- 《增演易筋洗髓内功图说》17卷(1930年(清)周述官撰 1
-
少林空悟老师珍藏
- 国术典籍:《增演易筋洗髓内功图说》【2024年8月编校】
-
《增演易筋洗髓内功图说》系养生气功著作,全书共十八卷。清周述官编撰于光绪二十一年(1895年)。清光绪十九年(1893年),僧人静一空悟将少林功法传授于周述官,并将《增益易筋洗髓内功图说》十二卷(按,...
- 小说:自媒体小白的修道之路-洗髓(自媒体小白运营技巧)
-
谁应了谁的劫,谁又变成了谁的执念。当沧海遗忘了桑田,这世间又多了一个不回家的人!异域空间中,知生缓缓起身,目光扫了一下小帝后,又转身看向画板上的那朵白色蒲公英,自言道:“白瑛,这一世我们莫要再辜负了!...
- 这才是少林洗髓经真相:它是静功和导引术与八段锦暗合
-
不少朋友误解易筋经和洗髓经,将其简单归为强力呼吸的吐纳功以及为了提升房中的关窍功。事实上易筋经和洗髓经是两部功法:易筋经主要为炼体,包含以膜论为核心的十二月怕打筋膜法,以及辅助的呼吸、导引功法;洗髓经...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)