《Hive 6》--hive的3中特殊数据类型、ORDER BY和SORT BY、索引、存储格式、UDF

本文详细介绍了Hive中的特殊数据类型,包括array、map和STRUCT的使用,以及如何利用explode进行数据拆分。此外,还讨论了Hive的ORDER BY与SORT BY的区别,以及索引的概念。同时,文章讲解了Hive的不同存储格式,如TextFile、SequenceFile、Parquet、RCFile和ORCFile,并对比了它们的性能和压缩效果。最后,提到了用户自定义函数(UDF)在HiveSQL中的应用。
摘要由CSDN通过智能技术生成

hive中比关系型数据库中多了一些特殊的类型:

1)array:数组是相同类型的,下标从0开始
   array01('英语','化学','物理')
   array01[1] --->'化学'

  传统关系型数据库中:
  name     like1     like2    like3   like4   like5
  张三     足球      汽车     读书    喝茶    NUll
  李四     篮球      电影     读书    音乐    美食


hive数据库中:
name              likes
张三               足球 ,汽车,读书,喝茶
李四               篮球 ,电影,读书,音乐,美食

create table s1(
id int,
name string,
likes array<string>
)
row format delimited
fields terminated by ','
collection items terminated by '-'
lines terminated by '\n';

s1.txt
1,张三,足球-汽车-读书-喝茶
2,李四,篮球-电影-读书-音乐-美食

load data local inpath '/home/hyxy/Desktop/s1.txt' overwrite into table s1;

select * from s1;

hive> select likes[0] from s1; 
足球
篮球 

hive> select * from s1 where likes[0]='足球'; 
1    张三    ["足球","汽车","读书","喝茶"]

 

EXPLODE关键字:

explode就是将hive一行中复杂的array或者map结构拆分成多行:
hive>select id,name,hobby from s1 lateral view explode(likes) likes as hobby;
OK
1    张三    足球
1    张三    汽车
1    张三    读书
1    张三    喝茶
2    李四    篮球
2    李四    电影
2    李四    读书
2    李四    音乐
2    李四    美食


hive>select hobby,count(*) as c1 from s1 lateral view explode(likes) likes as hobby group by hobby order by c1 desc;
读书    2
音乐    1
足球    1
美食    1
篮球    1
电影    1
汽车    1
喝茶    1


2) map 是一组键值对元组集合,使用数组表示,可以访问元素
map01('first','max','second','demo')
map01['first'] --'max'

array01[90,80,95] -->语  数  英
map01[key:value]-->['语':90,'数':80,'英':95]
     类型  ---->  string:int

create table s2(
id int,
name string,
deductons map<string,string>
) 
row format delimited fields terminated by ','
collection items terminated by '-'
map keys terminated by ':'
lines terminated by '\n';

s2.txt
1,leo,英语:四级-日语:三级
2,marry,英语:六组-俄语:一级

load data local inpath '/home/hyxy/Desktop/s2.txt' overwrite into table s2;
 
select * from s2;
1    leo            {"英语":"四级","日语":"三级"}
2    marry        {"英语":"六组","俄语":"一级"}

查看英语是四级的学员信息
select * from s2 where deductons["英语"]="四级"; 
1    leo    {"英语":"四级","日语":"三级"}

查看日语 级别
select deductons["日语"]  from s2;
OK
三级
NULL


explode 拆分显示map集合(key 一列, value一列)
select explode(deductons) as (note_name,note_level) from s2;
OK
英语    四级
日语    三级
英语    六组
俄语    一级

lateral view explode 聚合函数显示:
select id,name,note_name,note_level from s2 lateral view explode(deductons) deductons as note_name,note_level;
OK
1    leo        英语    四级
1    leo        日语    三级
2    marry    英语    六组
2    marry    俄语    一级

3)STRUCT,和C语言中的struct类似,都可以通过"点" 符号访问元素内容
如:某列的数据类型 struct{班级 string,学号 int}
     这列存放如下一行数据:{'10班',11001}
     列名.班级 --> '10班'
   struct是针对一组数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值