大数据学习笔记-2020-10-03--hive中的函数与udf自定义函数

    科技2022-07-10  122

    hive中的函数

    系统自带的函数:

    查看系统自带的函数:

    hive> show functions;

    显示自带函数的用法:

    hive> desc function upper;

    详细显示自带函数的用法:

    hive> desc function extended upper;

    用户自定义的函数UDF(user-defined function):

    当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数

    根据用户自定义函数类别分为以下三种:

    UDF(User-Defined-Function)

    ​ 一进一出

    UDAF(User-Defined Aggregation Function)

    ​ 聚集函数,多进一出

    ​ 类似于:count/max/min

    UDTF(User-Defined Table-Generating Functions)

    ​ 一进多出

    ​ 如lateral view explore()

    编程步骤:

    继承org.apache.hadoop.hive.ql.UDF需要实现evaluate函数;evaluate函数支持重载在hive的命令行窗口创建函数 添加jar创建function 注意:UDF必须要有返回类型,可以返回null,但是返回类型不能为void。

    自定义UDF实例:

    创建maven工程hive:

    导入依赖

    <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec --> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>1.2.1</version> </dependency> </dependencies>

    编写UDF类:

    import org.apache.hadoop.hive.ql.exec.UDF; /** * 继承hive包提供的UDF类,实现一个evaluate方法。 * 注意evaluate方法的返回值不能为void */ public class MyUDF extends UDF { /** * 随便写点小功能 */ public String evaluate(final String s){ if (s == null){ return s; } return s.toLowerCase(); } }

    打成jar包,目标jar包在maven工程的target文件夹里可以看到。

    将jar包上传到linux中:

    [kgg@hadoop202 software]$ ll hive-1.0-SNAPSHOT.jar -rw-rw-r--. 1 kgg kgg 1927 10ÔÂ 3 11:31 hive-1.0-SNAPSHOT.jar

    hive中添加jar包和classpath:

    hive (mydb)> add jar /opt/software/hive-1.0-SNAPSHOT.jar; Added [/opt/software/hive-1.0-SNAPSHOT.jar] to class path Added resources: [/opt/software/hive-1.0-SNAPSHOT.jar]

    创建临时函数与开发好的java class关联:

    hive (mydb)> create temporary function myudf as "udf.MyUDF"; OK Time taken: 0.03 seconds

    使用通过udf构建的函数:

    hive (mydb)> select myudf('ADFASFSADF'); OK _c0 adfasfsadf Time taken: 1.628 seconds, Fetched: 1 row(s)

    成功。

    Processed: 0.015, SQL: 8