Gandiva 運算式編譯器#

Gandiva 是一個執行時期運算式編譯器,它使用 LLVM 來產生有效率的原生碼,以在 Arrow record batches 上進行計算。Gandiva 僅處理投影和篩選;對於其他轉換,請參閱計算函數

Gandiva 的設計旨在利用 Arrow 記憶體格式和現代硬體。從 Arrow 記憶體模型來看,由於 Arrow 陣列針對值和有效性點陣圖具有獨立的緩衝區,因此值及其空值狀態通常可以獨立處理,從而實現更好的指令管線化。在現代硬體上,使用 LLVM 編譯運算式可以針對本機執行時期環境和硬體(包括可用的 SIMD 指令)最佳化執行。為了減少最佳化額外負荷,許多 Gandiva 函數都預先編譯為 LLVM IR(中繼表示法)。

運算式、投影器與篩選器#

為了有效利用 Gandiva,您將使用 TreeExprBuilder 建構運算式樹狀結構,包括建立函數節點、if-else 邏輯和布林運算式。隨後,利用 ProjectorFilter 執行核心來有效率地評估這些運算式。有關更多詳細資訊,請參閱 Gandiva 運算式、投影器與篩選器

外部函數開發#

Gandiva 提供整合外部函數的功能,涵蓋 C 函數和 IR 函數。此功能擴展了可在 Gandiva 運算式中應用的函數範圍。對於希望自訂和增強其計算解決方案的開發人員,Gandiva 提供了開發和註冊他們自己的外部函數的機會,從而可以更量身打造和彈性地使用 Gandiva 環境。有關更多詳細資訊,請參閱 Gandiva 外部函數開發指南