-
HIVE条件函数 从左到右返回第一个不为null的值:coalesce >select comm, sal,coalesce(comm, sal) from emp; 条件表达式:case...when... CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END //如果a的值等于b时返回c,如果等于d返回e,等等等等,最后如果都不是返回f 涨工资--案例 (给员工涨工资,总裁1000, 经理800, 其他400) >select ename,job,sal, case job when 'PRESIDENT' then sal+1000 when 'MANAGER' then sal+800 else sal+400 end from emp;查看全部
-
HIVE中的日期函数 取出一个字符串当中日期的部分:to_date >select to_date('2017-11-07 20:32:00'); 取出一个日期中年:year 取出一个日期中月:month 取出一个日期中日:day >select year('2017-11-07 20:32:00'),month('2017-11-07 20:32:00'),day('2017-11-07 20:32:00'); 返回一个日期在一年中是第几个星期:weekofyear >select weekofyear('2017-11-07 20:32:00'); 两个日期相减返回他们相差的天数:datediff >select datediff('2017-11-07 20:32:00', '2017-11-11 20:32:00'); 在一个日期值上加上多少天:date_add >select date_add('2017-11-07 20:32:00', 2); 在一个日期上减去多少天:date_sub >select date_sub('2017-11-07 20:32:00', 2);查看全部
-
收集函数:size //返回Map集合中<key,value>形式的数据的数量大小个数 >select size(map(1, 'Tom', 2, 'Marry')); 转换函数:cast //把某个数据类型转换成别的数据类型 >select cast(1 as bigint); >select cast(1 as float); >select cast('2017-11-7' as date);查看全部
-
HIVE的数据查询之字符函数: 字符串转换成小写:lower 字符串转换成大写:upper >select lower('Hello World'), upper('Hello Hive'); 字符串长度(字符数):length >select length('Hello World'), length('你好'); //'你好'的字符数为2,字节数为4 拼接字符串:concat >select concat('Hello', ' World'); 求字符串的子串:substr //substr(a, b)从a中第b位开始取,取右边所有字符 >select substr('Hello World', 3); //substr(a, b, c) 从a中,第b位开始取,取c个字符 >select substr('Hello World', 3, 4); 去掉字符串前后的空格:trim 左填充:lpad 右填充:rpad >select lpad('abcd', 10, '*'); //表示用*左填充'abcd'到10位 >select rpad('abcd', 10, '*'); //表示用*右填充'abcd'到10位查看全部
-
Hive简单查询和fetch task 现在我们打开了一个员工表: 查询员工所有信息: select * from emp; 查询员工信息: 员工号 姓名 月薪 select empno, ename,sal from emp; 查询员工信息:员工号 姓名 月薪 年薪(需要算术表达式) select empno,ename,sal,sal*12 from emp; 查询员工信息:员工号 姓名 月薪 年薪 奖金 年收入 (需要注意的是,若算式中有空值null则计算结果则会是空值,所以我们需要对空值进行处理) 这里我们介绍一个函数:nvl(某个可能为空的值, 转变的值) select empno,ename,sal,sal*12,comm,sal*12+nvl(comm, 0) from emp; 查询奖金为null的员工 select * from emp where comm=null; //成功执行,但没有显示查询结果 (在HQI和SQL语句中,判断一个值是否为null,不能使用 != 或者 =, 因为它永远是不等) 所以我们可以使用is来查询: select * from emp where comm is null; 使用distinct去掉重复记录 select distinct deptno from emp; select distinct deptno,job from emp; //distinct作用于后面所有的列 //如果deptno和job的组合不同,则就被distinct认为是不同的数据 Fetch Task功能:开启此功能后我们执行一条简单的查询语句(没有排序,没有函数) 就不会使用mapreduce作业,而直接使用Fetch Task从HDFS中查询输出语句,这样对于简单的查询,效率会更高。查看全部
-
*使用Load语句导入数据 将/root/data下的所有数据文件导入,并且覆盖 load data local inpath '/root/data/' overwrite into table t3; ----- * local 是指在操作系统目录, 如果是在htfs中就不用local load data local inpath '/root/data/data1.txt' into table p_table partition (gender='M'); --导入分区查看全部
-
#添加jar文件 add jar /root/training/udfjar/concatstring.jar; #创建临时函数(也就是说,这个函数生命周期只在当前会话中) create temporary function myconcat as 'demo.udf.ConcatString'; #执行函数 select myconcat('Hello', ' World');查看全部
-
导出成JAR文件查看全部
-
这个例子中类型必须是Text,可以通过导入org.apache.hadoop.io.Text类来指明 输入和输出参数类型不能是string,因为string不能再hadoop集群之间通信查看全部
-
HIVE自定义函数案例--拼加两个字符串查看全部
-
HIVE的自定义函数(UDF)z; 可以直接应用于select语句,对查询结果做格式化处理后,再输出结果 HIVE自定义函数实现细节: 首先,我们要创建一个继承org.apache.hadoop.hive.ql.UDF的JAVA类 然后,需要实现evaluate函数,evaluate函数支持重载 创建好自定义函数后,我们需要把程序打成jar包,放到linux的hive服务器上 并且,进入hive客户端,添加jar包: add jar /root/training/udfjar/udf_test.jar 创建临时函数(用来指向JAR包): create temporary function <函数名> as 'JAVA类名'; 最后,可以在一条select语句中,直接调用自定义函数(会执行相应的mapreduce程序,调用我们的java类,完成特定的功能); select <函数名> from table; 销毁临时函数: drop temporary function <函数名>;查看全部
-
HIVE子查询 hive只支持from和where子查询 select e.ename from emp e where e.deptno in (select e.deptno from dept d where d.dname='SALES' or d.dname='ACCOUNTING'); 注意的问题: -语法中的括号 -合理的书写风格 -hive中只支持WHERE和FEOM子句中的子查询 -主查询和子查询可以不是同一张表 -子查询的空值问题 select * from emp e where e.empno not in (select e1.mgr from emp e1); //如果子集合中不含有空值null,则可以使用not in //如果子集合中含有空值,则不可以使用not in,可以使用in #改进 select * from emp e where e.empno not in (select e1.mgr from emp e1 where e1.mgr is not null);查看全部
-
HIVE的表连接 自连接(自己和自己连接) (自连接的核心:通过表的别名将一张表视为多张表) select e.ename, b.ename from emp e, emp b where e.mgr=b.empno;查看全部
-
HIVE表连接 外连接: (在select语句中,所有没有包含在聚合函数中的列,都必须要出现在grouop by 子句的后面) #一般的等值连接 select d.deptno, d.dname, count(e.empno) from emp e, dept d where e.deptno=d.deptno group by d.deptno, d.dname; #外连接(左外连接,右外连接) 左外连接(当我们的连接条件不成立时,连接条件的左边的表依然可以包含在结果中) 右外连接(当我们的连接条件不成立时,连接条件的右边的表依然可以包含在结果中) #右外连接 select d.deptno, d.dname, count(e.empno) from emp e right outer jion dept d on (e.deptno=d.deptno) group by d.deptno, d.dname;查看全部
-
HIVE表连接(转换成mapreduce作业,提交到hadoop上) 等值连接(连接条件中为等号): select e.empno, e.ename, e.sal, d.dname //选择要查询的字段 from emp e, dept d //选择表,并取别名 where e.deptno=d.deptno; //条件是表e的deptno等于表d的deptno 不等值连接(条件中是不等号:>, <, !=): between and //含有边界,并且小值在前,大值在后 select e.empno, e.ename, e.sal, s.grade //选择要查询的字段 from emp e, salgrade s //选择表,并取别名 where e.sal between 2000 and 8000; //条件是表e的sal大于等于2000小于等于8000查看全部
举报
0/150
提交
取消