Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6490,6 +6490,19 @@ object SQLConf {
.booleanConf
.createWithDefault(true)

val PUSH_VARIANT_INTO_SCAN_PULL_OUT_EXTRACTIONS =
buildConf("spark.sql.variant.pushVariantIntoScan.pullOutExtractions")
.internal()
.doc("When true, extend variant field pushdown to extractions used inside aggregate " +
"functions, join conditions, sort keys, and projections above joins (including through " +
"chained joins), so that only the requested fields are read from the scan for these " +
"cases too instead of the whole variant column. Has no effect unless " +
"spark.sql.variant.pushVariantIntoScan is also true.")
.version("4.3.0")
.withBindingPolicy(ConfigBindingPolicy.SESSION)
.booleanConf
.createWithDefault(true)

val PUSH_VARIANT_INTO_SCAN_DEFER_CAST_ERROR =
buildConf("spark.sql.variant.pushVariantIntoScan.deferCastError")
.internal()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import org.apache.spark.sql.catalyst.optimizer._
import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan
import org.apache.spark.sql.catalyst.rules.Rule
import org.apache.spark.sql.connector.catalog.CatalogManager
import org.apache.spark.sql.execution.datasources.{MarkSingleTaskExecution, PruneFileSourcePartitions, PushVariantIntoScan, SchemaPruning, V1Writes}
import org.apache.spark.sql.execution.datasources.{MarkSingleTaskExecution, PruneFileSourcePartitions, PullOutVariantExtractions, PushVariantIntoScan, SchemaPruning, V1Writes}
import org.apache.spark.sql.execution.datasources.v2.{GroupBasedRowLevelOperationScanPlanning, OptimizeMetadataOnlyDeleteFromTable, V2ScanPartitioningAndOrdering, V2ScanRelationPushDown, V2Writes}
import org.apache.spark.sql.execution.dynamicpruning.{CleanupDynamicPruningFilters, PartitionPruning, RowLevelOperationRuntimeGroupFiltering}
import org.apache.spark.sql.execution.python.{ExtractGroupingPythonUDFFromAggregate, ExtractPythonUDFFromAggregate, ExtractPythonUDFs, ExtractPythonUDTFs}
Expand All @@ -37,6 +37,10 @@ class SparkOptimizer(
override def earlyScanPushDownRules: Seq[Rule[LogicalPlan]] =
// TODO: move SchemaPruning into catalyst
Seq(
// Hoist variant extractions out of operators that variant-into-scan pushdown cannot see
// through (aggregate function arguments, etc.) into a Project above the scan, so the
// extractions below become visible to V2ScanRelationPushDown and PushVariantIntoScan.
PullOutVariantExtractions,
SchemaPruning,
GroupBasedRowLevelOperationScanPlanning,
V1Writes,
Expand Down
Loading