目录
1、Hive 数据类型
1.1、原子数据类型
1.2、复杂数据类型
1.3、示例演示:
1.3.1、array
1.3.2、map
1.3.3、struct
1.3.4、uniontype
参考资料:http://yugouai.iteye.com/blog/1849192
2、视图
1、Hive 支持日期类型(老版本不支持),在 Hive 里日期一般都是用字符串来表示的,而常用 的日期格式转化操作则是通过自定义函数进行操作,当然也可以直接指定为日期类型
2、Hive 是用 Java 开发的,Hive 里的基本数据类型和 java 的基本数据类型也是一一对应的, 除了 String 类型。
3、有符号的整数类型:TINYINT、SMALLINT、INT 和 BIGINT 分别等价于 Java 的 Byte、Short、 Int 和 Long 原子类型,它们分别为 1 字节、2 字节、4 字节和 8 字节有符号整数。
4、Hive 的浮点数据类型 FLOAT 和 DOUBLE,对应于 Java 的基本类型 Float 和 Double 类型。
5、Hive 的 BOOLEAN 类型相当于 Java 的基本数据类型 Boolean。
6、Hive 的 String 类型相当于数据库的 Varchar 类型,该类型是一个可变的字符串,不过它不 能声明其中最多能存储多少个字符,理论上它可以存储 2GB 的字符数。
复杂数据类型包括数组(ARRAY)、映射(MAP)和结构体(STRUCT),具体如下所示
说明:
1、字段 name 是基本类型,favors 是数组类型,可以保存很多爱好,scores 是映射类型,可 以保存多个课程的成绩,address 是结构类型,可以存储住址信息
2、ROW FORMAT DELIMITED 是指明后面的关键词是列和元素分隔符的
3、FIELDS TERMINATED BY 是字段分隔符
4、COLLECTION ITEMS TERMINATED BY 是元素分隔符(Array 中的各元素、Struct 中的各元素、 Map 中的 key-value 对之间)
5、MAP KEYS TERMINATED BY 是 Map 中 key 与 value 的分隔符
6、LINES TERMINATED BY 是行之间的分隔符
7、STORED AS TEXTFILE 指数据文件上传之后保存的格式
总结:在关系型数据库中,我们至少需要三张表来定义,包括学生基本表、爱好表、成绩表; 但在 Hive 中通过一张表就可以搞定了。也就是说,复合数据类型把多表关系通过一张表就 可以实现了。
建表语句:
create table person(name string,work_locations string) row format delimited fields terminated by '\t';
create table person1(name string,work_locations array) row format delimited fields terminated by '\t' collection items terminated by ',';
数据:
huangbo beijing,shanghai,tianjin,hangzhou
xuzheng changchu,chengdu,wuhan
wangbaoqiang dalian,shenyang,jilin
导入数据:
load data local inpath '/home/hadoop/person.txt' into table person;
查询语句:
Select * from person;
Select name from person;
Select work_locations from person;
Select work_locations[0] from person;
建表语句:
create table score(name string, scores map) row format delimited fields terminated by '\t' collection items terminated by ',' map keys terminated by ':';
数据:
huangbo yuwen:80,shuxue:89,yingyu:95
xuzheng yuwen:70,shuxue:65,yingyu:81
wangbaoqiang yuwen:75,shuxue:100,yingyu:75
导入数据:
load data local inpath '/home/hadoop/score.txt' into table score;
查询语句:
Select * from score;
Select name from score;
Select scores from score;
Select s.scores['yuwen'] from score s;
建表语句:
create table structtable(id int,course struct) row format delimited fields terminated by '\t' collection items terminated by ',';
数据:
1 english,80
2 math,89
3 chinese,95
导入数据:
load data local inpath '/ home/hadoop / structtable.txt' into table structtable;
查询语句:
Select * from structtable;
Select id from structtable;
Select course from structtable;
Select t.course.name from structtable t;
Select t.course.score from structtable t;
和关系型数据库一样,Hive 也提供了视图的功能,不过请注意,Hive 的视图和关系型数据库的数据还是有很大的区别:
1、只有逻辑视图,没有物化视图;
2、视图只能查询,不能 Load/Insert/Update/Delete 数据;
3、视图在创建时候,只是保存了一份元数据,当查询视图的时候,才开始执行视图对应的 那些子查询