Hive 数据类型和文件格式
原创
hive
Hive 提供了多种基本数据类型和复合数据类型。
四种基本类型为:
- 数值类型(Numeric Type)
- 时间类型(Date/Time Type)
- 字符串类型(string Type)
- misc Type
常见的复合数据类型包括 Structs、Maps 和 Arrays。
数值类型
类型 | 后缀 | 示例 | 数据范围 | 存储 | 说明 |
---|---|---|---|---|---|
tinyint | Y | 10Y | -128 to 127 | 1 byte | |
smallint | S | 10S | -32768-32767 | 2 byte | |
integer | - | 10 | -2,147,483,648 to 2,147,483,648 to 2,147,483,647 | 4 byte | |
int | - | 10 | -2,147,483,648 to 2,147,483,648 to 2,147,483,647 | 4 byte | 2.2.0integer的同义词引入 |
bigint | L | 10L | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | 8 byte | |
float | 4 byte | ||||
double | 8 byte | ||||
double precision | double的别名 avaliable starting with 2.2.0 | ||||
decimal | 0.11.0引入,精度38位,0.13.0引入用户可定义精度和规模 | ||||
numeric | same as decimal ,starting with 3.0.0 |
小数点
DECIMAL(precision,scale)
decimal(10,0)
时间类型
类型 | 说明 |
---|---|
timestamp | starting with 0.8.0 |
date | starting with 0.12.0 |
interval | starting with 1.2.0 |
时间戳 timestamp
支持传统的 UNIX 时间戳可选的纳秒精度。支持 java.sql.timestamp
格式 yyyy-MM-dd HH:MM:SS.fffffffff
和 yyyy-MM-dd HH:MM:ss.ffffffff
。
日期 date
yyyy-MM-dd
字符串类型
可以使用单引号(')或双引号("")来指定。
数据类型 | 长度 | 版本说明 |
---|---|---|
string | ||
varchar | 1-65355 | 0.12.0 |
char | 255 | 0.13.0 |
misc Type
类型 | 版本 |
---|---|
boolean | |
binary | 0.8.0 |
复合数据类型
复杂数据类型的声明必须使用尖括号指明其中数据字段的类型。定义三列,每列对应一种复杂的数据类型,如下所示。
CREATE TABLE complex(
col1 ARRAY< INT>,
col2 MAP< STRING,INT>,
col3 STRUCT< a:STRING,b:INT,c:DOUBLE>
)
- Structs:一组由任意数据类型组成的结构。比如,定义一个字段 C 的类型为 STRUCT {a INT; b STRING},则可以使用 a 和 C.b 来获取其中的元素值;
- Maps:和 Java 中的 Map 相同,即存储 K-V 对的;
- Arrays:数组;
类型 | 实例 | 版本 |
---|---|---|
arrays | array<data_type> | |
maps | map<primitive_type,data_type> | |
structs | struct<col_name:data_type[comment col_comment],…> | |
union | uniontype<data_type,data_type,…> | 0.7.0 |
Hive 的文件格式
TEXTFILE //文本,默认值
SEQUENCEFILE // 二进制序列文件
RCFILE //列式存储格式文件 Hive0.6以后开始支持
ORC //列式存储格式文件,比RCFILE有更高的压缩比和读写效率,Hive0.11以后开始支持
PARQUET //列出存储格式文件,Hive0.13以后开始支持
参考资料: