目录
hive数据类型 | java数据类型 | 长度 | 例子 |
TINYINT | byte | 1byte | 10 |
SMALINT | short | 2byte | 10 |
INT | int | 4byte | 10 |
BIGINT | long | 8byte | 10 |
BOOLEAN | boolean | 布尔类型 | TRUE/FALSE |
STRING | string | 字符类型 | ‘Tom’/"TOM" |
FLOAT | float | 单精度浮点数 | 2.3 |
DOUBLE | double | 双精度浮点数 | 3.14159 |
BINARY | 字节数组 | ||
TIMESTAMP | 时间类型 |
Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,理论上可以存储2GB的字符数。
数据类型 | 描述 | 语法展示 |
MAP | 键值对元组集合,使用数组表示法访问。例如:数据类型为MAP,键值对为‘first’ =>'Tom'和‘last’=>'Jeffry',可以通过字段名first访问第一个元素。 | map() 例:map |
ARRAY | 数组,一组具有相同类型和名称的变量的集合。变量为数组的元素,编号从0开始。例如:数组为['Tom','Jeffry'],可以通过[1]访问Jeffry,通过[0]访问Tom。 | Array() 例:array |
STRUCT | 通过“点”来访问, 它封装了一个命名字段集合,复杂数据 类型允许任意层次的嵌套。 。例如:STRUCT(first string,last string),第一个元素可以通过字段first来使用。 | struct() 例:struct |
Hive有三种复杂数据类型ARRAY、MAP和STRUCT。ARRAY和MAP与Java中的Array和Map类似,STRUCT与C语言中的Struct类似。
例子(三种不同类型的json表达):
(1)创建test.txt文件,内容为:
songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing
注:MAP,ARRAY,STRUCT元素之间可以用统一的字符表示。这里用下划线·“_”。
(2)创建hive表
- create table test(
- name string,
- friends array<string>,
- children map<string, int>,
- address struct<street:string, city:string> )
- row format delimited fields terminated by ','
- collection items terminated by '_'
- map keys terminated by ':'
- lines terminated by '\n';
注:
row format delimited fields terminated by ',' :列分隔符;
collection items terminated by '_' :MAP,STRUCT,ARRAY里的元素分隔符;
map keys terminated by ':' :MAP中的key与value的分隔符;
lines terminated by '\n'; :行分隔符;
(3)导入数据
load data local inpath '/root/datas/test.txt' into table test;
注:HDFS上数据存储的位置 :/user/hive/warehouse/test.db/test
(4)查看数据
select * from test;
Hive的原子数据类型可以进行隐式转换,但是不会进行反向转化。
例如:使用INT类型,TINYINT会自动转换为INT类型;例如:某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,除非使用CAST操作,否则会返回错误。
(1)隐式类型转换
1)任何整数类型都可以转化为更高级的类型,比如:TINYINT=>INT,INT=>BIGINT;
2)TINYINT,SMALLINT,INT => FLOAT
3)任何整数类型(float、string)都可以转换为double类型;
4)BOOLEAN类型不可以转换;
(2)显式类型转换
例如:CAST('1' AS INT)将把字符串'1' 转换成整数1;
例如:执行CAST('X' AS INT);表达式返回空值NULL,强制类型转换失败。
本文为学习笔记!!!