SuperAPI AI 工具集

audit-datafusion-spark-expression

数据与分析

查看项目

更新于 10-15 16:51

技能介绍

用途:审计 datafusion-spark 中单个 Spark SQL 函数实现的正确性,基线为 Spark 4.2.0,同时读取 Spark 3.5.8、4.0.4、4.1.3 仅用于发现版本间行为变化。每次调用只审计一个函数。

主要流程:浅克隆各版本 Spark 源码;在 FunctionRegistry.scala 中定位函数对应的 Scala 类并阅读各版本的 eval/nullSafeEval/doGenCode、inputTypes、可空性、ANSI 分支与 SQLConf 等;收集 Spark 自身单元测试与 golden 文件用例;审查 DataFusion 实现(datafusion/spark/src/function/<category>/<function>.rs 及 mod.rs);与 Comet、Sail 交叉核对;检查已有 SLT 覆盖并做差距分析;用 PySpark 建立基准;最后应用发现。

运行方式:仓库内执行 datafusion-spark 函数的唯一方式是向 datafusion/sqllogictest/test_files/spark/<category>/<function>.slt 添加查询,并运行 cargo test --test sqllogictests -- spark/<category>/<function>。datafusion-cli 未注册该函数库,会报 Invalid function。

检查要点:签名与类型强制转换、返回可空性、null 传播顺序、Arrow 内核与 Java 语义差异(如 -0.0、溢出、类型宽度)、ColumnarValue 四种形状分派、溢出与 panic、类型分派、ANSI 处理与 TODO。

限制:路径可能失效,路径不存在或 grep 无结果需在报告中说明并标记相关结论为未确定;.slt 存在不意味着 datafusion/spark 中一定实现,可能落到核心函数;DataFusion 不建模 Spark 的错误类或 SQLSTATE;尚无版本特定期望机制(见 issue 23887)。