对比
Arrow 与 ORC
Apache Arrow 是面向分析和数据交换的语言无关内存列式表示。ORC 是列式文件格式,将行组织为 stripe,并保存列数据、索引和统计信息以支持分析读取。
应该选择哪种格式?
进程或系统间需要高效地在内存传递表格数据时选 Arrow。持久化数据湖或 Hive 工作流需要压缩、列选择和 stripe 读取时考虑 ORC。不要把 Arrow 内存布局与 Arrow IPC 文件混为一谈。
适用于 Apache Arrow IPC
在兼容的程序和语言之间交换列式表格数据 · 在支持 Arrow 的工具之间传递分析数据集
- 在 Arrow 库和分析引擎之间移动带类型的数据
- 在 IPC 文件版中随机访问记录批次
适用于 ORC
为分析存储大型结构化表格
- 读取所选列并利用索引的查询
基本信息
| 项目 | Apache Arrow IPC | ORC |
|---|---|---|
| 扩展名 | .arrow, .feather, .arrows | .orc |
| MIME 类型 | application/vnd.apache.arrow.file, application/vnd.apache.arrow.stream | application/vnd.apache.orc |
| 常见用途 | 在兼容的程序和语言之间交换列式表格数据 · 在支持 Arrow 的工具之间传递分析数据集 | 为分析存储大型结构化表格 |
| 打开方式 | 使用 Apache Arrow 库或支持 Arrow IPC 的分析工具读取。.arrow 通常表示文件版,.arrows 通常表示流版,但应确认接收工具所需的 IPC 模式和压缩编解码器。处理 Feather 文件时,也要确认其与旧版 Feather V1 的兼容性。 | 使用支持 ORC 的工具检查模式、列、行数、压缩和示例值。 |
| 导出或转换 | Parquet 可用于分析数据存储和分发;CSV 适用于简单表格交换。转换可能改变或丢失 Arrow 专有类型、嵌套结构、字典编码或压缩设置。请确认所需类型和精度,并保留源数据。 | 转换为 Parquet 或 CSV 时,检查类型、空值、时间戳、小数、分区和行数。 |
按用途选择
在 Arrow 库和分析引擎之间移动带类型的数据
在兼容的程序和语言之间交换列式表格数据 · 在支持 Arrow 的工具之间传递分析数据集
Apache Arrow IPC在 IPC 文件版中随机访问记录批次
在兼容的程序和语言之间交换列式表格数据 · 在支持 Arrow 的工具之间传递分析数据集
Apache Arrow IPC读取所选列并利用索引的查询
为分析存储大型结构化表格
ORC关键点 1
Arrow 规范内存中的数组、缓冲区和类型,可支持零拷贝共享等方式;ORC 文件使用列流、stripe、索引和页脚统计信息。
进一步了解差异关键点 2
Arrow 侧重内存表示与传输;ORC 面向压缩持久存储和选择性分析读取。
进一步了解差异进一步了解差异
内存分析和互操作传输可用 Arrow。存储与查询生态支持 ORC 文件布局并受益于列裁剪和索引时选择 ORC。用实际工作负载测试。
- Arrow 定义内存中的列式数组与缓冲区;Arrow IPC/文件格式会序列化该表示,而 ORC 定义独立的磁盘结构、stripe 和列流。
- ORC 可使用压缩、列投影及 stripe/行索引减少查询读取量。Arrow 主要规范内存格式,并非所有持久表格式的替代品。
- 检查读写器支持,以及类型、空值、时间戳和小数的映射。使用目标 codec、引擎和查询比较文件大小与性能。
常见问题
Arrow 表文件和 ORC 是同一种格式吗?
不是。Arrow 定义内存列式格式及单独的 IPC 格式;ORC 是独立的列式文件格式。