普通的存儲格式匿级,比如我們表格中有abc三列,像mysql按行存儲則如下所示
大數(shù)據(jù)引擎存儲中染厅,大部分都是采用列式存儲痘绎,比如Hive、Hbase
a肖粮、b孤页、c各列數(shù)據(jù)會集中存放在一起顿乒,如下所示
Hive中textfile作為缺省的存儲格式楣黍,采用列式存儲,Hive也提供了ORC存儲格式,ORC格式能采用更好的壓縮算法筛欢、更高效的查詢奇钞。結(jié)合了行存儲和列式存儲的優(yōu)點(diǎn)
每個(gè)ORC文件由1個(gè)或多個(gè)條帶(stripe)組成碘赖,每個(gè)條帶一般是一個(gè)HDFS塊升筏。每個(gè)條帶由Index Data、Row Data鲜结、 Stripe Footer組成展运。
Index Data:保存了一些索引信息,記錄著每個(gè)數(shù)據(jù)段在stripe中的位置精刷。
Row Data:主要存放數(shù)據(jù)的地方拗胜,一個(gè)Rows Data由多個(gè)行組構(gòu)成,每10000行構(gòu)成一個(gè)行組怒允,行組內(nèi)部以流式形式列式存儲埂软,實(shí)際上由兩部分構(gòu)成:metadata Stream描述行組的元數(shù)據(jù),dataStream數(shù)據(jù)流纫事。
Stripe Footer:描述各個(gè)stream的類型勘畔、長度等信息
另外,每個(gè)orc文件中除若干個(gè)stripe外儿礼,還包含file footer(文件腳注)咖杂、postscript(描述信息)
file footer:記錄每個(gè)stripe的行數(shù)庆寺,每個(gè)列的數(shù)據(jù)類型蚊夫,每個(gè)列的最大值、最小值等信息懦尝。
postscript:壓縮參數(shù)知纷、壓縮大小等信息
讀取orc文件時(shí),先讀取postscript信息陵霉,根據(jù)postscript記錄的filefooter長度信息琅轧,解析filefooter,再從filefooter中解析出各個(gè)stripe信息踊挠,再讀取各個(gè)stripe乍桂。