自定义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. 导入依赖
  
      
          org.apache.hive
          hive-exec
          1.2.1
      
      
          junit
          junit
          4.8.2
          test
      
      
          org.apache.logging.log4j
          log4j-core
          2.8.2
      
      
        
            org.projectlombok
            lombok
            1.16.18
        
  
  
        
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.17
            
        
    

// 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;

你可能感兴趣的:(自定义Hive函数)