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 子句的字段只能是分组字段或聚合结果

子查询

将查询结果作为临时表,再针对临时表中进行查询

posted @ 2021-12-14 18:01  追こするれい的人  阅读(169)  评论(0编辑  收藏  举报