(四)Hive的数据类型
H ive的内置数据类型分为两⼤类:1、基础数据类型;2、复杂数据类型。
⼀、基础数据类型包括:
注:
binary:⼆进制类型。
timestamp:带可选的纳秒级精度UNIX timestamp。timestamp与时区⽆关,存储为UNIX纪元的偏移量。Hive提供了⽤于 timestamp和时区相互转换的便利UDF:to_utc_timestamp和 from_utc_timestamp。 Timestamp类型可以使⽤所有的⽇期时间UDF,如month、day、year等。⽂本⽂件中的Timestamp必须使⽤yyyy-mm-dd hh:mm:ss[.f...]的格式,如果使⽤其它格式,将它们声明为合适的类型(INT、FLOAT、STRING等)并使⽤UDF将它们转换为 Timestamp。其⽀持的类型为:
整数类型:转换为秒级的UNIX时间戳。
浮点数类型:转换为带⼩数精度的UNIX时间戳。
字符串类型:适合java.sql.Timestamp格式"YYYY-MM-DD HH:MM:SS.fffffffff"(9位⼩数精度)。
Date:描述了特定的年⽉⽇,以YYYY-M M-D D格式表⽰,例如2014-05-29。仅可与Date、timestamp和String相互转化。
:ARRAY、Map、struct、union,这些复杂类型是由基础⼆、复杂数据类型包括:ARRAY、Map、struct、union,这些复杂类型是由基础⼆、复杂数据类型包括
类型构成的。
ARRAY:ARRAY类型是由⼀系列相同数据类型的元素组成,这些元素可以通过下标来访问。⽐如有⼀个ARRAY类型的变量fruits,它是由['apple','orange','mango']组成,那么我们可以通过fruits[1]来访问元素orange,因为ARRAY类型的下标是从 0开始的;
MAP:MAP包含key->value键值对,可以通过key来访问元素。⽐如”userlist”是⼀个map类型,其中username是 key,password是value;那么我们可以通过userlist['username']来得到这个⽤户对应的password;
STRUCT:STRUCT可以包含不同数据类型的元素。这些元素可以通过”点语法”的⽅式来得到所需要的元素,⽐如user是⼀个STRUCT类型,那么可以通过user.address得到这个⽤户的地址。
UNION:UNIONTYPE,他是从Hive 0.7.0开始⽀持的。
复杂数据类型的使⽤:
复杂数据类型的使⽤
1. Array的使⽤
创建数据库表,以array作为数据类型
create table person(name string,work_locations array)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ',';
数据
biansutao beijing,shanghai,tianjin,hangzhou
linan changchu,chengdu,wuhan
⼊库数据
LOAD DATA LOCAL INPATH '/home/' 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)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';
unix时间戳转换日期格式要⼊库的数据
biansutao '数学':80,'语⽂':89,'英语':95
jobs '语⽂':60,'数学':80,'英语':99
⼊库数据
LOAD DATA LOCAL INPATH '/home/' 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
3 Struct 的使⽤
创建数据表
CREATE TABLE test(id int,course struct) ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',';
数据
1 english,80
2 math,89
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论