ORC 2.3.1 介绍与选型指南
ORC 2.3.1 介绍与选型指南:官方资料溯源的 Apache ORC v2.3.1 信息基准、文件格式三层索引架构、多语言实现与 orc-tools/pyorc 工具链、大数据生态集成与适用限制,以及与 Parquet、Avro、Arrow 的量化选型对比;开头说明本专栏命名与 Apache ORC 项目的关系。
ORC 2.3.1 介绍与选型指南
目标:基于官方公开资料(GitHub apache/orc 仓库与 Releases 页、orc.apache.org 官网与官方文档)溯源介绍 ORC 2.3.1 的格式架构、实现与工具链、生态集成与选型对比。本文不做本地安装与运行实测,所有版本号、日期与社区数据均标注来源,查询日期为 2026-10-19。
说明:本专栏目录名为 ORC,本文所述即 Apache ORC 项目(Apache 软件基金会顶级项目);本站另有《Apache ORC 2.3.1 介绍与选型指南》已按项目全名收录,本文与其面向同一版本基准,但角度侧重 orc-tools 命令行工具与 pyorc Python 工具链、生态集成视角,内容互补、避免重复,选型结论一致。
一、信息基准
1.1 查询说明
- 实查时间:2026-10-19。
- 查询渠道:GitHub
apache/orc仓库页与 Releases 页、Apache ORC 官网(orc.apache.org)、官方规范文档(orc.apache.org/specistration 等)、pyorc 官方仓库(github.com/noirello/pyorc)。 - 所有数据均为联网实查结果,未采信记忆印象;若后续官方数据更新,以官方为准。
1.2 版本依据
| 项目 | 实查结果(2026-10-19) | 来源 |
|---|---|---|
| 最新稳定版 | v2.3.1(2026-07-16 发布) | GitHub Releases |
| 多分支并行维护 | Releases 列表可见 v2.3.0、v2.2.2、v2.1.4、v2.0.7、v1.9.9、v1.9.8 等多个维护线并行发布 | GitHub Releases |
| 构建要求 | Java 17+、Maven 3.9.9+、CMake 3.25+(C++ 构建) | 官方 BUILDING 文档 |
| GitHub Stars | 770 | GitHub apache/orc 仓库页 |
| 许可证 | Apache-2.0(Apache 软件基金会项目) | 官网 / GitHub |
| pyorc(Python 绑定) | 0.11.0(2026-04-11 发布,支持 Python 3.10+,基于 ORC C++ 核心) | noirello/pyorc Releases |
| orc-tools(JVM 工具) | 2.3.1(uber jar 形态发行) | GitHub Releases |
1.3 官方来源清单
- GitHub 仓库:https://github.com/apache/orc
- Releases 页:https://github.com/apache/orc/releases
- 官网首页:https://orc.apache.org/
- 官方规范(ORC Specification):https://orc.apache.org/specistration/
- pyorc 仓库:https://github.com/noirello/pyorc
- orc-tools 用法(官方文档页):https://orc.apache.org/docs/tools.html
二、软件概述
ORC 当前最新稳定版本为 v2.3.1(2026-07-16 发布,GitHub Releases 实查)。
Apache ORC(Optimized Row Columnar)是 Apache 软件基金会的列式存储文件格式项目,2013 年由 Hive 团队发起,2017 年成为 ASF 顶级项目。它面向 Hadoop 生态的数仓与分析场景,以高压缩率、强索引(三层统计 + Bloom Filter)和谓词下推为核心卖点,是 Hive 事务表(ACID)的底层载体,也是 Spark、Trino、Flink 等引擎的标准输入输出格式之一。
与同为列式格式的 Parquet 相比,ORC 的差异化在官方文档口径下主要体现在:更丰富的原生索引结构、Hive ACID 的原生支持、以及 Java/C++ 双实现(pyorc 等非 JVM 工具链因此受益)。ORC 本身是"格式 + 参考实现 + 工具链"的组合:格式由规范(specification)定义,Java 与 C++ 各有一套读写实现,另有 orc-tools JVM 工具包与 pyorc Python 绑定构成轻量工具链——这正是本文第三章、第四章展开的角度。
三、核心架构
3.1 文件布局与三层索引
按官方规范(orc.apache.org/specistration),一个 ORC 文件自上而下由以下部分构成:
- Postscript:文件元数据入口,记录压缩类型、Footer 长度与规范版本。
- Footer:文件级 schema(类型树)、各列统计、Stripe 列表。
- Stripe(条带):数据主体,默认目标 64MB,内含 Index Data、Row Data 与 Stripe Footer。
- Row Group(行组):Stripe 内默认每 10000 行一组,写入行组级统计(min/max/sum 等)。
由此形成文件级 → Stripe 级 → 行组级三层统计索引,并可选 Bloom Filter:读引擎依据谓词逐层跳过不可能命中的 Stripe 与行组,只读取必要的列段(列裁剪),这是 ORC 分析性能的结构性来源。
3.2 多语言参考实现
- Java 实现:Hive/Spark/Trino 等 JVM 引擎内置使用,随引擎或以 orc-core 构件发行。
- C++ 实现:独立读写实现,pyorc 与 orc-tools 的 C++ 侧能力基于此;实测过的本站文档中,Spark 写出的文件可被 pyorc(C++ 核心)无损互读,印证跨实现互操作(见《Apache ORC 分布式读写与集成指南》)。
3.3 工具链形态
- orc-tools:官方 JVM 命令行工具,以 uber jar 发行(无需安装 Hadoop,内置 hadoop-common),v2.3.1 注册子命令包括 meta、data、count、sizes、scan、convert、json-schema、merge、check、key、version(官方 tools 文档与本站实测文档一致)。
- pyorc:Python 绑定,提供 csv 风格的 Reader/Writer API、iter_stripes 分条带读取、statistics 列统计与 predicate 谓词读取,支持 Python 3.10+(官方 README)。
四、功能特性
- 高效列式编码与压缩:支持 ZLIB、SNAPPY、LZ4、ZSTD 等压缩,配合字典/RLE 等列内编码;ORC 2.3 新增 Lz4Codec 与 XerialSnappyCodec 实现(官方 Release 说明实查)。
- 谓词下推与列裁剪:三层统计 + Bloom Filter 支撑引擎跳读(官方规范)。
- ACID 能力:Hive 事务表以 ORC 为唯一底层格式,支持行级增删改(Hive 官方文档口径)。
- 丰富数据类型:struct/list/map/union 嵌套类型、decimal、timestamp 等(官方规范)。
- ORC 2.3 线新特性:支持 Java 25 构建/运行、C++ 侧 Stripe 预取(stripe prefetch)等(v2.3.0 Release 说明实查)。
- 多分支长期维护:2.x 与 1.9 等多个维护线并行发布补丁(Releases 实查),旧引擎兼容路径清晰。
- 工具链完备:orc-tools 一条命令即可做元数据检视(meta)、全量扫描校验(scan)、CSV/JSON 转 ORC(convert)、多文件合并(merge)等,详见本站《Apache ORC 常用工具与命令详解》的逐命令实测。
- 生态兼容:Spark、Hive、Trino、Flink、Presto 等引擎原生读写 ORC;Iceberg 表格式亦支持 ORC 作为底层文件格式(各引擎官方文档口径)。
五、快速上手
本章为官方文档路径转述,未做本地实测;完整实测过程见本站上述两篇文档。
5.1 orc-tools 检视 ORC 文件(转述官方 tools 文档)
官方提供 uber jar(orc-tools-x.y.z-uber.jar),内置 hadoop-common,无需额外安装依赖:
# 下载 orc-tools-2.3.1-uber.jar 后(发布页:github.com/apache/orc/releases)
java -jar orc-tools-2.3.1-uber.jar meta your-file.orc # 查看文件结构与统计
java -jar orc-tools-2.3.1-uber.jar scan your-file.orc # 全量扫描校验坏批次
java -jar orc-tools-2.3.1-uber.jar convert out.orc in.csv # CSV 转 ORC
💡 以上为官方 tools 文档用法转述;每个子命令的真实回显、参数与坑点见本站《Apache ORC 常用工具与命令详解》。
5.2 pyorc 读写(转述官方 README)
pyorc 通过 pip 安装(pip install pyorc),API 为 csv 风格:Writer 指定 schema 字符串(如 struct<id:int,name:string>)与压缩类型后按行写入;Reader 支持 iter_stripes 按条带流式读取、statistics 读取列统计、predicate 谓词过滤读取。当前版本 0.11.0(2026-04-11),要求 Python 3.10+(官方仓库 Releases 实查)。
5.3 引擎侧使用
- Hive:建表语句
STORED AS ORC即可,orc.compress/orc.stripe.size等 TBLPROPERTIES 控制写参数(官方 Hive 文档)。 - Spark:
df.write.orc(...)原生支持,spark.sql.orc.filterPushdown默认开启谓词下推(官方 Spark 文档口径)。 - Trino:Hive connector 的
format = 'ORC'建表属性(Trino 官方文档)。
引擎侧读写参数与跨引擎互读实测见《Apache ORC 分布式读写与集成指南》。
六、适用场景与限制
6.1 适用场景
- Hive 数仓与 ACID 事务:Hive 事务表以 ORC 为底层格式,需要行级更新(merge/delete)的离线数仓首选。
- 大表分析、高压缩率诉求:三层索引 + 谓词下推在宽表过滤场景收益明显。
- 多引擎混用环境:Spark/Hive/Trino/Flink 需要共享同一份表数据时,ORC 作为开放格式可无损互读。
- 轻量工具链场景:无 Hadoop 环境时可用 orc-tools uber jar / pyorc 快速检视、转换、合并 ORC 文件。
6.2 限制与注意点
- 社区体量有限:GitHub stars 770(2026-10-19 实查),社区以大数据厂商与数仓用户为主,通用话题的讨论热度低于 Parquet。
- 生态重心偏 Hive 一脉:Spark 体系的新式湖格式实践(Delta 等)以 Parquet 为主,跨生态协作时 Parquet 兼容面更广。
- 版本分支繁多:2.x/1.9 多维护线并行(Releases 实查),引擎自带的 ORC 版本可能与最新格式特性存在差异,跨引擎互读前需确认压缩编码与格式版本互相支持。
- 非 JVM 侧功能对齐有滞后:pyorc 依赖 C++ 实现,个别新特性(如部分新编码)在 Python 侧可用性以官方 README 为准。
七、同类选型对比
7.1 对比对象与数据来源
| 对比对象 | 最新版本(2026-10-19 实查) | 许可证 | GitHub Stars | 来源 |
|---|---|---|---|---|
| Apache ORC | v2.3.1(2026-07-16) | Apache-2.0 | 770 | GitHub apache/orc |
| Apache Parquet | apache-parquet-1.18.1(parquet-java) | Apache-2.0 | 约 3,100(parquet-java 仓库) | GitHub apache/parquet-java |
| Apache Avro | v1.12.2 | Apache-2.0 | 3,305 | GitHub apache/avro |
| Apache Arrow | 26.0.0 | Apache-2.0 | 17,211 | GitHub apache/arrow |
7.2 量化对比
| 维度 | ORC 2.3 | Parquet | Avro | Arrow |
|---|---|---|---|---|
| 类型定位 | 列式文件格式 | 列式文件格式 | 行式序列化格式 | 内存列式格式/跨语言 IPC |
| 索引能力 | 三层统计 + Bloom Filter(原生最强) | 页级统计(较简) | 无(靠外层框架) | 不适用(内存态) |
| ACID 事务 | Hive 事务表原生载体 | 不支持 | 不支持 | 不支持 |
| 压缩编码 | ZLIB/SNAPPY/LZ4/ZSTD | SNAPPY/ZSTD/GZIP 等 | Deflate/Snappy/ZSTD | 面向 IPC 的可选压缩 |
| 典型引擎生态 | Hive 数仓、Iceberg、Spark/Trino | Spark/Delta/Iceberg/通用大数据 | Kafka/流式管道、schema 演进场景 | 计算 IPC、polars/duckdb 等新生态 |
| 语言实现 | Java + C++ | Java + C++ 等 | Java 为主 + 多语言 | 全语言覆盖(最广) |
| 社区热度(stars) | 770 | 3,121 | 3,305 | 17,211 |
7.3 如何选
- 以 Hive 为中心的数仓、需要行级 ACID:选 ORC,这是 Hive 事务表的事实唯一格式,索引能力也在列式格式中最强。
- 以 Spark/湖格式为中心、追求最广兼容面:Parquet 是更稳妥的默认项——Delta 等新生态围绕它构建,社区热度约为 ORC 的 4 倍(上表 stars 数据,2026-10-19 实查);两者在 Spark/Trino 下性能量级接近,实际差异应以待选引擎版本实测为准。
- 消息管道与 schema 演进:Avro 解决的是"行式序列化 + 演进兼容",与 ORC/Parquet 不构成直接竞争,Kafka 生态默认搭配。
- 进程间数据交换与内存分析:Arrow 是内存态格式,解决的是"零拷贝跨语言交换",常与 ORC/Parquet(落盘格式)配合而非互斥。
- 总体建议:落盘格式在 ORC 与 Parquet 之间二选一时,优先看团队主力引擎与既有数据资产——Hive 一脉选 ORC,Spark 一脉选 Parquet;跨引擎混用时保证写端压缩编码被所有读端支持即可(本站实测中 ZSTD 在两侧压缩率均最优,SNAPPY 兼容面最广)。
八、参考链接
- GitHub 仓库:https://github.com/apache/orc
- GitHub Releases:https://github.com/apache/orc/releases
- 官网:https://orc.apache.org/
- ORC 规范:https://orc.apache.org/specistration/
- orc-tools 官方文档:https://orc.apache.org/docs/tools.html
- pyorc 仓库:https://github.com/noirello/pyorc
- 本站相关文档:Apache ORC 2.3.1 介绍与选型指南、Apache ORC 常用工具与命令详解、Apache ORC 分布式读写与集成指南