參考
大資料開源列式存儲引擎Parquet和ORC
新型列式存儲格式 Parquet 詳解
讀寫parquet格式檔案的幾種方式
Parquet file optional field does not exist
parquet
列存
列存使用場景:資料列很多,且每次操作僅針對若幹列的情景
parquet資料存儲
schema描述存儲結構
有group和primitive兩種,用以表示嵌套類型
group 複雜類型,基本處于中間節點,并不存儲資料,為虛拟節點
primitive 基本類型,int,String之類,處于葉子節點,存儲具體資料
字段屬性
required 必須出現1次
repeted 可以出現0次或多次
optional 可以出現0次或1次
資料模型(repetition && definition)
repetition level:表示該數值是在那一層開始出現重複的;0表示一個新的記錄;required & optional 無重複含義, 無需該定義;在寫入的時候将其了解為該節點和路徑上的哪一個repeated節點是不共享的,讀取的時候将其了解為需要在哪一層建立一個新的repeated節點,這樣的話每一列最大的repeated level值就等于路徑上的repeated節點的個數(不包括根節點)
definition level:表示在此路徑上有多少可選的field被定義了;required 必須有資料,無需該字段;
(R,D,value)[R表示repetition level;D表示definition level]
檔案格式
行組(row group);列塊(Column Chunk);頁(Page)
parquet與orc對比
parquet能夠更好的支援嵌套結構,其最初的設計動機就是存儲嵌套式資料,如json,thrift,Protocolbuffer等,将這類資料存儲成列式格式
其他方面似乎orc的性能更好
比較方面 | Parquet | orc |
---|---|---|
發展狀态 | 目前都是Apache開源的頂級項目,列式存儲引擎 | |
開發語言 | Java | java |
主導公司 | Twitter/Cloudera | Hortonworks |
列編碼 | 支援多種編碼,字典,RLE,Delta等 | 支援主流編碼,與Parquet類似 |
ACID | 不支援 | 支援ACID事務 |
修改操作(update,delete等) | 不支援 | 支援 |
支援索引(統計資訊) | 粗粒度索引,bolck/group/chunk級别統計資訊 | 粗粒度索引,file/Stripe/row級别 |
查詢性能 | orc稍好 | |
資料壓縮能力 | orc好一些 | |
支援的查詢引擎 | Apache Drill/impala | Apache hive |
在mapreduce中簡單使用parquet