Hive中數據類型可以分爲基本數據類型和複合數據類型。這些數據類型都是用Java實現的。
1. 基本數據類型
類型名稱 | 描述 | 舉例 |
---|---|---|
boolean | true/false | true |
tinyint | 1byte有符號整數 | 30 |
smallint | 2byte有符號整數 | 30 |
int | 4byte有符號整數 | 30 |
bigint | 8byte有符號整數 | 30 |
float | 4byte單精度浮點數 | 1.0 |
double | 8byte單精度浮點數 | 1.0 |
string | 字符串(無長度限制) | ‘hello world’ |
varchar | 字符串(1-65355位,超長截斷) | ‘abc’ |
timestamp(v0.8.0+) | 整數,浮點數或字符串 | 123345677(Unix新紀元秒數); 123345677.123456789(Unix新紀元秒+納秒數); ‘2020-06-11 20:39:35.123456789’(JDBC 所兼容的java.sql.Timestamp時間格式) |
date | 日期 | 20200611 |
2. 複合數據類型
類型名稱 | 描述 | 舉例 |
---|---|---|
array | 字段類型必須相同 | array(1,2,3) |
map | 鍵值對 | map(name:zhangsan,age:12) |
struct | 字段類型可以不同 | strunct(‘a’,1,2,3) |
下面舉例說明如何使用複合數據類型建表,以及如何查詢複合數據類型的數據:
2.1 創建表
create table myhive.complex
(id int,
profession ARRAY<string>,
info map<string,string>,
address struct<province:string, city:string, district:string>)
row format delimited fields terminated by ' '
collection items terminated by '#'
map keys terminated by ':';
2.2 導入數據
vi /home/hadoop/data/hiveData/complex.txt
#插入如下數據
1 teacher#driver name:john#age:28 shandong#qingdao#huangdaoqu
表中導入數據
load data local inpath '/home/hadoop/data/hiveData/complex.txt' into table myhive.complex;
2.3 查詢數據
#array類型按下標查詢
select id,profession[0],profession[1] from myhive.complex;
#map類型按key查詢
select id,info['name'] as name, info['age'] as age from myhive.complex;
#struct類型按key查詢
select id,address.province, address.city, address.district from myhive.complex;
總結
對於Hive而言,有時並不太瞭解被推送到系統中的數據,所以採用相對不嚴格的數據類型會好一些,這樣可以避免數據在導入時不被截斷。