第八周 第4章 Hive核心实战
Hive中的数据类型
1 | hive作为一个类似数据库的框架,也有自己的数据类型,便于存储、统计、分析。 |
基本数据类型
1 | 看这个表,一般数字类型我们可以试验int,小数可以使用double,日期可以使用date类型、还有就是 |

1 | 数据类型 开始支持版本 数据类型 开始支持版本 |
复合数据类型
1 | 下面主要看一下复合数据类型,在这里我们主要分析这三个, array,map和struct |

Array
1 | 先来看Array,这个表示是一个数组结构 |
1 | [root@bigdata04 hivedata]# more stu.data |
1 | 来建一张表,指定了一个array数组类型的字段叫favors,数组中存储字符串,数组中的元素怎么分割呢?通过 collection items terminated by ',' 指定的 |
1 | hive (default)> load data local inpath '/data/soft/hivedata/stu.data' into table stu |
1 | 角标是从0开始的,如果获取到了不存在的角标则返回null |
Map
1 | 下面来说一下另外一种常见的集合——map,我们知道map集合里面存储的是键值对,每一个键值对属于Map集合的一个item, |
1 | 针对学生的成绩信息最好也是存储到一个字段中,方便管理和使用,发现学生的成绩都是key-value类型的,所以非常适合使用map类型 |
1 | hive (default)> load data local inpath '/data/soft/hivedata/stu2.data' into table stu2 |
1 | 查询所有学生的语文和数学成绩 |
1 | 在这注意一下,我们取数据是根据元素中的key获取的,和map结构中元素的位置没有关系 |
Struct
1 | 再来介绍最后一种复合类型struct,有点像java中的对象,举个例子说明一下,某学校有2个实习生,zhangsan、lisi,每个实习生都有地址信息,一个是户籍地所在的城市,一个是公司所在的城市,我们来组织一下数据 |
1 | 针对这里面的地址信息,不能懒省事使用字符串,否则后期想要获取他们对应的户籍地城市或者公司所在的城市信息时就比较麻烦了 |
1 | hive (default)> load data local inpath '/data/soft/hivedata/stu3.data' into t |
1 | hive (default)> select * from stu3; |
Struct和Map的区别
1 | 如果从建表语句上来分析,其实这个Struct和Map还是有一些相似之处的 |
1 | 总体而言还是map比较灵活,但是会额外占用磁盘空间,因为他比struct多存储了数据的key |
案例:复合数据类型的使用
1 | 在这里我们把前面学到的这三种复合数据类型结合到一块来使用一下。 |
1 | 根据这份数据建表,根据咱们前面的学习,这里面这几个字段分别是int类型、string类型,array类型,map类型,struct类型 |
1 | create table student ( |
1 | hive (default)> load data local inpath '/data/soft/hivedata/student.data' into table student; |
思考题
1 | 问:在mysql中有一张表student(id,name),还有一张表address(stu_id,home,school),还有联系方式表contact(stu_id,mine,parents,others)。如果把这三张表迁移到hive中,如何迁移? |