Apache Parquet

  • Arrow-rs Parquet Reader 浅析

    这篇文章从几个设计点切入,分析了 arrow-rs 上的 Parquet Reader 为什么和传统 C++ 系 Reader 有明显不同。正文先介绍 Bytes 零拷贝切片在 IO 合并场景下如何改善大 buffer 的生命周期管理,再说明文件系统接口如何把多 Range 读取与底层存储实现解耦,接着讨论 FileMetadata 解析优化、将 IO 与 decode 分离的 push 模式、以及延迟物化在跳页、RowSelection 选择、列缓存和零拷贝列构造上的具体做法,最后点出这些设计如何为未来更细粒度的内存控制和可观测性打下基础。

    2026年1月11日
    2462
  • Apache Parquet Bloom Filter

    这篇文章介绍了 Apache Parquet Bloom Filter 的实现与读取流程,重点聚焦于 Split Block Bloom Filter 在文件格式和 reader 侧的落地方式。正文先回顾 Bloom Filter 的基本原理以及它在 Parquet 中只适用于等值类谓词的前提,再解释 SBBF 如何把位图划分成 block 和 word,并利用 XxHash 将元素映射到单个 block 内完成插入与查找;后半部分进一步说明 BloomFilter 在 Thrift 元信息中的位置、PageHeader 与 Data 的读取方式,以及 reader 如何结合 offset、大小猜测和 IO 合并把每个 RowGroup 每列对应的 BloomFilter 加载出来。

    2024年11月23日
    1.5K1
  • Apache Parquet ZoneMap 过滤支持小记

    这篇文章围绕 Apache Parquet 中 ZoneMap 过滤的支持方式,讨论了 min-max 过滤在表达式系统里真正落地时会遇到的限制和工程实现选择。正文先说明 ZoneMap 适用的表达式类型以及单调函数、多列表达式和三值逻辑带来的复杂性,再结合 StarRocks 内表、ORC SearchArgument 和 DataFusion 的实现,分析它们如何把表达式改写成可用于 min-max 评估的形式、如何做 literal 推导与 prune,最后总结出各家当前基本都只在作用于单列的简单谓词上做 ZoneMap 过滤。

    2024年11月23日
    1.0K0
  • ORC vs Parquet,孰强孰弱?

    这篇文章从文件结构、类型系统、NULL 处理、复杂类型存储、统计信息、随机 IO、footer 大小和 schema evolution 等多个角度,对 ORC 与 Parquet 两种列式格式做了一次系统对比。正文先拆解 ORC 中 Stripe/Tail/ProtoBuf 元信息与 Parquet 中 RowGroup/Page/Thrift 元信息的组织方式,再讨论两者在统计信息粒度、最小读取单元、复杂类型表达和随机访问上的设计差异,最后重点分析 Parquet footer 较大带来的反序列化成本,以及 ORC 缺乏稳定子列 id 给 schema evolution 带来的实现复杂度。

    2024年8月10日
    4.3K4