【Hive五】Hive函數UDF


Hive函數

系統自帶的函數

查看系統自帶的函數

  • 查看系統自帶的函數
    show functions;

  • 顯示自帶的函數的用法
    desc function upper;

  • 詳細顯示自帶的函數的用法
    desc function extended upper;

自定義函數描述

描述

當Hive提供的內置函數無法滿足你的業務處理需要時,此時就可以考慮使用用戶自定義函數(UDF:user-defined function),詳情請查看:官網

根據用戶自定義函數類別分為以下三種

  • UDF(User-Defined-Function)
    一進一出

  • UDAF(User-Defined Aggregation Function)

    聚集函數,多進一出
    類似於:count/max/min

  • UDTF(User-Defined Table-Generating Functions)

    一進多出
    如lateral view explore()

自定義開發步驟(UDF)

  • 繼承org.apache.hadoop.hive.ql.UDF

  • 需要實現evaluate函數;evaluate函數支持重載

  • 在hive的命令行窗口創建函數

    1. 添加jar
      add jar linux_jar_path

    2. 創建function
      create [temporary] function [dbname] function_name AS class_name

  • 在hive命令窗口刪除函數

    1. Drop [temporary] function [if exists] [dbname.] function_name;
  • 注意事項

    1. UDF必須要有返回類型,可以返回null,但是返回類型不能為void

    2. UDF中常用Text/LongWritable等類型,不推薦使用java類型

開發案例(UDF)

  • 創建一個java工程,並創建一個lib文件夾

  • 將hive的jar包解壓后,將apache-hive-1.2.1-bin\lib文件下的jar包都拷貝到java工程中

  • 創建一個類

    package com.demo.hive;
    
    import org.apache.hadoop.hive.ql.exec.UDF;
    
    public class Lower extends UDF {
    
        public String convert(final String s) {
            
            if (s == null) {
                return null;
            }
            
            return s.toString().toLowerCase();
        }
    }
    
  • 打成jar包上傳到服務器/opt/module/jars/udf.jar

  • 將jar包添加到hive的classpath
    hive (default)> add jar /opt/module/jars/udf.jar;

  • 創建臨時函數與開發好的java class關聯

    hive (default)> create temporary function my_lower as "com.demo.udf.Lower";

  • 即可在hql中使用自定義的函數strip

    select ename, my_lower(ename) lowername from emp;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM