1. 基本数据类型
hive数据类型 | java数据类型 | 长度 | 栗子 |
---|---|---|---|
TINYINT | byte | 1byte 有符号整数 | 10 |
SMALINT | short | 2byte 有符号整数 | 10 |
INT | int | 4byte 有符号整数 | 10 |
BIGINT | long | 8byte 有符号整数 | 10 |
BOOLEAN | boolean | 布尔类型,true 或者 false | true\false |
FLOAT | float | 单精度浮点数 | 3.1415 |
DOUBLE | double | 双精度浮点数 | 3.1415 |
STRING | string | 字符系列 | ‘hello world’ |
TIMESTAMP | 时间类型 | ||
BINARY | 字节数组 |
2. 集合数据类型
数据类型 | 描述 | 栗子 |
---|---|---|
STRUCT | 和 c 语言中的 struct 类似,都可以通过“点”符号访 问元素内容。例如,如果某个列的数据类型是 STRUCT{first STRING, last STRING},那么第 1 个元素可以通过字段.first 来 引用。 | struct<id: int, name: string> |
MAP | MAP 是一组键-值对元组集合,使用数组表示法可以 访问数据。例如,如果某个列的数据类型是 MAP,其中键 ->值对是’first’->’John’和’last’->’Doe’,那么可以 通过字段名[‘last’]获取最后一个元素 | map<int, string> |
ARRAY | 数组是一组具有相同类型和名称的变量的集合。这些 变量称为数组的元素,每个数组元素都有一个编号,编号从 零开始。例如,数组值为[‘John’, ‘Doe’],那么第 2 个 元素可以通过数组名[1]进行引用。 | array |
3. 举个例子
3.1 原始数据
{
"name": "zhangsan",
"friends": ["lisi" , "wangwu"] ,
"children": { //键值 Map,
"zhangsi": 20 ,
"zhangwu": 21
}
"address": {
"streetid": 1,
"city": "beijing"
}
}
test.txt
zhangsan,lisi_wnangwu,zhangsi:20_zhangwu:21,1_beijing
3.2 创建表
create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<streetid: int, city: string>
)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
3.3 导入数据
load data local inpath '/tmp/test.txt' into table test;
4. 类型转换
4.1 隐式转换
-
任何整数类型都可以隐式地转换为一个范围更广的类型,如 TINYINT 可以转换成 INT,INT 可以转换成 BIGINT。
-
所有整数类型、FLOAT 和 STRING 类型都可以隐式地转换成 DOUBLE。
-
TINYINT、SMALLINT、INT 都可以转换为 FLOAT。
-
BOOLEAN 类型不可以转换为任何其它的类型。
4.2 CAST转换
CAST(‘1’ AS INT)将把字符串’1’ 转换成整数 1;
如果强制类型转换失败,如执行 CAST(‘X’ AS INT),表达式返回空值 NULL。