一、HIVE SQL 语法
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM tablename
[WHERE where_condition] --where条件语句
[GROUP BY col_list] --group by 分组语句
[ORDER BY col_list] --order by 排序语句
[CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list] ]
[LIMIT number]
大家都知道hive底层跑的是mapreduce程序,在执行hql语句时,mapreduce会解析hql产生执行逻辑,生成结果。
MapReduce引擎执行计划
Map阶段:
1、执行from加载,进行表的查找与加载。
2、执行where过滤,进行条件过滤与筛选。
3、执行select查询,进行输出项的筛选。
4、执行group by分组,描述了分组后需要计算的函数。
5、map端文件合并,map端本地溢出写文件的合并操作,每个map最终形成一个临时文件。然后按列映射到对应的Reduce阶段:
Reduce阶段:
1、group by:对map端发送过来的数据进行分组并进行计算。
2、select:最后过滤列用于输出结果。
3、limit排序后进行结果输出到HDFS文件。
注意,以上顺序不是绝对的,会根据语句的不同,有所调整。
可以通过执行计划查看大概顺序
explain sql 语句
如:explain select * from tablename 即可查看执行计划
二、Hive Join
Hive只支持等连接、外连接。Hive不支持非相等的Join条件,不过我们可以通过其他方式实现,如left outer join,因为它很难在map/reduce job实现这样的条件。建表对Join操作进行试验,建表语句和数据如下:
//我们创建三个表用来测试
CREATE TABLE testA(
id INT COMMENT 'id',
name STRING COMMENT '姓名',
age INT COMMENT '年龄'
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'