一、数据类型
1、基本数据类型
数据类型 | 长度 | 例子 |
TINYINT | 1byte有符号整数 | 20 |
SMALINT | 2byte有符号整数 | 20 |
INT | 4byte有符号整数 | 20 |
BIGINT | 8byte有符号整数 | 20 |
BOOLEAN | 布尔类型,true或者false | TRUE FALSE |
FLOAT | 单精度浮点数 | 3.14159 |
DOUBLE | 双精度浮点数 | 3.14159 |
STRING | 字符系列。可以指定字符集。可以使用单引号或者双引号。 | ‘now is the time’ “for all good men” |
TIMESTAMP | 时间类型 |
2、集合数据类型
数据类型 | 描述 | 语法示例 |
STRUCT | 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。 | struct() |
MAP | MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素 | map() |
ARRAY | 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。 | Array() |
二、案例解析
1、数据格式
JSON
{
“name”: “陈小春”,
“friends”: [“郑伊健” , “谢天华”], //列表Array
“children”: { //键值Map
“jasper”: 3 ,
“baby”: 1 ,
}
“address”: { //结构Struct
“street”: “皇后大道” ,
“city”: “香港”
}
}
上面的数据更容易理解,在文本当中的数据是这样:
陈小春,郑伊健_谢天华,jasper:3_baby:1,皇后大道_香港 刘烨,章子怡_孙俪,诺一:8_霓娜:6,长安街_北京 |
2、创建表
create table star(
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 '/usr/local/data/star.txt' into table star;
4、查询数据
访问三种集合列里的数据
select friends[1],children['jasper'], address.city from star where name= '陈小春';
结果: