Gandiva 表达式编译器#

Gandiva 是一个运行时表达式编译器,它利用 LLVM 为 Arrow 记录批次(Record Batches)上的计算生成高效的本地代码。Gandiva 仅处理投影(Projections)和过滤(Filters);有关其他转换,请参阅 计算函数

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

表达式、投影器和过滤器#

为了有效地使用 Gandiva,您将使用 TreeExprBuilder 构建表达式树,包括创建函数节点、if-else 逻辑和布尔表达式。随后,利用 Projector(投影器)或 Filter(过滤器)执行内核来高效地评估这些表达式。详情请参阅 Gandiva 表达式、投影器和过滤器

外部函数开发#

Gandiva 提供了集成外部函数的能力,涵盖了 C 函数和 IR 函数。此功能拓宽了可在 Gandiva 表达式中应用的函数范围。对于希望自定义和增强计算解决方案的开发者,Gandiva 提供了开发和注册自有外部函数的功能,从而允许以更定制化和灵活的方式使用 Gandiva 环境。详情请参阅 Gandiva 外部函数开发指南