这个项目能做什么

Opteryx Core 是 opteryx.app 背后的 SQL 执行引擎,作为 Opteryx 的一个分支发布,具有更小、更明确的 API 和配置面,围绕托管服务的工作负载而设计。它专为对列式数据进行快速、读密集型的分析查询而设计:它处理 SQL 解析、规划、谓词下推、投影裁剪和执行,因此可以直接从 Python 查询数据集,而无需搭建单独的仓库。 架构 查询规划用 Python 编写;查询执行是原生的。一旦规划器生成物理计划,引擎便以编译代码端到端地运行它——扫描、算子、调度和分发——并且引擎中任何地方都不存在 PyArrow 或 NumPy。结果以 Draken morsel 形式返回,即引擎生成时流式传输的列批次,因此大型结果不必一次性装入内存。一个 morsel 暴露 num_rows、column_names 和 column(name).to_pylist();在流读取到末尾后,session.rowcount 报告已交付的行数。 快速开始 要求 Python 3.11 或更高版本、用于本地源码构建的 C/C++ 工具链,以及用于 Rust 扩展的 Rust/Cargo。使用 pip install opteryx-core 安装,并以 opteryx 导入。一个最小的本地示例使用 DiskConnector 注册工作区,并查询相对于当前工作目录解析的点分隔数据集名称,例如 data.planets 解析为 ./data/planets,格式从文件扩展名检测。还可以通过 python -m opteryx 使用命令行,无需编写 Python 即可查询。 预期用途 该项目列出的用途包括:为 opteryx.app 使用的执行层提供支持,对本地 Parquet、CSV、JSONL 和 .skene 数据集运行分析 SQL,在 Python 应用程序、脚本、笔记本和服务中嵌入查询引擎,研究引擎内部机制(如规划、原生执行和文件格式性能),以及通过 rugo 和 libskene wheel 单独使用文件引擎或 .skene 格式。 仓库布局与发行版 该仓库包含 SQL 引擎(opteryx/)、原生列式向量基底和 morsel(draken/)、用于 Parquet、CSV 和 JSONL 读写的文件引擎(rugo/)、带有 C++ 读取器、写入器和规范性规范的 .skene 列式文件格式(skene/)、Rust 和 C++ 计算扩展源码(src/)、生成的目录快照(reference/)、测试、测试数据、文档、开发脚本、vendored 依赖以及 build_common.py 中的共享构建机制。 一个源码树生成三个 wheel,均在 build_common.py 中单一来源,因此它们不会漂移:opteryx-core(以 opteryx 导入)捆绑完整 SQL 引擎以及 draken、rugo 和 skene;rugo 提供文件引擎加 draken,用于在没有 SQL 引擎的情况下读写文件;libskene(以 skene 导入)提供 .skene 读取器和写入器加 draken。draken 不单独发布。rugo 和 skene 是平行的,彼此不依赖。Wheel 在 CI 中构建,而非本地;本地开发使用 Makefile 目标,如 make dev-install、make compile、make c、make q、make test、make dt 和 make check。 文件格式 数据集按扩展名读取,且一个数据集自始至终只有一种格式;混合格式的目录是错误,而不是尽力而为的读取。Parquet 是存储数据和交换的默认格式,通过 rugo 读取,CSV 和 JSONL/NDJSON 也是如此。.skene 格式是 draken 原生的:它无损地存储一个或多个 draken 向量的行组,包括 Parquet 丢弃的细化信息——IPv4 列往返为 UINT32,并由 IPV4 逻辑描述符细化,字典编码和布局提示被恢复而非重新推导。它故意不可移植,也不承诺任何外部读取器,因此 Parquet 仍是交换的选择。Parquet、CSV 和 JSONL 文件也可以直接用 read_parquet()、read_csv() 和 read_jsonl() 表函数命名;没有 read_skene()。 目录集成 Opteryx Core 被描述为与 opteryx_catalog 库搭配时效果最佳,后者是命名数据集、目录支持的表以及 opteryx.app 中所用一般体验的预期模型。配置设置默认连接器,包含 catalog、Firestore 项目和数据库以及 GCS 存储桶,之后可以使用点分隔名称(如 public.space.planets)查询目录支持的数据集。对于本地数据,注册的工作区(如 testdata、scratch 或 data)是典型做法。 定位与贡献 该项目将自己定位为嵌入式分析引擎,而非完整的最终用户平台:对于托管体验和多租户服务功能,opteryx.app 是推荐途径,而此包直接提供核心引擎。欢迎以以下形式贡献:在个人数据集上的使用、当查询、模式或性能出现异常时的错误报告、修复、测试、文档或性能的拉取请求,以及共享的复现案例、失败查询和边缘情况 Parquet 文件。该项目根据 Apache-2.0 许可,文档位于 docs.opteryx.app。