UDF函数开发流程

1。首先编写UDF    继承: org.apache.hadoop.hive.ql.exec.UDF; 

    需要导入hive-exec-0.13.1-cdh5.3.6.jar 包及hadoop-common-2.5.0-cdh5.3.6.jar
   eg:package com.paic.nets.pnc.udf;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

import org.apache.hadoop.hive.ql.exec.UDF;
/*
 * luxianfeng 
 * 20190612
 * function: 获得一个32位的随机字符串 切随着时间的先后,先获得的字符串比后获得的小
 * application:1.随机生成主键使用 2.人识别 获得list_no使用,利用先生成的字符串小进行出重确定list_no 
 *               确保唯一的人标识
 * */
public class UDFgetuuid extends UDF{
            public static void main(String agrs []){
                UDFgetuuid uuid=new UDFgetuuid();
                System.out.print(uuid.evaluate());
            }
    public String evaluate(){
        
        SimpleDateFormat dateformat=new SimpleDateFormat("yyyyMMddHHmmss");
        UUID uuid=UUID.randomUUID();
        //System.out.println(uuid);
        String uuStr=uuid.toString();
        String dateStr=to62(Long.parseLong(dateformat.format(new Date())),8);
        //System.out.println(dateStr);
        String uuStr1=to62(Long.parseLong(uuStr.substring(0,8),16),6);
        //System.out.println(uuStr1);
        String uuStr2=to62(Long.parseLong(uuStr.substring(9,13),16),3);
        String uuStr3=to62(Long.parseLong(uuStr.substring(14,18),16),3);
        String uuStr4=to62(Long.parseLong(uuStr.substring(19,23),16),3);
        String uuStr5=to62(Long.parseLong(uuStr.substring(24,36),16),9);
        return dateStr+uuStr1+uuStr2+uuStr3+uuStr4+uuStr5;
    }
    private String to62(long num,int length){
        String bit="0123456789ABCDEFGHIJKLMONPARSTUVWXYZabcdefghijklmonparstuvwxyz";
        int decimal=bit.length();
        String reString="";
        while(num>0){
            reString = bit.substring((int)(num%decimal),(int)(num%decimal+1))+reString;
            num=num/decimal;
        }
        if(reString.length()>=0){
            reString=lpad(reString,length,"0");
        }
        return reString;
    }
    public String lpad(String s,int n,String replace){
        while(s.length()             s=replace+s;
        }
        return s;
    }
}
2. 打包  UDFgetuuid.jar 
3.hive中导入jar包 : add jar /appcom/apps/hduser0401/pnc-dp-common/UDFgetuuid.jar       有本地、hdfs两种路径
4.创建临时函数: create temporary function getid as 'com.paic.nets.pnc.udf.UDFgetuuid';
5.使用:select getid() from default.dual;    
 

你可能感兴趣的:(hive)