当前位置: 首页 > news >正文

锁屏面试题百日百刷-Hive篇(十一)

  锁屏面试题百日百刷,每个工作日坚持更新面试题。锁屏面试题app、小程序现已上线,官网地址:https://www.demosoftware.cn。已收录了每日更新的面试题的所有内容,还包含特色的解锁屏幕复习面试题、每日编程题目邮件推送等功能。让你在面试中先人一步!接下来的是今日的面试题:

 

1.如何理解SMB Join

全称Sort Merge Bucket Join。

作用

大表对小表应该使用MapJoin来进行优化,但是如果是大表对大表,如果进行shuffle,那就非常可怕,第一个慢不用说,第二个容易出异常,此时就可以使用SMB Join来提高性能。SMB Join

基于bucket-mapjoin的有序bucket,可实现在map端完成join操作,可以有效地减少或避免shuffle的数据量。SMB join的条件和Map join类似但又不同。

条件

注意事项

hive并不检查两个join的表是否已经做好bucket且sorted,需要用户自己去保证join的表数据sorted,否则可能数据不正确。

有两个办法:

1)hive.enforce.sorting 设置为 true。开启强制排序时,插数据到表中会进行强制排序,默认false。

2)插入数据时通过在sql中用distributed c1 sort by c1 或者 cluster by c1

另外,表创建时必须是CLUSTERED且SORTED,如下:

create table test_smb_2(mid string,age_id string)

CLUSTERED BY(mid) SORTED BY(mid) INTO 500 BUCKETS;

综上,涉及到分桶表操作的齐全配置为:

--写入数据强制分桶

set hive.enforce.bucketing=true; --写入数据强制排序

set hive.enforce.sorting=true; --开启bucketmapjoin

set hive.optimize.bucketmapjoin = true; --开启SMB Join

set hive.auto.convert.sortmerge.join=true;

set hive.auto.convert.sortmerge.join.noconditionaltask=true;

开启MapJoin的配置

(hive.auto.convert.join和hive.auto.convert.join.noconditionaltask.size),

还有限制对桶表进行load操作(hive.strict.checks.bucketing)可以直接设置在hive的配置项中,无需在sql中声明。

自动尝试SMB联接(hive.optimize.bucketmapjoin.sortedmerge)也可以在设置中进行提前配置。

2.讲一讲Hive索引

Hive支持索引,但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键。

Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如减少MapReduce任务中需要读取的数据块的数量。

在可以预见到分区数据非常庞大的情况下,分桶和索引常常是优于分区的。而分桶由于SMB

Join对关联键要求严格,所以并不是总能生效。

Hive的索引目的是提高Hive表指定列的查询速度。

没有索引时,类似'WHERE tab1.col1 = 10' 的查询,Hive会加载整张表或分区,然后处理所有的rows,但是如果在字段col1上面存在索引时,那么只会加载和处理文件的一部分。

在每次建立、更新数据后,Hive索引不会自动更新,需要手动进行更新(重建索引以构建索引表),会触发一个mr job。

Hive索引使用过程繁杂,而且性能一般,在Hive3.0中已被删除,在工作环境中不推荐优先使用,在分区数量过多或查询字段不是分区字段时,索引可以作为补充方案同时使用。推荐使用ORC文件格式的索引类型进行查询。

http://www.lryc.cn/news/31663.html

相关文章:

  • 一看就懂,等保2.0工作流程这么做
  • Kerberos 域委派攻击之非约束性委派
  • 【容器运行时】一文理解 OCI、runc、containerd、docker、shim进程、cri、kubelet 之间的关系
  • spark兼容性验证
  • docker逃逸复现--pid=host模式下的逃逸
  • 【环境配置】Windows系统下搭建Pytorch框架
  • Dockerfile简单使用入门
  • 什么是CCC认证3C强制认证机构
  • C语言-基础了解-18-C共用体
  • Vue基础18之github案例、vue-resource
  • UE4 c++ Mediaplayer取消自动播放,运行时首帧为黑屏的问题
  • C语言-基础了解-17-C结构体
  • Python爬虫实践:优志愿 院校列表
  • Java框架学习 | MySQL和Maven笔记
  • C++入门教程||C++ 变量作用域||C++ 常量
  • 想找工作,这一篇15w字数+的文章帮你解决
  • Mac brew搭建php整套开发环境
  • 111 e
  • Cookie和Session
  • git上传下载
  • 如何使用码匠连接 Oracle
  • 【Git】git常用命令集合
  • 基于 WebSocket、Spring Boot 教你实现“QQ聊天功能”的底层简易demo
  • 13. 郭老师爱合并果子
  • Method breakpoints may dramatically slow down debugging 解决方案
  • ABAP ALV和OOALV设置单元格颜色,编辑
  • Java知识复习(十三)数据库和SQL
  • JVM虚拟机种类
  • Linux操作系统学习(线程基础)
  • YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析