message AddressBook { required string owner; repeated string ownerPhoneNumbers; repeated group contacts { required string name; optional string phoneNumber; } }
parquet列存儲
why?
![]()
![]()
![]()
1,同一列數據的類型和“材質”是一致的,所以壓縮起來更節省空間
2,在按列檢索需求下,無需讀取整行記錄,I/O降低
3,當每一列類型相同時,通過編碼能夠更好的適應現代處理器分支指令集預測優化
message example as follow
通過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與之對應,metadata和valueData分開寫入。寫入valueData時,僅寫入value,
definitionLevel, RepetitionLevel的ByteArray數據(對於字符串類型的數據,編碼爲UTF8) DefinitionLevel
and RepetitionLevel
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.