自定义Hive函数

7. 函数

7.1 系统内置函数
  • 查看系统自带的函数:show functions;
  • 显示自带的函数的用法:desc function upper(函数名);
  • 详细显示自带的函数的用法:desc function extended upper;
7.2 自定义函数
  • 根据用户自定义函数类别,分为以下三种:
    • UDF(User Defined Function):
      • 一进一出;
    • UDAF(User Defined Aggregation Function):
      • 聚合函数(多进一出),类似于:max/min等;
    • UDTF(User Defined Table Generating Function):
      • 一进多出,类似于:lateral view explore()
  • 自定义 UDF 的编程步骤:
    • 继承 org.apache.hadoop.hive.ql.UDF;
    • 需要实现 evaluate 函数; evaluate 函数支持重载;
    • 在 HIVE 的命令行窗口创建函数:
      • 添加 jar:add jar linux_jar_path;
      • 创建 function: create [temporary] function [dbname.]function_name AS class_name;
    • 在 HIVE 的命令行窗口删除函数:
      • Drop [temporary] function [if exists] [dbname.] function_name;
  • 注意事项:UDF必须要有返回类型,可以返回 NULL,但是返回类型不能为 void;
7.3 自定义 UDF 函数
// 1. 创建一个 Maven 工程 Hive
// 2. 导入依赖
  <dependencies>
      <dependency>
          <groupId>org.apache.hive</groupId>
          <artifactId>hive-exec</artifactId>
          <version>1.2.1</version>
      </dependency>
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.8.2</version>
          <scope>test</scope>
      </dependency>
      <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-core</artifactId>
          <version>2.8.2</version>
      </dependency>
      <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
        </dependency>
  </dependencies>
  <build>
        <plugins>
        <!--java 的编译版本 1.8-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.17</version>
            </plugin>
        </plugins>
    </build>

// 3. 创建一个类
import org.apache.hadoop.hive.ql.exec.UDF;

public class HiveUdf extends UDF {
    
    public String evaluate(final String s) {
        if (s == null) {
            return null;
        }
        return s.toLowerCase();
    }
}

// 4.1 将 jar 包添加到 Hive 的 classpath
进入Hive Shell: bin/hive
添加 jar: add jar jar包所在路径

// 4.2 创建临时函数与自定义的 java class 关联
create temporary function myLowerCase as "com.noodles.hive.HiveUdf";

// 5. 使用自定义函数
select myLowerCase(ename) from emp;

转载于:https://www.cnblogs.com/linkworld/p/11060589.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值