Hive自定义函数简单概述


一、概述

--1. 在hive中有三种自定义函数:
1. UDF  :一进一出  --一行变一行
2. UDTF : 一进多出  -- 一行变多行
3. UDAF :多进一出  -- 多行变一行

-- 2. 实现步骤:
   a、进入函数的是什么参数
   b、希望得到什么结果
   c、考虑通用性

二、UDTF函数

2.1 UDTF解析

-- 1. 说明
A custom UDTF can be created by extending the GenericUDTF abstract class and then implementing the initialize, process, and possibly close methods. The initialize method is called by Hive to notify the UDTF the argument types to expect. The UDTF must then return an object inspector corresponding to the row objects that the UDTF will generate. Once initialize() has been called, Hive will give rows to the UDTF using the process() method. While in process(), the UDTF can produce and forward rows to other operators by calling forward(). Lastly, Hive will call the close() method when all the rows have passed to the UDTF.

    -- 解析如上内容:
    1. 自定义UDTF函数,继承于抽象类GenericUDTF;
    2. 实现initialize, process,close 的三个方法;
    3. 三个方法的作用说明:
       1. 'initialize()':
          a、规定形参的参数类型:Hive调用initialize()方法,来告诉UDTF函数接收参数的类型,然后在这个方法中就可以对参数的
          类型进行校验,参数类型包括个数、数据类型等等
          b、规定函数返回结果数据类型:返回initialize()方法必须返回一个与UDTF将生成的行对象对应的对象检查器   
       2. 'process()':
          a、调用时机:initialize()被调用以后,即对输入的数据进行了检查满足条件以后,执行这个方法
          b、作用:一行数据调用一次process方法,process方法的内部,会遍历这一行数据,如果是数组,那就遍历数组,遍历以后的
          一个元素,调用一次forward()方法,对数据进行输出。
       3. 'close()':
          a、调用时机:当hive中的所有行都通过了UDTF函数以后,则Hive会调用这个close方法
          b、作用:关闭资源。      

2.2 代码实现

package com.atguigu.hive;

import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.StructField;
import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.json.JSONArray;

import java.util.ArrayList;
import java.util.List;

/**
 * @author lianzhipeng
 * @Description
 * @create 2020-06-30 18:25:10
 */

public class ExplodeJSONArray extends GenericUDTF {
   
    /*
    StructObjectInspector:结构体,输出数据类型和返回数据类型均是结构体
    UDTF:返回的数据可以是多列,多列可以封装到struct类型中
    [agr1:type1,agr2:type2,agr3:type3,...]
   
极佳SQL数据库修复大师10.0,支持MSSQL 7.0 2000 2005 2008 2008R2 2012 2014 2016 2017 支持各种ERP数据库 金蝶 速达 用友 管家婆等等基于MSSQL数据库。支持数据库无法附加 报错等故障。   支持 各种版本SQL数据库 质疑 置疑 断电损坏。   支持 SQL数据库损坏 无法附加 各种报错问题修复。   支持 SQL数据库 823 824 825页损坏等各类错误修复。   支持 MDF NDF文件修复 支持备份文件修复完美支持各种字符集,支持从MDF文件反删除记录。 支持 SQL数据库各种字段类型 支持压缩表 压缩页 压缩记录恢复 支持 sql数据库系统表报错 系统表不一致 断电非法关机坏道导致的可疑 置疑 数据库挂起等故障 支持 SQL数据库PFS GAM SGAM 页损坏 不是有效的数据库等 不是有效的文件头等恢复 支持 SQL数据库DBCC 无法修复的 数据库数据恢复 支持 SQL数据库被勒索病毒加密的数据恢复。(大多被加密数据库都是非完全加密) 支持 blob,image,xml, 跨页数据以及文本大字段恢复 支持 sql数据库多用户架构,以及NDF 文件组。 支持 保存表 数据 存储过程 触发器 视图 函数等元数据及用户数据 支持 保存为脚本或者直接连到SQL保存到SQL数据库 扫描勒索病毒数据库及 损坏严重的数据库 请选择 标准恢复模式 如果发现有表应该有数据但是标准恢复模式没有扫描到 或表数据乱码 或表记录很少 可以用高级恢复模式尝试。 如果两种恢复模式都看不到本应该有数据的表,可以联系我们进行人工恢复。 www.sql110.com www.sql119.com TEL 13510228421 QQ 1186505712
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值