zoukankan      html  css  js  c++  java
  • 自定义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;
    
  • 相关阅读:
    js动态添加select菜单 联动菜单
    用户控件的缓存技术之一【共三篇】
    删除根节点下的所有子节点
    兼容FF和IE的tooltip 鼠标提示框
    【ABAP系列】SAP ABAP常用正则表达式大全
    【ABAP系列】SAP ABAP中关于commit的一点解释
    【SD系列】SAP SD模块-创建供应商主数据BAPI
    【SQL系列】从SQL语言的分类谈COMMIT和ROLLBACK的用法
    【ABAP系列】SAP ABAP控制单元格是否可编辑
    【ABAP系列】SAP ABAP 关于BAPI的EXTENSIONIN 一点解释
  • 原文地址:https://www.cnblogs.com/linkworld/p/11060589.html
Copyright © 2011-2022 走看看