#file-format #apache-arrow #arrow #orc #datafusion #arrow-rs

程序+库 orc-rust

使用Apache Arrow内存格式实现Apache ORC文件格式的实现

11个版本

0.3.1 2024年7月1日
0.3.0 2024年4月6日
0.2.43 2023年10月17日
0.2.42 2023年9月18日
0.1.0 2023年6月22日

数据库接口中排名第323

Download history 25/week @ 2024-05-06 57/week @ 2024-05-13 105/week @ 2024-05-20 182/week @ 2024-05-27 114/week @ 2024-06-03 115/week @ 2024-06-10 148/week @ 2024-06-17 111/week @ 2024-06-24 231/week @ 2024-07-01 102/week @ 2024-07-08 151/week @ 2024-07-15 26/week @ 2024-07-22 325/week @ 2024-07-29 76/week @ 2024-08-05 117/week @ 2024-08-12

每月下载量554
swh-graph中使用

Apache-2.0

270KB
6K SLoC

test codecov Crates.io Crates.io

orc-rust

Apache ORC文件格式的本地Rust实现,提供API将数据读入Apache Arrow内存数组。

请参阅文档了解如何使用此crate的示例。

支持的功能

此crate目前仅支持将ORC文件读入Arrow数组。写入支持计划中(见路线图)。以下列出的功能仅与读取ORC文件相关。目前,我们旨在仅支持ORCv1规范。

  • 同步和异步读取(使用Tokio)
  • 所有压缩类型(Zlib、Snappy、Lzo、Lz4、Zstd)
  • 所有ORC数据类型
  • 所有编码
  • 基本支持检索统计信息
  • 将用户元数据检索到Arrow模式元数据中

路线图

此crate的长期愿景是功能足够完整,可以捐赠给arrow-rs项目。

以下列出要实现的功能的大致路线图,从最高到最低优先级。

  • 性能提升
  • DataFusion集成
  • 谓词下推
  • 行索引
  • 布隆过滤器
  • 从Arrow数组写入
  • 加密

目前没有计划实现非Arrow API接口。如果有此类用例,请随时提出问题。

版本兼容性

我们无法保证跨版本的稳定性。我们将努力使顶级API(ArrowReaderArrowStreamReader)尽可能稳定,但其他提供的API可能会随着我们探索库应公开的接口而更改。

版本将根据需要发布(没有固定的时间表)。

将 ORC 类型映射到 Arrow 类型

以下表格列出了 ORC 数据类型如何被读取到 Arrow 数据类型中

ORC 数据类型 Arrow 数据类型 备注
布尔型 布尔型
小整型 Int8
小整型 Int16
整型 Int32
大整型 Int64
浮点型 Float32
双精度浮点型 Float64
字符串 Utf8
字符 Utf8
可变长字符 Utf8
二进制 二进制
十进制 Decimal128
日期 Date32
时间戳 时间戳(Nanosecond, None) ¹
时间戳实例 时间戳(Nanosecond, UTC) ¹
结构体 结构体
列表 列表
映射 映射
联合 联合(_, Sparse) ²

¹: ArrowReaderBuilder::with_schema 允许配置不同的时间单位或将解码转换为 Decimal128(38, 9) (自 UNIX 纪元以来的非闰纳秒的 i128)。在解码为非秒时间单位时可能会发生溢出,并导致 OrcError。在解码为非纳秒时间单位时可能会发生精度丢失,并导致 OrcErrorDecimal128(38, 9) 避免了溢出和精度丢失。

²: 目前仅支持最多 127 个变体

贡献

欢迎所有贡献!如果您有功能请求、错误报告或问题,请随意提出问题。如果没有提出问题,也可以随意发起拉取请求,只要拉取请求足够详细。

除了标准的 cargo 以外,我们还使用了一些需要安装的工具

cargo install typos-cli
cargo install taplo-cli
# Building the crate
cargo build

# Running the test suite
cargo test

# Simple benchmarks
cargo bench

# Formatting TOML files
taplo format

# Detect any typos in the codebase
typos

要重新生成/更新 proto.rs 文件,执行 regen.sh 脚本。

./regen.sh

依赖项

~74MB
~1.5M SLoC