hive内置函数及总结

1.hive内置函数
  hive的内置函数有很多,大部分和mysql的一样,就不在详细介绍了。主要介绍一下自定义函数
  和具体的案例。
  ①WordCount案例

使用hive sql语句实现WordCount。
创建数据表
	create table docs(line string);
创建结果表
	create table wc(word string, totalword int);
加载数据
load data local inpath '/tmp/wc' into table docs; //注意:这个本地指的是hive工具所在的那个节点
统计wordcount并且将数据插入到结果表中
from (select explode(split(line, ' ')) as word from docs) w 
insert into table wc 
  select word, count(1) as totalword 
  group by word 
  order by word;

  ②自定义UDF函数(User Defined Function)
    UDF函数的特点:计算一条数据,输出一条数据。

UDF函数的实现流程:首先根据需求自己写一个函数,这个函数要继承UDF,并且类名中不要有下划线等特殊字
符。然后将这个函数打成一个jar包,把它上传到hive的lib下,在hive shell中执行
add jar /opt/software/hive/hive-1.2.1/lib/FormatTimeUDF.jar;
然后再执行CREATE TEMPORARY FUNCTION convertTime AS 'com.hoe.hive.userdefinedfunction.FormatTimeUDF';
手动创建一个函数。然后就可以在SQL语句中使用这个函数了。

  ③自定义UDAF函数(User Defined Aggregate Function)
    UDAF函数的特点:是一个聚合函数。输入多条,输出一条。

UDAF函数案例:函数需求:根据某一字段分组,把组内的数据用“\t”拼接起来。
	具体代码:
		public final class ReduceTimeByResponseNumUDAF extends UDAf {
		public static class UDAFExampleAvgEvaluator implements UDAFEvaluator {
		
			StringBuilder builder = null;
		
			//每个task都会调用一次
			public UDAFExampleAvgEvaluator() {
				init();
			}
		
			//初始化方法
			public void init(){
				builder = new StringBuilder();
			}
		
			//map端的聚合逻辑  combiner
			public boolean iterate(String o){
				if(o != null){
					builder.append(o + "\t");
				}
				return true;
			}
		
			//map端聚合结果
			public String terminatePartial(){
				return builder.toString();
			}
		
			//reduce端大合并逻辑
			public boolean merge(String o){
				iterate(o);
				return true;
			}
		
			//大合并的结果
			public String terminate(){
				return builder.toString();
			}
		}
		}
	将代码打成jar包,在hive shell中执行
	add jar /opt/software/hive/hive-1.2.1/lib/ReduceTimeByResponseNumUDAF.jar;
	然后再执行CREATE TEMPORARY FUNCTION rrd AS 'com.hoe.hive.userdefinedfunction.ReduceTimeByResponseNumUDAF';
	然后就可以在SQL语句中使用这个函数了。注意创建的函数都是临时函数,推出hive shell后,就
	不能再使用了。
	删除函数执行:DROP TEMPORARY FUNCTION 函数名;

  ④永久函数(退出hive shell后再进来还能使用)
    实现方法:将相应的jar包上传到HDFS上。在创建函数的时候使用

create function formatTime AS 'com.hoe.hive.userdefinedfunction.FormatTimeUDF' using jar 'hdfs://zfg/test/FormatTimeUDF.jar';

  ⑤小区掉话率案例
    实现思路:根据基站号分组,统计组内总的掉话的秒数和总的通话持续秒数。然后两者相除就
    是掉话率。

create table cell_monitor(  //创建数据表
record_time string,  //通话时间
imei string,    //基站编号
cell string,     //手机编号
ph_num int,
call_num int,
drop_num int,   //掉话的秒数
duration int,     //通话持续总秒数
drop_rate DOUBLE,
net_type string,
erl string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

create table cell_drop_monitor(   //创建结果表
imei string,  //基站号
total_call_num int,  //总的通话持续秒数
total_drop_num int,  //总的掉话秒数
d_rate DOUBLE  //掉话率
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

truncate table cell_monitor;   //清空表数据

LOAD DATA LOCAL INPATH '/root/cdr_summ_imei_cell_info.csv' OVERWRITE INTO TABLE cell_monitor;   //加载数据

//计算掉话率
from cell_monitor cm 
insert overwrite table cell_drop_monitor  
select cm.imei,sum(cm.duration) ,sum(cm.drop_num),sum(cm.drop_num)/sum(cm.duration) d_rate 
group by cm.imei 
sort by d_rate desc;

2.hive思维导图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值