hive支持的數據類型和存儲格式


1.hive支持的數據類型:

  Hive支持原始數據類型和復雜類型,原始類型包括數值型,Boolean,字符串,時間戳。復雜類型包括array,map,struct,union。

    原始數據類型:

類型名稱 大小 備注
TINYINT 1字節整數 45Y
SMALLINT 2字節整數 12S
INT 4字節整數 10
BIGINT 8字節整數 244L
FLOAT 4字節單精度浮點數 1.0
DOUBLE 8字節雙精度浮點數 1.0
DECIMAL 任意精度帶符號小數 DECIMAL(4, 2)范圍:-99.99到99.99
BOOLEAN true/false TRUE
STRING 字符串,長度不定 “a”, ‘b’
VARCHAR 字符串,長度不定,有上限 0.12.0版本引入
CHAR 字符串,固定長度 “a”, ‘b’
BINARY 存儲變長的二進制數據  
TIMESTAMP 時間戳,納秒精度 122327493795
DATE 日期 ‘2016-07-03’

  復雜類型:

類型名稱 大小 示例
ARRAY 存儲同類型數據 ARRAY< data_type>
MAP key-value,key必須為原始類型,value可以是任意類型 MAP< primitive_type, data_type>
STRUCT 類型可以不同 STRUCT< col_name : data_type [COMMENT col_comment], …>
UNION 在有限取值范圍內的一個值 UNIONTYPE< data_type, data_type, …>

 

2.hive支持的存儲格式:

  hive支持的存儲格式包括TextFile、SequenceFile、RCFile、Avro Files、ORC Files、Parquet。

TextFile:

  Hive默認格式,數據不做壓縮,磁盤開銷大,數據解析開銷大。
  可結合Gzip、Bzip2、Snappy等使用(系統自動檢查,執行查詢時自動解壓),但使用這種方式,hive不會對數據進行切分,從而無法對數據進行並行操作。

SequenceFile:

  SequenceFile是Hadoop API 提供的一種二進制文件,它將數據以<key,value>的形式序列化到文件中。這種二進制文件內部使用Hadoop 的標准的Writable 接口實現序列化和反序列化。它與Hadoop API中的MapFile 是互相兼容的。Hive 中的SequenceFile 繼承自Hadoop API 的SequenceFile,不過它的key為空,使用value 存放實際的值, 這樣是為了避免MR 在運行map 階段的排序過程。

SequenceFile的文件結構圖:

Header通用頭文件格式:

SEQ 3BYTE
Nun 1byte數字
keyClassName  
ValueClassName  
compression (boolean)指明了在文件中是否啟用壓縮
blockCompression (boolean,指明是否是block壓縮)
compression codec
Metadata 文件元數據
Sync 頭文件結束標志

Block-Compressed SequenceFile格式

  RCFile

RCFile是Hive推出的一種專門面向列的數據格式。 它遵循“先按列划分,再垂直划分”的設計理念。當查詢過程中,針對它並不關心的列時,它會在IO上跳過這些列。需要說明的是,RCFile在map階段從 遠端拷貝仍然是拷貝整個數據塊,並且拷貝到本地目錄后RCFile並不是真正直接跳過不需要的列,並跳到需要讀取的列, 而是通過掃描每一個row group的頭部定義來實現的,但是在整個HDFS Block 級別的頭部並沒有定義每個列從哪個row group起始到哪個row group結束。所以在讀取所有列的情況下,RCFile的性能反而沒有SequenceFile高。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM