parquet列存儲

why?
1,同一列數據的類型和“材質”是一致的,所以壓縮起來更節省空間
2,在按列檢索需求下,無需讀取整行記錄,I/O降低
3,當每一列類型相同時,通過編碼能夠更好的適應現代處理器分支指令集預測優化

message example as follow
message AddressBook {
  required string owner;
  repeated string ownerPhoneNumbers;
  repeated group contacts {
    required string name;
    optional string phoneNumber;
  }
}
通過definition 和 repetition Levels 重建 嵌套的數據結構



爲了支持嵌套結構,需要存儲field爲null的level,對於required,不需要 definition levels


repetition
optional or required fields are never repeated and can be skipped while attributing repetition levels



在數據寫入時,對於每一列,Parquet都會創建一個ColumnIO(含有columnName,definitionLevel,RepetitionLevel)ColumnWriter並通過index與之對應,metadatavalueData分開寫入。寫入valueData時,僅寫入value, definitionLevel, RepetitionLevelByteArray數據(對於字符串類型的數據,編碼爲UTF8) DefinitionLevel and RepetitionLevel


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章