互联网技术 / 互联网资讯 · 2024年4月7日 0

Hive中集合数据类型的讨论

本文转载自微信公众号「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            =      &