文章目录
Hive系列文章
Hive系列 (八):Hive中的explode 与 lateral view
概述
Hive 的内置数据类型可以分为两大类:
-
基础数据类型;
-
复杂数据类型;
基础数据类型
其中,基础数据类型包括:TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,BINARY,TIMESTAMP,DECIMAL,CHAR,VARCHAR,DATE。
Numeric Types
数据类型 | 介绍 | 备注 |
---|---|---|
TINYINT | 1 字节有符号整数,从-128 到127 |
|
SMALLINT | 2 字节有符号整数,从-32,768 到32,767 |
|
INT/INTEGER | 24字节有符号整数,从-2,147,483,648 到 2,147,483,647 |
|
BIGINT | 8 字节有符号整数,从-9,223,372,036,854,775,808 到9,223,372,036,854,775,807 |
|
BOOLEAN | ||
FLOAT | 4 字节单精度浮点数 | |
DOUBLE | 8 字节双精度浮点数 | |
DOUBLEPRECISION | alias for DOUBLE | 从Hive2.2.0开始支持 |
DECIMAL | 精度为 38 位 | 在 Hive 0.11.0中引入,精度为 38 位, Hive 0.13.0引入了用户可定义的精度和比例 |
NUMERIC | 等同于DECIMAL | 与DECIMAL 相同,从Hive 3.0.0开始支持 |
Date/Time Types
数据类型 | 介绍 | 备注 |
---|---|---|
TIMESTAMP | 时间戳 | 从 Hive 0.8.0开始可用 |
DATE | 日期 | 从 Hive 0.12.0开始可用 |
INTERVAL | 用作时间加减 | 从 Hive 1.2.0开始可用 |
String Types
数据类型 | 介绍 | 备注 |
---|---|---|
STRING | 存储变长文本,长度无限制 | |
VARCHAR | 有长度限制,不定长,在1-65355之间 | 从 Hive 0.12.0开始可用 |
CHAR | 长度比varchar短很多,定长1-255 | 从 Hive 0.13.0开始可用 |
Misc Types
数据类型 | 介绍 | 备注 |
---|---|---|
BOOLEAN | 布尔值 | |
BINARY | 二进制类型 | 从 Hive 0.8.0开始可用 |
复杂数据类型
数据类型 | 介绍 | 备注 |
---|---|---|
ARRAY | 数组:ARRAY<data_type> | 从 Hive 0.14开始可用 |
MAP | MAP<primitive_type, data_type> | 从 Hive 0.14开始可用 |
STRUCT | STRUCT<col_name : data_type [COMMENT col_comment], …> | |
UNION | UNIONTYPE<data_type, data_type, …> | 从 Hive 0.7.0开始可用 |
Array Types
Array的结构
创建数据文件arryTest.txt
[hadoop@master data]$ vim arryTest.txt
添加以下内容, 注意行末的tab
1,2,3,4 you,are,a,boy
5,6,7,8 she,is,a,girl
建表myhive.arraytest
[hadoop@master sql_script]$ vim arrayTest.sql
脚本如下:
create table myhive.array_test(
id array<int>,
info array<string>
)
row format delimited
fields terminated by '\t'
collection items terminated by ',';
~
插入数据
0: jdbc:hive2://master:10000> LOAD DATA LOCAL INPATH '/opt/export/data/arryTest.txt' OVERWRITE INTO TABLE myhive.array_test;
Loading data to table myhive.array_test
OK
No rows affected (8.416 seconds)
查看数据
0: jdbc:hive2://master:10000> select * from myhive.array_test;
OK
+----------------+--------------------------+
| array_test.id | array_test.info |
+----------------+--------------------------+
| [1,2,3,4] | ["you","are","a","boy"] |
| [5,6,7,8] | ["she","is","a","girl"] |
+----------------+--------------------------+
2 rows selected (3.943 seconds)
Array操作
# size() 计算长度
0: jdbc:hive2://master:10000> select size(id),size(info) from myhive.array_test;
OK
+------+------+
| _c0 | _c1 |
+------+------+
| 4 | 4 |
| 4 | 4 |
+------+------+
2 rows selected (3.454 seconds)
# 注意下表是从0开始
0: jdbc:hive2://master:10000> select id[2],info[4] from myhive.array_test;
OK
+------+-------+
| _c0 | _c1 |
+------+-------+
| 3 | NULL |
| 7