11 | Hive自定义函数

Hive自定义UDF函数详解 Hive自定义UDF函数详解一、UDF概述二、UDF种类三、如何自定义UDF四、自定义实现UDF和UDTF4.1 需求4.2 项目pom文件4.3 Hive建表测试及数据4.4 UDF函数编写4.5 UDTF函数编写 一、UDF概述 UDF全称:User-Defined Functions,即用户自定义函数,在Hive SQL编译成MapReduce任务时,执行java方法,类似于像MapReduce执行过程中加入一个插件,方便扩展。 二、UDF种类 UDF:操作单个数据行,产生单个数据行; UDAF:操作 阅读详情

8.6 自定义函数

1)Hive自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。

2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。

3)根据用户自定义函数类别分为以下三种:

(1)UDF(User-Defined-Function)

         一进一出。

(2)UDAF(User-Defined Aggregation Function)

       用户自定义聚合函数,多进一出。

         类似于:count/max/min

(3)UDTF(User-Defined Table-Generating Functions)

         用户自定义表生成函数,一进多出。

         如lateral view explode()

4)官方文档地址

https://cwiki.apache.org/confluence/display/Hive/HivePlugins

5)编程步骤

(1)继承Hive提供的类

org.apache.hadoop.hive.ql.udf.generic.GenericUDF

org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;

(2)实现类中的抽象方法

(3)在hive的命令行窗口创建函数

添加jar。

add jar linux_jar_path

创建function。

create [temporary] function [dbname.]function_name AS class_name;

(4)在hive的命令行窗口删除函数

drop [temporary] function [if exists] [dbname.]function_name;

8.7 自定义UDF函数

0)需求

自定义一个UDF实现计算给定基本数据类型的长度,例如:

hive(default)> select my_len("abcd");

4

1)创建一个Maven工程Hive

2)导入依赖

<dependencies>

   <dependency>

   <groupId>org.apache.hive</groupId>

       <artifactId>hive-exec</artifactId>

      <version>3.1.3</version>

   </dependency>

</dependencies>

3)创建一个类

package com.atguigu.hive.udf;

import org.apache.hadoop.hive.ql.exec.UDFArgumentException;

import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;

import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;

import org.apache.hadoop.hive.ql.metadata.HiveException;

import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;

import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;

import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;

/**

 * 我们需计算一个要给定基本数据类型的长度

 */

public class MyUDF extends GenericUDF {

    /**

     * 判断传进来的参数的类型和长度

     * 约定返回的数据类型

     */

    @Override

    public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {

        if (arguments.length !=1) {

            throw  new UDFArgumentLengthException("please give me  only one arg");

        }

        if (!arguments[0].getCategory().equals(ObjectInspector.Category.PRIMITIVE)){

            throw  new UDFArgumentTypeException(1, "i need primitive type arg");

        }

        return PrimitiveObjectInspectorFactory.javaIntObjectInspector;

    }

    /**

     * 解决具体逻辑的

     */

    @Override

    public Object evaluate(DeferredObject[] arguments) throws HiveException {

        Object o = arguments[0].get();

        if(o==null){

            return 0;

        }

        return o.toString().length();

    }

    @Override

    // 用于获取解释的字符串

    public String getDisplayString(String[] children) {

        return "";

    }

}

4)创建临时函数

(1)打成jar包上传到服务器/opt/module/hive/datas/myudf.jar

(2)将jar包添加到hive的classpath,临时生效

hive (default)> add jar /opt/module/hive/datas/myudf.jar;

(3)创建临时函数与开发好的java class关联

hive (default)>

create temporary function my_len

as "com.atguigu.hive.udf.MyUDF";

(4)即可在hql中使用自定义的临时函数

hive (default)>

select

    ename,

    my_len(ename) ename_len

from emp;

         (5)删除临时函数

hive (default)> drop temporary function my_len;

         注意:临时函数只跟会话有关系,跟库没有关系。只要创建临时函数的会话不断,在当前会话下,任意一个库都可以使用,其他会话全都不能使用。

  1. 创建永久函数

(1)创建永久函数

注意:因为add jar本身也是临时生效,所以在创建永久函数的时候,需要制定路径(并且因为元数据的原因,这个路径还得是HDFS上的路径)。

hive (default)>

create function my_len2

as "com.atguigu.hive.udf.MyUDF"

using jar "hdfs://hadoop102:8020/udf/myudf.jar";

(2)即可在hql中使用自定义的永久函数 

hive (default)>

select

    ename,

    my_len2(ename) ename_len

from emp;

(3)删除永久函数 

hive (default)> drop function my_len2;

注意:永久函数跟会话没有关系,创建函数的会话断了以后,其他会话也可以使用。

永久函数创建的时候,在函数名之前需要自己加上库名,如果不指定库名的话,会默认把当前库的库名给加上。

永久函数使用的时候,需要在指定的库里面操作,或者在其他库里面使用的话加上,库名.函数名。

Hive 自定义函数 导读 大家好,我是数据开发者,非常感谢大家最近的关注,你们的关注是我持续输出的动力,让我们共同提高。 大数据平台下的数据仓库搭建过程中存在许多个性化的业务需求,或者说是系统需求,无法在 Hive 提供的内置函数中找到解决办法,为了解决这个问题,我们可以使用 Hive 自定义函数满足这种个性化需求。我们本篇就使用 Hive 中的自定义函数实现几种数仓搭建过程中的需求。 Hive 有哪些自定义函数? Hive 中存在三种类型的函数,分别是 UDF, UDAF, UDTF,这三种类型的 UDF 分别是: UD 阅读详情

相关推荐

Hive添加自定义UDF函数

1 编写UDF类 以简单的处理单个字段的UDF函数为例,开发自定义UDF函数需要继承’org.apache.hadoop.hive.ql.exec.UDF’类. 可以通过Maven添加,pom文件中加入(版本号跟Hive版本一致即可): dependency> groupId>org.apache.hivegroupId> artifactId>hive-execartifact

Liam's Blog (AI & BigData) 1万+

hive 自定义UDF函数

自定义UDF函数 0)需求: 自定义一个UDF实现计算给定基本数据类型的长度,例如: hive(default)> select my_len("abcd"); 4 1)创建一个Maven工程Hive 2)导入依赖 <dependencies> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId>

argue10的博客 802

USB2.0物理层实战:手把手教你用示波器抓取D+/D-信号(附波形分析)

本文是一份针对硬件工程师的USB2.0物理层信号调试实战指南。文章详细讲解了如何使用示波器捕获和分析D+/D-差分信号,从基础设置、核心信号状态解读,到信号完整性分析与常见问题排查,手把手教你定位USB通信故障。内容涵盖USB2.0协议物理层关键概念,并附有基础解码思路,旨在提升工程师的底层调试能力。

s8t9u0v1w的博客 448

hive笔记八:自定义函数-自定义UDF函数/自定义UDTF函数

需求:自定义一个UDF函数实现计算字符串长度(1)创建maven工程(2)导入依赖(3)编写代码/*** 自定义UDF函数需要继承GenericUDF类* 需求:计算指定字符串的长度*//*** @objectInspectors 输入参数类型的鉴别器对象* @return 返回值类型的鉴别器类型对象*///判断输入参数的个数= 1) {!!");}//判断输入参数的类型if (!!!");}//函数本身返回值为int,需要返回int类型的鉴别器对象}

qq_55906442的博客 1166

S32K344 Bootloader实战:一个按键实现从Boot到App的无缝跳转(附完整代码)

本文详细介绍了基于NXP S32K344微控制器的Bootloader开发实战,重点解析如何通过一个硬件按键实现从Boot到App的可靠跳转。内容涵盖内存分区规划、中断向量表重映射、外设初始状态管理等核心要素,并提供了完整的代码示例和调试技巧,适用于汽车电子和工业控制等高可靠性应用场景。

weixin_29192365的博客 307

Gartner《构建可扩展数据产品建设框架》心得

数据产品化:从概念到落地的实践指南 当前企业正从传统数据需求模式转向数据产品化新范式。本文系统阐述了数据产品的核心价值、定义分类和实施框架,指出成功关键是将数据包装为可复用、可扩展的产品。Gartner框架强调产品思维,提出4阶段12步实施路径,涵盖设计、工程、发布和监控全流程。文章特别提醒要避免7大常见误区,如简单重命名报表、忽视元数据治理等,建议采取MVP策略,90天内完成从价值验证到产品落地的闭环。实施中需平衡技术选型与业务需求,建立跨职能团队,并通过AARRR模型持续追踪产品价值。

2501_91410404的博客 1002

Hive中的ObjectInspector设计

ObjectInspector是Hive中一个咋一看比较令人困惑的概念,当初读Hive源代码时,花了很长时间才理解。 当读懂之后,发现ObjectInspector作用相当大,它解耦了数据使用和数据格式,从而提高了代码的复用程度。 简单的说,ObjectInspector接口使得Hive可以不拘泥于一种特定数据格式,使得数据流 1)在输入端和输出端切换不同的输入/输出格式 2)在不同的Operat...

data is everything 660

VL53L0X加盖玻片后精度暴跌?手把手教你完成串扰校准(CrossTalk Calibration)

本文详细解析了VL53L0X激光测距传感器加盖玻片后精度下降的原因,并提供了串扰校准(CrossTalk Calibration)的完整解决方案。通过分步指导和实用代码示例,帮助工程师恢复毫米级测距精度,适用于智能门锁、扫地机器人等应用场景。

weixin_33708432的博客 539

Hive的分区以及各种函数用法

1.分区表的创建 create table emp_partition( EMPNO bigint, ENAME string, JOB string, MGR bigint, HIREDATE string, SAL bigint, COMM bigint, DEPTNO bigint )PARTITIONED BY (dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ; 创建一个以dt为分区列的分区表 2.向表中插入数据 ins

weixin_49539546的博客 4077

AI 小说生成器本地部署完全指南

这篇文章介绍了本地部署AI小说生成器的完整指南,主要面向网文作者、内容创作者和AI爱好者。文章从环境搭建到创作实践,详细讲解了三种主流部署方案:Ollama(推荐新手)、LMStudio(图形界面)和text-generation-webui(高级定制)。内容涵盖硬件需求、系统架构、模型选择、API对接、提示词工程等关键技术环节,并提供了小说创作的特制提示词模板和参数调优建议。文章还讨论了长篇小说管理、多模型协作等进阶技巧,以及版权伦理等法律问题。最后推荐了相关工具资源和社区论坛,帮助读者实现安全、高效、可

珂珂可爱多 2236

ROS2 Nav2 - 模型预测路径积分控制器(MPPI)

这是一个预测控制器(局部轨迹规划器),用于实现模型预测路径积分(MPPI)算法,以跟踪具有自适应避障功能的路径。它包含基于插件的 critic 函数,可影响算法的行为。它由 Aleksei Budyakov 创建,由 Steve Macenski 为 Nav2 进行改编和开发。该插件实现了 nav2_core::Controller(控制器)接口,可在整个导航堆栈中作为控制器服务器的动作服务器(controller_server)中的局部轨迹规划器使用。据测定,该控制器可在中等英特尔处理器(第四代 i5)上

机器人控制与仿真应用 3908

Hive快速入门系列(11) | Hive的自定义函数

  本次博主为大家带来的是Hive的自定义函数。 目录一. 系统内置函数二. 自定义函数三. 自定义UDF函数四. 通过reflect调用java方法 一. 系统内置函数 查看系统自带的函数 hive> show functions;   我们可以看到hive自带的函数就有两百多个,但我们平时经常用到的可能就那么几个,并且自带的函数功能还十分受限!有时候,为了更好的实现业务需求...

不温卜火 6403

00 — Intel xe SVM 内核实现精读系列专栏导读

本文系统介绍了Intel Xe GPU的共享虚拟内存(SVM)实现机制。第一部分通过概念地图阐述SVM的六个核心概念及其关系;第二部分通过三个测试用例解析SVM关键功能:fault生命周期验证、madvise与VRAM迁移、跨GPU一致性;第三部分深入内核实现,包括初始化/销毁流程、Page Fault处理、MMU Notifier失效路径、异步垃圾回收、VRAM迁移机制、madvise实现原理,以及与ROCm SVM的对比。文章建议按功能模块顺序学习,从基本概念到测试用例,再深入内核实现细节,最后对比不同

图形/计算GPU的驱动与虚拟化技术分享园地 1659

11.4 impala自定义永久函数及hive自定义函数在cdh hue中使用

演示转大小写的函数 1.编写类并打包 2.上传到hdfs上 /user/hive/udf/hive_udf-1.0-SNAPSHOT.jar 3.使用impala创建函数并执行 [mini2:21000] default> create function mylower(string) returns string location '/user/hive/udf/hive_...

kk25114的博客 1311

【BUG已解决】pip install 出现 error: Microsoft Visual C++ 14.0 or greater is required 解决方案

方案磁盘占用适用场景推荐指数安装Build Tools3-6GB长期Windows Python开发⭐⭐⭐⭐⭐寻找预编译wheel无额外占用只是想快速装上某个包⭐⭐⭐⭐⭐用conda安装视包而定已经在用conda环境⭐⭐⭐⭐⭐升级到新版本无额外占用库本身有更新的预编译版本⭐⭐⭐⭐使用WSL2需要额外配置Linux子系统频繁遇到Windows编译问题⭐⭐⭐⭐的核心是Windows 缺少本地 C/C++ 编译器,而目标包需要在本机编译。先看是否有捷径。

博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Hive自定义函数 - Java的一个例子

一 需求 对手机号进行脱敏处理,将中间4位数字替换成**** 对数据格式进行判断:11位数字 对于格式正确的数据,将中间4位数字替换成**** 对于格式不正确的数据,将原始数据返回 二 Java实现 1 步骤概览 2 代码实现 2.1 三 Python实现 ...

zhsworld的博客 498

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Hive UDF 实验1

项目中使用的hive版本低于0.11,无法使用hive在0.11中新加的开窗分析函数。 在项目中需要使用到row_number()函数的地方,有人写了udf来实现这个功能。 new java project, BuildPath add hadoop-core..jar and hive-exec…jar。 1 2 3 4 5

henry的专栏 598

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

hive自定义函数-手机号合法性自定义函数

hive自定义函数-手机号合法性函数简要代码结果: 简要 根据百度百科最新手机号码规则,编写的手机号合法判断自定义函数 https://baike.baidu.com/item/%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81/1417271?fr=aladdin 此处仅实现了11位手机号码的实现方式 代码 import com.bigdata.hive.Tools.StringTools; import org.apache.hadoop.hive.ql.exec.Descript

qq_31275419的博客 894

hive同时不包含一些字符串_是否可以在Hive中通过组合后连接字符串字段

I am evaluating Hive and need to do some string field concatenation after group by. I found a function named "concat_ws" but it looks like I have to explicitly list all the values to be concatenated. ...

weixin_39680154的博客 247

hive同时不包含一些字符串,是否可以在Hive中通过组合后连接字符串字段

I am evaluating Hive and need to do some string field concatenation after group by. I found a function named "concat_ws" but it looks like I have to explicitly list all the values to be concatenated. ...

weixin_42298105的博客 190

Hive.分组排序和TOP

转载:https://blog.youkuaiyun.com/mashroomxl/article/details/23864685HQL作为类SQL的查询分析语言,到目前为止,应该也还未能达到其它流行的SQL(如Transact-SQL, MySQL)实现那样完善。而在公司的生产环境中,我想应该也不会紧贴Hive版本更新的步伐,始终部署最新版的Hive;可能会滞后一两个大版本神马的;毕竟,虽然开源工具的透明...

wer0735的博客 1936

hive编写自定义UDF函数

需求:hive表email_status_result中有个邮箱(receiver)字段,查询结果需要脱敏展示,表结构如下 CREATE TABLE email_status_result( receiver STRING, email_status STRING, status_count INT )COMMENT 'email_status aggregation data' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATE.

xjmfc的博客 297

Hive写一个时间转换器的自定义函数(UDF)和创建hive自定义函数的两种方式

在前面一篇文章的日志表中,时间的格式的是这样的"31/Aug/2015:00:04:37 +0800";这样并不友好,为了好看点,我们自定义一个时间格式化的udf函数,hive应该也提供时间转换的函数。 自定义函数 代码 自定义函数还是继承UDF类 package com.madman.hive.function; import java.text.SimpleDateF...

madman 741

hive自定义函数UDF的使用方法

虽然Hive已经提供了很多内置的函数,比如count()、sum(),但是还是不能满足用户的需求,因此提供了自定义函数供用户自己开发函数来满足自己的需求。本实例通过编写自己的UDF,实现通过一个人的出生日期,计算其所属的星座。 一、自定义函数分类 UDF(User-Defined-Function)用户自定义函数,输入一个数据然后产生一个数据; UDAF(User-Defined Aggregat...

Enzo的探索之路 1万+

hive自定义UDF函数

hive自定义UDF函数 1.什么是udf ​ UDF(User-Defined Functions)即是用户自定义的hive函数。hive自带的函数并不能完全满足业务的需求,这时就需要我们自定义函数了。 官网参考地址:LanguageManual UDF 2.UDF分类 1.UDF:one to one ,进来一个出去一个,row mapping。 是row级别操作,如:upper、subs...

思亘七险,点落九宫,神游八极,纵横十方。 3084
上一篇: 10 | Hive函数
下一篇: 12 | Hive分区表
走过冬季
博客等级 码龄9年 1609粉丝 341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值