1. 程式人生 > >Hive學習之路 (六)Hive SQL之數據類型和存儲格式

Hive學習之路 (六)Hive SQL之數據類型和存儲格式

OS big api 而且 好的 存儲 array 文本文件 字符串

一、數據類型

1、基本數據類型

Hive 支持關系型數據中大多數基本數據類型

類型描述示例
boolean true/false TRUE
tinyint 1字節的有符號整數 -128~127 1Y
smallint 2個字節的有符號整數,-32768~32767 1S
int 4個字節的帶符號整數 1
bigint 8字節帶符號整數 1L
float 4字節單精度浮點數 1.0
double 8字節雙精度浮點數 1.0
deicimal 任意精度的帶符號小數 1.0
String 字符串,變長 “a”,’b’
varchar 變長字符串 “a”,’b’
char 固定長度字符串 “a”,’b’
binary 字節數組 無法表示
timestamp 時間戳,納秒精度 122327493795
date 日期 ‘2018-04-07’

和其他的SQL語言一樣,這些都是保留字。需要註意的是所有的這些數據類型都是對Java中接口的實現,因此這些類型的具體行為細節和Java中對應的類型是完全一致的。例如,string類型實現的是Java中的String,float實現的是Java中的float,等等。

2、復雜類型

類型描述示例
array 有序的的同類型的集合 array(1,2)
map key-value,key必須為原始類型,value可以任意類型 map(‘a’,1,’b’,2)
struct 字段集合,類型可以不同 struct(‘1’,1,1.0), named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0)

二、存儲格式

Hive會為每個創建的數據庫在HDFS上創建一個目錄,該數據庫的表會以子目錄形式存儲,表中的數據會以表目錄下的文件形式存儲。對於default數據庫,默認的缺省數據庫沒有自己的目錄,default數據庫下的表默認存放在/user/hive/warehouse目錄下。

(1)textfile

textfile為默認格式,存儲方式為行存儲。數據不做壓縮,磁盤開銷大,數據解析開銷大。

(2)SequenceFile

SequenceFile是Hadoop API提供的一種二進制文件支持,其具有使用方便、可分割、可壓縮的特點。

SequenceFile支持三種壓縮選擇:NONE, RECORD, BLOCK。 Record壓縮率低,一般建議使用BLOCK壓縮。

(3)RCFile

一種行列存儲相結合的存儲方式。

(4)ORCFile

數據按照行分塊,每個塊按照列存儲,其中每個塊都存儲有一個索引。hive給出的新格式,屬於RCFILE的升級版,性能有大幅度提升,而且數據可以壓縮存儲,壓縮快 快速列存取。

(5)Parquet

Parquet也是一種行式存儲,同時具有很好的壓縮性能;同時可以減少大量的表掃描和反序列化的時間。

三、數據格式

當數據存儲在文本文件中,必須按照一定格式區別行和列,並且在Hive中指明這些區分符。Hive默認使用了幾個平時很少出現的字符,這些字符一般不會作為內容出現在記錄中。

Hive默認的行和列分隔符如下表所示。

分隔符描述
\n 對於文本文件來說,每行是一條記錄,所以\n 來分割記錄
^A (Ctrl+A) 分割字段,也可以用\001 來表示
^B (Ctrl+B) 用於分割 Arrary 或者 Struct 中的元素,或者用於 map 中鍵值之間的分割,也可以用\002 分割。
^C 用於 map 中鍵和值自己分割,也可以用\003 表示。

Hive學習之路 (六)Hive SQL之數據類型和存儲格式