Hive語言手冊之五:ORC文件格式



一、關於ORC文件格式( ORCHive0.11開始引入)

ORCOptimized Row Columnar)格式可以高效地存儲Hive數據,被設計用來規避其他文件格式存在的缺陷,使用ORC文件格式可以提升Hive讀、寫與處理數據的性能。ORC文件格式有以下優點:

1、一個任務的輸出對應一個文件,從而減輕Namenode的負載壓力

2Hive可以支持datetime,decimal和其他複雜類型(包括struct,list,map,union

3、使用存儲在文件中的輕型索引,可以

  (1)跳過那些沒有經過預複選的行

  (2)定位指定的行

4、基於數據類型的塊模式壓縮

 (1)對於整數列使用程長度編碼

 (2)對於字串列使用字典編碼

5、使用分離的RecordReaders對同一文件並行讀

6、不使用標籤(markers)就可以Split文件

7、爲讀寫操作固定所需的內存

8、元數據存儲在協議緩衝區(Protocol Buffers),它允許增加或者刪除一些列

 二、文件結構

一個ORC文件包含多個stripes每個stripes由多組行數據組成的)一個包含輔助信息的file footer在文件的結尾,一個postscript保存着壓縮參數及被壓縮的footer的長度。一個stripes缺省大小是250MB,其大小可以擴展的長度只受HDFS的約束。file footer包含文件中的一個記錄stripes信息的列表、每個stripes中行的數目及每個列的數據類型,它也包含列級的聚合結果:count, min, max, and sum。結構如下圖所示:


如上圖所示,在ORC文件中,每個Stripe包括索引數據、行數據及一個Stripe footerStripe footer包含了用於流定位的目錄Row data用於表掃描。索引數據(Indexdata)包括每個列的最小與最大值,以及它們在每個列的行號,行索引項(Rowindex entries)記錄了壓縮塊及解壓後字節的偏移。需要注意的是,ORC索引只是被用來選擇Stripe和行組,而不會被用於返回查詢結果擁有相對頻繁的行索引條目,可以爲了快速的數據讀取而跳過一些行,缺省情況下每次最多可以跳過10000行。ORC有能力基於過濾謂詞跳過非常多的行,可以使用第二關鍵字進行對錶進行排序,以達到減少查詢執行時間的效果。例如,如果主關鍵字是交易日期,表可以按照州、郵編或者姓名進行排序,當按照州查詢記錄的時候將跳過非目標州的記錄。

三、使用ORC的HiveQL語法

可以在表級或者分區級指定文件的格式,對錶或分區設置ORC格式的HiveQL命令示例如下

CREATE TABLE ... STORED AS ORC ALTER TABLE ... [PARTITION partition_spec] SET FILEFORMAT ORC SET hive.default.fileformat=Orc

ORC格式的參數通過TBLPROPERTIES來指定,支持的參數有:

關鍵字

缺省值

說明

orc.compress

ZLIB

壓縮方法(NONE, ZLIB, SNAPPY)

orc.compress.size

262,144

每個壓縮塊的字節數

orc.stripe.size

268435456

每個stripe的字節數

orc.row.index.stride

10,000

索引項之間的行數(number of rows between index entries),至少爲1000

orc.create.index

true

是否創建行索引

下面的例子創建了一個沒有壓縮的ORC格式表:

create table Addresses (
  name string,
  street string,
  city string,
  state string,
  zip int
) stored as orc tblproperties ("orc.compress"="NONE");

注:關於ORC的序列化與壓縮的文檔實在晦澀難懂,也沒有找到更詳細的說明材料,在此暫時不對其進行譯解。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章