Hive ORC与Parquet列式存储对比
请详细对比Hive中ORC和Parquet两种列式存储格式的优缺点,包括压缩率、查询性能、兼容性以及各自的最佳使用场景。
回答
编译有声
一、ORC(Optimized Row Columnar):
特点:
- 由Hive团队开发,深度集成Hive
- 以Stripe为单位(默认250MB),每个Stripe包含Index/Data/Footer
- 内置轻量级索引(Min/Max/布隆过滤器)
优点:
- 压缩率最高(ZLIB/SNAPPY/LZ4/ZSTD)
- 支持ACID事务(Hive 3.x+)
- 向量化查询支持好
- Predicate Pushdown(Min/Max索引)性能优
缺点:
- 其他引擎(Spark/Presto)支持不如Parquet成熟
二、Parquet:
特点:
- 由Twitter和Cloudera开发,基于Dremel的列存格式
- 以Row Group为单位(默认128MB)
- 支持嵌套数据结构(Protocol Buffers/Thrift)
优点:
- 跨引擎兼容性最好(Spark/Presto/Impala/Drill全部原生支持)
- 支持嵌套数据(Struct/Array/Map)
- 列裁剪和谓词下推效果好
缺点:
- 压缩率略低于ORC(在Hive场景下约差10~15%)
- 不支持ACID
性能对比: | 维度 | ORC | Parquet | |------|-----|--------| | 压缩率 | 更高 | 较高 | | Hive查询 | 最优 | 良好 | | Spark查询 | 良好 | 最优 | | Presto查询 | 良好 | 最优 | | ACID支持 | 支持 | 不支持 | | 嵌套数据 | 一般 | 优秀 |
选型建议:
- Hive主导→ORC
- Spark/Presto主导→Parquet
- 需要ACID→ORC
- 嵌套JSON/Protocol Buffers→Parquet