diff --git a/omnioperator/omniop-spark-extension/spark-extension-core/src/main/scala/com/huawei/boostkit/spark/ColumnarPlugin.scala b/omnioperator/omniop-spark-extension/spark-extension-core/src/main/scala/com/huawei/boostkit/spark/ColumnarPlugin.scala index 89771cf9740a0a93febbd1fc1438b75472d5e00f..601bc6972bb02bf43578b10763b9f41f5d2090a2 100644 --- a/omnioperator/omniop-spark-extension/spark-extension-core/src/main/scala/com/huawei/boostkit/spark/ColumnarPlugin.scala +++ b/omnioperator/omniop-spark-extension/spark-extension-core/src/main/scala/com/huawei/boostkit/spark/ColumnarPlugin.scala @@ -182,9 +182,9 @@ case class ColumnarPreOverrides(isSupportAdaptive: Boolean = true) case plan: FilterExec => if(enableColumnarTopNSort) { plan.transform { - case f@FilterExec(condition, - w@WindowExec(Seq(windowExpression), _, orderSpec, sort: SortExec)) - if orderSpec.nonEmpty && isTopNExpression(windowExpression) => + case f@FilterExec(condition, w@WindowExec(Seq(windowExpression), _, orderSpec, child: SparkPlan)) => + if (orderSpec.nonEmpty && isTopNExpression(windowExpression)) { + val sort: SortExec = child.asInstanceOf[SortExec] var topn = Int.MaxValue val nonTopNConditions = splitConjunctivePredicates(condition).filter { case LessThan(e: NamedExpression, IntegerLiteral(n)) @@ -237,6 +237,13 @@ case class ColumnarPreOverrides(isSupportAdaptive: Boolean = true) val child = replaceWithColumnarPlan(f.child) return ColumnarFilterExec(f.condition, child) } + } else { + val child = replaceWithColumnarPlan(f.child) + return ColumnarFilterExec(f.condition, child) + } + case _ => + val child = replaceWithColumnarPlan(plan.child) + return ColumnarFilterExec(plan.condition, child) } } val child = replaceWithColumnarPlan(plan.child)