简介
引言
DataFusion 是一个速度极快、可扩展的查询引擎,用于使用 Rust 和 Apache Arrow 内存格式构建高质量的数据中心系统。DataFusion 起源于 Apache Arrow 项目。
DataFusion 提供 SQL 和 DataFrame API、出色的性能、对 CSV、Parquet、JSON 和 Avro 的内置支持、Python 绑定、丰富的定制能力、优秀的社区等等。
项目目标
DataFusion 旨在借助 Rust 和 Apache Arrow 的独特优势,成为数据库、DataFrame 库、机器学习和流处理应用等新一代快速数据中心系统的首选查询引擎。
特性
- 功能丰富的 SQL 支持和 DataFrame API
- 极速的、向量化的、多线程流式执行引擎。
- 原生支持 Parquet、CSV、JSON 和 Avro 文件格式。可通过
TableProvidertrait 支持自定义文件格式和非文件数据源。 - 众多扩展点:用户自定义标量/聚合/窗口函数、数据源、SQL、其他查询语言、自定义计划与执行节点、优化器遍历等。
- 直接从主流对象存储(包括 AWS S3、Azure Blob Storage 和 Google Cloud Storage)进行流式异步 IO(其他存储系统可通过
ObjectStoretrait 支持)。 - 完善的文档和友好的社区。
- 业界领先的查询优化器,支持表达式类型强制转换与简化、投影和过滤下推、排序感知与分布感知优化、自动连接重排序等。
- 采用宽松的 Apache 2.0 许可证,治理方式遵循可预期且易于理解的 Apache 软件基金会模式。
- 使用 Rust 实现,这是一种现代系统语言,兼具 Java 或 Golang 的开发效率与 C++ 的性能,并且深受全球程序员喜爱。
- 支持 Substrait 查询计划,便于在语言和系统边界之间传递计划。
使用场景
DataFusion 可以不经修改直接作为嵌入式 SQL 引擎使用,也可以进行定制,作为构建新系统的基础。
虽然当前大多数用例都是「分析型」的(或侧重吞吐量),但 DataFusion 的某些组件(如计划表示)同样适用于「流式」和「事务」型系统(低延迟)。
以下是一些基于 DataFusion 构建的示例系统:
- 专业分析型数据库系统,如 HoraeDB,以及更通用的类 Apache Spark 系统,如 Ballista
- 新型查询语言引擎,如 prql-query,以及加速器,如 VegaFusion
- 新型数据库系统的研究平台,如 Flock
- 为其他库提供 SQL 支持,如 Vortex
- 流式数据平台,如 Synnada
- 用于读取 / 排序 / 转码 Parquet、CSV、AVRO 和 JSON 文件的工具,如 qv
- 原生 Spark 运行时替代方案,如 Auron
- 分布式数据缓存,用于借助 Kubeflow Trainer 提升 AI 工作负载的 GPU 利用率
使用 DataFusion 后,项目可以专注于自身特有的功能,而不必重新实现通用(但依然必要)的功能,例如表达式表示、标准优化、并行流式执行计划、文件格式支持等。
已知用户
以下是一些正在使用 DataFusion 的活跃项目:
- Arroyo 用 Rust 编写的分布式流处理引擎
- ArkFlow 高性能 Rust 流处理引擎
- Auron Auron 大数据引擎(如 Spark、Flink)加速器,利用原生向量化执行加速查询处理
- Ballista 分布式 SQL 查询引擎
- CnosDB 开源分布式时序数据库
- Comet Apache Spark 原生查询执行插件
- Cube Store Cube 的通用语义层平台,是面向 AI、BI、电子表格和嵌入式分析的 OLAP 技术的下一次演进
- datafusion-dft 为 DataFusion 提供的开箱即用的 CLI、TUI 和服务器实现。
- datapress 一个有主见的小巧快速的数据服务器,基于 Parquet 和 Delta 表。
- dbt Fusion engine dbt Fusion 引擎,使用 Rust 编写,专为速度与正确性而设计,可原生理解各种数据仓库 SQL 方言。
- delta-rs Delta Lake 的原生 Rust 实现
- EDB Postgres Lakehouse 基于 Seafowl 构建
- Feldera 面向增量计算的快速查询引擎
- Funnel 驱动营销智能应用的数据平台。
- GlareDB 用于查询和分析分布式数据的快速 SQL 数据库。
- GreptimeDB 开源云原生分布式时序数据库
- hiop 无服务器数据物流平台
- HoraeDB 分布式时序数据库
- Hotdata 面向 AI 智能体的按需数据库,提供统一的向量、OLAP 和全文检索查询引擎。
- Iceberg-rust Apache Iceberg 的 Rust 实现
- IceGate 可观测性数据湖引擎,面向指标、链路、日志和事件,基于 Apache Iceberg 构建并支持 OpenTelemetry 数据摄入
- InfluxDB 时序数据库
- Kamu 行星级流数据管道
- Kubeflow Trainer Kubernetes 原生项目,专为可扩展的大语言模型微调和分布式 AI 模型训练而设计。
- LakeSoul 使用 Rust 实现原生 IO 的开源 LakeHouse 框架。
- Lance 面向机器学习的现代列式数据格式
- OpenObserve 分布式云原生可观测性平台
- ParadeDB 面向搜索与分析的 PostgreSQL
- Parseable 日志存储与可观测性平台
- Massive.com 股票市场 API
- qv 快速查看你的数据
- R2 Query Engine Cloudflare 的分布式引擎,用于查询 Iceberg Catalog 中的数据
- rerun.io 可视化并查询机器人日志,将其转化为训练数据。
- Restate 使用分布式持久化 async/await 轻松构建弹性应用
- ROAPI 无需编写一行代码,即可为缓慢变化的数据集创建功能完备的 API
- Sail 统一流、批和 AI 工作负载,兼容 Apache Spark
- SedonaDB 单节点分析型数据库引擎,将地理空间能力作为一等公民
- Sleeper 无服务器、云原生、基于日志结构合并树的可扩展键值存储
- Spice.ai 构建数据驱动 AI 应用的积木
- Streamling 专注于性能、一致性和可扩展性的数据流处理运行时
- Supermetal 变更数据捕获(CDC)平台,可在数据库、数据仓库和数据湖屋之间同步数据
- Synnada 面向流处理优先的数据产品框架
- VegaFusion 为 Vega 可视化语法提供服务端加速
- Vortex 可扩展的、业界先进的列式文件格式
- Telemetry 让结构化日志变得简单
- Xorq Xorq 是基于 Ibis、DataFusion 和 Arrow 构建的多引擎批处理转换框架
- KalamDB 面向 AI 智能体、聊天产品和多租户 SaaS 的 SQL 优先实时状态数据库。
- Infino 针对对象存储上 Parquet 数据的 SQL、全文检索与向量检索的快速检索引擎
以下是使用 DataFusion 的一些活跃度较低的项目:
- bdt Boring Data Tool(无聊的数据工具)
- Cloudfuse Buzz
- Dask SQL 用 Python 编写的分布式 SQL 查询引擎
- Exon 面向生命科学应用的分析工具包
- Flock
- Tensorbase
如果你知道其他项目,请提交 PR 添加相应链接!
集成与扩展
社区中有许多项目扩展了 DataFusion,或提供了与其他系统的集成,其中部分项目介绍如下:
语言绑定
集成
为什么选择 DataFusion?
- 高性能:DataFusion 充分利用 Rust 和 Arrow 的内存模型,速度非常快。
- 易于连接:作为 Apache Arrow 生态系统(Arrow、Parquet 和 Flight)的一部分,DataFusion 能与大数据生态系统的其他部分良好协作。
- 易于嵌入:DataFusion 的设计在几乎任何环节都支持扩展,并会定期作为 crate 发布在 crates.io 上,因此可以被集成并针对你的具体用例进行定制。
- 高质量:DataFusion 自身及其与 Arrow 生态系统其余部分的集成都经过了充分测试,能够并且已经被用作生产系统的基础。
Rust 版本兼容性策略
Rust 工具链的发布情况可在 Rust Versions 追踪,并遵循语义化版本。一个 Rust 工具链版本可以用 1.80.0 这样的版本字符串标识,更一般的形式为 major.minor.patch。
DataFusion 支持最近发布的 4 个稳定版 Rust 次要版本,以及过去 4 个月内发布的任何此类版本。
例如,给定版本 1.78.0、1.79.0、1.80.0、1.80.1 和 1.81.0,DataFusion 将支持 1.78.0,它比最近的次要版本 1.81 早 3 个次要版本。
注意:如果当前 MSRV 发布了 Rust 热修复版本,MSRV 将更新为包含之前所有适用热修复的特定次版本,这一更新优先于其他策略。
DataFusion 使用 MSRV CI 检查来强制执行 MSRV 策略。
评论
登录后参与评论
KnowForge