php网站建设用什么,企业网站的开发与应用,百度推广登录入口电脑,湖北专业的网瘾戒除学校如何教育锁屏面试题百日百刷#xff0c;每个工作日坚持更新面试题。锁屏面试题app、小程序现已上线#xff0c;官网地址#xff1a;https://www.demosoftware.cn。已收录了每日更新的面试题的所有内容#xff0c;还包含特色的解锁屏幕复习面试题、每日编程题目邮件推送等功能。让你… 锁屏面试题百日百刷每个工作日坚持更新面试题。锁屏面试题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否则可能数据不正确。
有两个办法
1hive.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.bucketingtrue; --写入数据强制排序
set hive.enforce.sortingtrue; --开启bucketmapjoin
set hive.optimize.bucketmapjoin true; --开启SMB Join
set hive.auto.convert.sortmerge.jointrue;
set hive.auto.convert.sortmerge.join.noconditionaltasktrue;
开启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文件格式的索引类型进行查询。