Hive 查询语句
查询语法结构
SELECT [ALL | DISTINCT] select_expr,
select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY col_list]
[CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BYcol_list] ]
[LIMIT [offset,] rows]
基本查询
where 条件查询
limit 限制记录数
order by 排序
Hive 中的 order by 语句和 SQL 定义是一样的,其会对查询结果集执行一个全局排序,Hive 会有一个所有的数据都通过一个reduce 进行处理的过程,对于大数据集这个过程将消耗很大的时间来执行
sort by / distrubute by 分区排序
- sort by:局部排序,只确保每个 reduce 上输出的数据为有序(如果只有一个 reduce 就与 order by 全局排序相同)
- distrubute by:按照指定列为 key 进行分区到不同的 reduce 中(默认采取的是 hash 算法)
cluster by 分区排序
如果分区字段和排序字段一样,且是升序,那么 distribute by + sort by可以使用 cluster by 替换,起到简化语句的作用
Join 关联查询
-
内连接(inner join)
-
左外连接(left join)
-
右外连接(right join)
-
全连接(full join)
-
左半连接(left semi join)
left semi join 中最后 select 的结果只许出现左表,最主要的使用场景就是实现 in/exists
注:和左连接相似,唯一的区别是不返回 t_b 数据,所以 select 子句中不能有 t_b 字段,而且只在 Hive 中有效。
group by 分组聚合
注:使用 group by 分组后,select 子句的字段只能是分组字段或聚合结果
子查询
将查询结果作为临时表,再针对临时表中进行查询
浙公网安备 33010602011771号