hive中function函数查询
1. desc function [函数名]
desc function xpath;
查询⽤法:
2. desc function extended [函数名]
desc function extended xpath;
查询使⽤举例:
3. ⾃定义函数添加说明:
使⽤@Description注解
name: 指定函数名
value: 函数说明
extended:函数的例⼦
/**
* 解密udf
*/
@Description(
name="decrypt_all",
value=" decrypt_all(decryptType, args ... ) - Returns default value if value is null else returns value",
extended = "Example:\n> "
+ " decrypt_all('AES', '123456','password')  --password长度16位 \n "
+ " decrypt_all('AES16', '123456','password') --password长度16位 \n "
+ " decrypt_all('DES', '123456','key') --key长度16位 \n "
+ " decrypt_all('3DES', '123456','key')  \n "
+ "\n"
)
public class DecryptAll extends GenericUDF {
private static final String[] decryptType = {"AES","AES16","DES","3DES"};
//这个⽅法只调⽤⼀次,并且在evaluate()⽅法之前调⽤。该⽅法接受的参数是⼀个ObjectInspectors数组。该⽅法检查接受正确的参数类型和参数个数。    @Override
public ObjectInspector initialize(ObjectInspector[] args) throws UDFArgumentException {
if(args.length < 2){
throw new UDFArgumentLengthException(" args length must be greater than or equal to 2");
}
String encryptValue = args[0].toString();
if(!Arrays.asList(decryptType).contains(encryptValue)){
throw new UDFArgumentLengthException("decrypt type error, only support 'AES','AES16','DES','3DES'");
}
return null;
}
//这个⽅法类似UDF的evaluate()⽅法。它处理真实的参数,并返回最终结果。
@Override
public Object evaluate(DeferredObject[] args) throws HiveException {
int length = args.length;
String encryptValue = args[0].get().toString();
String arg1 = args[1].get().toString();
String arg2 = length > 2 ? args[2].get().toString() : null;
int index = Arrays.binarySearch(decryptType, UpperCase());
if(index > 0){
switch (index){
hive 字符串转数组
case 0: //aes
return  SecurityUtil.aesDecrypt(arg1,arg2);
case 1: //aes16
return SecurityUtil.aesDecryptKey16(arg1,arg2);
case 2: //des
return SecurityUtil.desDecrypt(arg1,arg2);
case 3: //3des
return SecurityUtil.threeDesDecrypt(arg1,arg2);
}
}
return null;
}
//这个⽅法⽤于当实现的GenericUDF出错的时候,打印出提⽰信息。⽽提⽰信息就是你实现该⽅法最后返回的字符串。    @Override
public String getDisplayString(String[] strings) {
return null;
}
}
4. 添加udf三部曲
编写java程序,并打包jar
添加jar⽂件:
# 直接放本地, 需要每个节点都布置⼀套
add jar /opt/local/hive/udf/encryptAll-1.0.jar;
# 最好将⽂件放到hdfs上,只需要⼀次性部署
add jar hdfs://nameservice1/udf/encryptAll-1.0.jar;
创建函数:
create temporary function encrypt_all as 'udf.EncryptAll';
5. udf中如何使⽤hdfs上的⽂件
下⾯偶然看到别⼈写的,未测试
hive -e "
add jar ../../jar/bigdata_mxhz.jar ../../jar/BigDataUdf-1.1.jar;
set mapred.cache.files=/data/index/tv_model.csv#tv_model.csv;
"
在udf中可以直接读取该⽂件new FileReader("tv_model.csv")
6. 创建永久函数
create pt_name BankUDF'using jar 'hdfs://ns1/user/king/encryptAll.jar';
drop pt_name;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。