目前所學的復雜數據類型有三種array,map,struct。
復雜數據類型: 如何存 如何取(*****)
1.array(用這種數據類型的特點就是集合里的每一個字段都是一個具體的信息,不會是那種key與values的關系)
load數據如上所示,一共兩個字段,ruoze 和他們工作的城市
也就是字段與字段之間的分割用table array字段之間的分割用“,”。
create table hive_array(
name string,
work_locations array<string>
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'--表示字段與字段之間的分割用table
COLLECTION ITEMS TERMINATED BY ',';--表示集合之內的分割用逗號。集合就是代表array這個復雜數據類型里邊的數據之間的分割。
load data local inpath '/home/hadoop/data/hive_array.txt'
overwrite into table hive_array;
select * from hive_array where array_contains(work_locations,'tianjin');
array_contains這個函數是array_contains(array字段,‘字段包含的內容’)
比如以上就是array字段包含tianjin的數據。
2.map : key-value
以上數據一共有3個字段,分別為id,name,member。其中member里的內容都是以key:values的形式出現的,若是這種形式一般用map這種復雜數據類型
father:xiaoming#mother:xiaohuang#brother:xiaoxu
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字段中的數據key:values相互之間用#分割
MAP KEYS TERMINATED BY ':';map中key與values之間用冒號分割
load data local inpath '/home/hadoop/data/hive_map.txt'
overwrite into table hive_map;
3.struct struct('a',1,2,3,4)(這個數據類型的特點就是可以包含各種各樣的數據類型。但是struct可以是任意數據類型,在寫struct數據類型時,在<>中要寫清楚struct字段中的字段名稱跟數據類型)
create table hive_struct(
ip string,
userinfo struct<name:string,age:int>--struct這個數據類型中的字段名,字段類型
)
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;