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 与之对应, metadata valueData 分开写入。写入 valueData 时,仅写入 value, definitionLevel, RepetitionLevel ByteArray 数据 ( 对于字符串类型的数据,编码为 UTF8) DefinitionLevel and RepetitionLevel


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值