Hive 总结之数据类型归纳
1. 背景
- Hive的本质是一个转换工具,将类sql语句(HQL)转换为mapreduce程序或者类mapreduce程序(hadoop的mapreduce或者spark)。
- Hive可以处理结构化数据并转换为一张表来提供对外的数据查询和分析。但本身不能存储数据。
- Hive的表的元数据(schema等信息)存储在数据库中,一般配置为使用mysql存储,不设置就是默认的derby数据库存储。数据信息则存储在hdfs中。
- 既然涉及到类SQL(HQL),则必定语法上主体和SQL规范很接近,同样会有数据类型。
- 本文就是关于数据类型的文章
2. 基本数据类型
会将Hive数据类型和Java数据类型进行对比,数据长度 和示例。
- TINYINT:1byte有符号整数如20,可以类比java的byte类型
- SMALINT:2byte有符号整数如20,可以类比java的short类型
- INT:4byte有符号整数如20,可以类比java的int的类型。
注意,不管在哪种编程语言(sql也是一种编程语言),int和double都是主要的数据类型,当然特殊场景下会有变化。 - BIGINT:8byte有符号整数如10000,可以类比java的long类型
- BOOLEAN:布尔类型,true或者false如TRUE、 FALSE,可以类比Java的boolean类型。
- FLOAT:单精度浮点数如3.14159,可以类比java的 float类型。
注意,在阿里巴巴的java开发规范中,一般禁止使用float和double,因为读写时都会有精度损失,一般使用decimal代替,不过这是HQL,如果可以的话,使用string存储浮点数也是一种解决办法。 - DOUBLE:双精度浮点数如3.14159,可以类比java 的double类型。注意点同上
- STRING:字符系列。可以指定字符集。可以使用单引号或者双引号。如‘now is the time’ 、“for all good men”,可以类比java的string类型。也可以类比sql的varchar可变字符串类型。
- TIMESTAMP:时间类型
- BINARY:字节数组
在HQL中,一般常用的是时间、int、string类型,其他基本类型了解即可。因为HQL主要用于处理海量数据情形,很多时候都是处理结构化文本数据,这时候字符串类型较多。
3. 集合数据类型
3.1 集合类型概述
- STRUCT(结构体)对象,和c语言以及swift语言中的struct类似,都可以通过“点”符号访问元素内容。
- 例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。
- 示例如 struct()
- MAP 映射,MAP是一组键-值对元组集合,使用数组表示法可以访问数据。
- 例如