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