Hive查询特别知识点解析

1、 Like 和 RLike 

(1)使用 LIKE 运算选择类似的值 
(2)选择条件可以包含字符或数字: 
% 代表零个或多个字符(任意个字符)。 
_ 代表一个字符。 
(3)RLIKE 子句是 Hive 中这个功能的一个扩展,其可以通过 Java 的正则表达式这个更
强大的语言来指定匹配条件。

 2、Hive 支持通常的 SQL JOIN 语句,但是只支持等值连接,不支持非等值连接。 

3、满外连接 ( full join)

将会返回所有表中符合 WHERE 语句条件的所有记录。如果任一表的指定 字段没有符合条件的值的话,那么就使用 NULL 值替代。

4、全局排序(Order By) 

Order By:全局排序,一个 Reducer ,结果集只会有一个文件

select * from stuinfo3 order by age desc;

按照别名排序 

select name,age as age1,gender from stuinfo3 order by age1 desc;

多个列排序 

select * from stuinfo3 order by age desc,name;

5、内部排序(Sort By) 

具体参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy

每个 Reducer 内部进行排序,对全局结果集来说不是排序。

在没有结合Distribute By使用时,为了避免数据倾斜,默认是随机将数据分发到多个分区里。

mapreduce.job.reduces 默认值是-1,即根据数据量产生具体的个数

设置reduce个数 

set mapreduce.job.reduces=3; 

查询设置的reduce个数

set mapreduce.job.reduces; 

查询出的结果集文件数是3个,每个文件里是有序的

6、 分区排序(Distribute By) 

Distribute By:类似 MR 中 partition,进行分区,结合 sort by 使用。 

注意,Hive 要求 DISTRIBUTE BY 语句要写在 SORT BY 语句之前。 

对于 distribute by 进行测试,一定要分配多 reduce 进行处理,否则无法看到 distribute by
的效果。

select * from stuinfo3 distribute by name sort by age desc;  

7、 Cluster By 

当 distribute by 和 sorts by 字段相同时,可以使用 cluster by 方式。 
cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。但是排序只能是升序排
序,不能指定排序规则为 ASC 或者 DESC。 

 

发布了69 篇原创文章 · 获赞 2 · 访问量 4477

猜你喜欢

转载自blog.csdn.net/zuodaoyong/article/details/104135328
今日推荐