蜂巢查询执行计划

问题描述:

这里是我的蜂巢查询蜂巢查询执行计划

Insert into schemaB.employee partition(year) 
select * from schemaA.employee; 

下面是这个查询产生的查询执行计划。

hive> explain <query>; 

STAGE DEPENDENCIES: 
    Stage-1 is a root stage 
    Stage-0 depends on stages: Stage-1 
    Stage-2 depends on stages: Stage-0 

STAGE PLANS: 
    Stage: Stage-1 
    Map Reduce 
     Map Operator Tree: 
      TableScan 
      alias: employee 
      Statistics: Num rows: 65412411 Data size: 59121649936 Basic stats: COMPLETE Column stats: NONE 
      Select Operator 
       expressions: Col1 (type: binary), col2 (type: binary), col3 (type: array<string>), year (type: int) 
       outputColumnNames: _col0, _col1, _col2, _col3 
       Statistics: Num rows: 65412411 Data size: 59121649936 Basic stats: COMPLETE Column stats: NONE 
       Reduce Output Operator 
       key expressions: _col3 (type: int) 
       sort order: + 
       Map-reduce partition columns: _col3 (type: int) 
       Statistics: Num rows: 65412411 Data size: 59121649936 Basic stats: COMPLETE Column stats: NONE 
       value expressions: _col0 (type: binary), _col1 (type: binary), _col2 (type: array<string>), _col3 (type: int) 
     Reduce Operator Tree: 
     Extract 
      Statistics: Num rows: 65412411 Data size: 59121649936 Basic stats: COMPLETE Column stats: NONE 
      File Output Operator 
      compressed: true 
      Statistics: Num rows: 65412411 Data size: 59121649936 Basic stats: COMPLETE Column stats: NONE 
      table: 
       input format: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat 
       output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat 
       serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde 
       name: schemaB.employee 

    Stage: Stage-0 
    Move Operator 
     tables: 
      partition: 
      year 
      replace: false 
      table: 
       input format: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat 
       output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat 
       serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde 
       name: schemaB.employee 

    Stage: Stage-2 
    Stats-Aggr Operator 

我有两个相关的查询执行计划问题:

  1. 为什么会出现在查询计划减少一步?在我的理解中,它需要做的就是将数据从一个HDFS位置复制到另一个位置,这可以通过映射器单独实现。减少步骤与表中存在的分区有关吗?
  2. 什么是统计汇总运算符步骤出现在第2阶段?我无法找到相关文件解释这一点。

这回答了这两个问题。
通过defalut自动收集统计数据,并且需要减少步骤。

https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-Statistics

hive.stats.autogather

默认值:True

加入:蜂巢0.7与HIVE-1361

的标志,在INSERT期间自动收集统计信息OVERWRITE 命令。

  1. 记录写作也是减少阶段的责任。由于您正在写回分布式FS(HDFS),因此可以通过产生所需/指定数量的减速器来并行写入。
  2. “统计聚合”用于从您正在写入的表中收集统计信息。 例如,分区中的行数,列数据模式等。此数据用于在查询该表时生成查询计划。