Spark OmniOperator针对超多变长类型列进行聚合查询时,例如500例,SQL查询性能差。
变长类型列进行聚合操作时存在cast string to double表达式处理,该处理通过Codegen实现。Codegen本身存在编译开销,即SQL查询性能由编译开销和算子执行开销组成。当超多列需要同时进行Codegen编译时,编译开销远大于OmniOperator算子执行时间,导致整体SQL查询性能慢。
当存在超多列需要进行表达式Codegen的SQL查询场景,建议回退至原生Spark进行查询,该操作不影响任务结果的一致性。