Parquet 和 ORC 到底有啥区别?别再云里雾里了,咱今天把列式存储聊明白!

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: Parquet 和 ORC 到底有啥区别?别再云里雾里了,咱今天把列式存储聊明白!

Parquet 和 ORC 到底有啥区别?别再云里雾里了,咱今天把列式存储聊明白!

大家好,我是你们熟悉的 Echo_Wish
最近后台私信问我:“师傅,Parquet 和 ORC 到底该怎么选?看网上资料越看越迷糊,感觉它俩就是双胞胎。”

我说一句大实话:
Parquet 和 ORC 是双胞胎没错,但一个偏文科,一个偏理科,理念不同、能力不同、适用场景也不同。

今天,咱就从工程师视角把 列式存储的核心逻辑 + Parquet/ORC 内部机制 + 选型建议 讲得明明白白。
保证你看完之后,能在开技术会时拍着桌子说:

“这个任务我们必须选 ORC!” 或 “这个场景不用犹豫,直接 Parquet!”

开整!


🌟 一、为什么要列式存储?别只背概念

咱先别急着上标准答案“为分析优化、压缩率高、IO 少”这种 PPT 话。
我用一句人话解释:

行式存储=仓库把货按订单放,列式存储=仓库把货按“属性”分区放。

如果你常干 OLAP 分析,那你 90% 的时间在做:

  • 统计某列
  • 过滤某列
  • 分组某列
  • 求和某列

这种情况下,扫描全行是非常浪费的,特别是字段很多的时候 —— 行式存储就像 Excel 每次都要把整行翻出来,速度自然慢。

列式存储把字段拆开存储,扫描少、压缩高,分析快,天生适合大数据。

这就是为什么 Hive、Presto、Trino、Spark SQL、Iceberg、Hudi 都离不开它。


🌟 二、Parquet 与 ORC:它俩是在“同一个目标,不同的哲学”

你可以这么理解:

  • Parquet:跨生态、跨引擎的通用格式,偏向 Spark/Presto 等多引擎混用的体系。
  • ORC:Hadoop 家族亲儿子,为 Hive 做了非常多的专门优化。

下面我拆开它俩的内部机制讲。


🔍 三、Parquet 内部结构:字段式的精致主义者

Parquet 的结构非常“分层、规整、易扩展”。
大概长这样:

File
 ├─ Row Groups
 │   ├─ Column Chunk A
 │   │    ├─ Pages
 │   ├─ Column Chunk B
 │   │    ├─ Pages
 ...
 └─ Footer (Schema + Metadata)

💡 关键点:

1)以 Row Group 为单位组织数据

  • 一个 Row Group 通常 128MB ~ 1GB
  • 大数据引擎读取时可以并发处理多个 Row Group

2)每列的数据独立压缩

  • 每列可以不同编码,例如:

    • 字符串:DICT
    • int:RLE
    • 布尔:bit-packed

非常适合 高基数+稀疏 的列。

3)Parquet 注重跨系统兼容性

Spark、Presto、Impala、ClickHouse、Iceberg 都用它。

📌 代码示例(PySpark 写入 Parquet)

df.write.mode("overwrite").parquet("/tmp/parquet_demo")

🔍 四、ORC 内部结构:为 Hive 而生的“压缩狂魔”

ORC 的结构看起来比 Parquet 更“工程化”:

File
 ├─ Stripes (大块数据)
 │    ├─ Index Data
 │    ├─ Row Data
 │    └─ Stripe Footer
 └─ File Footer

💡 关键点:

1)以 Stripe(Stripe ≈ 64MB 默认) 为核心

一个 Stripe 包含:

  • Row Data(核心数据)
  • Index Data(索引)
  • Stripe Footer(压缩、偏移信息)

内置的 Stripe Index 能让 ORC 的谓词下推更狠。

2)压缩能力更强

ORC 默认对字符串和整数使用更 aggressive 的字典编码 + RLE2,压缩率往往比 Parquet 高 10%-30%。

3)统计信息非常丰富(Hive 优化器最爱)

例如:

  • min/max
  • distinct count
  • bloom filter
  • null count
  • column statistics

Hive 的 CBO(成本优化器)依赖这些统计信息做优化。

📌 代码示例(Spark 写 ORC)

df.write.mode("overwrite").orc("/tmp/orc_demo")

⚔️ 五、核心差异总结(最干的部分)

维度 Parquet ORC
发源地 Twitter + Cloudera Hortonworks(Hive 原生)
最佳搭档 Spark / Presto / Iceberg Hive / ETL 批处理
压缩率 更高(通常)
统计信息 足够 特别丰富
查询加速 优秀 极优秀
小文件处理 较好 略优
写入速度 稍快 略慢
跨生态兼容性 最佳 一般

写成一句话:

你要生态?选 Parquet。
你要极致压缩+极致 Hive 查询?选 ORC。


💼 六、实际工程选型建议(我最让人点赞的部分)

✔ ① Spark 生态+多系统混用

Parquet 是王道。
你很可能还有 Presto/Trino、ClickHouse、Iceberg/Hudi/Lakehouse,要兼容就选它。

✔ ② 基于 Hive 的离线数仓 + 大批量 ETL

ORC 更稳。
Hive 的优化和 ORC 一家亲,性能差异能达到 20%-50%。

✔ ③ 强压缩率需求(数据湖冷存储)

ORC 是更实惠的选择。

✔ ④ 流式写入 + 下游多引擎消费

Parquet 更均衡。

✔ ⑤ Iceberg/Hudi/Delta Lake

绝大多数推荐默认:Parquet
(数据湖标配,不解释。)


🧪 七、一个真实案例:同样 100GB 文本表 Parquet vs ORC

我们当时做了一个测试(Spark + Hive 混合场景):

  • 数据量:100GB 原始 JSON
  • 字段数:64 列
  • 业务场景:Ad-hoc 分析 + 部分 Hive Join

📊 结果非常典型:

指标 Parquet ORC
压缩后体积 16.3 GB 11.9 GB
Hive 查询性能 1.0x 1.3~1.5x
Spark 查询性能 1.0x 0.95x
兼容性 ⭕ perfect ❌ 稍弱

看结果就一句话:

  • ORC = Hive 场景“专用武器”
  • Parquet = 通用型“万能螺丝刀”

🔚 八、写在最后:格式选对,你的数仓就少走一半弯路

很多团队之所以数仓慢、查询卡、资源浪费,其实根本不是 Spark/Hive 的问题,而是——

底层文件格式选错了,天生短板再怎么调参也补不回来。

我自己的经验是:

  • 大数据生态越来越多引擎协作 → Parquet 适应性最强
  • Hive 仍然是很多公司的离线基础设施 → ORC 在这块依旧无敌
  • 数据湖时代已经到了 → Parquet 是事实标准
目录
相关文章
|
4月前
|
Prometheus 分布式计算 监控
大数据指标和 SLA,那些你以为懂了其实没懂的事
大数据指标和 SLA,那些你以为懂了其实没懂的事
653 7
|
4月前
|
机器学习/深度学习 人工智能 运维
别只盯着 CPU 爆了!一篇文章带你看懂:从指标到根因的 AIOps 自动化故障定位流水线
别只盯着 CPU 爆了!一篇文章带你看懂:从指标到根因的 AIOps 自动化故障定位流水线
633 15
|
4月前
|
存储 监控 调度
Apache DolphinScheduler 数据库模式深度解析:从表结构到调度逻辑
Apache DolphinScheduler 作为开源分布式工作流调度平台,其数据库模式是核心支撑。本文从表结构、模块设计到企业实践,解析如何通过七大表组与分布式架构,实现跨集群调度、高可用与插件扩展,助力3000+企业高效管理数据任务,推动云原生时代下的智能调度演进。(238字)
|
7月前
|
存储 前端开发 关系型数据库
终于有人把数据仓库讲明白了
数据仓库不是大号数据库,更不是BI附属品。它通过整合多源数据、统一标准,让数据更易查、易用,真正服务于业务分析与决策。本文带你厘清数据仓库的本质、架构与搭建步骤,避开常见误区,实现数据价值最大化。
终于有人把数据仓库讲明白了
|
8月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
A+流量分析平台是阿里集团统一的全域流量数据分析平台,致力于通过埋点、采集、计算构建流量数据闭环,助力业务提升流量转化。面对万亿级日志数据带来的写入与查询挑战,平台采用Flink+Paimon+StarRocks技术方案,实现高吞吐写入与秒级查询,优化存储成本与扩展性,提升日志分析效率。
1159 1
|
8月前
|
存储 分布式计算 数据处理
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
阿里云实时计算Flink团队,全球领先的流计算引擎缔造者,支撑双11万亿级数据处理,推动Apache Flink技术发展。现招募Flink执行引擎、存储引擎、数据通道、平台管控及产品经理人才,地点覆盖北京、杭州、上海。技术深度参与开源核心,打造企业级实时计算解决方案,助力全球企业实现毫秒洞察。
768 0
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
|
存储 监控 druid
Druid、ClickHouse、Doris、StarRocks 的区别与分析
本文对比了 Druid、ClickHouse、Doris 和 StarRocks 四款大数据分析引擎。它们均为 OLAP 引擎,采用列式存储和分布式架构,适用于海量数据分析。Druid 擅长实时分析与高并发查询;ClickHouse 以超高性能著称,适合复杂查询;Doris 提供易用的 SQL 接口,性能均衡;StarRocks 则以其极速查询和实时更新能力脱颖而出。各引擎在数据模型、查询性能、数据更新和存储方面存在差异,适用于不同的业务场景。选择时需根据具体需求综合考虑。
7400 20
|
SQL JavaScript 前端开发
Hive学习-lateral view 、explode、reflect和窗口函数
Hive学习-lateral view 、explode、reflect和窗口函数
1031 4
|
存储 SQL 算法
【Hive】ORC、Parquet等列式存储的优点
【4月更文挑战第14天】【Hive】ORC、Parquet等列式存储的优点