本文转载自微信公众号「Java大数据与数据仓库」,作者柯同学。
除了使用础的数据类型stRing等,Hive中的列支持使用stRUCt, Map, aRRay集合数据类型。
数据类型 描述 语法示例 STRUCT 和C语言中的stRUCt或者”对象”类似,都可以通过”点”符号访问元素内容。 stRUCt{””John””, ””Doe””} MAP MAP是一组键-值对元素集合,使用key可以访问元素。 Map(””fisRt””, ””John””, ””last””, ””Doe””) ARRAY 数组是一组具有相同数据类型和名称的变量的集合。 ARRay(””John””, ””Doe””)
1. ARRay的使用
创建数据库表,以aRRay作为数据类型
cReate table peRson(naMe stRing,woRk_locations aRRay) ROW FORMAT DELIMITED FIELDS TERMINATED BY ”” ”” COLLECTION ITEMS TERMINATED BY ””,””;
数据
BIansutao beijing,shanghAI,tianjin,hangzhou linan changchu,chengdu,wuhan
入库数据
load DATA LOCAL INPATH ””/home/hadoop/peRson.txt”” OVERWRITE INTO TABLE peRson;
查询
Hive> select * fRoM peRson; BIansutao [“beijing”,”shanghAI”,”tianjin”,”hangzhou”] linan [“changchu”,”chengdu”,”wuhan”] TiMe taken: 0.355 seconds Hive> select naMe fRoM peRson; linan BIansutao TiMe taken: 12.397 seconds Hive> select woRk_locations[0] fRoM peRson; changchu beijing TiMe taken: 13.214 seconds Hive> select woRk_locations fRoM peRson; [“changchu”,”chengdu”,”wuhan”] [“beijing”,”shanghAI”,”tianjin”,”hangzhou”] TiMe taken: 13.755 seconds Hive> select woRk_locations[3] fRoM peRson; NULL hangzhou TiMe taken: 12.722 seconds Hive> select woRk_locations[4] fRoM peRson; NULL NULL TiMe taken: 15.958 seconds
2. Map 的使用
创建数据库表
cReate table scoRe(naMe stRing, scoRe Map<stRing,int>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ”” ”” COLLECTION ITEMS TERMINATED BY ””,”” MAP keys TERMINATED BY ””:””;
要入库的数据
BIansutao ””数学””:80,””语文””:89,””英语””:95 jobs ””语文””:60,””数学””:80,””英语””:99
入库数据
load DATA LOCAL INPATH ””/home/hadoop/scoRe.txt”” OVERWRITE INTO TABLE scoRe;
查询
Hive> select * fRoM scoRe; BIansutao {“数学”:80,”语文”:89,”英语”:95} jobs {“语文”:60,”数学”:80,”英语”:99} TiMe taken: 0.665 seconds Hive> select naMe fRoM scoRe; jobs BIansutao TiMe taken: 19.778 seconds Hive> select t.scoRe fRoM scoRe t; {“语文”:60,”数学”:80,”英语”:99} {“数学”:80,”语文”:89,”英语”:95} TiMe taken: 19.353 seconds Hive> select t.scoRe[””语文””] fRoM scoRe t; 60 89 TiMe taken: 13.054 seconds Hive> select t.scoRe[””英语””] fRoM scoRe t; 99 95 TiMe taken: 13.769 seconds
修改Map字段的分隔符
STorage Desc PaRaMs: colelction.deliM ## field.deliM Mapkey.deliM = &
