Hive数据类型、 explode、自定义UDF

Hive数据类型、 explode、自定义UDF

一、基本类型
在这里插入图片描述
二、复杂类型
在这里插入图片描述
三、数组类型 array
  案例一、
  元数据:
   100,200,300
   200,300,500
  建表语句:create external table ex(vals array) row format delimited fields terminated by ‘\t’ collection items terminated by ‘,’ location ‘/ex’;
  查询语句:
   查询每行数组的个数 select size(vals) from ex;
   select vals[0] from ex;查询的是第一行的数据。
  注:hive 内置函数不具备查询某个具体行的数组元素。需要自定义函数来实现
  案例二、
  元数据:
   100,200,300 tom,jary
   200,300,500 rose,jack
  建表语句:create external table ex1(info1 array,info2 array) row format delimited fields terminated by ‘\t’ collection items terminated by ‘,’ location
‘/ex’;
四、map类型
  案例一、
  元数据:
   tom,23
   rose,25
   jary,28
  建表语句:
   create external table m1 (vals map<string,int>) row format delimited fields terminated by ‘\t’ map keys terminated by ‘,’ location ‘/map’;
  如果是map类型,列分隔符必须是\t
  查询语句:select vals[‘tom’] from ex;
五、struct 类型(对象类型)
  元数据:
   tom 23
   rose 22
   jary 26
  建表语句:
   create external table ex (vals structname:string,age:int)row format delimited collection items terminated by ‘,’ location ‘/m1’;
  查询语句:select vals.age from s1 where vals.name=‘tom’;
六、collect_set
  collect_set 函数用于数据去重,并将结果形成数组返回
七、 explode
  explode 命令可以将行数据,按指定规则切分出多行
  原数据:
   100,200,300
   200,300,500
  创建表::create external table ex1 (num string) location ‘/ex’;
  注:用explode做行切分,注意表里只有一列,并且行数据是string类型,因为只有字符类型才能做切分。
  通过explode指令来做行切分:执行:select explode(split(num,’,’)) from ex1;
八、UDF
  如果hive的内置函数不够用,我们也可以自己定义函数来使用,这样的函数称为hive的用户自定义函数,简称UDF。
  实现步骤:
   1.新建java工程,导入hive相关包,导入hive相关的lib。
   2.创建类继承UDF
   3.自己编写一个evaluate方法,返回值和参数任意

import org.apache.hadoop.hive.ql.exec.UDF;

public class ToUpper extends UDF{
	public String evaluate(String str){
		return str.toUpperCase();
	}
}

4.为了能让mapreduce处理,String要用Text处理。
  5.将写好的类打成jar包,上传到linux中
  6.在hive命令行下,向hive注册UDF:add jar /xxxx/xxxx.jar
  7.在hive命令行下,为当前udf起一个名字:create temporary function fname as ‘类的全路径名’;
  8.之后就可以在hql中使用该自定义函数了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值