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. 在CentOS 7上修改主机名的方法

    这次我们来讲解一下如何在CentOS 7环境上修改主机名 1.从VMware上登录CentOS 7的虚拟机,并以root用户登录. 2.查看未修改前的主机名 1>.我们可以通过文件hostnam ...

  2. Python-tkinter开发学习 笔记

    目录 课时一 kinter 介绍 查询官方帮助:help(tkinter) 概念介绍 最简单的界面 实现简单的模块 组件的摆放方式 pack()方式例子 gird() 方式例子 place方式例子 课 ...

  3. C++中string的实现原理

    C++中string的实现原理 背景 当我刚开始学习C++,对C还是有一部分的了解,所以以C的思维去学C++,导致我很长一段时间的学习都处于一个懵逼的状态,C++的各种特性,标准库,模板还有版本的迭代 ...

  4. thymeleaf模板、thymeleaf语法相关中文文档教程

    thymeleaf模板在SpringBoot中是默认的模范引擎技术,SpringBoot不推荐使用比较老旧的jsp.但如果您想使用jsp的话,当然也可以.我这里为您讲述thymeleaf模板的基本th ...

  5. mysqdump+binlog恢复数据

    备份全库 [root@db01 b]# mysqldump -uroot -poldboy123 -A > /b/full.sql Warning: Using a password on th ...

  6. Python +appium 封装desired_caps模块

    使用python+appium做android的自动化测试时,首先需要启动appium服务,然后连接上手机,配置如下: desired_caps = {"platformName" ...

  7. JAVA设计模式之工厂模式—Factory Pattern

    1.工厂模式简介 工厂模式用于对象的创建,使得客户从具体的产品对象中被解耦. 2.工厂模式分类 这里以制造coffee的例子开始工厂模式设计之旅. 我们知道coffee只是一种泛举,在点购咖啡时需要指 ...

  8. maven mvn跳过生成javadoc 打包报错

    遇到javadoc用maven打包报错的问题,起初没发现javadoc,后发现并在pom看到了javadoc的配置. [ERROR] Failed to execute goal org.apache ...

  9. IPS检测

    华为IPS语法: https://isecurity.huawei.com/sec/web/ipsmanual.do IPS漏洞查询(例如搜索反弹shell): https://isecurity.h ...

  10. Browsersync 省时浏览器同步测试工具,浏览器自动刷新,多终端同步

    官网地址 http://www.browsersync.cn/ 1.安装 BrowserSync npm install -g browser-sync 2.启动 BrowserSync // --f ...