ToB企服应用市场:ToB评测及商务社交产业平台

标题: 2023 Hive 面试宝典 [打印本页]

作者: 欢乐狗    时间: 2023-7-13 22:15
标题: 2023 Hive 面试宝典
先说一些废话

总结一下Hive面试宝典,方便读者快速过一遍Hive面试所需要的知识点
Hive的介绍

Hive和Hadoop的关系

Hive的特点

Hive的缺点

Hive常见的应用场景

Hive和mysql的区别

Hive的架构
  1. # Hive架构简易示意
  2. Meta Store ->
  3. Client (CLI/JDBC/WebGUI +
  4.                 Driver/驱动 +
  5.                 SQL Parser/解析器 +
  6.                 Physical Plan/编译器 +
  7.                 QueryOptimizer/优化器 +
  8.                 Execution/执行器) ->
  9. MapReduce ->
  10. HDFS
复制代码
Hive的数据

Hive的数据模型

Hive的底层如何存储Null值

Hive中元数据metadata和元数据商店metastore的作用

Hive有哪些保存元数据metadata的方式

Hive元数据存储方式中,本地模式和远程模式的区别

Hive的数据类型

Hive的隐式类型转换规则

Hive数据存储所使用的文件格式

Hive中使用的压缩算法

什么是数据可分割

关于压缩模式说明

Hive的安装与使用

当前版本请阅读以下参考资料,后期再行完善

如何在Hive中集成HBase

如何通过 HiveSQL 来直接读写 HBase

当前版本请阅读以下参考资料,后期再行完善

Hive的分区和分桶

Hive的分区分桶都是数据存储和组织的策略,分区类似文件的分类归档,分桶类似于传统数据库的索引
什么是Hive分区

Hive分区的优点

Hive分区的缺点

什么是Hive分桶

关于Hive索引的说明

Hive分桶的优点

Hive分桶的缺点

Hive中静态分区和动态分区的区别

Hive动态分区的参数设定

Hive的内部表和外部表

什么是Hive的内部表和外部表

Hive内部表和外部表的区别是什么

生产环境中为什么建议使用外部表

Hive SQL

Hive中的SQL如何转化成MapReduce任务的

什么情况下Hive不走MapReduce任务

Hive中如何查询A表中B表不存在的数据

题目:A、B两表,找出ID字段中,存在A表,但是不存在B表的数据。A表总共13w数据,去重后大约3W条数据,B表有2W条数据,且B表的ID字段有索引
  1. select * from  B
  2. where (select count(1) as num from A where A.ID = B.ID) = 0
复制代码
Hive中有哪些连接查询以及如何使用

当前版本请阅读以下参考资料,后期再行完善

Hive中左连接和内连接的区别

Hive中左连接的底层原理

参考下面Hive查询的时候on和where有什么区别的理解二
Hive查询的时候 ON 和 WHERE 有什么区别

共同点

第一种理解方式

  1. 1. select * from a left join b on a.id = b.id and a.dt=20181115;
  2. 2. select * from a left join b on a.id = b.id and b.dt=20181115;
  3. 3. select * from a join b on a.id = b.id and a.dt=20181115;
  4. 4. select * from a left join b on a.id = b.id  where a.dt=20181115;
  5. sql1: 如果是left join 在on上写主表a的条件不会生效,全表扫描。
  6. sql2: 如果是left join 在on上写副表b的条件会生效,但是语义与写到where 条件不同
  7. sql3: 如果是inner join 在on上写主表a、副表b的条件都会生效
  8. sql4: 建议这么写,大家写sql大部分的语义都是先过滤数据然后再join,所以在不了解join on+条件的情况下,条件尽量别写在on后,
  9. 直接写到where后就ok了,如果where条件后写b表的过滤条件,就变成了先left join出结果再按照b条件过滤数据  
复制代码
第二种理解方式

  1. 经过亲测后,更加深了对on和where的理解,得出以下结论:
  2. 1.ON后的条件如果有过滤主表的条件,则结果对于不符合该条件的主表数据也会原条数保留,只是不匹配右表数据而已。对于on后面对右表的过滤条件,连接时会用该条件直接过滤右表数据后再和左边进行左连接。总之,对于不满足on后面的所有条件的数据,左表会在结果数据中原条数保留数据,只是不匹配右表数据而已。不满足条件的右表数据各字段会直接以NULL连接主表。
  3. 2.ON后对左表的筛选条件对于结果行数会被忽略,但会影响结果中的匹配右表数据,因为只有符合左表条件的数据才会去和符合条件的右表数据进行匹配,不符合条件的左表数据会保留在最后结果中,但匹配的右表数据都是NULL.因此,对于需要过滤左表数据的话,需要把过滤条件放到where后面。
  4. 3.ON后的左表条件(单独对左表进行的筛选条件)对于结果行数无影响,还是会返回所有左表的数据,但和右表匹配数据时,系统只会拿左表符合条件(ON后的对左表过滤条件)的数据去和右表符合条件(ON后的对右表过滤条件)的数据进行匹配抓取数据,而不符合条件的左表数据还是会出现在结果列表中,只是对应的右表数据都是NULL。
  5. 4.ON后的右表条件(单独对右表进行的筛选条件)会先对右表进行数据筛选后再和左表做连接查询,对结果行数有影响(当左表对右表是一对多时),但不会影响左表的显示行数,然后拿符合条件的右表数据去和符合条件的左表数据进行匹配。
  6. 5.Where还是对连接后的数据进行过滤筛选,这个无异议。
  7. 6.匹配数据时无论左右表,都是拿符合ON后的过滤条件去做数据匹配,不符合的会保留左表数据,用NULL填充右表数据。
  8. 综上得出,ON后面对于左表的过滤条件,在最后结果行数中会被忽略,并不会先去过滤左表数据再连接查询,但是ON后的右表条件会先过滤右表数据再连接左表进行查询。
  9. 连接查询时,都是用符合ON后的左右表的过滤条件的数据进行连接查询,只有符合左右表过滤条件的数据才能正确匹配,剩下的左表数据会正常出现在结果集中,但匹配的右表数据是NULL。因此对于左表的过滤条件切记要放到Where后,对于右表的过滤条件要看情况了。如果需要先过滤右表数据就把条件放到ON后面即可。
复制代码
Hive 函数

关于 UDF/UDAF/UDTF 的提问

Hive中如何去重

第一种方式:使用 DISTINCT

第二种方式:使用 GROUP BY

第三种方式:使用 ROW_NUMBER() OVER 窗口函数

Hive中排序函数的使用方式及区别

Hive中部分高频函数 ———— split / coalesce / collect list / collect set

Hive常用函数

Hive 运维

如何监控一个提交后的Hive状态

Hive 优化

该模块请参考我关于Hive优化的文章

我是 fx67ll.com,如果您发现本文有什么错误,欢迎在评论区讨论指正,感谢您的阅读!
如果您喜欢这篇文章,欢迎访问我的 本文github仓库地址,为我点一颗Star,Thanks~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4