hive内置函数

1 Hive的内置函数

在Hive中给我们内置了很多函数官方地址
也可以在启动hive后输入命令查看函数:

SHOW FUNCTIONS;
DESCRIBE FUNCTION <function_name>;
DESCRIBE FUNCTION EXTENDED <function_name>;123

查看所有的内置函数

hive> show functions;1

查看函数的具体语法

hive> DESCRIBE FUNCTION case;
OK
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END - When a = b, returns c; when a = d, return e; else return f

hive> DESCRIBE FUNCTION EXTENDED case;

hive> DESCRIBE FUNCTION EXTENDED case;
OK
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END - When a = b, returns c; when a = d, return e; else return f
Example:
SELECT
CASE deptno
WHEN 1 THEN Engineering
WHEN 2 THEN Finance
ELSE admin
END,
CASE zone
WHEN 7 THEN Americas
ELSE Asia-Pac
END
FROM emp_de
tails
1234567891011121314151617181920212223

2 Hive自定义函数

Hive中的内置函数,比较简单,用到的时候可以在官网进行查询,虽然有很多内置的函数,但是生产上肯定不够那么全面,所有,用户需要自定义函数来满足自身的求

  • 自定义函数开发UDF(官方网址):
  1. 使用maven创建一个java项目
  2. 继承UDF类;
  3. 重写evaluate方法。
    (作者使用的IDEA进行开发的)

创建一个HelloUdf类继承UDF,并且重写evaluate方法

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

import java.io.UTFDataFormatException;

public class HelloUdf extends UDF {
public Text evaluate (final Text t) {
if (t == null) return null;

 return new Text("Hello:" + t);

}
public static void main(String [] args){
System.out.println(new HelloUdf().evaluate(new Text(“hero”)));
}
}123456789101112131415

打jar包
上传jar包

[hadoop@zhangyu ~]$ rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
100% 4 KB 4 KB/s 00:00:01 0 Errors
[hadoop@zhangyu lib]$ ll
total 8
-rw-r–r–. 1 hadoop hadoop 4232 Jan 15 2018 hive-1.0.jar

hive> add jar /home/hadoop/lib/hive-1.0.jar
> ;
Added [/home/hadoop/lib/hive-1.0.jar] to class path
Added resources: [/home/hadoop/lib/hive-1.0.jar] 123456789101112

创建自定义函数有两种格式:临时函数,永久函数(0.13版本后):
官方语法

create temporary function my_lower as ‘com.example.hive.udf.Lower’;
create function my_db.my_lower as ‘com.example.hive.udf.Lower’;12

3 临时自定义函数(只对当前session有效)

hive> create temporary function say_hello as ‘cn.zhangyu.HelloUdf’;
OK
hive> select ename,say_hello(ename)from emp;
OK
ENAME Hello:ENAME
SMITH Hello:SMITH
ALLEN Hello:ALLEN
WARD Hello:WARD
JONES Hello:JONES
MARTIN Hello:MARTIN
BLAKE Hello:BLAKE
CLARK Hello:CLARK
SCOTT Hello:SCOTT
KING Hello:KING
TURNER Hello:TURNER
ADAMS Hello:ADAMS
JAMES Hello:JAMES
FORD Hello:FORD
MILLER Hello:MILLER
Time taken: 0.119 seconds, Fetched: 15 row(s)1234567891011121314151617181920

查看jar包

hive> list jar;
/home/hadoop/lib/hive-1.0.jar12

查看自定义函数

hive> show functons;1

4 永久函数

把jar包上传到hdfs上

[hadoop@zhangyu lib]$ hdfs dfs -put /home/hadoop/lib/hive-1.0.jar /lib
[hadoop@zhangyu lib]$ hdfs dfs -ls /lib
-rw-r–r-- 1 hadoop supergroup 4232 2018-01-14 08:03 /lib/hive-1.0.jar123

创建永久函数

hive> CREATE FUNCTION say_hello1
> AS ‘cn.zhangyu.HelloUdf’
> USING JAR ‘hdfs:///lib/hive-1.0.jar’;
converting to local hdfs:///lib/hive-1.0.jar
Added [/tmp/7f999adc-e8a4-4642-af56-581f078cdc32_resources/hive-1.0.jar] to class path
Added resources: [hdfs:///lib/hive-1.0.jar]
OK1234567

测试

hive> select ename,say_hello1(ename)from emp;
OK
ENAME Hello:ENAME
SMITH Hello:SMITH
ALLEN Hello:ALLEN
WARD Hello:WARD
JONES Hello:JONES
MARTIN Hello:MARTIN
BLAKE Hello:BLAKE
CLARK Hello:CLARK
SCOTT Hello:SCOTT
KING Hello:KING
TURNER Hello:TURNER
ADAMS Hello:ADAMS
JAMES Hello:JAMES
FORD Hello:FORD
MILLER Hello:MILLER
Time taken: 0.084 seconds, Fetched: 15 row(s)123456789101112131415161718

注意:执行这条语句创建永久函数,show functiuons 会加上默认的数据库名在函数名前。(default.say_hello1)

5 在MySQL中查询创建的自定义函数

mysql> select * from funcs;
±--------±--------------------±------------±------±-----------±----------±-----------±-----------+
| FUNC_ID | CLASS_NAME | CREATE_TIME | DB_ID | FUNC_NAME | FUNC_TYPE | OWNER_NAME | OWNER_TYPE |
±--------±--------------------±------------±------±-----------±----------±-----------±-----------+
| 1 | cn.zhangyu.HelloUdf | 1515888313 | 1 | say_hello1 | 1 | NULL | USER |
±--------±--------------------±------------±------±-----------±----------±-----------±-----------+
1 row in set (0.00 sec)

来源:CSDN
原文:https://blog.csdn.net/yu0_zhang0/article/details/79060849
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuxu1116

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值