Hive的高级类型map、array、struct数据类型创建和查询

目录

一、map类型创建和查询

二、array类型创建和查询

三、struct类型创建和查询



一、map类型创建和查询

操作步骤

## 建表语句
create table hive_map(id int , name string , data_map map<string,string>)
row format delimited fields terminated by ' '
collection items terminated by ','
map keys terminated by ':';

## 原始数据
1 zs father:zsfa,moter:zsmo,brother:zsbr
2 ls father:lsfa,moter:lsmo,brother:lsbr-lsbr2

## 加载数据
load data local inpath '/root/data/hive-map.txt' overwrite into table hive_map;

## 数据查询
-- map_keys
select id,name,map_keys(data_map) from hive_map;

-- map_values:返回key和value的数组
select id,name,map_values(data_map) from hive_map;

-- 字段[key]
select id,name,data_map['brother'] from hive_map;

结果展示

hive> show tables;
OK
Time taken: 0.036 seconds
hive> create table hive_map(id int , name string , data_map map<string,string>)
    > row format delimited fields terminated by ' '
    > collection items terminated by ','
    > map keys terminated by ':';
OK
Time taken: 0.059 seconds
hive> load data local inpath '/root/data/hive-map.txt' overwrite into table hive_map;
Loading data to table default.hive_map
OK
Time taken: 0.625 seconds
hive> select id,name,map_keys(data_map) from hive_map;
OK
1	zs	["father","moter","brother"]
2	ls	["father","moter","brother"]
Time taken: 0.159 seconds, Fetched: 2 row(s)
hive> select id,name,map_values(data_map) from hive_map;
OK
1	zs	["zsfa","zsmo","zsbr"]
2	ls	["lsfa","lsmo","lsbr-lsbr2"]
Time taken: 0.163 seconds, Fetched: 2 row(s)
hive> select id,name,data_map['brother'] from hive_map;
OK
1	zs	zsbr
2	ls	lsbr-lsbr2
Time taken: 0.18 seconds, Fetched: 2 row(s)
hive> 

二、array类型创建和查询

## 建表语句
create table hive_array(name string , data_array array<string>)
row format delimited fields terminated by ' '
collection items terminated by ',';

## 原始数据
1 xiaohui,taoge,xingge,lianhang,guanyu
2 najie,xiaoqiao
3 余辉,涛哥,星哥,念行,冠宇
4 娜姐,小乔

## 加载数据
load data local inpath '/root/data/hive-array.txt' overwrite into table hive_array;

## 数据查询
select name , data_array from hive_array;
-- size 数组长度
select name , data_array ,size(data_array) from hive_array;
--  字段[角标]
select name , data_array[0] ,size(data_array) from hive_array;
-- array_contains 函数:判断数组是否包含指定元素
select name , array_contains(data_array,"xiaohui") ,size(data_array) from hive_array;

结果展示

hive> create table hive_array(name string , data_array array<string>)
    > row format delimited fields terminated by ' '
    > collection items terminated by ',';
OK
Time taken: 0.052 seconds
hive> load data local inpath '/root/data/hive-array.txt' overwrite into table hive_array;
Loading data to table default.hive_array
OK
Time taken: 0.581 seconds
hive> select name , data_array from hive_array;
OK
1	["xiaohui","taoge","xingge","lianhang","guanyu"]
2	["najie","xiaoqiao"]
3	["余辉","涛哥","星哥","念行","冠宇"]
4	["娜姐","小乔"]
Time taken: 0.175 seconds, Fetched: 4 row(s)
hive> select name , data_array ,size(data_array) from hive_array;
OK
1	["xiaohui","taoge","xingge","lianhang","guanyu"]	5
2	["najie","xiaoqiao"]	2
3	["余辉","涛哥","星哥","念行","冠宇"]	5
4	["娜姐","小乔"]	2
Time taken: 0.119 seconds, Fetched: 4 row(s)
hive> select name , data_array[0] ,size(data_array) from hive_array;
OK
1	xiaohui	5
2	najie	2
3	余辉	5
4	娜姐	2
Time taken: 0.169 seconds, Fetched: 4 row(s)
hive> select name , array_contains(data_array,"xiaohui") ,size(data_array) from hive_array;
OK
1	true	5
2	false	2
3	false	5
4	false	2
Time taken: 0.16 seconds, Fetched: 4 row(s)
hive> 

三、struct类型创建和查询

## 建表语句
create table hive_struct(id int , userinfo struct<name:string,age:int,sex:string,major:string>)
row format delimited fields terminated by ' '
collection items terminated by ':';

## 原始数据
1 xiaohui:18:M:teacher
2 lisi:30:W:student

## 加载数据
load data local inpath '/root/data/hive-struct.txt' overwrite into table hive_struct;

## 数据查询
select id, userinfo.name,userinfo.age,userinfo.sex,userinfo.major from hive_struct;

结果展示

hive> create table hive_struct(id int , userinfo struct<name:string,age:int,sex:string,major:string>)
    > row format delimited fields terminated by ' '
    > collection items terminated by ':';
OK
Time taken: 0.064 seconds
hive> load data local inpath '/root/data/hive-struct.txt' overwrite into table hive_struct;
Loading data to table default.hive_struct
OK
Time taken: 0.583 seconds
hive> select id, userinfo.name,userinfo.age,userinfo.sex,userinfo.major from hive_struct;
OK
1	xiaohui	18	M	teacher
2	lisi	30	W	student
Time taken: 0.172 seconds, Fetched: 2 row(s)
hive> select id,userinfo from hive_struct;
OK
1	{"name":"xiaohui","age":18,"sex":"M","major":"teacher"}
2	{"name":"lisi","age":30,"sex":"W","major":"student"}
Time taken: 0.144 seconds, Fetched: 2 row(s)
发布了422 篇原创文章 · 获赞 357 · 访问量 124万+

猜你喜欢

转载自blog.csdn.net/silentwolfyh/article/details/103657903