大数据笔试真题集锦---第五章:Hive面试题

本文详细介绍了Hive的运行原理,包括其SQL转化为MapReduce任务的过程,以及各种join类型的工作机制。还涵盖了建表、存储格式、压缩、内部表与外部表、分区表和分桶表的概念。此外,讨论了Hive的排序函数、分析函数和排名函数的使用,以及Hive的优化技巧,如减少distinct操作、调整map和reduce任务数量、优化并行度等。最后,文章提供了若干Hive面试题,涉及Hive的查询和调优实战。
摘要由CSDN通过智能技术生成

第五章目录

第五章 Hive

5.1 Hive 运行原理(源码级)

  1. 用户提交查询等任务给Driver。
  2. Antlr解析器将SQL转化为抽象语法树AST Tree
  3. 遍历AST Tree,抽出基本的查询单元QueryBlock
  4. 遍历QueryBlock,翻译为执行操作树OperatorTree
  5. 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量
  6. 遍历OperatorTree,翻译为MapReduce任务
  7. 物理层优化器进行MapReduce任务的变换,生成最终的执行计划
  8. 执行计划,返回结果

5.2 Hive转化join为MR的原理

5.2.1 reduce端join

map端读取两个表,为两个表的数据分别打上标签tag,发送数据

reduce端根据分区分组规则拿到的数据时key相同的数据,再根据标签tag进行相同key的不同value的join操作,完成实际的连接。

5.2.2 map端join

将小表复制多份存放在每个map task的内存中,然后只扫描大表,对大表中key在小表中存在时,进行一个join拼接操作。

将小表复制的对象方法为DistributedCache.addCacheFile,要使用时再使用相应的提取文件目录的方法,并用标准IO获取到数据。

5.2.3 semi join

先将参与join的表1的key复制到一个新的表3中,然后把新表复制多份到各个map task中,最后将不在新表3的表2的数据过滤掉,再进行reduce。

5.3 Hive 建表

5.3.1 传统方式建表

  #TEMPORARY:临时的  EXTERNAL:外部的
  create [TEMPORARY,EXTERNAL] table [if not exist] [db_name.]name(
  col_name  data_type
  ...
  )
  ​
  #指定分区字段和类型(字段不在建表语句中)
  [PARTITIONED BY (col_name data_type,...)]
  ​
  #指定分桶字段和数量(字段存在建表语句中)
  [
  CLUSTERED BY (col_name, col_name, ...) 
    [SORTED BY (col_name [ASC|DESC], ...)]
  INTO num_buckets BUCKETS
  ]
  ​
  #指定解析格式
  [ROW FORMAT row_format]
  ​
  #二选一使用hive自带的或自定义OutPutFormat时引入包
  STORED AS file_format |
  STORED BY *'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]*
  ​
  #外部表创建时必须指定
  [LOCATION hdfs_path]
  ​
  #指定表的其它属性,这里可以设置压缩格式
  [TBLPROPERTIES (property_name=property_value, ...)]

row_format

  #DELIMITED 与 SERDE 方式二选一指定使用 hive自带的解析方式或自定义解析
  ​
  DELIMITED 
  [FIELDS TERMINATED BY char [ESCAPED BY char]]
  [COLLECTION ITEMS TERMINATED BY char]
  [MAP KEYS TERMINATED BY char]
  [LINES TERMINATED BY char]
  [NULL DEFINED AS char]   -- (Note: Available in Hive 0.13 and later) 
  ​
  SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

数据类型

​ TINYINT | SMALLINT | INT | BIGINT | BOOLEAN | FLOAT | DOUBLE | DOUBLE PRECISION -- (Note: Available in Hive 2.2.0 and later) | STRING | BINARY -- (Note: Available in Hive 0.8.0 and later) | TIMESTAMP -- (Note: Available in Hive 0.8.0 and later) | DECIMAL -- (Note: Availabl

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值