在该类中加入 evaluate 方法
"evaluate" should never be a void method. However it can return "null" if * needed.
public class UDFLastDay extends UDF{ private final SimpleDateFormat inputFormatter = new SimpleDateFormat("yyyy-MM-dd"); private final SimpleDateFormat outFormatter = new SimpleDateFormat("yyyy-MM-dd"); private final Calendar calendar = Calendar.getInstance(); Text result = new Text(); // 2015-03-01 ==> 2015-03-31 public Text evaluate(Text input) { if(null == input || StringUtils.isBlank(input.toString())) { return null; } try { calendar.setTime(inputFormatter.parse(input.toString())); int lastDate = calendar.getActualMaximum(Calendar.DATE); //获得到月份最大的天数 calendar.set(Calendar.DATE, lastDate); result.set(outFormatter.format(calendar.getTime())); return result; } catch (ParseException e) { e.printStackTrace(); return null; } } }
- 打包放到 linux 某个目录下 例如: /home/hadoop/software/lib/udf.jar
- 如何将UDF加入到hive中使用?
方式一:(当前session有效)
add jar /home/hadoop/software/lib/udf.jar ;
create temporary function getLastDay as 'com.cloudyhadoop.bigdata.udf.UDFLastDay';
show functions;
select empno, ename, hiredate, getLastDay(hiredate) last_day from emp;
方式二:(全局有效)
hive-site.xml中添加如下配置信息:
<property>
<name>hive.aux.jars.path</name>
<value>file:///home/hadoop/software/lib/udf.jar</value>
</property>
启动hive之后,就不需要再:add jar /home/hadoop/software/lib/udf.jar ;
create temporary function getLastDay as 'com.cloudyhadoop.bigdata.udf.UDFLastDay';
temporary: current session, 退出或者重启之后函数丢失
如何做到全局有效?
1、https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Create/DropFunction
CREATE FUNCTION [db_name.]function_name AS class_name
[USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];
2、修改源代码
https://github.com/cloudera/hive/blob/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
registerUDF("getLastDay", UDFLastDay.class, false);
重新编译、部署
相关推荐
综上所述,Hive UDF的开发和使用涉及到Java编程、Hive和Hadoop的库依赖管理、函数注册以及在实际查询中的应用。了解和掌握这些知识点,能够帮助开发者更好地利用Hive UDF解决复杂的数据处理问题。
UDF的引入极大地扩展了HiveQL的功能,使得用户可以利用编程语言(通常是Java)来实现特定的数据处理逻辑。 在Hive UDF的使用说明书中,包含了关于Hive的内置操作符、内置函数、聚合函数、表生成函数、以及自定义UDF...
在大数据处理领域,Hive是一个非常重要的组件,它提供了一个基于Hadoop的数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并...无论是初学者还是经验丰富的开发人员,都能从中受益,增强自己的Hive编程能力。
ADD JAR /path/to/your/hiveUDF.jar; CREATE TEMPORARY FUNCTION mask AS 'com.yourpackage.MaskingUDF'; ``` 4. **使用UDF**: 注册完成后,你可以在查询中直接使用`mask`函数。假设我们有一个包含手机号码的表`...
4. **视图与UDF**: 视图简化了复杂查询,而用户自定义函数(UDF)允许用户扩展Hive的功能。 5. **Hive与Hadoop的交互**: 了解如何在Hadoop集群上部署和配置Hive,以及如何通过HDFS交互数据。 **Hive从入门到精通** ...
1. **Hive UDF 开发**:了解如何创建自定义的 Hive 函数,包括编写 Java 类,实现特定的接口(如 `HiveUDF`, `HiveUDAF`, 或 `HiveUDAFFinalizer`),以及使用 Hive 提供的注解(如 `@Description` 和 `@...
《Pig-Hive编程指南》 在大数据处理领域,Pig和Hive是Apache Hadoop生态系统中的重要组件,主要用于大规模数据处理和分析。这两者都提供了高级的数据抽象和查询语言,使得非Java背景的开发者也能方便地进行...
大数据开发核心技术 - 大数据仓库Hive精讲 第1课 初识入门 第2课 深入使用 第3课 高级进阶————————————————课程大纲1、Hive表的创建2、Hive数据类型3、Hive数据迁移4、Hive常见查询5、HiveUDF编程
5. **Hive进阶功能**:包括分区、桶、视图、联接、子查询、UDF(用户自定义函数)、UDAF(用户自定义聚合函数)和UDTF(用户自定义表生成函数)等高级特性。 6. **Hive性能优化**:如何通过优化HQL、选择合适的存储...
- **可扩展性**:Hive支持自定义函数,如用户定义函数(UDF)、用户定义聚合函数(UDAF)和用户定义表生成函数(UDTF),这些函数允许用户在MapReduce作业中执行特定的计算任务。 - **存储格式灵活性**:Hive支持多种存储...
**Hive编程指南(书签版)概述** Hive是Apache软件基金会开发的一个大数据处理工具,主要用于处理和分析存储在Hadoop分布式文件系统(HDFS)中的大规模数据集。Hive提供了一个基于SQL的查询语言(HQL),使得非专业...
9. **UDF(用户自定义函数)**: Hive允许用户编写自己的函数,扩展其功能,满足特定的数据处理需求。 10. **优化器**: Hive包含一个查询优化器,它负责转化HiveQL查询到MapReduce作业,通过成本基础优化选择最佳...
除了基本功能,Hive还支持UDF(用户自定义函数)、UDAF(用户自定义聚合函数)和UDTF(用户自定义表生成函数),允许用户扩展HQL的功能。此外,Hive on Tez或Hive on Spark等执行引擎的引入,进一步提高了查询性能。...
6. **存储过程(UDF, UDAF, UDTF)**:Hive支持用户自定义函数,包括单行函数(UDF)、多行聚合函数(UDAF)和多行返回函数(UDTF),扩展Hive的功能。 7. **MapReduce**:Hive查询的执行引擎默认是基于MapReduce的,它将...
《设计开发 Hive 编程指南 完整版》是一份详尽的教程,旨在帮助开发者深入理解和高效使用 Apache Hive 进行大数据处理。Hive 是一个基于 Hadoop 的数据仓库工具,可将结构化的数据文件映射为一张数据库表,并提供 ...
- **选择编程语言**:Java是最常见的选择,因为Hive本身是用Java编写的,但也可以使用其他JVM语言,如Scala。 - **实现接口**:为特定的UDF类型实现相应的Hive接口,例如`org.apache.hadoop.hive.ql.exec.UDF` ...