Impala 加载Hive的UDF

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,

1

2

3

4

5

[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的目录中,如下:

1

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

1

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";

1

2

3

4

5

6

7

[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中使用

1

2

3

4

5

6

7

8

9

10

11

[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                                                                  |

+--------------------------------------------------------------------+ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值