Gandiva 表达式编译器#
Gandiva 是一个运行时表达式编译器,它使用 LLVM 为 Arrow record batch 上的计算生成高效的本机代码。 Gandiva 仅处理投影和过滤器;对于其他转换,请参阅 计算函数。
Gandiva 旨在利用 Arrow 内存格式和现代硬件。 从 Arrow 内存模型来看,由于 Arrow 数组对于值和有效性位图具有单独的缓冲区,因此值及其空状态通常可以独立处理,从而可以更好地进行指令流水线操作。 在现代硬件上,使用 LLVM 编译表达式可以优化执行以适应本地运行时环境和硬件,包括可用的 SIMD 指令。 为了减少优化开销,许多 Gandiva 函数都预先编译为 LLVM IR(中间表示)。
表达式、投影器和过滤器#
为了有效地利用 Gandiva,您将使用 TreeExprBuilder
构建表达式树,包括创建函数节点、if-else 逻辑和布尔表达式。 随后,利用 Projector
或 Filter
执行内核来有效地评估这些表达式。 有关更多详细信息,请参阅 Gandiva 表达式、投影器和过滤器。
外部函数开发#
Gandiva 提供了集成外部函数的功能,包括 C 函数和 IR 函数。 此功能拓宽了可以在 Gandiva 表达式中应用的函数的范围。 对于希望自定义和增强其计算解决方案的开发人员,Gandiva 提供了开发和注册自己的外部函数的机会,从而可以更加定制和灵活地使用 Gandiva 环境。 有关更多详细信息,请参阅 Gandiva 外部函数开发指南。