Appearance
hive作为一个类似数据库的框架,也有自己的数据类型,便于存储、统计、分析。 Hive中主要包含两大数据类型:
- 基本数据类型:常用的有INT,STRING,BOOLEAN,DOUBLE等,如下列表格
- 复合数据类型:常用的有ARRAY,MAP,STRUCT等
类型 | 描述 | 示例 |
---|---|---|
TINYINT(tinyint) | 一个字节(8位)有符号整数, -128~127 | 1 |
SMALLINT(smallint) | 2字节(16位)有符号整数,-32768~32767 | 1 |
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/false | true/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;