UDF 链物理融合(Compatible Python UDF Project Chain Fusion)。
逻辑计划拆分 UDF 后,连续 UDF 表达式可能形成多个相邻 UDFProject。每个节点都会引入独立的物理算子边界,可能产生额外的:
UDFProject
MicroPartition
当父子 UDF 的并发、资源、批大小、错误处理等属性兼容时,可以把父 UDF 对子 UDF 输出列的引用替换为嵌套表达式,并生成单个物理 UDF 节点。这样保留表达式语义,同时移除一个调度和中间物化边界。
分支:codex/ai-de-udf-chain-fusion
codex/ai-de-udf-chain-fusion
提交:
4825f1e26
fuse-compatible-Python-UDF-project-chains
71d11206d
preserve-fused-UDF-properties-during-plan-rebuild
主要实现:
fuse_udf_projects.rs
SplitUDFs
UDFProperties
replace_columns_with_expressions
try_new_fused
结构性 smoke 测试中,两个串联 UDF 的物理节点数量由 2 个降为 1 个,输出结果保持一致。
pipeline_pdf_full_min
pipeline_text_fineweb_full_min
pipeline_text_vectorize_full_min
pipeline_image_full_min
pipeline_video_full_min
结论:新 base 上 4 条 pipeline 提升 2.14%~4.43%,文本向量化回退 1.42%,五条汇总提升 2.34%。这是本轮唯一取得净收益的优化;建议优先继续验证,但需定位向量化路径没有获得融合收益或发生回退的原因。
1. UDF 链物理融合
1.1 优化点名称
UDF 链物理融合(Compatible Python UDF Project Chain Fusion)。
1.2 背景与收益原理
逻辑计划拆分 UDF 后,连续 UDF 表达式可能形成多个相邻
UDFProject。每个节点都会引入独立的物理算子边界,可能产生额外的:MicroPartition创建与传递;当父子 UDF 的并发、资源、批大小、错误处理等属性兼容时,可以把父 UDF 对子 UDF 输出列的引用替换为嵌套表达式,并生成单个物理 UDF 节点。这样保留表达式语义,同时移除一个调度和中间物化边界。
1.3 实现方式、分支与提交
分支:
codex/ai-de-udf-chain-fusion提交:
4825f1e26:fuse-compatible-Python-UDF-project-chains71d11206d:preserve-fused-UDF-properties-during-plan-rebuild主要实现:
fuse_udf_projects.rs。SplitUDFs和 projection pushdown 后识别相邻UDFProject。UDFProperties完全一致。replace_columns_with_expressions将子 UDF 表达式代入父 UDF。try_new_fused创建单个融合节点,并在计划 rebuild 时保留 concurrency、resource request、batch size 和错误处理属性。结构性 smoke 测试中,两个串联 UDF 的物理节点数量由 2 个降为 1 个,输出结果保持一致。
1.4 测试结果
pipeline_pdf_full_minpipeline_text_fineweb_full_minpipeline_text_vectorize_full_minpipeline_image_full_minpipeline_video_full_min结论:新 base 上 4 条 pipeline 提升 2.14%~4.43%,文本向量化回退 1.42%,五条汇总提升 2.34%。这是本轮唯一取得净收益的优化;建议优先继续验证,但需定位向量化路径没有获得融合收益或发生回退的原因。