hive面试题总结(2020最新版)

这篇博客详细总结了Hive的面试重点,包括hive架构、特点、内部表与外部表的区别、by关键字详解、常用函数、UDF、UDAF、UDTF、数据倾斜解决方案以及Hive优化策略。通过阅读,你可以深入了解Hive在大数据处理中的应用和优化技巧。
摘要由CSDN通过智能技术生成

一、hive架构相关

遇到这类问题,可以灵活的去回答,比如可以结合平时使用hive的经验作答,也可以结合下图从数据的读入、解析、元数据的管理,数据的存储等角度回答:
hive架构

二、hive的特点

本题主要为了考察对hive的整体使用场景的掌握程度,毕竟只有知道了hive的特点,才能有针对性的在实际项目中的合适场景下使用hive。

可以从下面四个角度去分析:

  1. 数据存储位置

    Hive的数据存储在hdfs上,元数据可以存储在指定的地方比如mysql,PostgreSQL等。

  2. 数据更新

    Hive处理数据时一般不对数据进行改写,因为它不支持行级别的增删操作,如果要进行更新数据,一般可以通过分区或者表直接覆盖。

  3. 执行效率

    Hive 执行延迟较高。虽然在小数据量时传统数据库延迟更低,但是当数据规模大到超过传统数据库的处理能力的时候,Hive 的并行计算显然能体现出优势。

  4. 数据规模

    Hive 支持大规模的数据计算,通常是PB级别的数据。

三、内部表和外部表的区别?

  1. 内部表(MANAGED_TABLE):内部表其实就是管理表,当我们删除一个管理表时,Hive 也会删除这个表中数据。因此管理表不适合和 其他工具共享数据。
  2. 外部表(EXTERNAL_TABLE):删除该表并不会删除掉原始数据,删除的是表的元数据。

四、4个by的区别?

  1. Sort By:在同一个分区内排序
  2. Order By:全局排序,只有一个Reducer;
  3. Distrbute By:类似 MapReduce 中Partition,进行分区,一般结合sort by使用。
  4. Cluster By:当 Distribute by 和 Sort by 字段相同时,可以使用Cluster by方式。Cluster by 除了具有 Distribute by 的功能外还兼具 Sort by 的功能。但是只能升序排序,不能指定排序规则为ASC或者DESC。

五、介绍一下有哪些常用函数?

5.1、行转列函数
  1. CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串。

    例如: concat( aa, ‘:’, bb) 就相当于把aa列和bb列用冒号连接起来了,aa:bb。

  2. CONCAT_WS(separator, str1, str2,…):CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

  3. COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

5.2、列转行函数
  1. EXPLODE(col):将hive某列中复杂的array或者map结构拆分成多行。

  2. LATERAL VIEW:常和UDTF函数一起使用。

    用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias

    解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

5.3、Rank排名函数
  1. RANK() 排序相同时会重复,总数不会变
  2. DENSE_RANK() 排序相同时会重复,总数会减少
  3. ROW_NUMBER() 根据顺序计算排名。

在实际开发中,以上三个rank函数通常是和开窗函数一起使用的。

5.4、窗口函数(开窗函数)
  1. OVER():用于指定分析函数工作时的数据窗口大小,这个数据窗口大小可能会随着行的变而变化;

  2. CURRENT ROW:当前行;

  3. n PRECEDING:往前n行数据;

  4. n FOLLOWING:往后n行数据;

  5. UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值