Impala的UDF有两种:

  Native Imapal UDF:使用C++开发的,性能极高,官方性能测试比第二种高出将近10倍

  Hive的UDF:是Hive中的UDF,直接加载到Impala中,优点是不需要任何改动,完全跟Hive中用法相同

第一种方式请参考我转载的文章【转】Impala安装json解析udf插件

本文介绍第二种方式,在Impala中直接加载Hive的UDF

如在Hive中有一个UDF为get_json_object,用于解析Json,但是Imapla中没有类似的函数。

1. 该function所在的jar包是/usr/lib/hive/lib/hive-exec-1.1.0-cdh5.13.0.jar,

[cloudera@quickstart lib]$ jar tf hive-exec-1.1.0-cdh5.13.0.jar|grep UDFJson
org/apache/hadoop/hive/ql/udf/UDFJson$AddingList.class
org/apache/hadoop/hive/ql/udf/UDFJson.class
org/apache/hadoop/hive/ql/udf/UDFJson$HashCache.class
org/apache/hadoop/hive/ql/udf/UDFJson$1.class

2.把jar包上传到hdfs的目录中,如下:

 hdfs dfs -put /usr/lib/hive/lib/hive-exec-1.1.0-cdh5.13.0.jar /user/cloudera/lib/hive-udf.jar

3.在Impala Shell中创建function,其中Symbol指向类名称:https://github.com/apache/hive/blob/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFJson.java

create function if not exists get_json_object(String,String) returns String location "/user/cloudera/lib/hive-udf.jar" SYMBOL="org.apache.hadoop.hive.ql.udf.UDFJson";
[quickstart.cloudera:21000] > show functions;
Query: show functions
+-------------+---------------------------------+-------------+---------------+
| return type | signature | binary type | is persistent |
+-------------+---------------------------------+-------------+---------------+
| STRING | get_json_object(STRING, STRING) | JAVA | false |
+-------------+---------------------------------+-------------+---------------+

  

4.在Impala shell中使用

[quickstart.cloudera:21000] > select get_json_object(test1.content,'$.userId') from test1;
Query: select get_json_object(test1.content,'$.userId') from test1
Query submitted at: 2018-06-28 04:19:44 (Coordinator: http://quickstart.cloudera:25000)
Query progress can be monitored at: http://quickstart.cloudera:25000/query_plan?query_id=4241f9deab0498e2:ab9c00fd00000000
+--------------------------------------------------------------------+
| get_json_object(report_data.content, '$.userid') |
+--------------------------------------------------------------------+
| 16 |
| 15 |
| 8 |
+--------------------------------------------------------------------+ 

验证可以使用

Impala 加载Hive的UDF的更多相关文章

  1. kylin加载hive表错误:ERROR [http-bio-7070-exec-10] controller.TableController:189 : org/apache/hadoop/hive/conf/HiveConf java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf 解决办法

    一.问题背景 在kylin中加载hive表时,弹出提示框,内容是“oops!org/apache/hadoop/hive/conf/HiveConf”,无法加载hive表,查找kylin的日志时发现, ...

  2. SPARK_sql加载,hive以及jdbc使用

    sql加载 格式  或者下面这种直接json加载 或者下面这种spark的text加载 以及rdd的加载 上述记得配置文件加入.mastrt("local")或者spark://m ...

  3. Hive记录-Impala jdbc连接hive和kudu参考

    1.配置环境Eclipse和JDK 2.加载hive jar包或者impala jar包 备注:从CDH集群里面拷贝出来 下载地址:https://www.cloudera.com/downloads ...

  4. Impala数据处理(加载和存储)

    不多说,直接上干货! Hive与Impala都是构建在Hadoop之上的数据查询工具,那么在实际的应用中,它们是如何加载和存储数据的呢? Hive和Impala存储和加载表,和所有的关系型数据库一样, ...

  5. spark SQL (五)数据源 Data Source----json hive jdbc等数据的的读取与加载

    1,JSON数据集 Spark SQL可以自动推断JSON数据集的模式,并将其作为一个Dataset[Row].这个转换可以SparkSession.read.json()在一个Dataset[Str ...

  6. Hive中数据的加载和导出

    原文:http://blog.javachen.com/2014/06/09/hive-data-manipulation-language.html 关于 Hive DML 语法,你可以参考 apa ...

  7. Hive学习之四 《Hive分区表场景案例应用案例,企业日志加载》 详解

    文件的加载,只需要三步就够了,废话不多说,来直接的吧. 一.建表 话不多说,直接开始. 建表,对于日志文件来说,最后有分区,在此案例中,对年月日和小时进行了分区. 建表tracktest_log,分隔 ...

  8. 关于hive ,eclipse老是提示加载不到驱动

    忙活了好长时间,很纳闷为什么加载不上驱动,驱动包.hive的依赖包.hadoop的依赖包也引入了,各种百度最后: hadoop-2.2.0/share/hadoop/common/hadoop-com ...

  9. hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)

    数据做压缩和解压缩会增加CPU的开销,但可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,所以最好对那些I/O密集型的作业使用数据压缩,cpu密集型,使用压缩反而会降低性能. 而hive中间结果 ...

随机推荐

  1. [转]前端构建工具gulpjs的使用介绍及技巧

    本文转自:http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非 ...

  2. [转]nopCommerce 3.9 版本发行

    本文转自:http://www.cnblogs.com/xoray007/p/nopCommerce-39-release.html NopCommerce中文信息地址:http://www.nopc ...

  3. 面向对象 OOP

    [面向对象编程OOP]   1 语言的分类 面向机器 :汇编语言 面向过程 :c语言 面向对象 :c++ Java PHP等   2 面向过程与面向对象 面向过程:专注于如何去解决一个问题的过程,编程 ...

  4. RabbitMQ - 任务队列

    这次我们试着实现这样一个小程序: 嗯,就是任务队列(task queue).不是将任务集中在一堆并一直等到所有任务一并完成为止,而是将每一个任务封装为一个消息,并将其发送到队列,后台的workers就 ...

  5. List和Queue使用过程中的纪录

    业务需求: 发送特定的请求,根据返回的信息执行特定的事件. 目前的做法:把我的请求放入一个容器内,然后待到某一条件,就从这个容器把请求发送出去,等客户返回信息时,查询容器中对应请求中特定的事件.开始的 ...

  6. Springboot简单整合Rabbit

    两个项目.分别是生产者和消费者项目 .首先引入依赖.两边pom都一样 第一次练习,启动生产者后,再启动消费者,一直报找不到 队列的声明. 后排查发现是  需要现在生产者这边浏览器访问一次生产消息的方法 ...

  7. java通过超链接和servlet配置实现服务器文件下载

    1.在页面上面我们可以简单的写成: <td align="center""> <a href="<c:url value="/ ...

  8. IndexedDB(二:索引)

    在HTML5本地存储--IndexedDB(一:基本使用)中介绍了关于IndexedDB的基本使用方法,很不过瘾,这篇我们来看看indexedDB的杀器--索引. 熟悉数据库的同学都知道索引的一个好处 ...

  9. Python-约束和异常处理

    今天我们来说一说类的规范以及程序出现错误后我们要怎么进行处理 一.类的约束 首先,你要清楚,约束是对类的约束,比如,现在你是一个项目经理,然后呢,你给手下的人分活,张三你处理一下普通用户登录,李四你处 ...

  10. 深入理解token

      链接:https://my.oschina.net/jamesfancy/blog/1613994 摘要: Token 是在服务端产生的.如果前端使用用户名/密码向服务端请求认证,服务端认证成功, ...