目錄 正文 一、數(shù)據(jù)類(lèi)型
1、基本數(shù)據(jù)類(lèi)型
Hive 支持關(guān)系型數(shù)據(jù)中大多數(shù)基本數(shù)據(jù)類(lèi)型
類(lèi)型 | 描述 | 示例 |
boolean |
true/false |
TRUE |
tinyint |
1字節(jié)的有符號(hào)整數(shù) |
-128~127 1Y |
smallint |
2個(gè)字節(jié)的有符號(hào)整數(shù),-32768~32767 |
1S |
int |
4個(gè)字節(jié)的帶符號(hào)整數(shù) |
1 |
bigint |
8字節(jié)帶符號(hào)整數(shù) |
1L |
float |
4字節(jié)單精度浮點(diǎn)數(shù) |
1.0 |
double |
8字節(jié)雙精度浮點(diǎn)數(shù) |
1.0 |
deicimal |
任意精度的帶符號(hào)小數(shù) |
1.0 |
String |
字符串,變長(zhǎng) |
“a”,’b’ |
varchar |
變長(zhǎng)字符串 |
“a”,’b’ |
char |
固定長(zhǎng)度字符串 |
“a”,’b’ |
binary |
字節(jié)數(shù)組 |
無(wú)法表示 |
timestamp |
時(shí)間戳,納秒精度 |
122327493795 |
date |
日期 |
‘2018-04-07’ |
和其他的SQL語(yǔ)言一樣,這些都是保留字。需要注意的是所有的這些數(shù)據(jù)類(lèi)型都是對(duì)Java中接口的實(shí)現(xiàn),因此這些類(lèi)型的具體行為細(xì)節(jié)和Java中對(duì)應(yīng)的類(lèi)型是完全一致的。例如,string類(lèi)型實(shí)現(xiàn)的是Java中的String,float實(shí)現(xiàn)的是Java中的float,等等。
2、復(fù)雜類(lèi)型
類(lèi)型 | 描述 | 示例 |
array |
有序的的同類(lèi)型的集合 |
array(1,2) |
map |
key-value,key必須為原始類(lèi)型,value可以任意類(lèi)型 |
map(‘a(chǎn)’,1,’b’,2) |
struct |
字段集合,類(lèi)型可以不同 |
struct(‘1’,1,1.0), named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0) |
二、存儲(chǔ)格式
Hive會(huì)為每個(gè)創(chuàng)建的數(shù)據(jù)庫(kù)在HDFS上創(chuàng)建一個(gè)目錄,該數(shù)據(jù)庫(kù)的表會(huì)以子目錄形式存儲(chǔ),表中的數(shù)據(jù)會(huì)以表目錄下的文件形式存儲(chǔ)。對(duì)于default數(shù)據(jù)庫(kù),默認(rèn)的缺省數(shù)據(jù)庫(kù)沒(méi)有自己的目錄,default數(shù)據(jù)庫(kù)下的表默認(rèn)存放在/user/hive/warehouse目錄下。
(1)textfile
textfile為默認(rèn)格式,存儲(chǔ)方式為行存儲(chǔ)。數(shù)據(jù)不做壓縮,磁盤(pán)開(kāi)銷(xiāo)大,數(shù)據(jù)解析開(kāi)銷(xiāo)大。
(2)SequenceFile
SequenceFile是Hadoop API提供的一種二進(jìn)制文件支持,其具有使用方便、可分割、可壓縮的特點(diǎn)。
SequenceFile支持三種壓縮選擇:NONE, RECORD, BLOCK。 Record壓縮率低,一般建議使用BLOCK壓縮。
(3)RCFile
一種行列存儲(chǔ)相結(jié)合的存儲(chǔ)方式。
(4)ORCFile
數(shù)據(jù)按照行分塊,每個(gè)塊按照列存儲(chǔ),其中每個(gè)塊都存儲(chǔ)有一個(gè)索引。hive給出的新格式,屬于RCFILE的升級(jí)版,性能有大幅度提升,而且數(shù)據(jù)可以壓縮存儲(chǔ),壓縮快 快速列存取。
(5)Parquet
Parquet也是一種行式存儲(chǔ),同時(shí)具有很好的壓縮性能;同時(shí)可以減少大量的表掃描和反序列化的時(shí)間。
三、數(shù)據(jù)格式
當(dāng)數(shù)據(jù)存儲(chǔ)在文本文件中,必須按照一定格式區(qū)別行和列,并且在Hive中指明這些區(qū)分符。Hive默認(rèn)使用了幾個(gè)平時(shí)很少出現(xiàn)的字符,這些字符一般不會(huì)作為內(nèi)容出現(xiàn)在記錄中。
Hive默認(rèn)的行和列分隔符如下表所示。
分隔符 | 描述 |
\n |
對(duì)于文本文件來(lái)說(shuō),每行是一條記錄,所以\n 來(lái)分割記錄 |
^A (Ctrl+A) |
分割字段,也可以用\001 來(lái)表示 |
^B (Ctrl+B) |
用于分割 Arrary 或者 Struct 中的元素,或者用于 map 中鍵值之間的分割,也可以用\002 分割。 |
^C |
用于 map 中鍵和值自己分割,也可以用\003 表示。 |
|