hive 的 struct、map与array 类型

hive支持struct,map,array三种集合类型

1、struct

与C语言、golang中的struct类似,可以通过.语法来访问

定义一个包含struct字段的表

create table test2(
	field1 struct<name:string,age:int> comment "test field"
) 
row format delimited fields terminated by "," 
collection items terminated by ":";

其中row format delimited fields terminated by ","表示字段之间用",“分割
collection items terminated by ":"; 字段中各个元素项之间用”:"分割

然后导入数据,可以使用sql语句和文件的方式,首先是sql语句注意: 这里使用的是named_struct函数

insert into test2(field1)values(named_struct("name",'zhangsan',"age",25));
insert into test2(field1)values(named_struct("name","lisi","age",23));

从文件导入,新建一个test.txt,内容如下

name:wangwu|age:27
name:zhaoliu|age:28

使用load data语句从本地导入

load data local inpath '/Users/zhangsan/hive/note/hive/test.txt' into table test2;

使用.语法查询数据

-- 查询所有数据
select * from test2;
-- 查询name字段
select field1.name from test2;
-- 查询name为zhangsan的记录
select field1 from test2 where field1.name = "zhangsan";

2、map

同struct,map的用法基本相似,以下为创建一个map类型字段

create table test3(
	field2 map<string,string>
) row format delimited fields terminated by ',' 
collection items terminated by "|" map keys terminated by ":";

map keys terminated by ":"表示键值对之间用":"来分割

同样的,先使用sql方式插入

insert into test3(field2)values(str_to_map("name:zhangsan,age:25")),(str_to_map("name:lisi,age:23"));

再导入文件,文件内容如下:

load data local inpath  '/Users/zhangsheng/hive/note/hive/test.txt' into table test3;

map的访问通过map[key]的形式进行,测试一下

select * from test3;
select field2["name"] as name,field2["age"] as age from test3;
select * from test3 where field2["age"] > 25;

3、array

与所有支持数组的编程语言一致,使用array[下标]的方式访问,创建一个array类型字段

create table test4(field4 array<string>);

插入数据

insert into test4(field4)values(array("zhangsan","lisi","wangwu"));
insert into test4(field4)values(`array`("lily","bob","alice"));
insert into test4(field4)values(`array`("A","B","C"));

查询测试

select * from test4;
select field4[0] from test4;
select * from test4 where field4[0]="zhangsan";
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾岛与鲸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值