zoukankan      html  css  js  c++  java
  • Hive内置函数和自定义函数的使用

    一、内置函数的使用

    • 查看当前hive版本支持的所有内置函数 show function;

    • 查看某个函数的使用方法及作用,比如查看upper函数 desc function upper;

    • 查看upper函数更为详细的信息 desc function extended upper;

    • 转换为小写: lower() 查询emp表中员工姓名,员工姓名小写显示 select empno, ename, lower(ename) from emp;

    • 字符串连接: concat() 查询emp表,将员工姓名追加到员工编号后 select empno, ename, concat(empno, ename) from emp;



    二、自定义函数

    UDF分为三种,分别如下

    1. UDF(User-Defined_Function),一进一出(输入一行,输出一行),比如: upper(),lower()等
    2. UDAF(User-Defined Aggregation Funcation),多进一出(输入多行,输出一行),比如: avg(),sum()等.
    3. UDTF(User-Defined Table-Generating Functions),一进多出(输入一行,输出多行),比如: collect_set(), collect_list()等.ABSOLUTE

    使用自定义函数需要引入hive-exec的依赖

    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-exec</artifactId>
        <version>2.3.0</version>
    </dependency>
    
    自定义UDF函数

    UDF编程模型: (1) 继承 org.apache.hadoop.hive.ql.exec.UDF (2) 实现 evaluate() 方法

    实现需求: 自定义UDF函数,给指定的字符串前加上字符串hello 比如: 输入 Tom, 输出 helle:Tom

    自定义函数有4种使用方式,the following:

    • 方式一(临时函数,只能在当前客户端使用) 将我们刚编写完成的代码,打成jar maven下 clean package

      将jar包上传到hive add jar /home/hadoop/libs.hive-1.0-SNAPSHOT.jar;

      创建函数 create temporary function say_hello as 'com.bigdata.hadoop.hive.GenericUDFHello';

      查看创建的函数say_hello show functions;

      查看函数say_hello的详细信息 desc function extended say_hello;

      使用函数 select ename,say_hello(ename) from emp;

    • 方式二(临时函数,只能在当前客户端使用) 在$HIVE_HOME下新建目录auxlib,将jar拷贝到该目录下,重启hadoop cp /home/hadoop/libs/hive-1.0-SNAPSHOT.jar

      创建函数say_hello2 create temporary function say_hello2 as 'com.bigdata.hadoop.hive.GenericUDFHello';

      函数的查看与使用同方式一

    • 方式三(永久函数,创建后可以在任意客户端使用,建议使用) 上传jar到hdfs hadoop fs -put hive-1.0-SNAPSHOT.jar /libs

      创建函数say_hello3 create function say_hello3 as 'com.bigdata.hadoop.hive.GenericUDFHello' using jar 'hdfs://hdpcomprs:9000/libs/hive-1.0-SNAPSHOT.jar';

      注意: 创建完function之后,通过show functions并没有看到我们自定义的函数say_hello3,但是可以使用 使用函数,效果同上

    • 方法四(永久函数,将自定义函数集成到hive源码中) 使用这种方式需要修改hive的源代码,集成到hive源码后,hive启动后就可以使用,不用再向hive中注册函数,相当于一个hive的内置函数。如果公司有自己的大数据框架版本,建议使用这种方式。

  • 相关阅读:
    Java守护线程Daemon
    在for循环中创建双向链表
    Java泛型-官方教程
    大自然搬运工
    转 curl命令
    HashMap扩容问题及了解散列均分
    mysql 分组查询并取出各个分组中时间最新的数据
    CNN 模型复杂度分析
    Attention机制
    深度学习之目标检测
  • 原文地址:https://www.cnblogs.com/suixingc/p/hive-nei-zhi-han-shu-he-zi-ding-yi-han-shu-de-shi-.html
Copyright © 2011-2022 走看看