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, encryptValue.toUpperCase());
if(index > 0){
switch (index){
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 'com.xxx.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")

hive中function函数查询的更多相关文章

  1. Hive中日期函数总结

    --Hive中日期函数总结: --1.时间戳函数 --日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数 select unix_timestamp(); --获得当前时区 ...

  2. hive中标准偏差函数stddev()详细讲解

    1.标准偏差概念 标准偏差(Std Dev,Standard Deviation) -统计学名词.一种度量数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度.标准偏差越小,这些值偏离平均值就 ...

  3. Hive中自定义函数

    Hive的自定义的函数的步骤: 1°.自定义UDF extends org.apache.hadoop.hive.ql.exec.UDF 2°.需要实现evaluate函数,evaluate函数支持重 ...

  4. 2019-2-14SQLserver中function函数和存储过程、触发器、CURSOR

    Sqlserver 自定义函数 Function使用介绍 前言:         在SQL server中不仅可以可以使用系统自带的函数(时间函数.聚合函数.字符串函数等等),还可以根据需要自定义函数 ...

  5. hive中的子查询改join操作(转)

    这些子查询在oracle和mysql等数据库中都能执行,但是在hive中却不支持,但是我们可以把这些查询语句改为join操作: -- 1.子查询 select * from A a where a.u ...

  6. VC中function函数解析

    C++标准库是日常应用中非常重要的库,我们会用到C++标准库的很多组件,C++标准库的作用,不单单是一种可以很方便使用的组件,也是我们学习很多实现技巧的重要宝库.我一直对C++很多组件的实现拥有比较强 ...

  7. JavaScript中Function函数与Object对象的关系

    函数对象和其他内部对象的关系 除了函数对象,还有很多内部对象,比如:Object.Array.Date.RegExp.Math.Error.这些名称实际上表示一个 类型,可以通过new操作符返回一个对 ...

  8. js中function函数

    function:是具备某个功能的方法,方法本身没有意义,只有执行方法才有价值. function: 1 创建一个函数: 2 执行这个方法: 例: 创建 function 方法名(){ 存放某个功能的 ...

  9. Python中function(函数)和methon(方法)的区别

    在Python中,对这两个东西有明确的规定: 函数function —— A series of statements which returns some value to a caller. It ...

随机推荐

  1. 基于TCP通过socketserver简单实现并发效果

    一.首先介绍一下 socketserver 模块中的类: 类 描述 BaseServer 包含服务器的核心功能与混合(mix-in)类的钩子功能.这个类用于派生,不要直接生成这个类的类对象 TCPSe ...

  2. 外部服务发现-ingress

    Ingress`其实就是从 kuberenets 集群外部访问集群的一个入口,将外部的请求转发到集群内不同的 Service 上,其实就相当于 nginx.haproxy 等负载均衡代理服务器,Ing ...

  3. Linux命令——od

    参考:Linux OD Command Tutorial for Beginners (6 Examples) 简介 查看普通文本文件,可以使用cat.head.tail.tac.less.more等 ...

  4. 管理员权限运行-C#程序

    C#程序以管理员权限运行 在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也 ...

  5. Jquery无须浏览实现直接下载文件

    一.常用方式: 1.通常GET方式 后面带明文参数,不安全. window.location.href = 'http://localhost:1188/FileDownload.aspx?token ...

  6. centos7部署inotify与rsync实现实时数据同步

    实验环境:CentOS Linux release 7.6.1810 node1:192.168.216.130 客户端(向服务端发起数据同步) node2:192.168.216.132 服务端(接 ...

  7. HBase数据结构

    1 RowKey 与nosql数据库们一样,RowKey是用来检索记录的主键.访问HBASE table中的行,只有三种方式: 1.通过单个RowKey访问 2.通过RowKey的range(正则) ...

  8. C++定义和初始化数组以及memset的使用(转)

    一.一维数组 静态 int array[100]; 定义了数组array,并未对数组进行初始化 静态 int array[100] = {1,2}: 定义并初始化了数组array 动态 int* ar ...

  9. 洛谷 P3605 [USACO17JAN]Promotion Counting晋升者计数

    题目描述 The cows have once again tried to form a startup company, failing to remember from past experie ...

  10. AtCoder Beginner Contest 126 解题报告

    突然6道题.有点慌.比赛写了五个.罚时爆炸.最后一个时间不太够+没敢写就放弃了. 两道题奇奇怪怪的WJ和20/20.今天的评测机是怎么了. A Changing a Character #includ ...