- 浏览: 347794 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lvyuan1234:
你好,你那个sample.txt文件可以分享给我吗
hive insert overwrite into -
107x:
不错,谢谢!
hive 表的一些默认值 -
on_way_:
赞
Hadoop相关书籍 -
bupt04406:
dengkanghua 写道出来这个问题该怎么解决?hbase ...
Unexpected state导致HMaster abort -
dengkanghua:
出来这个问题该怎么解决?hbase master启动不起来。
Unexpected state导致HMaster abort
create table src119(key string, value string);
EXPLAIN
FROM src119 SELECT key , count(distinct value) group by key
ABSTRACT SYNTAX TREE:
(TOK_QUERY (TOK_FROM (TOK_TABREF src119)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_FUNCTIONDI count (TOK_TABLE_OR_COL value)))) (TOK_GROUPBY (TOK_TABLE_OR_COL key))))
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-2 depends on stages: Stage-1
Stage-0 is a root stage
STAGE PLANS:
Stage: Stage-1
Map Reduce
Alias -> Map Operator Tree:
src119
TableScan
alias: src119
Select Operator
expressions:
expr: key
type: string
expr: value
type: string
outputColumnNames: key, value
Group By Operator
aggregations:
expr: count(DISTINCT value)
bucketGroup: false
keys:
expr: key
type: string
expr: value
type: string
mode: hash
outputColumnNames: _col0, _col1, _col2
Reduce Output Operator
key expressions:
expr: _col0
type: string
expr: _col1
type: string
sort order: ++
Map-reduce partition columns:
expr: _col0
type: string
tag: -1
value expressions:
expr: _col2
type: bigint
Reduce Operator Tree:
Group By Operator
aggregations:
expr: count(DISTINCT KEY._col1:0._col0)
bucketGroup: false
keys:
expr: KEY._col0
type: string
mode: partials
outputColumnNames: _col0, _col1
File Output Operator
compressed: false
GlobalTableId: 0
table:
input format: org.apache.hadoop.mapred.SequenceFileInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
Stage: Stage-2
Map Reduce
Alias -> Map Operator Tree:
file:/tmp/tianzhao/hive_2011-06-11_05-50-09_095_6055107404619839036/-mr-10002
Reduce Output Operator
key expressions:
expr: _col0
type: string
sort order: +
Map-reduce partition columns:
expr: _col0
type: string
tag: -1
value expressions:
expr: _col1
type: bigint
Reduce Operator Tree:
Group By Operator
aggregations:
expr: count(VALUE._col0)
bucketGroup: false
keys:
expr: KEY._col0
type: string
mode: final
outputColumnNames: _col0, _col1
Select Operator
expressions:
expr: _col0
type: string
expr: _col1
type: bigint
outputColumnNames: _col0, _col1
File Output Operator
compressed: false
GlobalTableId: 0
table:
input format: org.apache.hadoop.mapred.TextInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
Stage: Stage-0
Fetch Operator
limit: -1
输入数据是:
86val_87
238val_22
86val_165
409val_419
86val_255
238val_278
86val_98
484val_488
311val_341
238val_278
FROM src119 SELECT key , count(distinct value) group by key
238 2
311 1
409 1
484 1
86 4
(TOK_QUERY
(TOK_FROM (TOK_TABREF src119))
(TOK_INSERT
(TOK_DESTINATION (TOK_DIR TOK_TMP_FILE))
(TOK_SELECT
(TOK_SELEXPR (TOK_TABLE_OR_COL key))
(TOK_SELEXPR (TOK_FUNCTIONDI count (TOK_TABLE_OR_COL value)))
)
(TOK_GROUPBY (TOK_TABLE_OR_COL key))
)
)
Stage: Stage-1
Map Reduce
Stage: Stage-2
Map Reduce
这里的Map Reduce说明这两个Stage都是MapReduce job。
Stage-1 is a root stage
Stage-2 depends on stages: Stage-1 // Stage-2依赖Stage-1,Stage-1先运行。
分析Stage-1:
Alias -> Map Operator Tree: //Map阶段
src119
TableScan
alias: src119
Select Operator
expressions:
expr: key
type: string
expr: value
type: string
outputColumnNames: key, value
Group By Operator
aggregations:
expr: count(DISTINCT value)
bucketGroup: false
keys:
expr: key
type: string
expr: value
type: string
mode: hash
outputColumnNames: _col0, _col1, _col2
Reduce Output Operator
key expressions:
expr: _col0
type: string
expr: _col1
type: string
sort order: ++
Map-reduce partition columns:
expr: _col0
type: string
tag: -1
value expressions:
expr: _col2
type: bigint
上面的 Map Operator Tree 说明这个是MapReduce job在Map阶段执行的操作。Map阶段执行4个Operator,按顺序分别是TableScanOperator、SelectOperator、GroupByOperator、ReduceSinkOperator。
TableScan
alias: src119
上面这个是TableScanOperator,扫描表src119。
Select Operator
expressions:
expr: key
type: string
expr: value
type: string
outputColumnNames: key, value
上面这个是SelectOperator,需要的字段是key和value。
Group By Operator
aggregations:
expr: count(DISTINCT value)
bucketGroup: false
keys:
expr: key
type: string
expr: value
type: string
mode: hash
outputColumnNames: _col0, _col1, _col2
上面这个是GroupByOperator,执行聚合函数(aggregations)是count(DISTINCT value)。
Reduce Output Operator
key expressions:
expr: _col0
type: string
expr: _col1
type: string
sort order: ++
Map-reduce partition columns:
expr: _col0
type: string
tag: -1
value expressions:
expr: _col2
type: bigint
上面这个是ReduceSinkOperator。
MapRunner读取一条条记录(record),把一条条record传递给Mapper(ExecMapper)处理。
对于一条记录(record):86val_87(处理后key=86,value=val_87,blog上面显示稍微有问题), ExecMper.map 会依次调用TableScanOperator、SelectOperator、GroupByOperator、ReduceSinkOperator的processOp处理这条记录,最后在ReduceSinkOperator的processOp里面 out.collect(keyWritable, value); 收集到MapTask的环形缓冲区(circle buffer)里。(out是OutputCollector),OutputCollector.collect可以参考http://caibinbupt.iteye.com/blog/401374。
Reduce Operator Tree: // reduce阶段
Group By Operator
aggregations:
expr: count(DISTINCT KEY._col1:0._col0)
bucketGroup: false
keys:
expr: KEY._col0
type: string
mode: partials
outputColumnNames: _col0, _col1
File Output Operator
compressed: false
GlobalTableId: 0
table:
input format: org.apache.hadoop.mapred.SequenceFileInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
上面的 Reduce Operator Tree: 说明这个是MapReduce job在Reduce阶段执行的操作。
Reduce阶段执行Group By Operator(GroupByOperator)和File Output Operator(FileSinkOperator)
Group By Operator
aggregations:
expr: count(DISTINCT KEY._col1:0._col0)
bucketGroup: false
keys:
expr: KEY._col0
type: string
mode: partials
outputColumnNames: _col0, _col1
上面这个是GroupByOperator
File Output Operator
compressed: false
GlobalTableId: 0
table:
input format: org.apache.hadoop.mapred.SequenceFileInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
上面这个是FileSinkOperator
ReduceTask.run里面
while (values.more()) {
reduceInputKeyCounter.increment(1);
reducer.reduce(values.getKey(), values, collector, reporter);
if(incrProcCount) {
reporter.incrCounter(SkipBadRecords.COUNTER_GROUP,
SkipBadRecords.COUNTER_REDUCE_PROCESSED_GROUPS, 1);
}
values.nextKey();
values.informReduceProgress();
}
reducer是ExecReducer。
Reduce阶段执行Group By Operator(GroupByOperator)和File Output Operator(FileSinkOperator),Reduce对于每条record(key value对)执行一次GroupByOperator.processOp,当处理了一定的记录后(默认是1000),需要flush一次,flush是调用FileSinkOperator写入HDFS。最后Reduce.close的时候会顺序调用各个operator的close。顺序是因为这些opeator之间是父子关系。所以最后GroupByOperator中残留的数据会forward到FileSinkOperator,通过FileSinkOperator写入HDFS。
EXPLAIN
FROM src119 SELECT key , count(distinct value) group by key
ABSTRACT SYNTAX TREE:
(TOK_QUERY (TOK_FROM (TOK_TABREF src119)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_FUNCTIONDI count (TOK_TABLE_OR_COL value)))) (TOK_GROUPBY (TOK_TABLE_OR_COL key))))
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-2 depends on stages: Stage-1
Stage-0 is a root stage
STAGE PLANS:
Stage: Stage-1
Map Reduce
Alias -> Map Operator Tree:
src119
TableScan
alias: src119
Select Operator
expressions:
expr: key
type: string
expr: value
type: string
outputColumnNames: key, value
Group By Operator
aggregations:
expr: count(DISTINCT value)
bucketGroup: false
keys:
expr: key
type: string
expr: value
type: string
mode: hash
outputColumnNames: _col0, _col1, _col2
Reduce Output Operator
key expressions:
expr: _col0
type: string
expr: _col1
type: string
sort order: ++
Map-reduce partition columns:
expr: _col0
type: string
tag: -1
value expressions:
expr: _col2
type: bigint
Reduce Operator Tree:
Group By Operator
aggregations:
expr: count(DISTINCT KEY._col1:0._col0)
bucketGroup: false
keys:
expr: KEY._col0
type: string
mode: partials
outputColumnNames: _col0, _col1
File Output Operator
compressed: false
GlobalTableId: 0
table:
input format: org.apache.hadoop.mapred.SequenceFileInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
Stage: Stage-2
Map Reduce
Alias -> Map Operator Tree:
file:/tmp/tianzhao/hive_2011-06-11_05-50-09_095_6055107404619839036/-mr-10002
Reduce Output Operator
key expressions:
expr: _col0
type: string
sort order: +
Map-reduce partition columns:
expr: _col0
type: string
tag: -1
value expressions:
expr: _col1
type: bigint
Reduce Operator Tree:
Group By Operator
aggregations:
expr: count(VALUE._col0)
bucketGroup: false
keys:
expr: KEY._col0
type: string
mode: final
outputColumnNames: _col0, _col1
Select Operator
expressions:
expr: _col0
type: string
expr: _col1
type: bigint
outputColumnNames: _col0, _col1
File Output Operator
compressed: false
GlobalTableId: 0
table:
input format: org.apache.hadoop.mapred.TextInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
Stage: Stage-0
Fetch Operator
limit: -1
输入数据是:
86val_87
238val_22
86val_165
409val_419
86val_255
238val_278
86val_98
484val_488
311val_341
238val_278
FROM src119 SELECT key , count(distinct value) group by key
238 2
311 1
409 1
484 1
86 4
(TOK_QUERY
(TOK_FROM (TOK_TABREF src119))
(TOK_INSERT
(TOK_DESTINATION (TOK_DIR TOK_TMP_FILE))
(TOK_SELECT
(TOK_SELEXPR (TOK_TABLE_OR_COL key))
(TOK_SELEXPR (TOK_FUNCTIONDI count (TOK_TABLE_OR_COL value)))
)
(TOK_GROUPBY (TOK_TABLE_OR_COL key))
)
)
Stage: Stage-1
Map Reduce
Stage: Stage-2
Map Reduce
这里的Map Reduce说明这两个Stage都是MapReduce job。
Stage-1 is a root stage
Stage-2 depends on stages: Stage-1 // Stage-2依赖Stage-1,Stage-1先运行。
分析Stage-1:
Alias -> Map Operator Tree: //Map阶段
src119
TableScan
alias: src119
Select Operator
expressions:
expr: key
type: string
expr: value
type: string
outputColumnNames: key, value
Group By Operator
aggregations:
expr: count(DISTINCT value)
bucketGroup: false
keys:
expr: key
type: string
expr: value
type: string
mode: hash
outputColumnNames: _col0, _col1, _col2
Reduce Output Operator
key expressions:
expr: _col0
type: string
expr: _col1
type: string
sort order: ++
Map-reduce partition columns:
expr: _col0
type: string
tag: -1
value expressions:
expr: _col2
type: bigint
上面的 Map Operator Tree 说明这个是MapReduce job在Map阶段执行的操作。Map阶段执行4个Operator,按顺序分别是TableScanOperator、SelectOperator、GroupByOperator、ReduceSinkOperator。
TableScan
alias: src119
上面这个是TableScanOperator,扫描表src119。
Select Operator
expressions:
expr: key
type: string
expr: value
type: string
outputColumnNames: key, value
上面这个是SelectOperator,需要的字段是key和value。
Group By Operator
aggregations:
expr: count(DISTINCT value)
bucketGroup: false
keys:
expr: key
type: string
expr: value
type: string
mode: hash
outputColumnNames: _col0, _col1, _col2
上面这个是GroupByOperator,执行聚合函数(aggregations)是count(DISTINCT value)。
Reduce Output Operator
key expressions:
expr: _col0
type: string
expr: _col1
type: string
sort order: ++
Map-reduce partition columns:
expr: _col0
type: string
tag: -1
value expressions:
expr: _col2
type: bigint
上面这个是ReduceSinkOperator。
MapRunner读取一条条记录(record),把一条条record传递给Mapper(ExecMapper)处理。
对于一条记录(record):86val_87(处理后key=86,value=val_87,blog上面显示稍微有问题), ExecMper.map 会依次调用TableScanOperator、SelectOperator、GroupByOperator、ReduceSinkOperator的processOp处理这条记录,最后在ReduceSinkOperator的processOp里面 out.collect(keyWritable, value); 收集到MapTask的环形缓冲区(circle buffer)里。(out是OutputCollector),OutputCollector.collect可以参考http://caibinbupt.iteye.com/blog/401374。
Reduce Operator Tree: // reduce阶段
Group By Operator
aggregations:
expr: count(DISTINCT KEY._col1:0._col0)
bucketGroup: false
keys:
expr: KEY._col0
type: string
mode: partials
outputColumnNames: _col0, _col1
File Output Operator
compressed: false
GlobalTableId: 0
table:
input format: org.apache.hadoop.mapred.SequenceFileInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
上面的 Reduce Operator Tree: 说明这个是MapReduce job在Reduce阶段执行的操作。
Reduce阶段执行Group By Operator(GroupByOperator)和File Output Operator(FileSinkOperator)
Group By Operator
aggregations:
expr: count(DISTINCT KEY._col1:0._col0)
bucketGroup: false
keys:
expr: KEY._col0
type: string
mode: partials
outputColumnNames: _col0, _col1
上面这个是GroupByOperator
File Output Operator
compressed: false
GlobalTableId: 0
table:
input format: org.apache.hadoop.mapred.SequenceFileInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
上面这个是FileSinkOperator
ReduceTask.run里面
while (values.more()) {
reduceInputKeyCounter.increment(1);
reducer.reduce(values.getKey(), values, collector, reporter);
if(incrProcCount) {
reporter.incrCounter(SkipBadRecords.COUNTER_GROUP,
SkipBadRecords.COUNTER_REDUCE_PROCESSED_GROUPS, 1);
}
values.nextKey();
values.informReduceProgress();
}
reducer是ExecReducer。
Reduce阶段执行Group By Operator(GroupByOperator)和File Output Operator(FileSinkOperator),Reduce对于每条record(key value对)执行一次GroupByOperator.processOp,当处理了一定的记录后(默认是1000),需要flush一次,flush是调用FileSinkOperator写入HDFS。最后Reduce.close的时候会顺序调用各个operator的close。顺序是因为这些opeator之间是父子关系。所以最后GroupByOperator中残留的数据会forward到FileSinkOperator,通过FileSinkOperator写入HDFS。
发表评论
-
hive rename table name
2013-09-18 14:28 2594hive rename tablename hive re ... -
hive的distribute by如何partition long型的数据
2013-08-20 10:15 2470有用户问:hive的distribute by分桶是怎么分 ... -
hive like vs rlike vs regexp
2013-04-11 18:53 11208like vs rlike vs regexp r ... -
hive sql where条件很简单,但是太多
2012-07-18 15:51 8734insert overwrite table aaaa ... -
insert into时(string->bigint)自动类型转换
2012-06-14 12:30 8277原表src: hive> desc src; ... -
通过复合结构来优化udf的调用
2012-05-11 14:07 1206select split("accba&quo ... -
RegexSerDe
2012-03-14 09:58 1546官方示例在: https://cwiki.apache.or ... -
Hive 的 OutputCommitter
2012-01-30 19:44 1814Hive 的 OutputCommitter publi ... -
hive LATERAL VIEW 行转列
2011-11-09 14:49 5442drop table lateralview; create ... -
hive complex type
2011-11-08 19:56 1360数据: 1,100|3,20|2,70|5,100 建表: ... -
hive转义字符
2011-10-25 16:41 6238CREATE TABLE escape (id STRING, ... -
hive 两个不同类型的columns进行比较
2011-09-19 13:46 3032select case when "ab1234&q ... -
lateral view
2011-09-18 04:04 0lateral view与udtf相关 -
udf 中获得 FileSystem
2011-09-14 10:28 0在udf中获得FileSystem,需要获得知道fs.defa ... -
hive union mapjoin
2011-09-09 16:29 0union union.q union2.q ... -
hive eclipse
2011-09-08 17:42 0eclipse-templates$ vi .classpat ... -
hive join filter
2011-09-07 23:05 0join16.q.out hive.optimize.ppd ... -
hive limit
2011-09-07 21:02 0limit 关键字: input4_limit.q.out ... -
hive convertMapJoin MapJoinProcessor
2011-09-06 21:17 0join25.q join26 ... -
hive hive.merge.mapfiles hive.merge.mapredfiles
2011-09-06 19:14 0HiveConf: HIVEMERGEMAPFILES ...
相关推荐
为了更好地理解和优化SQL查询,MySQL提供了一个非常有用的工具——`EXPLAIN`。通过在SQL语句前加上`EXPLAIN`关键字,可以详细展示MySQL如何处理查询语句以及如何使用索引来处理这些查询。这有助于我们选择更高效的...
【秘密】Hive SQL 开发规范 Hive作为Hadoop生态系统中的重要组件,为企业提供了对大规模数据集的高效处理和分析能力。它允许用户通过类似于SQL的查询语言(HiveQL)来操作分布式存储的数据,简化了MapReduce编程...
通过在HiveSQL查询语句前添加`EXPLAIN`关键字,我们可以获得关于查询如何被Hive解释和执行的详细信息。这些信息通常包括但不限于查询的逻辑结构、操作符的执行顺序以及各种优化措施等。 **示例:** ```sql EXPLAIN...
- 当`select_type`为`DERIVED`时,表示从`FROM`子句中提取的子查询作为派生表,MySQL会先执行这些子查询并将结果保存在一个临时表中,然后再执行外部查询。 #### 六、总结 通过对Explain工具的使用以及对其返回...
MySQL 的 Explain 分析 SQL 语句性能(慢查询和加没加索引) MySQL 的 Explain 分析 SQL 语句性能是数据库性能优化的重要工具之一。通过 Explain 命令可以分析 SQL 语句的执行计划,了解 SQL 语句的执行过程,找出...
Hive on Spark EXPLAIN statement : 讲述了 Common Join / Map join / Bucket Map Join / Sorted Merge Bucket Map Join / skew join 在explain 中的 树结构 。In Hive, command EXPLAIN can be used to show the ...
在给出的文档内容中,通过分析一个包含子查询的SQL语句的执行计划,我们可以看到如何通过explain命令去分析复杂的SQL查询。文档中展示了执行计划中包含的各个字段的含义,例如id、select_type、table、partitions、...
在使用MySQL数据库时,explain命令是一个非常重要的工具,它可以帮助开发者理解MySQL优化器是如何执行一个给定的SQL查询语句的。通过分析执行计划,开发者可以更深入地了解查询性能,从而对SQL语句进行优化。本文将...
explain分析sql具体字段含义脑图
这将把执行计划存储到一个名为“TABLE”或自定义的表中。 2. 观察执行计划:使用SELECT * FROM TABLE(ANALYZE PLAN)或DBMS_XPLAN.DISPLAY来查看存储的执行计划。 三、执行计划的输出 1. Operation:操作类型,如...
在数据库管理和优化中,通过EXPLAIN命令获取的SQL执行计划是数据库性能分析和SQL语句优化的重要依据。本篇详细讲解了EXPLAIN...对于任何针对数据库性能调优和SQL语句优化的实践,EXPLAIN命令都是一个不可或缺的工具。
`activerecord-explain` gem 是一个ActiveRecord的扩展,它集成到了Rails应用中,当启用时,每次执行的SQL查询都会被记录并附带其EXPLAIN计划。EXPLAIN计划是数据库管理系统提供的一种工具,用于显示查询执行的详细...
Oracle 中的 explain_plan 是一个强大的分析工具,能够帮助用户了解 SQL 语句的执行计划,通过它可以了解 Oracle 是如何连接表、使用什么方式扫描表(索引扫描或全表扫描)以及使用到的索引名称。下面详细讲解 ...
`django-explain`是一个针对Django框架的辅助工具,专门用来获取Django queryset执行的`EXPLAIN`或`EXPLAIN ANALYZE`输出,以便于开发者进行数据库性能分析。 `EXPLAIN`命令在数据库中用于显示查询的执行计划,它...
在研究SQL语句的执行计划时,"explain命令"是一个非常重要的工具。通过explain命令可以得到SQL语句的执行计划,从而帮助我们了解SQL语句是如何被执行的。执行计划里面包含了多个字段,这些字段共同描述了查询的各个...
在大数据分析领域,Hive作为一个基于Hadoop的数据仓库工具,被广泛用于处理和分析大规模数据。本资料主要探讨Hive的高级分析函数及其优化技术,旨在帮助用户更高效地利用Hive进行大数据处理。以下是对标题和描述中...
通过对EXPLAIN命令返回的执行计划进行分析,可以有效地识别和解决性能问题,这对于数据库管理员和开发人员来说是一个必须掌握的技能。在实际操作中,不断地复习和应用这些知识点将能够显著提高我们对数据库操作的...
当我们运行一个`EXPLAIN`命令时,会得到以下几列信息: 1. **id**:查询的序列号,表示查询中子句的顺序。 2. **select_type**:查询类型,如SIMPLE(简单查询)、PRIMARY(主查询)、SUBQUERY(子查询)等。 3. **...
最后,EXPLAIN PLAN 是一个非常有用的工具,能够提供有用的信息,帮助用户有效地调整自己的语句。通过使用 EXPLAIN PLAN,可以免去很多推测,提高查询性能。 EXPLAIN PLAN 是 Oracle 中一个非常重要的诊断工具,...