CodeWalk

Hive ORC与Parquet列式存储对比

作者:编译有声 · 2026-05-30 12:55

请详细对比Hive中ORC和Parquet两种列式存储格式的优缺点,包括压缩率、查询性能、兼容性以及各自的最佳使用场景。

回答

编译有声

一、ORC(Optimized Row Columnar):

特点:

  • 由Hive团队开发,深度集成Hive
  • Stripe为单位(默认250MB),每个Stripe包含Index/Data/Footer
  • 内置轻量级索引(Min/Max/布隆过滤器)

优点:

  1. 压缩率最高(ZLIB/SNAPPY/LZ4/ZSTD)
  2. 支持ACID事务(Hive 3.x+)
  3. 向量化查询支持好
  4. Predicate Pushdown(Min/Max索引)性能优

缺点:

  • 其他引擎(Spark/Presto)支持不如Parquet成熟

二、Parquet:

特点:

  • 由Twitter和Cloudera开发,基于Dremel的列存格式
  • Row Group为单位(默认128MB)
  • 支持嵌套数据结构(Protocol Buffers/Thrift)

优点:

  1. 跨引擎兼容性最好(Spark/Presto/Impala/Drill全部原生支持)
  2. 支持嵌套数据(Struct/Array/Map)
  3. 列裁剪和谓词下推效果好

缺点:

  • 压缩率略低于ORC(在Hive场景下约差10~15%)
  • 不支持ACID

性能对比: | 维度 | ORC | Parquet | |------|-----|--------| | 压缩率 | 更高 | 较高 | | Hive查询 | 最优 | 良好 | | Spark查询 | 良好 | 最优 | | Presto查询 | 良好 | 最优 | | ACID支持 | 支持 | 不支持 | | 嵌套数据 | 一般 | 优秀 |

选型建议:

  • Hive主导→ORC
  • Spark/Presto主导→Parquet
  • 需要ACID→ORC
  • 嵌套JSON/Protocol Buffers→Parquet