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
每月下载量554次
在swh-graph中使用
270KB
6K SLoC
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(ArrowReader
和ArrowStreamReader
)尽可能稳定,但其他提供的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
。在解码为非纳秒时间单位时可能会发生精度丢失,并导致 OrcError
。Decimal128(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