Hive特殊的數據類型:Array,Map,Struct

1、Array

#創建一張包含array字段的表,array字段的分割符采用的是逗號
create table hive_array(
name string,
work_locations array<string>
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ',';
 
#加載數據
load data local inpath '/home/hadoop/data/hive_array.txt' overwrite into table hive_array
 
#直接查詢
hive> select * from hive_array;
OK
ruoze ["shanghai","hangzhou","beji"]
jepson ["hangzhou","wuhan","shenzheng"]
Time taken: 0.283 seconds, Fetched: 2 row(s)
 
#查詢數組中的某個字段包含某個元素
select * from hive_array where array_contains(work_locations,"shanghai");
 
#查詢數組具體某個下標的結果
select name,work_locations[2] from hive_array;
 
#查詢數組的大小
select name,size(work_locations) from hive_array;

2、Map

#創建一張包含map類型字段的表,map集合元分割符#,鍵值對的分隔符:
create table hive_map(
id int,
name string,
members map<string,string>,
age int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '#'
MAP KEYS TERMINATED BY ':';
 
#加載數據
load data local inpath '/home/hadoop/data/hive_map.txt'
overwrite into table hive_map;
 
#直接查詢
hive> select * from hive_map;
OK
1 zhansan {"father":"xiaoming","mother":"xiaohuang","brother":"xiaoxu"} 28
2 lis {"father":"mayun","mother":"huangyi","brother":"guanyu"} 22
3 wangwu {"father":"wangjianlin","mother":"ruhua","sister":"jianting"} 29
4 mayun {"father":"mayongzhen","mother":"angelababy"} 26
 
#查詢某個鍵的值
 
select name,members["father"] from hive_map;
#查詢map字段的所有的key,所有的valuse。
select map_keys(members) from hive_map;
select map_values(members) from hive_map;
 
#查詢map集合大小
select size(members) from hive_map;

3、Struct

#創建一張包含struct類型字段的表,struct有由string和int兩種類型數據組成,分割符爲:
create table hive_struct(
ip string,
userinfo struct<name:string,age:int>
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '#'
COLLECTION ITEMS TERMINATED BY ':';
 
#加載數據
load data local inpath '/home/hadoop/data/hive_struct.txt'
overwrite into table hive_struct;
 
#直接查詢
hive> select * from hive_struct;
OK
192.168.1.1 {"name":"zhangsan","age":40}
192.168.1.2 {"name":"lisi","age":50}
192.168.1.3 {"name":"wangwu","age":60}
192.168.1.4 {"name":"zhaoliu","age":70}
Time taken: 0.206 seconds, Fetched: 4 row(s)
 
#查詢結構體某個子節點信息
select ip,userinfo.name,userinfo.age from hive_struct;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章