Gandiva 表达式编译器#

Gandiva 是一个运行时表达式编译器,它使用 LLVM 为 Arrow 记录批次的计算生成高效的本地代码。Gandiva 仅处理投影和筛选;对于其他转换,请参阅 计算函数

Gandiva 的设计旨在利用 Arrow 内存格式和现代硬件。从 Arrow 内存模型来看,由于 Arrow 数组为值和有效性位图使用单独的缓冲区,因此值及其空状态通常可以独立处理,从而实现更好的指令流水线。在现代硬件上,使用 LLVM 编译表达式允许执行针对本地运行时环境和硬件(包括可用的 SIMD 指令)进行优化。为了减少优化开销,许多 Gandiva 函数预编译为 LLVM IR(中间表示)。

表达式、投影和筛选器#

为了有效地利用 Gandiva,您将使用 TreeExprBuilder 构造表达式树,包括创建函数节点、if-else 逻辑和布尔表达式。随后,利用 ProjectorFilter 执行内核来有效地评估这些表达式。有关更多详细信息,请参阅 Gandiva 表达式、投影和筛选器

外部函数开发#

Gandiva 提供了集成外部函数的功能,包括 C 函数和 IR 函数。此功能扩展了可以在 Gandiva 表达式中应用的函数范围。对于希望自定义和增强其计算解决方案的开发人员,Gandiva 提供了开发和注册他们自己的外部函数的机会,从而允许更量身定制和灵活地使用 Gandiva 环境。有关更多详细信息,请参阅 Gandiva 外部函数开发指南