parquet列存储

来源:互联网 发布:爱剪辑 for mac 下载 编辑:程序博客网 时间:2024/05/21 18:31
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


0 0