hive的explain命令

显示抽象语法树
```sql
EXPLAIN SELECT * from dby_pro.test1;
```
## explain
该命令可以返回hive的查询执行计划。不需要执行查询。
查询计划包含三个部分,
1.AST
Abstract syntax tree (AST).抽象语法树。通过ANTLR类库生成。
2.Stage dependencies:
阶段依赖。
用来执行查询的依赖列表。
3.Stage plans
阶段计划。

## 实例
在 hive cli 中输入以下命令(hive 2.3.7):
```
explain select sum(id) from test1;
```
得到结果
```
STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 depends on stages: Stage-1

STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Map Operator Tree:
          TableScan
            alias: test1
            Statistics: Num rows: 6 Data size: 75 Basic stats: COMPLETE Column stats: NONE
            Select Operator
              expressions: id (type: int)
              outputColumnNames: id
              Statistics: Num rows: 6 Data size: 75 Basic stats: COMPLETE Column stats: NONE
              Group By Operator
                aggregations: sum(id)
                mode: hash
                outputColumnNames: _col0
                Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
                Reduce Output Operator
                  sort order:
                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
                  value expressions: _col0 (type: bigint)
      Reduce Operator Tree:
        Group By Operator
          aggregations: sum(VALUE._col0)
          mode: mergepartial
          outputColumnNames: _col0
          Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
          File Output Operator
            compressed: false
            Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
            table:
                input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        ListSink
```

我们将上述结果拆分看,先从最外层开始,包含两个大的部分:

**stage dependencies**: 各个stage之间的依赖性
**stage plan**: 各个stage的执行计划
先看第一部分 stage dependencies ,包含两个 stage,Stage-1 是根stage,说明这是开始的stage,Stage-0 依赖 Stage-1,Stage-1执行完成后执行Stage-0。

再看第二部分 stage plan,里面有一个 Map Reduce,一个MR的执行计划分为两个部分:

**Map Operator Tree**: MAP端的执行计划树
**Reduce Operator Tree**: Reduce端的执行计划树
这两个执行计划树里面包含这条sql语句的 operator:

map端第一个操作肯定是加载表,所以就是 TableScan 表扫描操作,常见的属性:
**alias**: 表名称
**Statistics**: 表统计信息,包含表中数据条数,数据大小等
**Select Operator**: 选取操作,常见的属性 :
**expressions**:需要的字段名称及字段类型
**outputColumnNames**:输出的列名称
**Statistics**:表统计信息,包含表中数据条数,数据大小等
**Group By Operator**:分组聚合操作,常见的属性:
**aggregations**:显示聚合函数信息
**mode**:聚合模式,值有 hash:随机聚合,就是hash partition;partial:局部聚合;final:最终聚合
**keys**:分组的字段,如果没有分组,则没有此字段
**outputColumnNames**:聚合之后输出列名
**Statistics**: 表统计信息,包含分组聚合之后的数据条数,数据大小等
**Reduce Output Operator**:输出到reduce操作,常见属性:
**sort order**:值为空 不排序;值为 + 正序排序,值为 - 倒序排序;值为 +- 排序的列为两列,第一列为正序,第二列为倒序
**Filter Operator**:过滤操作,常见的属性:
**predicate**:过滤条件,如sql语句中的where id>=1,则此处显示(id >= 1)
**Map Join Operator**:join 操作,常见的属性:
**condition map**:join方式 ,如Inner Join 0 to 1 Left Outer Join0 to 2
**keys**: join 的条件字段
**outputColumnNames**: join 完成之后输出的字段
**Statistics**: join 完成之后生成的数据条数,大小等
**File Output Operator**:文件输出操作,常见的属性
**compressed**:是否压缩
**table**:表的信息,包含输入输出文件格式化方式,序列化方式等
**Fetch Operator** 客户端获取数据操作,常见的属性:
**limit**,值为 -1 表示不限制条数,其他值为限制的条数
```
## ANALYZE
分析表数据。用于执行计划选择的参考。
先执行分析命令,再通过DESCRIBE查看统计的结果。
//统计表
ANALYZE TABLE employee COMPUTE STATISTICS;

//统计分区
$hive>ANALYZE TABLE employee_partitioned  PARTITION(year=2014, month=12) COMPUTE STATISTICS;
//查看表的概况
$hive>desc employee ;
$hive>desc formatted employee ;
$hive>desc extended employee ;
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值