使用者指南# 高階概觀 物理層 一維層 二維層 計算層 IO 層 跨程序通訊 (IPC) 層 檔案格式層 裝置層 檔案系統層 記憶體管理 緩衝區 存取緩衝區記憶體 切片 分配緩衝區 建構緩衝區 記憶體池 預設記憶體池 覆寫預設記憶體池 STL 整合 裝置 裝置不可知程式設計 記憶體分析 陣列 建構陣列 可用策略 使用 ArrayBuilder 及其子類別 效能 大小限制與建議 分塊陣列 切片 資料類型 建立資料類型 類型特徵 訪問者模式 表格資料 欄位 綱要 表格 紀錄批次 計算函數 通用計算 API 函數和函數註冊表 輸入形狀 調用函數 隱式轉換 通用數值類型 可用函數 類型類別 聚合 分組聚合(“group by”) 元素級別(“純量”)函數 算術函數 位元運算函數 捨入函數 對數函數 三角函數 雙曲三角函數 比較 邏輯函數 字串謂詞 字串轉換 字串填充 字串修剪 字串分割 字串組件提取 字串連接 字串切片 包含性測試 分類 選擇/多工 結構轉換 轉換 時間組件提取 時間差 時區處理 隨機數生成 陣列級別(“向量”)函數 累積函數 關聯轉換 選擇 包含性測試 排序和分割 結構轉換 替換函數 成對函數 Gandiva 表達式編譯器 表達式、投影器和過濾器 外部函數開發 Gandiva 表達式、投影器和過濾器 建構表達式 投影器和過濾器 評估投影 評估過濾器 評估投影和過濾器 Gandiva 外部函數開發指南 簡介 Gandiva 外部函數類型概述 為您的需求選擇正確的外部函數類型 外部函數註冊 使用 NativeFunction 類別進行元數據註冊 外部 C 函數 C 函數簽名 簽名映射 處理 arrow::StringType (utf8 類型) 和 arrow::BinaryType 外部 C 函數註冊 API 外部 IR 函數 IR 函數實作 編譯範例和工具 參數和返回類型的一致性 在 Gandiva 中註冊外部 IR 函數 結論 Acero:C++ 串流執行引擎 Acero 概觀 什麼是 Acero? Acero 不是… 資料科學家的程式庫 資料庫 最佳化器 分散式 Acero 與… Arrow 計算 Arrow 資料集 Substrait Datafusion / DuckDb / Velox / Etc. 與 Arrow C++ 的關係 核心概念 ExecNode ExecBatch ExecPlan 宣告 Acero 使用者指南 使用 Acero 建立計畫 使用 Substrait 程式化計畫建立 執行計畫 DeclarationToTable DeclarationToReader DeclarationToStatus 直接執行計畫 提供輸入 可用的 ExecNode 實作 來源 計算節點 排列節點 Sink 節點 範例 source table_source filter project aggregate sink consuming_sink order_by_sink select_k_sink table_sink scan write union hash_join 摘要 將 Acero 與 Substrait 搭配使用 Substrait 一致性 計畫 擴充功能 關係 (一般) 讀取關係 過濾關係 投影關係 聯結關係 聚合關係 表達式 (一般) 常值 類型 函數 開發者指南 了解 ExecNode ExecNode::StartProducing() 範例 ExecNode::InputReceived() 範例 ExecNode::InputFinished() 範例 ExecNode::PauseProducing() / ExecNode::ResumeProducing() 範例 ExecNode::StopProducing() 範例 初始化 / 建構 / 解構 摘要 擴展 Acero 排程與平行處理 計畫的平行執行 本地分散式計畫 管線平行處理 非同步性 每個管線的任務(有時甚至更多) 執行緒池和排程器 節點內平行處理 所有工作都在任務中完成 有序執行 分割執行 溢出 分散式執行 效能分析與追蹤 基準測試 綁定 公共 API R (dplyr) Python Java 設計哲學 引擎獨立計算 建立任務而非執行緒 不要在 CPU 執行緒上封鎖 不要重新發明輪子 避免查詢最佳化 效能指南 批次大小 進行中與已棄用的工作 Scanner v2 OrderBySink 和 SelectKSink 上游變更 輸入/輸出和檔案系統 讀取二進制資料 寫入二進制資料 檔案系統 定義新的檔案系統 讀取和寫入 Arrow IPC 格式 讀取 IPC 串流和檔案 同步讀取 事件驅動讀取 寫入 IPC 串流和檔案 設定 讀取和寫入 ORC 檔案 支援的 ORC 功能 資料類型 壓縮 讀取 ORC 檔案 ORCFileReader 寫入 ORC 檔案 ORCFileWriter 讀取和寫入 Parquet 檔案 讀取 Parquet 檔案 FileReader 效能和記憶體效率 StreamReader 寫入 Parquet 檔案 WriteTable StreamWriter Writer 屬性 支援的 Parquet 功能 頁面類型 壓縮 編碼 類型 物理類型 邏輯類型 轉換類型 特殊情況 往返 Arrow 類型和綱要 Parquet 欄位 ID 序列化詳細資訊 限制 加密 雜項 讀取和寫入 CSV 檔案 讀取 CSV 檔案 TableReader StreamingReader 權衡 寫入 CSV 檔案 欄名稱 欄選擇 與欄名稱互動 資料類型 字典推斷 時間戳記推斷/解析 Null 值 字元編碼 寫入選項 效能 讀取 JSON 檔案 TableReader StreamingReader 資料類型 表格資料集 讀取資料集 資料集探索 讀取不同的檔案格式 自訂檔案格式 過濾資料 投影欄 讀取和寫入分割資料 不同的分割方案 分割效能考量 從其他資料來源讀取 讀取記憶體內資料 從雲端儲存空間讀取 關於交易和 ACID 保證的注意事項 完整範例 Arrow Flight RPC 寫入 Flight 服務 使用 Flight 用戶端 取消和逾時 啟用 TLS 啟用驗證 自訂中介軟體 最佳實務 gRPC 盡可能重複使用用戶端 不要循環配置負載平衡 偵錯連線問題 記憶體管理 過多流量 限制 DoPut 批次大小 關閉沒有回應的連線 使用 Arrow 偵錯程式碼 Arrow C++ 的 GDB 擴充功能 手動載入 自動載入 支援的類別 執行緒管理 執行緒池 CPU 與 I/O 序列執行 Jemalloc 背景執行緒 非同步公用程式 未來 OpenTelemetry 建立啟用 OpenTelemetry 追蹤功能的建置 匯出追蹤資訊 使用 Jaeger UI 可視化追蹤 環境變數