1、基本数据类型
HIVE | MySQL | JAVA | 长度 | 例子 |
---|---|---|---|---|
TINYINT | TINYINT | byte | 1byte有符号整数 | 2 |
SMALINT | SMALINT | short | 2byte有符号整数 | 20 |
INT | INT | int | 4byte有符号整数 | 20 |
BIGINT | BIGINT | long | 8byte有符号整数 | 20 |
BOOLEAN | 无 | boolean | 布尔类型,true或者false | TRUE FALSE |
FLOAT | FLOAT | float | 单精度浮点数 | 3.14159 |
DOUBLE | DOUBLE | double | 双精度浮点数 | 3.14159 |
STRING | VARCHAR | string | 字符系列,可以指定字符集,可以使用单引号或者双引号。 | ‘now is the time’ “for all good men” |
TIMESTAMP | TIMESTAMP | 时间类型 | ||
BINARY | BINARY | 字节数组 |
注意:mysql没有布尔数据类型
mysql:
select 1=1
1
select 1=3
0
hive:
select 1=1
true
select 1=3
false
2、集合数据类型
数据类型 | 描述 | 语法示例 |
---|---|---|
STRUCT | 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。 | struct() 例如struct<street:string, city:string> |
MAP | MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素 | map()例如map<string, int> |
ARRAY | 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。 | Array()例如array |
Array
类似java中的数组
Map
类似java中的键值对
Struct
类似java中的javabean
案例
a、建立一张testCollect表
create table testCollect(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string,city:string,email:int>
)
row format delimited
fields terminated by ',' -- 导入的文本,按照“,”区分各个字段
collection items terminated by '_' -- 对于(ARRAY、MAP、STRUCT)单个字段,使用“_”区分各个元素
map keys terminated by ':' -- 对于MAP中单个字段中的单个元素,使用“:”区分key和value
lines terminated by '\n' -- 行分隔符
;
b、导入数据
[atguigu@hadoop102 module]$ vim testCollect.txt
songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing_10010
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing_10011
[atguigu@hadoop102 module]$ hive -e "load data local inpath '/opt/module/hadoop-3.1.3/testCollect.txt' into table db_hive1.testCollect;"
结果
访问数据中的元素
select name
,friends[1]
,children['xiao song']
,address.city
from testCollect
where name="songsong";
3、类型转化
3.1 隐式转化
- 自动类型转化 tinyint 可以转为 int ,int 可以转为 bigint
- 整数类型、float 和 String类型(如:String : “1.1”) 可以转为double
- tinyint、smallint、int都可以转换为 float
- Boolean类型不可以转换为任何其它的类型
3.2 强制转化
- CAST(‘1’ AS INT)
- 注意单词的拼写,不和CASE混淆
- 如果转化失败,则会返回NULL,例如:CAST(‘1’ AS INT),不会报错