Hive脚本、Hive API、Hive 自定义函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive脚本、Hive API、Hive 自定义函数相关的知识,希望对你有一定的参考价值。

参考技术A ./hive -e 'select * from t_student';

pom.xml

创建永久函数

方法一:

方法二:
在hive-site.xml里添加jar包

方法三:

drop function getjson

创建临时函数:temporary

[Hive_12] Hive 的自定义函数

 


 

0. 说明 

  UDF   //user define function
      //输入单行,输出单行,类似于 format_number(age,‘000‘)

  UDTF   //user define table-gen function
         //输入单行,输出多行,类似于 explode(array);

  UDAF   //user define aggr function
         //输入多行,输出单行,类似于 sum(xxx)

 

  Hive 通过 UDF 实现对 temptags 的解析

 


1. UDF

  1.1 代码示例

  Code

 

  1.2 用户自定义函数的使用

  1. 将 Hive 自定义函数打包并发送到 /soft/hive/lib 下
  2. 重启 Hive
  3. 注册函数

# 永久函数
  create function myudf as com.share.udf.MyUDF‘;

# 临时函数
  create temporary function myudf as com.share.udf.MyUDF‘;

 

  1.3 Demo

  Hive 通过 UDF 实现对 temptags 的解析

  0. 准备数据

  1. 建表

    create table temptags(id int,json string) row format delimited fields terminated by 	;

  2. 加载数据

    load data local inpath /home/centos/files/temptags.txt into table temptags;

  3. 代码编写

  Code

  4. 打包

  5. 添加 fastjson-1.2.47.jar & myhive-1.0-SNAPSHOT.jar 到 /soft/hive/lib 中

  6. 重启 Hive

  7. 注册临时函数

    create temporary function parsejson as com.share.udf.ParseJson‘;

  8. 测试

select id ,parsejson(json) as tags from temptags;

 

# 将 id 和 tag 炸开
select id,  tag from temptags lateral view explode(parsejson(json)) xx as tag;

# 开始统计每个商家每个标签个数
select id, tag, count(*) as count
from (select id, tag from temptags lateral view explode(parsejson(json)) xx as tag) a
group by id, tag; # 进行商家内标签数的排序 select id, tag , count, row_number()over(partition by id order by count desc) as rank
from (select id, tag, count(*) as count from (select id, tag from temptags lateral view explode(parsejson(json)) xx as tag) a
group by id,tag) b ; # 将标签和个数进行拼串,取得前 10 标签数 select id, concat(tag,_,count)
from (select id, tag , count, row_number()over(partition by id order by count desc) as rank
from (select id, tag, count(*) as count from (select id, tag from temptags lateral view explode(parsejson(json)) xx as tag) a
group by id,tag) b )c
where rank<=10; #聚合拼串 //concat_ws(,, List<>) //collect_set(name) 将所有字段变为数组,去重 //collect_list(name) 将所有字段变为数组,不去重 select id, concat_ws(,,collect_set(concat(tag,_,count))) as tags
from (select id, tag , count, row_number()over(partition by id order by count desc) as rank
from (select id, tag, count(*) as count from (select id, tag from temptags lateral view explode(parsejson(json)) xx as tag) a
group by id,tag) b )c where rank<=10 group by id;

 

   1.4 虚列:lateral view

  123456 味道好_10,环境卫生_9

  id   tags
  1   [味道好,环境卫生]   =>   1 味道好
                      1 环境卫生

 

select name, workplace from employee lateral view explode(work_place) xx as workplace;

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 




















以上是关于Hive脚本、Hive API、Hive 自定义函数的主要内容,如果未能解决你的问题,请参考以下文章

Hive UDF开发

查询hive中都有哪些自定义函数

hive自定义UDTF函数,步骤讲解

Hive UDF 第一篇:怎么实现自己的 hive 自定义函数

Hive中如何添加自定义UDF函数以及oozie中使用hive的自定义函数

2021年大数据Hive:Hive自定义函数