介绍 Apache Arrow DataFusion Contrib
已发布 2022 年 3 月 21 日
作者 Apache Arrow PMC (pmc)
简介
Apache Arrow DataFusion 是一个可扩展的查询执行框架,用 Rust 编写,它使用 Apache Arrow 作为其内存格式。
当您希望使用 SQL 支持、DataFrame API 或读取和处理 Parquet、JSON、Avro 或 CSV 数据的能力来扩展您的 Rust 项目时,DataFusion 绝对值得一试。 DataFusion 的可插拔设计使得在各个点创建扩展特别容易构建。
DataFusion 的 SQL、DataFrame
和手动 PlanBuilder
API 让用户可以访问复杂的查询优化器和执行引擎,该引擎能够快速、资源高效地进行并行执行,从而最大限度地利用当今的多核硬件。 使用 Rust 编写意味着 DataFusion 可以提供动态语言的安全性以及编译语言的资源效率。
DataFusion 团队很高兴地宣布创建 DataFusion-Contrib GitHub 组织,以支持和加速其他项目。 虽然核心 DataFusion 库仍然在 Apache 管理下,但 contrib 组织为新的 DataFusion 功能提供了一个更灵活的测试场所,也是 DataFusion 扩展的家园。 通过此公告,我们很高兴地介绍以下首批 DataFusion-Contrib 存储库。
DataFusion-Python
此 项目 提供 DataFusion 的核心 Rust 实现的 Python 绑定,允许用户
- 使用熟悉的 SQL 或 DataFrame API 在安全的多线程环境中运行查询,并在 Python 中返回结果
- 为复杂操作创建用户定义的函数和用户定义的聚合函数
- 无需在 Python 和底层 Rust 执行引擎之间进行复制(通过 Apache Arrow 数组)
即将推出的增强功能
该团队专注于公开来自 DataFusion 的底层 Rust 实现的更多功能,并改进文档。
如何安装
从 pip
pip install datafusion
或
python -m pip install datafusion
DataFusion-ObjectStore-S3
此 crate 为查询存储在 S3 或 S3 兼容存储中的数据提供 ObjectStore
实现。 这使得查询位于 S3 上的数据几乎与查询本地文件一样容易
- 能够创建
S3FileSystem
以注册为 DataFusionExecutionContext
的一部分 - 使用
ctx.register_listing_table
注册存储在 S3 上的文件或目录
即将推出的增强功能
当前的首要任务是为 S3FileSystem
添加 python 绑定。 之后将进行异步改进,因为 DataFusion 采用了更多该功能,并且我们正在研究 S3 Select 功能。
如何安装
将以下内容添加到您在 Rust 项目中使用 DataFusion 的 Cargo.toml
中。
datafusion-objectstore-s3 = "0.1.0"
DataFusion-Substrait
Substrait 是一种新兴标准,为关系代数(例如表达式和查询计划)提供跨语言序列化格式。
此 crate 为 DataFusion 提供 Substrait 生产者和消费者。 生产者将 DataFusion 逻辑计划转换为 Substrait protobuf,而消费者则执行相反的操作。
可以在此处找到如何使用此 crate 的示例。
潜在的使用案例
- 替换自定义 DataFusion protobuf 序列化。
- 更容易通过 FFI 边界传递查询计划,例如从 Python 到 Rust
- 允许在 DataFusion 中执行 Apache Calcite 查询计划
DataFusion-BigTable
此 crate 将 Bigtable 实现为 DataFusion 查询的数据源和物理执行器。 它目前支持 Bigtable 中的 UTF-8 字符串和 64 位大端有符号整数。 从 SQL 的角度来看,它支持具有 =
、IN
和 BETWEEN
运算符以及投影下推的简单和复合行键。 查询的物理执行由此 crate 处理,而任何后续聚合、分组或连接都在 DataFusion 中处理。
即将推出的增强功能
- 谓词下推
- 值范围
- 值正则表达式
- 时间戳范围
- 多线程
- 分区感知执行
- 可用于生产环境
如何安装
将以下内容添加到您在 Rust 项目中使用 DataFusion 的 Cargo.toml
中。
datafusion-bigtable = "0.1.0"
DataFusion-HDFS
此 crate 引入 HadoopFileSystem
作为远程 ObjectStore
,它提供了查询 HDFS 文件的能力。 对于 HDFS 访问,使用 fs-hdfs 库。
DataFusion-Tokomak
此 crate 提供了一个基于 e-graph 的 DataFusion 优化框架,该框架基于 Rust egg 库。 e-graph 是一种数据结构,可支持相等饱和优化技术。
作为上下文,DataFusion 中的优化器框架目前正在审核中,目的是实施更具战略意义的长期解决方案,该解决方案更有效且更易于开发。
在 DataFusion 中使用 egg
的一些好处是
- 实现优化的算法,这些算法很难通过手动编写的优化传递来匹配
- 使添加优化规则变得容易且不那么冗长
- 插件框架,用于添加更复杂的优化
- Egg 不依赖于规则顺序,并且可以通过同时应用多个规则直到收敛来提高优化水平
- 允许基于成本的优化
对于 DataFusion 来说,这是一个令人兴奋的新领域,有很多社区参与的机会!
DataFusion-Tui
DataFusion-tui aka dft
提供了一个功能丰富的终端应用程序,用于使用 DataFusion。 它从 datafusion-cli
中汲取了灵感和一些功能。 与 datafusion-cli
相比,此工具的目标是为使用 DataFusion 查询数据提供一个轻量级的 SQL IDE 体验。 这包括以下当前已实现的功能
- 选项卡管理,以提供对 DataFusion 查询、结果、
ExecutionContext
信息和日志的整洁且结构化的组织- SQL 编辑器
- 用于编写 SQL 查询的文本编辑器
- 查询历史记录
- 已执行查询的历史记录、其执行时间以及返回的行数
ExecutionContext
信息- 公开有关使用哪些物理优化器以及设置了哪些
ExecutionConfig
设置的信息
- 公开有关使用哪些物理优化器以及设置了哪些
- 日志
- 来自
dft
、DataFusion 和任何依赖库的日志
- 来自
- SQL 编辑器
- 支持自定义
ObjectStore
- S3
- 从
~/.datafusionrc
预加载 DDL,以便在启动时可以使用本地“数据库”
即将推出的增强功能
- SQL 编辑器
- 将查询结果写入文件的命令
- 多个 SQL 编辑器选项卡
- 公开来自
ExecutionContext
的更多信息 - 一个帮助选项卡,提供有关函数的信息
- 查询自定义
TableProvider
,例如 DeltaTable 或 BigTable
DataFusion-Streams
DataFusion-Stream 是一个用于创建 DataFusion 中 StreamProvider
的新试验场,它将能够查询流式数据源,例如 Apache Kafka。 此功能的实现目前正在设计中,并正在积极审查。 一旦设计最终确定,该 trait 和相关的数据结构将被添加回核心 DataFusion crate。
DataFusion-Java
这个 项目 创建了 DataFusion 的一组初始 Java 绑定。 该项目目前处于维护模式,并正在寻找维护者来推动未来的开发。
如何参与
如果您有兴趣为 DataFusion 做出贡献,并了解最先进的查询处理技术,我们非常欢迎您加入我们的行列! 您可以通过在您自己的数据和项目上试用 DataFusion,并告诉我们结果如何,或者贡献一个包含文档、测试或代码的 PR 来提供帮助。 适合初学者的未解决问题列表请见此处。
了解如何在 DataFusion-Contrib 中创建新扩展的最佳方式是在 Apache Software Foundation 的 #arrow-rust
Slack 工作区频道联系我们。
您还可以查看我们的新交流文档,了解更多与社区互动的方式。
如果您想为 DataFusion-Contrib 的各个仓库做出贡献,可以在上面找到它们的链接。