facebookincubator/velox
GitHub: facebookincubator/velox
一个由 Meta 主导的高性能、可扩展 C++ 分布式执行引擎库,为数据管理系统提供可复用的向量化计算组件。
Stars: 4097 | Forks: 1491

[](https://github.com/facebookincubator/velox/actions/workflows/linux-build.yml)
[](https://github.com/facebookincubator/velox/actions/workflows/macos.yml)
Velox 是一个可组合的分布式执行引擎,以开源 C++
库的形式提供。它提供可重用、可扩展和高性能的数据处理
组件,可以(重新)用于构建专注于不同分析工作负载的数据管理系统,包括批处理、交互式、流式
处理以及 AI/ML。Velox 由 Meta 创建,目前正在与 IBM/Ahana、英特尔、Voltron Data、微软、字节跳动等
公司合作开发。
在常见的使用场景中,Velox 接收一个完全优化的查询计划作为输入
并执行描述的计算。考虑到 Velox 不提供 SQL 解析器、数据框层或查询优化器,它通常
不适用于终端用户直接使用;相反,它主要用于集成和优化其计算引擎的开发人员。
Velox 提供以下高级组件:
* **Type**:一个支持标量、复杂和嵌套类型的通用类型系统,例如结构体、映射、数组等。
* **Vector**:[与 Arrow 兼容的列式内存布局
模块](https://facebookincubator.github.io/velox/develop/vectors.html),
提供 Flat、Dictionary、Constant 和 Sequence/RLE 等编码,以及惰性物化模式和乱序写入支持。
* **Expression Eval**:[完全向量化的表达式评估
引擎](https://facebookincubator.github.io/velox/develop/expression-evaluation.html)
允许在 Vector/Arrow 编码数据上高效执行表达式。
* **Functions**:遵循 Presto 和 Spark 语义的向量化标量、聚合和窗口函数实现集合。
* **Operators**:关系运算符的实现,例如扫描、写入、[投影、过滤、分组、排序、洗牌/交换](https://facebookincubator.github.io/velox/develop/joins.html)、
展开(unnest),以及更多。
* **I/O**:可扩展数据源和接收器的连接器接口,
支持不同的文件格式(ORC/DWRF、Parquet、Nimble),以及存储适配器
(S3、HDFS、GCS、ABFS、本地文件)供使用。
* **Network Serializers**:一个接口,不同的线协议可以实现,用于网络通信,
支持
[PrestoPage](https://prestodb.io/docs/current/develop/serialized-page.html)
和 Spark 的 UnsafeRow。
* **Resource Management**:一组用于处理计算资源的原始组件,例如 [内存
区域](https://facebookincubator.github.io/velox/develop/arena.html) 和
缓冲区管理、任务、驱动程序、线程池,用于 CPU 和线程执行、溢出和缓存。
Velox 是可扩展的,允许开发人员定义其自身引擎特定的
专业化,包括:
1. 自定义类型
2. [简单和向量化函数](https://facebookincubator.github.io/velox/develop/scalar-functions.html)
3. [聚合函数](https://facebookincubator.github.io/velox/develop/aggregate-functions.html)
4. 窗口函数
5. 运算符
6. 文件格式
7. 存储适配器
8. 网络序列化器
## 示例
不同组件 API 的可扩展性和集成示例 [可在此处找到](velox/examples)
## 文档
开发者指南详细介绍了库的许多方面,以及可用函数列表 [可在此处找到.](https://facebookincubator.github.io/velox)
近期博客文章 ([所有文章](https://velox-lib.io/blog)):
- [为什么 NULLIF 必须是一个特殊形式](https://velox-lib.io/blog/nullif-special-form) (2026-04-10)
- [从不可靠的 Axiom CI 到 Velox 错误修复:一个跨仓库调试故事](https://velox-lib.io/blog/debugging-flaky-ci-across-repos) (2026-03-29)
- [自适应每函数 CPU 时间跟踪](https://velox-lib.io/blog/velox-adaptive-cpu-sampling) (2026-03-26)
## 社区
Velox 是一个由个人贡献者和组织支持的开源项目。
该项目的技术治理机制在 [此文档](https://velox-lib.io/docs/community/technical-governance) 中描述。
项目维护者 [在此列出](https://velox-lib.io/docs/community/components-and-maintainers)。
与 Velx OSS 社区的主要沟通渠道是通过 [the
Velox-OSS Slack 工作区](http://velox-oss.slack.com)、GitHub Issues 和
Discussions。
要访问 Velox Slack 工作区,请在 [此讨论](https://github.com/facebookincubator/velox/discussions/11348) 中添加评论。
## 贡献
请查看我们的 [贡献指南](CONTRIBUTING.md) 以了解如何
为项目做贡献。
## 许可证
Velox 根据 Apache 2.0 许可证授权。许可证的
[副本](LICENSE)
可以在此处找到。
## 入门
### 获取 Velox 源代码
```
git clone https://github.com/facebookincubator/velox.git
cd velox
```
获取 Velox 源代码后,第一步是安装依赖项。
依赖项的详细信息以及 Velox 如何管理其中的一些依赖项
[可在此处找到](CMake/resolve_dependency_modules/README.md)。
Velox 还提供了以下脚本来帮助开发者为给定平台设置和安装 Velox
依赖项。
### 支持的操作系统和编译器矩阵
支持的编译器最低版本:
| 操作系统 | 编译器 | 版本 |
|----|----------|---------|
| Linux | gcc | 11 |
| Linux | clang | 15 |
| macOS | clang | 15 |
推荐的操作系统版本和编译器:
| 操作系统 | 编译器 | 版本 |
|----|----------|---------|
| CentOS 9/RHEL 9 | gcc | 12 |
| Ubuntu 22.04 | gcc | 11 |
| macOS | clang | 16 |
替代组合:
| 操作系统 | 编译器 | 版本 |
|----|----------|---------|
| CentOS 9/RHEL 9 | gcc | 11 |
| Ubuntu 20.04 | gcc | 11 |
| Ubuntu 24.04 | clang | 15 |
### 设置依赖项
以下安装脚本使用 `DEPENDENCY_DIR` 环境变量来设置
下载和构建软件包的位置。默认值为当前工作目录中的 `deps-download`。
使用 `INSTALL_PREFIX` 设置软件包的安装目录。默认值为
macOS 上的 `deps-install`,Linux 上默认为
安装位置(例如 `/usr/local`)。
在 macOS 上使用默认安装位置 `/usr/local` 是不推荐的,因为某些 Homebrew 版本会使用该位置。
手动在 IDE 或 Bash 环境中添加 `INSTALL_PREFIX` 值,
例如 `export INSTALL_PREFIX=/Users/$USER/velox/deps-install` 到 `~/.zshrc`,以便后续 Velox 构建可以使用已安装的软件包。
*您可以为 Velox 客户端(如 Prestissimo)重用 `DEPENDENCY_INSTALL` 和 `INSTALL_PREFIX`,通过指定一个共享目录。*
依赖项构建的并行度可以通过 `BUILD_THREADS` 环境变量控制,
并覆盖用于编译和链接的默认并行进程数。
默认值为机器的核心数。
这在您的机器拥有大量核心但没有足够内存来并行处理所有
编译和链接进程时非常有用,以避免内核因 OOM 而杀死进程。
### 在 macOS 上设置
在 macOS 机器(Intel 或 Apple Silicon)上,您可以按如下方式设置并构建:
```
$ ./scripts/setup-macos.sh
$ make
```
如果 macOS 14.4 且 XCode 15.3 缺少 `m4`,您可以
1. 通过 `brew` 安装 `m4`:
```
$ brew install m4
$ export PATH=/opt/homebrew/opt/m4/bin:$PATH
```
2. 或使用 `gm4` 替代:
```
$ M4=/usr/bin/gm4 make
```
### 在 Ubuntu(20.04 或更高版本)上设置
支持架构为 x86_64(avx、sse)和 AArch64(apple-m1+crc、neoverse-n1)。
您可以按如下方式构建:
```
$ ./scripts/setup-ubuntu.sh
$ make
```
### 在 CentOS 9 Stream 上设置适配器
Velox 适配器包括文件系统,例如 AWS S3、Google Cloud Storage、
以及 Azure Blob File System。这些适配器需要安装额外的
库。获取 Velox 后,您可以按如下方式设置并构建:
```
$ ./scripts/setup-centos9.sh
$ ./scripts/setup-centos9.sh install_adapters
$ make
```
请注意,`install_adapters` 命令适用于支持的 macOS 和
Ubuntu(20.04 或更高版本)脚本。可以通过指定单独的安装命令来安装单个适配器,
例如 `setup-centos9.sh install_aws`。
### 在 Linux 上使用 Clang
Clang 15 可以在设置步骤中额外安装在 Ubuntu 22.04/24.04
和 CentOS 9 上,方法是设置 `USE_CLANG` 环境变量
在运行特定于平台的安装脚本之前。
```
$ export USE_CLANG=true
```
这将安装并使用 Clang 15 来构建依赖项,而不是使用默认的 GCC 编译器。
完成后,在运行任何 `make` 命令之前,设置要使用的编译器:
```
$ export CC=/usr/bin/clang-15
$ export CXX=/usr/bin/clang++-15
$ make
```
### 构建 Velox
在根目录运行 `make` 以编译源代码。对于开发,使用
`make debug` 构建非优化调试版本,或 `make release` 构建
优化版本。使用 `make unittest` 构建并运行测试。
四个测试套件在 Linux CI 上使用分组二进制文件以减少链接时间
(`velox/exec/tests`、`velox/functions/prestosql/aggregates/tests`、
`velox/common/caching/tests`、`velox/serializers/tests`)。其他所有套件在所有平台上使用独立二进制文件。
在 macOS 上,默认情况下关闭分组。要在 Linux 上禁用分组,请通过
`EXTRA_CMAKE_FLAGS` 传递 `-DVELOX_ENABLE_GROUPED_TESTS=OFF`。
请注意,
* Velox 需要最低版本的编译器 GCC 11.0 或 Clang 15.0。
* Velox 需要 CPU 支持以下指令集:
* bmi
* bmi2
* f16c
* Velox 尝试在可用时使用以下(或等效)指令集:
* 在 Intel CPU 上
* avx
* avx2
* sse
* 在 ARM 上
* Neon
* Neon64
Velox 构建指标发布在
### 使用 docker-compose 构建 Velox
如果您不想安装构建 Velox 所需的系统依赖项,
您也可以使用 [docker-compose](https://docs.docker.com/compose/) 构建并在容器内运行 Velox 测试。
使用以下命令:
```
$ docker-compose build ubuntu-cpp
$ docker-compose run --rm ubuntu-cpp
```
如果希望增加或减少构建 Velox 时使用的线程数,
可以通过执行以下操作来覆盖 `NUM_THREADS` 环境变量:
```
$ docker-compose run -e NUM_THREADS=
--rm ubuntu-cpp
```
标签:AI/ML 处理, Arrow 兼容, C++ 执行引擎, Meta, Velox, 交互式查询, 代码示例, 内存布局, 列式存储, 可组合执行引擎, 向量化执行, 开源库, 批处理, 搜索引擎爬虫, 数据分析, 数据管理, 数据集成, 流处理, 类型系统, 表达式评估, 计算引擎优化, 高性能计算