Parquet加密解析疑问:行组解析时如何获取加密算法?
Parquet PAR1加密场景下RowGroup解析的加密算法获取方案
- 不需要对文件做两次完整遍历,核心可以通过两种方式解决:
- 先完整加载元数据再处理:Parquet的FileMetaData作为整体存储在文件尾部的Footer区域,读取时可一次性把整个FileMetaData结构体加载到内存,先提取字段8的加密算法,再遍历结构体中字段4的RowGroup集合,解析其中ColumnChunk的
encrypted_column_metadata字段。Thrift序列化的结构体支持完整加载后按需访问任意字段,不受定义时的字段顺序限制。 - 流式解析时的字段跳转:如果受内存限制无法完整加载FileMetaData,可利用Thrift的字段标识特性,在流式解析过程中跳过字段4(RowGroup)的内容,先读取字段8拿到加密算法,再回退到字段4的位置,用已获取的算法解析ColumnChunk的加密元数据。Thrift每个字段都有明确的标识和长度信息,实现这种跳转完全可行。
- 先完整加载元数据再处理:Parquet的FileMetaData作为整体存储在文件尾部的Footer区域,读取时可一次性把整个FileMetaData结构体加载到内存,先提取字段8的加密算法,再遍历结构体中字段4的RowGroup集合,解析其中ColumnChunk的
总结来说,只需针对元数据部分调整读取顺序,无需对整个Parquet文件做两次遍历。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

