Hive的EXPLAIN命令(十四)

1. 前言

Hive本身是不会生成Java MapReduce算法程序的,而是生成一个表示“job执行计划”的XML文件驱动执行内置的、原生的Mapper和Reducer模块。换句话说,这些通用的模板函数类似于微型的语言翻译程序,而这个驱动计算的“语言”是以XML形式编码的。·

2. 基于词频统计分析EXPLAIN命令

SELECT word, count(1) AS count FROM
       > (SELECT explode(split(line, ' ')) AS word FROM wordcount) wc
       > GROUP BY word
       > ORDER BY count;

上述HQL语句的作用是统计一个表中出现的每种单词的个数,并按照出现次数从小到大的顺序输出该单词和相应的个数。
当我们在此HQL语句前加上EXPLAIN关键字时。首先,会打印出抽象语法树,它表明Hive是如何将查询解析成token(符号)和literal(字面值)的,是第一步将查询转化到最终结果的一部分。
在这里插入图片描述
我们大多数都不熟悉解析器和分词器,所以简单的研究一下输出的信息,首先忽略掉TOK_这个前缀。
第一部分:
TOK_SUBQUERY表示HQL子查询,TOK_TABNAME 指定所查询的表的名称,尽管查询结果最终会将其输出写入到控制台,但是Hive实际上会先将输出写入到一个临时的文件中:
TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)
接下来是查询语句,explode为表生成函数,返回0到多行结果,每行都对应输入的array数组中的一个元素;split为内置函数,按照正则表达式pattern分割字符串s,并将分割后的部分以字符串数组的方式返回; TOK_TABLE_OR_COL指定line为要查询的列名;‘ ’为每一行单词之间的分隔符,word对生成的列进行重命名,wc对生成的表进行重命名。
第二部分:
还是写入临时文件,然后执行外部的查询,查询的列名改为word而不是line,执行的聚合函数是count(1),计算行数;count是对count(1)这个函数生成的列进行的一个命名操作,
TOK_GROUPBY 按照word列进行分组,TOK_ORDERBY 按照count值进行排序。

猜你喜欢

转载自blog.csdn.net/RivenDong/article/details/103887999
今日推荐