首页/数据/数仓建模速查/列式存储选型:ORC 与 Parquet
分层与规范64 条

列式存储选型:ORC 与 Parquet

ORC 与 Parquet 都是列式存储:ORC 在 Hive 生态统计信息与压缩上更成熟,Parquet 在 Spark 与嵌套结构上更常用;同集群统一一种减少踩坑。

数仓建模速查数据更新于 2026-10-13

ORC 与 Parquet 是什么

ORC 与 Parquet 都是列式存储格式:数据按列分块,每块带最小值最大值等统计信息,查询只读用到的列并能跳过不匹配的数据块,所以列裁剪与块级过滤是它们相对文本格式的核心优势。ORC 来自 Hive 生态,stripe 级索引与统计信息较细,Hive 的事务表只能用它;Parquet 源自 Dremel 模型,嵌套结构表达更通用,在 Spark 生态与主流湖表格式里更常见。选型主要看现有引擎栈,同集群内统一一种格式能省掉大量兼容问题。

基本信息

适用平台Hive、Spark、Trino/Presto、Impala,以及 Iceberg、Delta、Hudi 等湖表
ORC 特点stripe 级统计与索引详细,Hive 生态原生,支持 ACID 事务表
Parquet 特点嵌套结构表达通用,Spark 生态与湖表引用广
压缩选项ORC 支持 ZLIB、SNAPPY、ZSTD;Parquet 支持 SNAPPY、GZIP、ZSTD
文件大小与 HDFS 块大小接近时比较理想,常见 128-256MB
统计信息决定过滤时能否跳过数据块,写入时不宜关闭
迁移成本换格式要重写历史数据并确认下游读取方式

典型使用场景

  • 以 Hive 为主的离线数仓选 ORC:事务表、更新删除能力都依赖它
  • 以 Spark 为主的加工链路选 Parquet:兼容性好,生态里默认支持最广
  • 湖表读写通常用 Parquet:Iceberg 与 Delta 的默认文件格式就是它
  • 需要表达数组、结构体等嵌套字段时,Parquet 的写法更直观,多引擎支持也更一致
  • 存储成本敏感的场景选 ZSTD 压缩,在压缩比与解压速度之间取平衡

两种格式建表

两种格式建表
CREATE TABLE dwd_trade_order_di (       -- ORC:Hive 生态主推
  order_id STRING COMMENT '订单号',
  pay_amt  DECIMAL(18,2) COMMENT '支付金额'
)
PARTITIONED BY (dt STRING)
STORED AS ORC
TBLPROPERTIES ('orc.compress' = 'ZSTD');  -- 压缩算法按 CPU 与存储成本权衡

CREATE TABLE dwd_trade_order_pq (        -- Parquet:Spark 与湖表常用
  order_id STRING COMMENT '订单号',
  pay_amt  DECIMAL(18,2) COMMENT '支付金额'
)
PARTITIONED BY (dt STRING)
STORED AS PARQUET
TBLPROPERTIES ('parquet.compression' = 'SNAPPY');

DESCRIBE FORMATTED dwd_trade_order_di;   -- 查看实际使用的读写格式

两种格式逐项对照

维度ORCParquet
生态来源Hive 生态原生Dremel 模型,Spark 与湖表常用
索引与统计stripe 级统计与索引较细以行组统计为主
复杂类型支持,表达偏 Hive 风格嵌套表达更通用
Hive 事务表支持不支持
压缩选项ZLIB、SNAPPY、ZSTDSNAPPY、GZIP、ZSTD
列式存储的收益来自列裁剪与块级过滤,前提是统计信息完整。频繁追加的小文件既让块级过滤失效,又增加文件调度开销,写完后安排合并是常规动作。
表的数据格式由建表语句固定。目录里混入另一种格式的文件,读取时通常报错或读到空值,且从表结构上完全看不出来。

易错点

  • 同一张表混用两种格式的文件:读取报错或返回空值,压缩比与性能表现不稳定
  • 用 TEXTFILE 存明细数据:没有列裁剪、压缩比差,扫描 IO 成倍放大
  • 忽略小文件治理:无论 ORC 还是 Parquet,大量小文件都会拖慢查询与元数据操作
  • 压缩算法只看压缩比不看 CPU:高压缩级别下解压成为瓶颈,查询反而更慢
  • 只改建表语句切换格式而不重写历史数据:新旧文件混存,读取行为不可预期

数据来源与参考

  • Hive 官方文档:ORC File Format
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌