`
bit1129
  • 浏览: 1067794 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Hive八】Hive用户自定义生成表函数(UDTF)

    博客分类:
  • Hive
 
阅读更多

1. 什么是UDTF

 

UDTF,是User Defined Table-Generating Functions,一眼看上去,貌似是用户自定义生成表函数,这个生成表不应该理解为生成了一个HQL Table, 貌似更应该理解为生成了类似关系表的二维行数据集

 

2. 如何实现UDTF

  • 继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF。
  • 实现initialize, process, close三个方法
  • UDTF首先会调用initialize方法,此方法返回UDTF的返回行的信息(返回个数,类型)。初始化完成后,会调用process方法,对传入的参数进行处理,可以通过forword()方法把结果返回。最后close()方法调用,对需要清理的方法进行清理

3. 实例

如下代码对形如key:value;key:value;格式的字符串分拆成key,value,返回结果为key, value两个字段

import java.util.ArrayList;

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

public class ExplodeMap extends GenericUDTF {
    @Override
    public void close() throws HiveException {
        // TODO Auto-generated method stub
    }

    @Override
    public StructObjectInspector initialize(ObjectInspector[] args)
            throws UDFArgumentException {
        if (args.length != 1) {
            throw new UDFArgumentLengthException("ExplodeMap takes only one argument");
        }
        if (args[0].getCategory() != ObjectInspector.Category.PRIMITIVE) {
            throw new UDFArgumentException("ExplodeMap takes string as a parameter");
        }
        ArrayList<String> fieldNames = new ArrayList<String>();
        ArrayList<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>();
        fieldNames.add("col1");
        fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
        fieldNames.add("col2");
        fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
        return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs);
    }

    @Override
    public void process(Object[] args) throws HiveException {
        String input = args[0].toString();
        String[] test = input.split(";");
        for (int i = 0; i < test.length; i++) {
            try {
                String[] result = test[i].split(":");
                forward(result);
            } catch (Exception e) {
                continue;
            }
        }
    }
}

 

4. 如何使用UDTF

4.1 在select中使用UDTF

 

select explode_map(properties) as (col1,col2) from my_table

 

  • 不可以添加其他字段使用:select a, explode_map(properties) as (col1,col2) from my_table
  • 不可以嵌套调用:select explode_map(explode_map(properties)) from my_table
  • 不可以和group by/cluster by/distribute by/sort by一起使用:select explode_map(properties) as (col1,col2) from src group by col1, col2

4.2 结合lateral view使用

 

select src.id, mytable.col1, mytable.col2 from src lateral view explode_map(properties) mytable as col1, col2;

 此方法更为方便日常使用。执行过程相当于单独执行了两次抽取,然后union到一个表里。

 

 5.总结

 使用lateral view之后,那么col1和col2相当于普通的列,可以参与查询,计算

 

 

分享到:
评论

相关推荐

    hive的自定义函数

    Hive支持三种类型的自定义函数:用户定义的函数(UDF)、用户定义的聚合函数(UDAF)和用户定义的表生成函数(UDTF)。本篇文章主要介绍UDF的实现方法。 ##### 2.1 UDF的作用 - **扩展性**:允许开发人员根据具体...

    hive数仓、hive SQL 、 hive自定义函数 、hive参数深入浅出

    - UDTF(用户定义的表生成函数):将一行数据转换为多行,常用于数据拆分。 4. Hive参数调优: - 内存参数:如mapreduce.map.memory.mb、hive.server2.executor.memory.overhead等,合理设置可避免内存溢出。 - ...

    hive 创建自定义函数 和 hive加载说明

    然而,有时Hive的内置函数并不能满足所有的业务需求,这时我们就需要创建自定义函数(UDF,User Defined Function)。这篇博文主要探讨了如何在Hive中创建自定义函数以及如何加载它们,这对于深化Hive的使用和解决...

    解析Json函数UDTF函数1.doc

    ### 解析Json函数UDTF函数1 #### 一、背景介绍与目的 在大数据处理领域,尤其是使用Hive进行数据仓库构建时,经常会遇到需要解析JSON格式数据的需求。JSON(JavaScript Object Notation)是一种轻量级的数据交换...

    hive 函数大全

    11. **UDTF(用户自定义表生成函数)**:能够返回多行数据的函数,可以将一行数据转化为多行。 以上是Hive函数的主要类别,具体每个函数的使用方式和参数需要参考官方文档或相关教程。通过熟练掌握这些函数,用户...

    解析Json函数UDTF函数2.doc

    在Hive中,UDTF(User Defined Table Generating Functions)是一种特殊的用户自定义函数,用于处理单个输入行并生成多行输出数据。这在处理JSON等复杂数据结构时特别有用,尤其是在大数据分析场景下。 #### 二、UDTF...

    UDTF函数不生效问题.doc

    在Hive中,UDTF(User Defined Table Generating Functions)是一种特殊的用户自定义函数,它可以生成多行记录或多列数据,通常用于数据处理场景中,如分词、拆分等操作。与常见的UDF(User Defined Function)不同...

    获取最大分区UDTF函数.doc

    本文将详细介绍如何在Hive中使用用户定义的表函数(User Defined Table Generating Function,简称UDTF)来实现这一功能。 #### 二、UDTF简介 UDTF是一种特殊的用户自定义函数,它可以返回多行记录或表。与传统的...

    Apache-Hive-Cookbook

    5. **Hive UDF(用户自定义函数)**:介绍如何创建和使用自定义函数,包括UDF(用户自定义标量函数)、UDAF(用户自定义聚合函数)和UDTF(用户自定义表生成函数),以扩展Hive的功能。 6. **MapReduce与Tez执行...

    apache-hive-2.3.9-bin.tar大数据HIVE.zip

    6. **存储过程(UDF,UDAF,UDTF)**:Hive支持用户自定义函数(UDF),用户定义聚合函数(UDAF)和用户定义表生成函数(UDTF),允许扩展Hive的功能。 7. **连接Hadoop生态系统**:Hive与Hadoop生态系统的其他组件...

    hive函数大全.7z

    5. **高级特性**:可能会涉及UDF(用户定义函数)、UDAF(用户定义聚合函数)和UDTF(用户定义表生成函数)的开发和使用,这些允许用户自定义函数来扩展Hive的功能。 6. **性能优化**:如何通过分区、桶、缓存等...

    大数据学习:Hive函数.pdf

    表生成函数用于生成新的表数据,常见的表生成函数包括: * LATERAL VIEW():生成新的表数据。 * EXPLODE():将数组或MAP转换为多行数据。 Hive自定义函数 Hive也支持用户自定义函数,可以根据实际使用场景编写...

    Cloudera Hive 文档

    9. **Hive UDF(用户自定义函数)**:Hive 允许用户扩展其功能,通过编写 UDF、UDAF(用户自定义聚合函数)和 UDTF(用户自定义表生成函数),满足特定的业务需求。 10. **Hive 与其它大数据组件的整合**:Hive ...

    HIve UDF 说明书

    在Hive UDF的使用说明书中,包含了关于Hive的内置操作符、内置函数、聚合函数、表生成函数、以及自定义UDF的创建等内容。这些内容是学习和使用Hive UDF不可或缺的知识点。 内置操作符部分涵盖了数学函数和操作符、...

    apache-hive-2.1.1-src

    5. **Hive的存储过程(UDF、UDAF、UDTF)**:Hive提供了用户自定义函数(UDF)、用户自定义聚合函数(UDAF)和用户自定义表生成函数(UDTF),允许用户扩展Hive的功能,实现复杂的数据处理逻辑。 6. **Hive的优化**...

    Hive编程指南(带书签)

    5. **Hive进阶功能**:包括分区、桶、视图、联接、子查询、UDF(用户自定义函数)、UDAF(用户自定义聚合函数)和UDTF(用户自定义表生成函数)等高级特性。 6. **Hive性能优化**:如何通过优化HQL、选择合适的存储...

    设计开发 Hive 编程指南 完整版

    HQL 支持 SELECT、FROM、WHERE、GROUP BY、JOIN 等基本操作,同时也支持一些大数据特有的功能,如 LATERAL VIEW、UDF(用户自定义函数)、UDAF(用户自定义聚合函数)和 UDTF(用户自定义表生成函数)。 5. **Hive ...

    Hive编程指南-2013.12.pdf

    除了基本功能,Hive还支持UDF(用户自定义函数)、UDAF(用户自定义聚合函数)和UDTF(用户自定义表生成函数),允许用户扩展HQL的功能。此外,Hive on Tez或Hive on Spark等执行引擎的引入,进一步提高了查询性能。...

    hive 表 dml 操作.zip

    9. **存储过程(UDF/UDAF/UDTF)**:Hive 支持用户自定义函数(UDF)、用户自定义聚合函数(UDAF)和用户自定义表生成函数(UDTF)。这些函数扩展了Hive的功能,允许用户处理自定义的数据类型和操作。 在实际工作中...

    Hive编程指南

    6. **Hive的高级特性**:讨论UDF(用户自定义函数)、UDAF(用户自定义聚合函数)和UDTF(用户自定义表生成函数)的开发和使用,以及Hive与Spark、Tez等执行引擎的集成。 7. **Hive的分布式计算模型**:解释Hive...

Global site tag (gtag.js) - Google Analytics