Details
Description
The return value of Literal.references is an empty AttributeSet, so Literal is mistaken for a partition column.
org.apache.spark.sql.execution.dynamicpruning.PartitionPruning#getFilterableTableScan:
val srcInfo: Option[(Expression, LogicalPlan)] = findExpressionAndTrackLineageDown(a, plan) srcInfo.flatMap { case (resExp, l: LogicalRelation) => l.relation match { case fs: HadoopFsRelation => val partitionColumns = AttributeSet( l.resolve(fs.partitionSchema, fs.sparkSession.sessionState.analyzer.resolver)) // When resExp is a Literal, Literal is considered a partition column. if (resExp.references.subsetOf(partitionColumns)) { return Some(l) } else { None } case _ => None }