1 基本数据类型
Hive 数据类型 | Java 数据类型 | 长度 | 例子 |
---|---|---|---|
TINYINT | byte | 1byte 有符号整数 | 20 |
SMALINT | short | 2byte 有符号整数 | 20 |
INT | int | 4byte 有符号整数 | 20 |
BIGINT | long | 8byte 有符号整数 | 20 |
BOOLEAN | boolean | 布尔类型,true 或者 false | TRUE FALSE |
FLOAT | float | 单精度浮点数 | 3.14159 |
DOUBLE | double | 双精度浮点数 | 3.14159 |
STRING | string | 字符系列。可以指定字 符集。可以使用单引号或者双 引号。 | ‘ now is the time ’ “for all good men” |
TIMESTAMP | 时间类型 | ||
BINARY | 字节数组 |
hive是使用java写的,所以很多数据类型和java是一样的。不同的hive没有char类型,用上String类型来代替了,理论上它可以存储 2GB 的字符数。可以使用timestamp类型来表示时间,binary类型来表示字节数组,用来存储二进制文件等。
语法使用:
col_name col_typle,
主键id 姓名 年龄 性别 存款 出生日期 大头照
create table people(
key bigint,
name string,
gender tinyint,
wages double,
birthday timestamp,
images binary
)
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 |
java的集合类型分为三类,一种存储collection,一种存储map,一种存储c的struct或者java对象中的对象的属性。
2.1 array类型
array可用用于存储java中的数据对象,collectiond对象(list,set容器)。他的特点是:所有元素的数据类型是相同的。
比如有一个文档的数据是
梅花,桃花,菊花,荷花,樱花 三叶草,小草,嫩草,绿草
苹果花,牡丹花 香草,水草
可以认为是每条数据由两个不同类别的变量表示,一个表示花,一个表示草;并且每个类别的数据类型是一样的,因此可以定义两个数组来进行存储该数据。
CREATE TABLE IF NOT EXISTS db_hive.table_arraytext1(
floors ARRAY<string>,
grass ARRAY<string>
)
row format delimited fields terminated by '\t'
collection items terminated by ','
lines terminated by '\n';
2.2 map类型
map数据类型,数据采用K-V的形式进行。
比如一下文档,很明显的使用k-v的形式进行数据存储,我们就可以使用map的类型来进行存储
qq:944869,微信:123456,电话:123456 T桖:7,外衣:10,裤子:20
email:123@123.com,电话:456123 运动服:10,羽绒服:5
CREATE TABLE IF NOT EXISTS db_hive.table_maptext1(
contact map<string,string>,
clothes map<string,string>
)
row format delimited fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n';
2.3 struct类型
在面向对象中,对象的属性就可以认为是一个struct的类型
比如一下文档,能感觉到,这个文档中存储的信息前面是一个人的信息,后面是一个宠物的信息。这里可以认为存储的是两个对象的属性,就可以使用struct的类型来存储。
张三,18,男,学生,团员 大黄,狗子,2
李四,20,男,学生,预备党员 橘座,猫咪,2
CREATE TABLE IF NOT EXISTS db_hive.table_structtext1(
people struct<name:string,age:int,indenty:string>,
pet struct<name:string,style:string,age:int>
)
row format delimited
fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n';
3 例子
现在有一个文档
张三 18 男 扫地,做饭,洗碗 2000.20 2000-02-10 12:04:00 云南,昆明市,五华区 qq:9469444,微信:184681
李四 20 男 逛街,打球,打LOL 123122.80 1993-12-10 12:04:00 云南,昆明市,嵩明,杨林 qq:4869444,微信:1846829,电话:123456789
定义他的数据类型
CREATE TABLE IF NOT EXISTS db_hive.table_person1(
name string COMMENT '名字',
age int COMMENT '年龄',
gender string COMMENT '性别',
hobby array<string> COMMENT '爱好',
wagger double,
birthday timestamp,
address struct<pro:string,city:string,area:string,twon:string>,
contact map<string,string>
)
row format delimited
fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n';