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. 【Docker】iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8480 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name

    启动容器的时候,出现如下错误: Error response / --dport -j DNAT --to-destination ! -i docker0: iptables: No chain/t ...

  2. CentOS环境安装python3,pip

    安装python3(编译安装) 1. 下载python安装包到指定目录 cd /usr/local/src 这里的目录如果不存在可以自己建,当然也可以自己放在自己想放的位置,只要等会儿安装的时候能找到 ...

  3. FreeBSD关机后自动重启的解决办法

    我用的是华硕的笔记本电脑,不知道别的电脑有没有这个情况,按handbook关机指令为shutdown -p now,但是我执行这个指令后电脑却自动重启,用Linux关机指令shutdown -h no ...

  4. 微信小程序~跳页传参

    [1]需求: 点击商品,跳到相应商品详情页面 [2]代码: (1)商品列表页 <view class="goodsList"> <view wx:for=&quo ...

  5. Oracle 对比insert和delete操作产生的undo

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/wangqingxun/article/de ...

  6. Windbg命令的语法规则系列(三)

    五.源文件行语法 可以将源文件行号指定为MASM表达式的全部或部分.这些数字计算出与该源代码行对应的可执行代码的偏移量.不能使用源代码行作为C++表达式的一部分.必须用重音符(`)将源文件和行号表达式 ...

  7. 开源项目 08 IOC Autofac

    using Autofac; using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  8. Python 下载超大文件

    使用python下载超大文件, 直接全部下载, 文件过大, 可能会造成内存不足, 这时候要使用requests 的 stream模式, 主要代码如下 iter_content:一块一块的遍历要下载的内 ...

  9. 29-ESP8266 SDK开发基础入门篇--编写TCP 客户端程序(Lwip RAW模式,非RTOS版,精简入门)

    https://www.cnblogs.com/yangfengwu/p/11456667.html 由于上一节的源码长时间以后会自动断开,所以再做这一版非RTOS版的,咱直接用lua源码里面别人写的 ...

  10. spring boot中控制台打印sql日志

    .properties文件 logging.level.com.example.demo.dao=debug .yml文件 # 打印sql logging: level: com.example.de ...