Skip to content

hive作为一个类似数据库的框架,也有自己的数据类型,便于存储、统计、分析。 Hive中主要包含两大数据类型:

  • 基本数据类型:常用的有INT,STRING,BOOLEAN,DOUBLE等,如下列表格
  • 复合数据类型:常用的有ARRAY,MAP,STRUCT等
类型描述示例
TINYINT(tinyint)一个字节(8位)有符号整数, -128~1271
SMALLINT(smallint)2字节(16位)有符号整数,-32768~327671
INT(int)4字节(32位)有符号整数1
BIGINT(bigint)8字节(64位)有符号整数1
FLOAT(float)4字节(32位)单精度浮点数1.0
DOUBLE(double)8字节(64位)双精度浮点数1.0
DECIMAL(decimal)任意精度的带符号小数1.0
BOOLEAN(boolean)true/falsetrue/false
STRING(string)字符串,变长‘a’,‘b’,‘1’
VARCHAR(varchar)变长字符串‘a’
CHAR(char)固定长度字符串‘a’
BINANY(binany)字节数组无法表示
TIMESTAMP(timestamp)时间戳,纳秒精度122327493795
DATE(date)日期‘2016-03-29’

复合数据类型——Array

建表语句如下,使用时把注释删除

sql
create table stu (
   id int,
   name string,
   favors array<string>
) row format delimited
fields terminated by '\t'  -- 列分隔符
collection items terminated by ','
lines terminated by '\n'; -- 行分隔符,这要放在最后一行

源数据是这样的,我们使用命令load data local inpath '/data/soft/hivedata/stu.data' into table stu;插入

markdown
1	zhangsan	sing,swing,java
2	wuqi	music,vue
3	yufei	uniapp,react,spring

查询时还有特殊的语法:

sql
select id,name,favors[0] from stu; -- 可以只查询一列,如果该列没有数据显示NULL
select id,name,favors[0] from stu; -- 查询完整数据,使用select * 也可以

复合数据类型——Map

sql
create table stu2 (
    id int,
    name string,
    scores map<string,int>
) row format delimited
fields terminated by '\t'
collection items terminated by ',' -- map数据直接的划分
map keys terminated by ':' -- key/value之间的划分符号
lines terminated by '\n';

源数据是这样的,我们使用命令load data local inpath '/data/soft/hivedata/stu2.data' into table stu2;插入

markdown
1	zhangsan	chinese:80,math:90,english:100
2	wuqi	chinese:50,math:90,english:26

查询案例:

sql
select id,name,scores from stu2;
select id,name,scores['math'] from stu2;
select id,name,scores['math'],scores['english'] from stu2;

复合数据类型——Struct

有点像java中的对象,比如地址信息,每个实习生都有地址信息,一个是户籍地所在的城市,一个是公司所在的城市,SQL建表如下:

sql
create table stu3(
    id int,
    name string,
    address struct<home_addr:string,office_addr:string>
) row format delimited
fields terminated by '\t'
collection items terminated by ','
lines terminated by '\n';

源数据是这样的,我们使用命令load data local inpath '/data/soft/hivedata/stu3.data' into table stu3;插入

markdown
1	zhangsan	bj,sh
2	wuqi	gz,sz

查询案例:

sql
select id,name,address.home_addr from stu3;
select id,name,address.home_addr,address.office_addr from stu3;