首先创建工程编写UDF 代码,示例如下:

1、 新建Maven项目 udf

本机Hadoop版本为2.7.7, Hive版本为1.2.2,所以选择对应版本的jar ,其它版本也不影响编译。

2、 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.hive</groupId>
<artifactId>udf</artifactId>
<version>1.0.0</version> <dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.7</version>
</dependency> <dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.2</version>
</dependency> </dependencies> <build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

3、 DateFormatConvert.java

package com.hive.udf;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text; /**
* Hive 日期格式转换函数
*
* @author Logan
* @createDate 2019-04-30
* @version 1.0.0
*
*/
public class DateFormatConvert extends UDF { /**
* 日期格式转换函数
*
* @param text 输入日期文本
* @param srcFormat 源格式
* @param destFormat 目标格式
* @return
* @throws ParseException
*/
public Text evaluate(Text text, Text srcFormat, Text destFormat) throws ParseException {
if (null == text || null == srcFormat || null == destFormat) {
return text;
} SimpleDateFormat srcDateFormat = new SimpleDateFormat(srcFormat.toString());
SimpleDateFormat destDateFormat = new SimpleDateFormat(destFormat.toString()); Date date = srcDateFormat.parse(text.toString());
String destDateString = destDateFormat.format(date); return new Text(destDateString);
} }

4、 打包上传到 /root/files/udf.jar

5、添加 用户自定义函数

add jar /root/files/udf.jar;
create temporary function udf_date_format_convert as 'com.hive.udf.DateFormatConvert';

6、 使用

select udf_date_format_convert(log_time, 'yyyyMMddHHmmss', 'yyyy-MM-dd HH:mm:ss') from tb_logs;

表 tb_logs 数据如下:

log_time
20190529072650
20190529072730
20190529072812

使用UDF 函数输出结果如下:

2019-05-29 07:26:50
2019-05-29 07:27:30
2019-05-29 07:28:12

Hive UDF 用户自定义函数 编程及使用

.

Hive UDF 用户自定义函数 编程及使用的更多相关文章

  1. 15第十五章UDF用户自定义函数(转载)

    15第十五章UDF用户自定义函数 待补上 原文链接 本文由豆约翰博客备份专家远程一键发布

  2. Hive的UDF(用户自定义函数)开发

    当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function). 测试各种内置函数的快捷方法: 创建一个 dual 表 ...

  3. SQL Server UDF用户自定义函数

    UDF的定义 和存储过程很相似,用户自定义函数也是一组有序的T-SQL语句,UDF被预先优化和编译并且尅作为一个单元爱进行调用.UDF和存储过程的主要区别在于返回结果的方式. 使用UDF时可传入参数, ...

  4. Pig UDF 用户自定义函数

    注册UDF do.pig的内容如下: register /xx/yy.jar data = load 'data'; result = foreach data generate aa.bb.Uppe ...

  5. Hive中的用户自定义函数UDF

    Hive中的自定义函数允许用户扩展HiveQL,是一个非常强大的功能.Hive中具有多种类型的用户自定义函数.show functions命令可以列举出当前Hive会话中的所加载进来的函数,包括内置的 ...

  6. Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)

    本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...

  7. Hive中的用户自定义函数

    1.1 关于自定义函数 1)Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展. 2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考 ...

  8. 详解Spark sql用户自定义函数:UDF与UDAF

    UDAF = USER DEFINED AGGREGATION FUNCTION Spark sql提供了丰富的内置函数供猿友们使用,辣为何还要用户自定义函数呢?实际的业务场景可能很复杂,内置函数ho ...

  9. 三 Hive 数据处理 自定义函数UDF和Transform

    三  Hive 自定义函数UDF和Transform 开篇提示: 快速链接beeline的方式: ./beeline -u jdbc:hive2://hadoop1:10000 -n hadoop 1 ...

随机推荐

  1. mysqldump 命令使用

    常见选项:--all-databases, -A: 备份所有数据库--databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump把第一个名字参数作为数据库名,后面的作为表名. ...

  2. 问题1-xshell远程连接不上linux主机

    在其他主机上搭建linux系统,我们一般通过xshell工具去远程访问该主机,这样不仅可以方便我们的对系统或者集群进行管理也方便了我们的操作,但是在搭建好环境的时候遇到如下问题: 解决方案:1.关闭目 ...

  3. 【Ubuntu】设置静态ip地址

    一.Ubuntu16.04设置静态IP1.获取网卡的名字   ip route show 2.获取网卡的名字 vim /etc/network/interfaces auto ens33 iface ...

  4. c#做的查找文件夹内内容的小工具

    第一次写博客有点激动啊QAQ 来新单位,一直没活干,公司代码控制器太多,其中有很多文件夹,每次找一个控制器都老找不到,我又不愿意用VS的全局搜索,想着没事就做了个查找控制器的小工具.代码如下: 先添加 ...

  5. MarkDown 语言简单使用

    # Markdown file ![alt img is error](http://cdn2.jianshu.io/assets/web/logo-58fd04f6f0de908401aa561cd ...

  6. Redis的Lists数据类型

    Lists 就是链表,相信略有数据结构知识的人都应该能理解其结构.使用Lists结构,我们可以轻松地实现最新消息排行等功能.Lists的另一个应用就是消息队列,可以利用Lists的PUSH操作,将任务 ...

  7. 对SNMP4J的一些封装

    SNMP4J是一个开源的,用Java实现的snmp协议.其中提供了一下API,在这些API上面封装了一些方法,比如SNMP的get-request请求,get-next-request请求等 如果不了 ...

  8. JavaSE环境Shiro的搭建及常用API

    通过shiroAPI来进行角色的管理 模拟用户是否登录: 模拟用户是否具有相应的权限:

  9. mysql五补充:SQL逻辑查询语句执行顺序(待完善)

    一.SELECT语句关键字的定义顺序(语法顺序) SELECT DISTINCT <select_list> FROM <left_table> <join_type&g ...

  10. POJ1659 Frogs' Neighborhood(Havel–Hakimi定理)

    题意 题目链接 \(T\)组数据,给出\(n\)个点的度数,问是否可以构造出一个简单图 Sol Havel–Hakimi定理: 给定一串有限多个非负整数组成的序列,是否存在一个简单图使得其度数列恰为这 ...