hive的排序以及常用的一些函数

mac2024-04-16  76

全局排序(Order by) 1.按照别名排序 hive (default)> select ename, sal*2 twosal from emp order by twosal; 2.多个列排序 hive (default)> select ename, deptno, sal from emp order by deptno, sal ; 每个MapReduce内部排序(Sort By) 1.设置reduce个数 hive (default)> set mapreduce.job.reduces=3; 2.查看设置reduce个数 hive (default)> set mapreduce.job.reduces; 3.根据部门编号降序查看员工信息 hive (default)> select * from emp sort by empno desc; 4.将查询结果导入到文件中(按照部门编号降序排序) hive (default)> insert overwrite local directory '/opt/sortbyresult' select * from emp sort by deptno desc; 分区排序(Distribute By) 1.Distribute By:类似MR中partition,进行分区,结合sort by使用。 注意,Hive要求Distribute By语句要写在sort by语句之前。对于distribute by进行测试,一 定要分配多reduce进行处理,否则无法看到distribute by的效果。 2.案例实操: 先按照部门编号分区,再按照员工编号降序排序。 hive (default)> set mapreduce.job.reduces=3; hive (default)> select * from emp distribute by deptno sort by empno desc; Cluster By 当distribute by和sorts by字段相同时,可以使用cluster by方式。 cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序, 不能指定排序规则为ASC或者DESC。 以下两种写法等价 select * from emp cluster by deptno; select * from emp distribute by deptno sort by deptno; 注意:按照部门编号分区,不一定就是固定死的数值,可以是20号和30号部门分到一个分区里面去。

常用查询函数

空字段赋值 eg:如果员工的comm为NULL,则用-1代替 select nvl(comm,-1) from emp; case when 1.求出不同部门男女各多少人 select dept_id, sum(case sex when '男' then 1 else 0 end) male_count, sum(case sex when '女' then 1 else 0 end) female_count from emp_sex group by dept_id; 行转列 1.相关函数说明 CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字串; CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参 数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串 之间; COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产 生array类型字段。 列转行
最新回复(0)