diff --git a/.gitignore b/.gitignore
index 50a495d96..9bb8dcb54 100644
--- a/.gitignore
+++ b/.gitignore
@@ -57,3 +57,7 @@ native-engine/_build
# exclude org.apache.auron.common.AuronBuildInfo
common/src/main/resources/auron-build-info.properties
+
+
+.flattened-pom.xml
+dependency-reduced-pom.xml
\ No newline at end of file
diff --git a/.rat-excludes b/.rat-excludes
index 05405443c..09a244b20 100644
--- a/.rat-excludes
+++ b/.rat-excludes
@@ -33,3 +33,5 @@ NOTICE*
docs/**
build/apache-maven-*/**
src/main/resources/auron-build-info.properties
+**/tpcds-plan-stability/**
+**/tpcds-queries/**
diff --git a/auron-build.sh b/auron-build.sh
index 0fabf830b..d947b79e7 100755
--- a/auron-build.sh
+++ b/auron-build.sh
@@ -359,9 +359,9 @@ fi
BUILD_ARGS=()
if [[ "$SKIP_TESTS" == true ]]; then
- BUILD_ARGS+=("package" "-DskipTests")
+ BUILD_ARGS+=("install" "-DskipTests")
else
- BUILD_ARGS+=("package")
+ BUILD_ARGS+=("install")
fi
if [[ "$SPARK_TESTS" == true ]]; then
diff --git a/dev/auron-it/dependency-reduced-pom.xml b/dev/auron-it/dependency-reduced-pom.xml
new file mode 100644
index 000000000..0f8218df9
--- /dev/null
+++ b/dev/auron-it/dependency-reduced-pom.xml
@@ -0,0 +1,192 @@
+
+
+ 4.0.0
+ org.apache.auron
+ auron-it
+ Apache Auron Integration Tests
+ 7.0.0-SNAPSHOT
+ Apache Auron Integration Tests Project
+ https://github.com/apache/auron.git/auron-it
+
+
+ Apache Announce List
+ announce-subscribe@apache.org
+ announce-unsubscribe@apache.org
+ announce@apache.org
+ https://mail-archives.apache.org/mod_mbox/www-announce/
+
+
+
+
+ Apache-2.0
+ https://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
+
+ scm:git:https://gitbox.apache.org/repos/asf/maven-apache-parent.git/auron-parent_2.12/auron-it
+ scm:git:https://gitbox.apache.org/repos/asf/maven-apache-parent.git/auron-parent_2.12/auron-it
+ apache-35
+ https://github.com/apache/maven-apache-parent/tree/apache-35/auron-parent_2.12/auron-it
+
+
+ The Apache Software Foundation
+ https://www.apache.org/
+
+
+
+
+
+ false
+
+ gcs-maven-central-mirror
+ GCS Maven Central mirror Asia Pacific
+ https://maven-central-asia.storage-download.googleapis.com/maven2/
+
+
+
+
+ org.apache.spark
+ spark-core_2.12
+ 3.5.7
+ provided
+
+
+ *
+ io.netty
+
+
+
+
+ org.apache.spark
+ spark-catalyst_2.12
+ 3.5.7
+ provided
+
+
+ org.apache.spark
+ spark-hive_2.12
+ 3.5.7
+ provided
+
+
+ *
+ org.apache.arrow
+
+
+
+
+ org.apache.spark
+ spark-sql_2.12
+ 3.5.7
+ provided
+
+
+ *
+ io.netty
+
+
+ *
+ org.apache.arrow
+
+
+
+
+ org.apache.spark
+ spark-core_2.12
+ 3.5.7
+ test-jar
+ test
+
+
+ org.scalatest
+ scalatest_2.12
+ 3.2.9
+ test
+
+
+ scalatest-core_2.12
+ org.scalatest
+
+
+ scalatest-featurespec_2.12
+ org.scalatest
+
+
+ scalatest-flatspec_2.12
+ org.scalatest
+
+
+ scalatest-freespec_2.12
+ org.scalatest
+
+
+ scalatest-funsuite_2.12
+ org.scalatest
+
+
+ scalatest-funspec_2.12
+ org.scalatest
+
+
+ scalatest-propspec_2.12
+ org.scalatest
+
+
+ scalatest-refspec_2.12
+ org.scalatest
+
+
+ scalatest-wordspec_2.12
+ org.scalatest
+
+
+ scalatest-diagrams_2.12
+ org.scalatest
+
+
+ scalatest-matchers-core_2.12
+ org.scalatest
+
+
+ scalatest-shouldmatchers_2.12
+ org.scalatest
+
+
+ scalatest-mustmatchers_2.12
+ org.scalatest
+
+
+
+
+ org.scala-lang
+ scala-library
+ 2.12.18
+ provided
+
+
+ org.scala-lang
+ scala-compiler
+ 2.12.18
+ provided
+
+
+ org.scala-lang
+ scala-reflect
+ 2.12.18
+ provided
+
+
+
+
+ apache.releases.https
+ Apache Release Distribution Repository
+ https://repository.apache.org/service/local/staging/deploy/maven2
+
+
+ apache.snapshots.https
+ Apache Development Snapshot Repository
+ https://repository.apache.org/content/repositories/snapshots
+
+
+
diff --git a/dev/auron-it/local-run-tpcds.sh b/dev/auron-it/local-run-tpcds.sh
new file mode 100755
index 000000000..8af426a8d
--- /dev/null
+++ b/dev/auron-it/local-run-tpcds.sh
@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+set -ex
+
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+AURON_DIR="$SCRIPT_DIR/../.."
+
+# TPC-DS Dataset Preparation
+# 1. Download pre-generated 1GB TPC-DS dataset: https://github.com/auron-project/tpcds_1g
+# 2. OR generate via databricks/tpcds-kit: https://github.com/databricks/tpcds-kit
+# Place data in a readable directory (e.g., /tmp/tpcds_1g) post-generation.
+
+# Run TPC-DS Benchmark (Vanilla Spark vs Auron)
+# - Executes specified TPC-DS queries (all if --query-filter unspecified) with Vanilla Spark/Auron
+# - Verifies query result consistency (enabled by default) and reports execution time and speedup (Vanilla/Auron)
+$SCRIPT_DIR/run-it.sh \
+ --type tpcds \
+ --data-location /tmp/tpcds_1g \
+ --query-filter q1,q2,q3
+
+# Run Only Auron plan stability check
+# - Validates Auron physical plans against golden files.
+$SCRIPT_DIR/run-it.sh \
+ --type tpcds \
+ --data-location /tmp/tpcds_1g \
+ --query-filter q1,q2,q3 \
+ --auron-only \
+ --plan-check
+
+# Regenerate Golden Files for Plan Stability Check
+# - Rewrites golden plan files using Auron plans for the current Spark version
+$SCRIPT_DIR/run-it.sh \
+ --type tpcds \
+ --data-location /tmp/tpcds_1g \
+ --query-filter q1,q2,q3 \
+ --auron-only \
+ --regen-golden
diff --git a/dev/auron-it/pom.xml b/dev/auron-it/pom.xml
new file mode 100644
index 000000000..fe2ca581a
--- /dev/null
+++ b/dev/auron-it/pom.xml
@@ -0,0 +1,286 @@
+
+
+
+ 4.0.0
+
+ org.apache.auron
+ auron-parent_${scalaVersion}
+ ${project.version}
+ ../../pom.xml
+
+
+ auron-it
+ jar
+ Apache Auron Integration Tests
+ Apache Auron Integration Tests Project
+
+
+
+
+
+
+ org.apache.auron
+ auron-${shimName}_${scalaVersion}
+ ${project.version}
+
+
+
+ com.github.scopt
+ scopt_${scalaVersion}
+ 4.1.0
+ compile
+
+
+ org.apache.spark
+ spark-core_${scalaVersion}
+ provided
+
+
+ org.apache.spark
+ spark-catalyst_${scalaVersion}
+ provided
+
+
+ org.apache.spark
+ spark-hive_${scalaVersion}
+ provided
+
+
+ org.apache.spark
+ spark-sql_${scalaVersion}
+ provided
+
+
+
+ org.apache.spark
+ spark-core_${scalaVersion}
+ test-jar
+
+
+ org.scalatest
+ scalatest_${scalaVersion}
+ 3.2.9
+ test
+
+
+
+
+
+
+
+ com.diffplug.spotless
+ spotless-maven-plugin
+ ${spotless.plugin.version}
+
+
+
+
+
+ ${maven.multiModuleProjectDirectory}/../../dev/license-header
+
+
+
+
+ ${scalafmtVersion}
+ ${maven.multiModuleProjectDirectory}/../../scalafmt.conf
+ ${scalaVersion}
+
+
+ ${maven.multiModuleProjectDirectory}/../../dev/license-header
+
+
+
+
+ UTF-8
+ ${line.separator}
+ false
+ true
+ true
+ 2
+ false
+ false
+ recommended_2008_06
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+ scalafix
+
+ apply
+
+ validate
+
+
+
+
+
+
+ io.github.evis
+ scalafix-maven-plugin_${scalaVersion}
+ 0.1.4_0.9.31
+
+ ${maven.multiModuleProjectDirectory}/../../scalafix.conf
+
+
+
+ com.nequissimus
+ sort-imports_${scalaVersion}
+ 0.6.1
+
+
+
+
+ scalafix
+
+ scalafix
+
+ prepare-package
+
+
+
+
+
+ org.apache.rat
+ apache-rat-plugin
+ true
+
+ false
+ 0
+
+
+ Apache License 2.0
+
+
+ ${maven.multiModuleProjectDirectory}/../../.rat-excludes
+
+
+
+
+ check
+
+ verify
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+
+
+
+ shade
+
+ package
+
+ true
+ true
+ jar-with-dependencies
+
+
+ *:*
+
+
+
+
+
+
+ org.apache.auron.integration.Main
+
+
+
+
+
+
+
+
+
+
+
+ spark-3.0
+
+ spark-3.0
+ 3.0.3
+
+
+
+
+ spark-3.1
+
+ spark-3.1
+ 3.1.3
+
+
+
+
+ spark-3.2
+
+ spark-3.2
+ 3.2.4
+
+
+
+
+ spark-3.3
+
+ spark-3.3
+ 3.3.4
+
+
+
+
+ spark-3.4
+
+ spark-3.4
+ 3.4.4
+
+
+
+
+ spark-3.5
+
+ spark-3.5
+ 3.5.7
+
+
+
+
+ scala-2.12
+
+ 2.12
+ 2.12.18
+
+
+
+
+ scala-2.13
+
+ 2.13
+ 2.13.13
+
+
+
+
diff --git a/dev/auron-it/run-it.sh b/dev/auron-it/run-it.sh
new file mode 100755
index 000000000..8e0e694bb
--- /dev/null
+++ b/dev/auron-it/run-it.sh
@@ -0,0 +1,81 @@
+#!/usr/bin/env bash
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+set -exo pipefail
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+AURON_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
+
+MVN_CMD="${AURON_DIR}/build/mvn"
+export RUST_BACKTRACE=1
+SPARK_VERSION="${SPARK_VERSION:-spark-3.5}"
+SCALA_VERSION="${SCALA_VERSION:-2.12}"
+PROFILES="-P${SPARK_VERSION},scala-${SCALA_VERSION}"
+PROJECT_VERSION="$("${MVN_CMD}" -f "${AURON_DIR}/pom.xml" -q ${PROFILES} help:evaluate -Dexpression=project.version -DforceStdout)"
+
+AURON_SPARK_JAR="${AURON_SPARK_JAR:-${AURON_DIR}/dev/mvn-build-helper/assembly/target/auron-${SPARK_VERSION}_${SCALA_VERSION}-${PROJECT_VERSION}.jar}"
+AURON_IT_JAR="${AURON_DIR}/dev/auron-it/target/auron-it-${PROJECT_VERSION}-jar-with-dependencies.jar"
+
+
+if [[ -z "${SPARK_HOME:-}" ]]; then
+ echo "ERROR: SPARK_HOME environment variable must be set"
+ exit 1
+fi
+
+if [[ ! -f "${AURON_SPARK_JAR}" ]]; then
+ echo "ERROR: Auron Spark JAR not found at: ${AURON_SPARK_JAR}"
+ echo "Hint: Rebuild with: ./auron-build.sh"
+ exit 1
+fi
+
+if [[ ! -f "$AURON_IT_JAR" ]]; then
+ echo "INFO: Building missing Auron it jar..."
+ pushd "${SCRIPT_DIR}"
+ "${MVN_CMD}" ${PROFILES} package -DskipTests
+ popd
+fi
+
+# Split input arguments into two parts: Spark confs and args
+SPARK_CONF=()
+ARGS=()
+while [[ $# -gt 0 ]]; do
+ case $1 in
+ --master=*)
+ SPARK_CONF+=("$1") ;;
+ --conf)
+ shift
+ SPARK_CONF+=("--conf" "$1") ;;
+ *)
+ ARGS+=("$1") ;;
+ esac
+ shift
+done
+
+exec $SPARK_HOME/bin/spark-submit \
+ --driver-memory 5g \
+ --conf spark.driver.memoryOverhead=3072 \
+ --conf spark.auron.memoryFraction=0.8 \
+ --conf spark.driver.extraJavaOptions=-XX:+UseG1GC \
+ --conf spark.ui.enabled=false \
+ --jars "${AURON_SPARK_JAR}" \
+ "${SPARK_CONF[@]}" \
+ "${AURON_IT_JAR}" \
+ "${ARGS[@]}"
\ No newline at end of file
diff --git a/dev/auron-it/src/main/resources/log4j.properties b/dev/auron-it/src/main/resources/log4j.properties
new file mode 100644
index 000000000..4c4853a57
--- /dev/null
+++ b/dev/auron-it/src/main/resources/log4j.properties
@@ -0,0 +1,46 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Set everything to be logged to the file core/target/unit-tests.log
+log4j.rootLogger=WARN, CA
+
+#Console Appender
+log4j.appender.CA=org.apache.log4j.ConsoleAppender
+log4j.appender.CA.layout=org.apache.log4j.PatternLayout
+log4j.appender.CA.layout.ConversionPattern=%d{HH:mm:ss.SSS} %p %c: %m%n
+log4j.appender.CA.Threshold=DEBUG
+log4j.appender.CA.follow=true
+
+# Some packages are noisy for no good reason.
+log4j.additivity.org.apache.parquet.hadoop.ParquetRecordReader=false
+log4j.logger.org.apache.parquet.hadoop.ParquetRecordReader=OFF
+
+log4j.additivity.org.apache.parquet.hadoop.ParquetOutputCommitter=false
+log4j.logger.org.apache.parquet.hadoop.ParquetOutputCommitter=OFF
+
+log4j.additivity.org.apache.hadoop.hive.serde2.lazy.LazyStruct=false
+log4j.logger.org.apache.hadoop.hive.serde2.lazy.LazyStruct=OFF
+
+log4j.additivity.org.apache.hadoop.hive.metastore.RetryingHMSHandler=false
+log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=OFF
+
+log4j.additivity.hive.ql.metadata.Hive=false
+log4j.logger.hive.ql.metadata.Hive=OFF
+
+# Parquet related logging
+log4j.logger.org.apache.parquet.CorruptStatistics=ERROR
+log4j.logger.parquet.CorruptStatistics=ERROR
diff --git a/dev/auron-it/src/main/resources/log4j2.properties b/dev/auron-it/src/main/resources/log4j2.properties
new file mode 100644
index 000000000..1723186a2
--- /dev/null
+++ b/dev/auron-it/src/main/resources/log4j2.properties
@@ -0,0 +1,68 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Set everything to be logged to the file core/target/unit-tests.log
+rootLogger.level = warn
+rootLogger.appenderRef.stdout.ref = STDOUT
+
+#Console Appender
+appender.console.type = Console
+appender.console.name = STDOUT
+appender.console.target = SYSTEM_OUT
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{HH:mm:ss.SSS} %p %c: %m%n%ex
+appender.console.filter.threshold.type = ThresholdFilter
+appender.console.filter.threshold.level = debug
+
+#File Appender
+#appender.file.type = File
+#appender.file.name = File
+#appender.file.fileName = target/unit-tests.log
+#appender.file.layout.type = PatternLayout
+#appender.file.layout.pattern = %d{HH:mm:ss.SSS} %t %p %c{1}: %m%n%ex
+
+# Set the logger level of File Appender to WARN
+# appender.file.filter.threshold.type = ThresholdFilter
+# appender.file.filter.threshold.level = info
+
+# Some packages are noisy for no good reason.
+logger.parquet_recordreader.name = org.apache.parquet.hadoop.ParquetRecordReader
+logger.parquet_recordreader.additivity = false
+logger.parquet_recordreader.level = off
+
+logger.parquet_outputcommitter.name = org.apache.parquet.hadoop.ParquetOutputCommitter
+logger.parquet_outputcommitter.additivity = false
+logger.parquet_outputcommitter.level = off
+
+logger.hadoop_lazystruct.name = org.apache.hadoop.hive.serde2.lazy.LazyStruct
+logger.hadoop_lazystruct.additivity = false
+logger.hadoop_lazystruct.level = off
+
+logger.hadoop_retryinghmshandler.name = org.apache.hadoop.hive.metastore.RetryingHMSHandler
+logger.hadoop_retryinghmshandler.additivity = false
+logger.hadoop_retryinghmshandler.level = off
+
+logger.hive_metadata.name = hive.ql.metadata.Hive
+logger.hive_metadata.additivity = false
+logger.hive_metadata.level = off
+
+# Parquet related logging
+logger.parquet1.name = org.apache.parquet.CorruptStatistics
+logger.parquet1.level = error
+
+logger.parquet2.name = parquet.CorruptStatistics
+logger.parquet2.level = error
diff --git a/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q1.txt b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q1.txt
new file mode 100644
index 000000000..b10e1f182
--- /dev/null
+++ b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q1.txt
@@ -0,0 +1,836 @@
+== Physical Plan ==
+AdaptiveSparkPlan (151)
++- == Final Plan ==
+ NativeTakeOrdered (96)
+ +- NativeProject (95)
+ +- NativeSortMergeJoin Inner (94)
+ :- NativeSort (85)
+ : +- InputAdapter (84)
+ : +- AQEShuffleRead (83)
+ : +- ShuffleQueryStage (82), Statistics(X)
+ : +- NativeShuffleExchange (81)
+ : +- NativeProject (80)
+ : +- NativeSortMergeJoin Inner (79)
+ : :- ConvertToNative (69)
+ : : +- * Project (68)
+ : : +- * SortMergeJoin Inner (67)
+ : : :- NativeSort (33)
+ : : : +- InputAdapter (32)
+ : : : +- AQEShuffleRead (31)
+ : : : +- ShuffleQueryStage (30), Statistics(X)
+ : : : +- NativeShuffleExchange (29)
+ : : : +- NativeFilter (28)
+ : : : +- NativeProject (27)
+ : : : +- NativeHashAggregate (26)
+ : : : +- InputAdapter (25)
+ : : : +- AQEShuffleRead (24)
+ : : : +- ShuffleQueryStage (23), Statistics(X)
+ : : : +- NativeShuffleExchange (22)
+ : : : +- NativeHashAggregate (21)
+ : : : +- NativeProject (20)
+ : : : +- NativeProject (19)
+ : : : +- NativeSortMergeJoin Inner (18)
+ : : : :- NativeSort (8)
+ : : : : +- InputAdapter (7)
+ : : : : +- AQEShuffleRead (6)
+ : : : : +- ShuffleQueryStage (5), Statistics(X)
+ : : : : +- NativeShuffleExchange (4)
+ : : : : +- NativeFilter (3)
+ : : : : +- InputAdapter (2)
+ : : : : +- NativeParquetScan (1)
+ : : : +- NativeSort (17)
+ : : : +- InputAdapter (16)
+ : : : +- AQEShuffleRead (15)
+ : : : +- ShuffleQueryStage (14), Statistics(X)
+ : : : +- NativeShuffleExchange (13)
+ : : : +- NativeProject (12)
+ : : : +- NativeFilter (11)
+ : : : +- InputAdapter (10)
+ : : : +- NativeParquetScan (9)
+ : : +- NativeSort (66)
+ : : +- NativeFilter (65)
+ : : +- NativeProject (64)
+ : : +- NativeHashAggregate (63)
+ : : +- InputAdapter (62)
+ : : +- AQEShuffleRead (61)
+ : : +- ShuffleQueryStage (60), Statistics(X)
+ : : +- NativeShuffleExchange (59)
+ : : +- NativeHashAggregate (58)
+ : : +- NativeProject (57)
+ : : +- NativeHashAggregate (56)
+ : : +- InputAdapter (55)
+ : : +- AQEShuffleRead (54)
+ : : +- ShuffleQueryStage (53), Statistics(X)
+ : : +- NativeShuffleExchange (52)
+ : : +- NativeHashAggregate (51)
+ : : +- NativeProject (50)
+ : : +- NativeProject (49)
+ : : +- NativeSortMergeJoin Inner (48)
+ : : :- NativeSort (41)
+ : : : +- InputAdapter (40)
+ : : : +- AQEShuffleRead (39)
+ : : : +- ShuffleQueryStage (38), Statistics(X)
+ : : : +- NativeShuffleExchange (37)
+ : : : +- NativeFilter (36)
+ : : : +- InputAdapter (35)
+ : : : +- NativeParquetScan (34)
+ : : +- NativeSort (47)
+ : : +- InputAdapter (46)
+ : : +- InputAdapter (45)
+ : : +- AQEShuffleRead (44)
+ : : +- ShuffleQueryStage (43), Statistics(X)
+ : : +- ReusedExchange (42)
+ : +- NativeSort (78)
+ : +- InputAdapter (77)
+ : +- AQEShuffleRead (76)
+ : +- ShuffleQueryStage (75), Statistics(X)
+ : +- NativeShuffleExchange (74)
+ : +- NativeProject (73)
+ : +- NativeFilter (72)
+ : +- InputAdapter (71)
+ : +- NativeParquetScan (70)
+ +- NativeSort (93)
+ +- InputAdapter (92)
+ +- AQEShuffleRead (91)
+ +- ShuffleQueryStage (90), Statistics(X)
+ +- NativeShuffleExchange (89)
+ +- NativeFilter (88)
+ +- InputAdapter (87)
+ +- NativeParquetScan (86)
++- == Initial Plan ==
+ TakeOrderedAndProject (150)
+ +- Project (149)
+ +- SortMergeJoin Inner (148)
+ :- Sort (143)
+ : +- Exchange (142)
+ : +- Project (141)
+ : +- SortMergeJoin Inner (140)
+ : :- Project (134)
+ : : +- SortMergeJoin Inner (133)
+ : : :- Sort (113)
+ : : : +- Exchange (112)
+ : : : +- Filter (111)
+ : : : +- HashAggregate (110)
+ : : : +- Exchange (109)
+ : : : +- HashAggregate (108)
+ : : : +- Project (107)
+ : : : +- SortMergeJoin Inner (106)
+ : : : :- Sort (100)
+ : : : : +- Exchange (99)
+ : : : : +- Filter (98)
+ : : : : +- Scan parquet (97)
+ : : : +- Sort (105)
+ : : : +- Exchange (104)
+ : : : +- Project (103)
+ : : : +- Filter (102)
+ : : : +- Scan parquet (101)
+ : : +- Sort (132)
+ : : +- Filter (131)
+ : : +- HashAggregate (130)
+ : : +- Exchange (129)
+ : : +- HashAggregate (128)
+ : : +- HashAggregate (127)
+ : : +- Exchange (126)
+ : : +- HashAggregate (125)
+ : : +- Project (124)
+ : : +- SortMergeJoin Inner (123)
+ : : :- Sort (117)
+ : : : +- Exchange (116)
+ : : : +- Filter (115)
+ : : : +- Scan parquet (114)
+ : : +- Sort (122)
+ : : +- Exchange (121)
+ : : +- Project (120)
+ : : +- Filter (119)
+ : : +- Scan parquet (118)
+ : +- Sort (139)
+ : +- Exchange (138)
+ : +- Project (137)
+ : +- Filter (136)
+ : +- Scan parquet (135)
+ +- Sort (147)
+ +- Exchange (146)
+ +- Filter (145)
+ +- Scan parquet (144)
+
+
+(97) Scan parquet
+Output [4]: [sr_returned_date_sk#1, sr_customer_sk#2, sr_store_sk#3, sr_return_amt#4]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(sr_returned_date_sk), IsNotNull(sr_store_sk), IsNotNull(sr_customer_sk)]
+ReadSchema: struct
+
+(2) InputAdapter
+Input [4]: [sr_returned_date_sk#1, sr_customer_sk#2, sr_store_sk#3, sr_return_amt#4]
+Arguments: [#1, #2, #3, #4]
+
+(3) NativeFilter
+Input [4]: [#1#1, #2#2, #3#3, #4#4]
+Condition : ((isnotnull(sr_returned_date_sk#1) AND isnotnull(sr_store_sk#3)) AND isnotnull(sr_customer_sk#2))
+
+(4) NativeShuffleExchange
+Input [4]: [#1#1, #2#2, #3#3, #4#4]
+Arguments: hashpartitioning(sr_returned_date_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=1]
+
+(5) ShuffleQueryStage
+Output [4]: [#1#1, #2#2, #3#3, #4#4]
+Arguments: X
+
+(6) AQEShuffleRead
+Input [4]: [#1#1, #2#2, #3#3, #4#4]
+Arguments: coalesced
+
+(7) InputAdapter
+Input [4]: [#1#1, #2#2, #3#3, #4#4]
+
+(8) NativeSort
+Input [4]: [#1#1, #2#2, #3#3, #4#4]
+Arguments: [sr_returned_date_sk#1 ASC NULLS FIRST], false
+
+(101) Scan parquet
+Output [2]: [d_date_sk#5, d_year#6]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(10) InputAdapter
+Input [2]: [d_date_sk#5, d_year#6]
+Arguments: [#5, #6]
+
+(11) NativeFilter
+Input [2]: [#5#5, #6#6]
+Condition : ((isnotnull(d_year#6) AND (d_year#6 = 2000)) AND isnotnull(d_date_sk#5))
+
+(12) NativeProject
+Output [1]: [d_date_sk#5]
+Input [2]: [#5#5, #6#6]
+
+(13) NativeShuffleExchange
+Input [1]: [d_date_sk#5]
+Arguments: hashpartitioning(d_date_sk#5, 100), ENSURE_REQUIREMENTS, [plan_id=2]
+
+(14) ShuffleQueryStage
+Output [1]: [d_date_sk#5]
+Arguments: X
+
+(15) AQEShuffleRead
+Input [1]: [d_date_sk#5]
+Arguments: coalesced
+
+(16) InputAdapter
+Input [1]: [d_date_sk#5]
+
+(17) NativeSort
+Input [1]: [d_date_sk#5]
+Arguments: [d_date_sk#5 ASC NULLS FIRST], false
+
+(18) NativeSortMergeJoin
+Left keys [1]: [sr_returned_date_sk#1]
+Right keys [1]: [d_date_sk#5]
+Join type: Inner
+Join condition: None
+
+(19) NativeProject
+Output [3]: [sr_customer_sk#2, sr_store_sk#3, sr_return_amt#4]
+Input [5]: [#1#1, #2#2, #3#3, #4#4, d_date_sk#5]
+
+(20) NativeProject
+Output [3]: [sr_customer_sk#2 AS sr_customer_sk#2, sr_store_sk#3 AS sr_store_sk#3, UnscaledValue(sr_return_amt#4) AS _c2#7]
+Input [3]: [sr_customer_sk#2, sr_store_sk#3, sr_return_amt#4]
+
+(21) NativeHashAggregate
+Input [3]: [sr_customer_sk#2, sr_store_sk#3, _c2#7]
+Keys [2]: [sr_customer_sk#2, sr_store_sk#3]
+Functions [1]: [partial_sum(_c2#7)]
+Aggregate Attributes [1]: [sum#8]
+Results [3]: [sr_customer_sk#2, sr_store_sk#3, #9#9]
+
+(22) NativeShuffleExchange
+Input [3]: [sr_customer_sk#2, sr_store_sk#3, #9#9]
+Arguments: hashpartitioning(sr_customer_sk#2, sr_store_sk#3, 100), ENSURE_REQUIREMENTS, [plan_id=3]
+
+(23) ShuffleQueryStage
+Output [3]: [sr_customer_sk#2, sr_store_sk#3, #9#9]
+Arguments: X
+
+(24) AQEShuffleRead
+Input [3]: [sr_customer_sk#2, sr_store_sk#3, #9#9]
+Arguments: coalesced
+
+(25) InputAdapter
+Input [3]: [sr_customer_sk#2, sr_store_sk#3, #9#9]
+
+(26) NativeHashAggregate
+Input [3]: [sr_customer_sk#2, sr_store_sk#3, #9#9]
+Keys [2]: [sr_customer_sk#2, sr_store_sk#3]
+Functions [1]: [sum(UnscaledValue(sr_return_amt#4))]
+Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#4))#10]
+Results [3]: [sr_customer_sk#2, sr_store_sk#3, sum(UnscaledValue(sr_return_amt#4))#10]
+
+(27) NativeProject
+Output [3]: [sr_customer_sk#2 AS ctr_customer_sk#11, sr_store_sk#3 AS ctr_store_sk#12, MakeDecimal(sum(UnscaledValue(sr_return_amt#4))#10,17,2) AS ctr_total_return#13]
+Input [3]: [sr_customer_sk#2, sr_store_sk#3, sum(UnscaledValue(sr_return_amt#4))#10]
+
+(28) NativeFilter
+Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13]
+Condition : isnotnull(ctr_total_return#13)
+
+(29) NativeShuffleExchange
+Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13]
+Arguments: hashpartitioning(ctr_store_sk#12, 100), ENSURE_REQUIREMENTS, [plan_id=4]
+
+(30) ShuffleQueryStage
+Output [3]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13]
+Arguments: X
+
+(31) AQEShuffleRead
+Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13]
+Arguments: coalesced
+
+(32) InputAdapter
+Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13]
+
+(33) NativeSort
+Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13]
+Arguments: [ctr_store_sk#12 ASC NULLS FIRST], false
+
+(114) Scan parquet
+Output [4]: [sr_returned_date_sk#14, sr_customer_sk#15, sr_store_sk#16, sr_return_amt#17]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(sr_returned_date_sk), IsNotNull(sr_store_sk)]
+ReadSchema: struct
+
+(35) InputAdapter
+Input [4]: [sr_returned_date_sk#14, sr_customer_sk#15, sr_store_sk#16, sr_return_amt#17]
+Arguments: [#14, #15, #16, #17]
+
+(36) NativeFilter
+Input [4]: [#14#14, #15#15, #16#16, #17#17]
+Condition : (isnotnull(sr_returned_date_sk#14) AND isnotnull(sr_store_sk#16))
+
+(37) NativeShuffleExchange
+Input [4]: [#14#14, #15#15, #16#16, #17#17]
+Arguments: hashpartitioning(sr_returned_date_sk#14, 100), ENSURE_REQUIREMENTS, [plan_id=5]
+
+(38) ShuffleQueryStage
+Output [4]: [#14#14, #15#15, #16#16, #17#17]
+Arguments: X
+
+(39) AQEShuffleRead
+Input [4]: [#14#14, #15#15, #16#16, #17#17]
+Arguments: coalesced
+
+(40) InputAdapter
+Input [4]: [#14#14, #15#15, #16#16, #17#17]
+
+(41) NativeSort
+Input [4]: [#14#14, #15#15, #16#16, #17#17]
+Arguments: [sr_returned_date_sk#14 ASC NULLS FIRST], false
+
+(42) ReusedExchange [Reuses operator id: 13]
+Output [1]: [d_date_sk#18]
+
+(43) ShuffleQueryStage
+Output [1]: [d_date_sk#18]
+Arguments: X
+
+(44) AQEShuffleRead
+Input [1]: [d_date_sk#18]
+Arguments: coalesced
+
+(45) InputAdapter
+Input [1]: [d_date_sk#18]
+Arguments: [#18]
+
+(46) InputAdapter
+Input [1]: [#18#18]
+
+(47) NativeSort
+Input [1]: [#18#18]
+Arguments: [d_date_sk#18 ASC NULLS FIRST], false
+
+(48) NativeSortMergeJoin
+Left keys [1]: [sr_returned_date_sk#14]
+Right keys [1]: [d_date_sk#18]
+Join type: Inner
+Join condition: None
+
+(49) NativeProject
+Output [3]: [sr_customer_sk#15, sr_store_sk#16, sr_return_amt#17]
+Input [5]: [#14#14, #15#15, #16#16, #17#17, #18#18]
+
+(50) NativeProject
+Output [3]: [sr_customer_sk#15 AS sr_customer_sk#15, sr_store_sk#16 AS sr_store_sk#16, UnscaledValue(sr_return_amt#17) AS _c2#19]
+Input [3]: [sr_customer_sk#15, sr_store_sk#16, sr_return_amt#17]
+
+(51) NativeHashAggregate
+Input [3]: [sr_customer_sk#15, sr_store_sk#16, _c2#19]
+Keys [2]: [sr_customer_sk#15, sr_store_sk#16]
+Functions [1]: [partial_sum(_c2#19)]
+Aggregate Attributes [1]: [sum#20]
+Results [3]: [sr_customer_sk#15, sr_store_sk#16, #9#9]
+
+(52) NativeShuffleExchange
+Input [3]: [sr_customer_sk#15, sr_store_sk#16, #9#9]
+Arguments: hashpartitioning(sr_customer_sk#15, sr_store_sk#16, 100), ENSURE_REQUIREMENTS, [plan_id=6]
+
+(53) ShuffleQueryStage
+Output [3]: [sr_customer_sk#15, sr_store_sk#16, #9#9]
+Arguments: X
+
+(54) AQEShuffleRead
+Input [3]: [sr_customer_sk#15, sr_store_sk#16, #9#9]
+Arguments: coalesced
+
+(55) InputAdapter
+Input [3]: [sr_customer_sk#15, sr_store_sk#16, #9#9]
+
+(56) NativeHashAggregate
+Input [3]: [sr_customer_sk#15, sr_store_sk#16, #9#9]
+Keys [2]: [sr_customer_sk#15, sr_store_sk#16]
+Functions [1]: [sum(UnscaledValue(sr_return_amt#17))]
+Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#17))#10]
+Results [3]: [sr_customer_sk#15, sr_store_sk#16, sum(UnscaledValue(sr_return_amt#17))#10]
+
+(57) NativeProject
+Output [2]: [sr_store_sk#16 AS ctr_store_sk#21, MakeDecimal(sum(UnscaledValue(sr_return_amt#17))#10,17,2) AS ctr_total_return#22]
+Input [3]: [sr_customer_sk#15, sr_store_sk#16, sum(UnscaledValue(sr_return_amt#17))#10]
+
+(58) NativeHashAggregate
+Input [2]: [ctr_store_sk#21, ctr_total_return#22]
+Keys [1]: [ctr_store_sk#21]
+Functions [1]: [partial_avg(ctr_total_return#22)]
+Aggregate Attributes [2]: [sum#23, count#24]
+Results [2]: [ctr_store_sk#21, #9#9]
+
+(59) NativeShuffleExchange
+Input [2]: [ctr_store_sk#21, #9#9]
+Arguments: hashpartitioning(ctr_store_sk#21, 100), ENSURE_REQUIREMENTS, [plan_id=7]
+
+(60) ShuffleQueryStage
+Output [2]: [ctr_store_sk#21, #9#9]
+Arguments: X
+
+(61) AQEShuffleRead
+Input [2]: [ctr_store_sk#21, #9#9]
+Arguments: coalesced
+
+(62) InputAdapter
+Input [2]: [ctr_store_sk#21, #9#9]
+
+(63) NativeHashAggregate
+Input [2]: [ctr_store_sk#21, #9#9]
+Keys [1]: [ctr_store_sk#21]
+Functions [1]: [avg(ctr_total_return#22)]
+Aggregate Attributes [1]: [avg(ctr_total_return#22)#25]
+Results [2]: [ctr_store_sk#21, avg(ctr_total_return#22)#25]
+
+(64) NativeProject
+Output [2]: [(avg(ctr_total_return#22)#25 * 1.2) AS (avg(ctr_total_return) * 1.2)#26, ctr_store_sk#21]
+Input [2]: [ctr_store_sk#21, avg(ctr_total_return#22)#25]
+
+(65) NativeFilter
+Input [2]: [(avg(ctr_total_return) * 1.2)#26, ctr_store_sk#21]
+Condition : isnotnull((avg(ctr_total_return) * 1.2)#26)
+
+(66) NativeSort
+Input [2]: [(avg(ctr_total_return) * 1.2)#26, ctr_store_sk#21]
+Arguments: [ctr_store_sk#21 ASC NULLS FIRST], false
+
+(67) SortMergeJoin [codegen id : 1]
+Left keys [1]: [ctr_store_sk#12]
+Right keys [1]: [ctr_store_sk#21]
+Join type: Inner
+Join condition: (cast(ctr_total_return#13 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#26)
+
+(68) Project [codegen id : 1]
+Output [2]: [ctr_customer_sk#11, ctr_store_sk#12]
+Input [5]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13, (avg(ctr_total_return) * 1.2)#26, ctr_store_sk#21]
+
+(69) ConvertToNative
+Input [2]: [ctr_customer_sk#11, ctr_store_sk#12]
+
+(135) Scan parquet
+Output [2]: [s_store_sk#27, s_state#28]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)]
+ReadSchema: struct
+
+(71) InputAdapter
+Input [2]: [s_store_sk#27, s_state#28]
+Arguments: [#27, #28]
+
+(72) NativeFilter
+Input [2]: [#27#27, #28#28]
+Condition : ((isnotnull(s_state#28) AND (s_state#28 = TN)) AND isnotnull(s_store_sk#27))
+
+(73) NativeProject
+Output [1]: [s_store_sk#27]
+Input [2]: [#27#27, #28#28]
+
+(74) NativeShuffleExchange
+Input [1]: [s_store_sk#27]
+Arguments: hashpartitioning(s_store_sk#27, 100), ENSURE_REQUIREMENTS, [plan_id=8]
+
+(75) ShuffleQueryStage
+Output [1]: [s_store_sk#27]
+Arguments: X
+
+(76) AQEShuffleRead
+Input [1]: [s_store_sk#27]
+Arguments: coalesced
+
+(77) InputAdapter
+Input [1]: [s_store_sk#27]
+
+(78) NativeSort
+Input [1]: [s_store_sk#27]
+Arguments: [s_store_sk#27 ASC NULLS FIRST], false
+
+(79) NativeSortMergeJoin
+Left keys [1]: [ctr_store_sk#12]
+Right keys [1]: [s_store_sk#27]
+Join type: Inner
+Join condition: None
+
+(80) NativeProject
+Output [1]: [ctr_customer_sk#11]
+Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, s_store_sk#27]
+
+(81) NativeShuffleExchange
+Input [1]: [ctr_customer_sk#11]
+Arguments: hashpartitioning(ctr_customer_sk#11, 100), ENSURE_REQUIREMENTS, [plan_id=9]
+
+(82) ShuffleQueryStage
+Output [1]: [ctr_customer_sk#11]
+Arguments: X
+
+(83) AQEShuffleRead
+Input [1]: [ctr_customer_sk#11]
+Arguments: coalesced
+
+(84) InputAdapter
+Input [1]: [ctr_customer_sk#11]
+
+(85) NativeSort
+Input [1]: [ctr_customer_sk#11]
+Arguments: [ctr_customer_sk#11 ASC NULLS FIRST], false
+
+(144) Scan parquet
+Output [2]: [c_customer_sk#29, c_customer_id#30]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(c_customer_sk)]
+ReadSchema: struct
+
+(87) InputAdapter
+Input [2]: [c_customer_sk#29, c_customer_id#30]
+Arguments: [#29, #30]
+
+(88) NativeFilter
+Input [2]: [#29#29, #30#30]
+Condition : isnotnull(c_customer_sk#29)
+
+(89) NativeShuffleExchange
+Input [2]: [#29#29, #30#30]
+Arguments: hashpartitioning(c_customer_sk#29, 100), ENSURE_REQUIREMENTS, [plan_id=10]
+
+(90) ShuffleQueryStage
+Output [2]: [#29#29, #30#30]
+Arguments: X
+
+(91) AQEShuffleRead
+Input [2]: [#29#29, #30#30]
+Arguments: coalesced
+
+(92) InputAdapter
+Input [2]: [#29#29, #30#30]
+
+(93) NativeSort
+Input [2]: [#29#29, #30#30]
+Arguments: [c_customer_sk#29 ASC NULLS FIRST], false
+
+(94) NativeSortMergeJoin
+Left keys [1]: [ctr_customer_sk#11]
+Right keys [1]: [c_customer_sk#29]
+Join type: Inner
+Join condition: None
+
+(95) NativeProject
+Output [1]: [c_customer_id#30]
+Input [3]: [ctr_customer_sk#11, #29#29, #30#30]
+
+(96) NativeTakeOrdered
+Input [1]: [c_customer_id#30]
+Arguments: X, [c_customer_id#30 ASC NULLS FIRST]
+
+(97) Scan parquet
+Output [4]: [sr_returned_date_sk#1, sr_customer_sk#2, sr_store_sk#3, sr_return_amt#4]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(sr_returned_date_sk), IsNotNull(sr_store_sk), IsNotNull(sr_customer_sk)]
+ReadSchema: struct
+
+(98) Filter
+Input [4]: [sr_returned_date_sk#1, sr_customer_sk#2, sr_store_sk#3, sr_return_amt#4]
+Condition : ((isnotnull(sr_returned_date_sk#1) AND isnotnull(sr_store_sk#3)) AND isnotnull(sr_customer_sk#2))
+
+(99) Exchange
+Input [4]: [sr_returned_date_sk#1, sr_customer_sk#2, sr_store_sk#3, sr_return_amt#4]
+Arguments: hashpartitioning(sr_returned_date_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=11]
+
+(100) Sort
+Input [4]: [sr_returned_date_sk#1, sr_customer_sk#2, sr_store_sk#3, sr_return_amt#4]
+Arguments: [sr_returned_date_sk#1 ASC NULLS FIRST], false, 0
+
+(101) Scan parquet
+Output [2]: [d_date_sk#5, d_year#6]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(102) Filter
+Input [2]: [d_date_sk#5, d_year#6]
+Condition : ((isnotnull(d_year#6) AND (d_year#6 = 2000)) AND isnotnull(d_date_sk#5))
+
+(103) Project
+Output [1]: [d_date_sk#5]
+Input [2]: [d_date_sk#5, d_year#6]
+
+(104) Exchange
+Input [1]: [d_date_sk#5]
+Arguments: hashpartitioning(d_date_sk#5, 100), ENSURE_REQUIREMENTS, [plan_id=12]
+
+(105) Sort
+Input [1]: [d_date_sk#5]
+Arguments: [d_date_sk#5 ASC NULLS FIRST], false, 0
+
+(106) SortMergeJoin
+Left keys [1]: [sr_returned_date_sk#1]
+Right keys [1]: [d_date_sk#5]
+Join type: Inner
+Join condition: None
+
+(107) Project
+Output [3]: [sr_customer_sk#2, sr_store_sk#3, sr_return_amt#4]
+Input [5]: [sr_returned_date_sk#1, sr_customer_sk#2, sr_store_sk#3, sr_return_amt#4, d_date_sk#5]
+
+(108) HashAggregate
+Input [3]: [sr_customer_sk#2, sr_store_sk#3, sr_return_amt#4]
+Keys [2]: [sr_customer_sk#2, sr_store_sk#3]
+Functions [1]: [partial_sum(UnscaledValue(sr_return_amt#4))]
+Aggregate Attributes [1]: [sum#8]
+Results [3]: [sr_customer_sk#2, sr_store_sk#3, sum#31]
+
+(109) Exchange
+Input [3]: [sr_customer_sk#2, sr_store_sk#3, sum#31]
+Arguments: hashpartitioning(sr_customer_sk#2, sr_store_sk#3, 100), ENSURE_REQUIREMENTS, [plan_id=13]
+
+(110) HashAggregate
+Input [3]: [sr_customer_sk#2, sr_store_sk#3, sum#31]
+Keys [2]: [sr_customer_sk#2, sr_store_sk#3]
+Functions [1]: [sum(UnscaledValue(sr_return_amt#4))]
+Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#4))#10]
+Results [3]: [sr_customer_sk#2 AS ctr_customer_sk#11, sr_store_sk#3 AS ctr_store_sk#12, MakeDecimal(sum(UnscaledValue(sr_return_amt#4))#10,17,2) AS ctr_total_return#13]
+
+(111) Filter
+Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13]
+Condition : isnotnull(ctr_total_return#13)
+
+(112) Exchange
+Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13]
+Arguments: hashpartitioning(ctr_store_sk#12, 100), ENSURE_REQUIREMENTS, [plan_id=14]
+
+(113) Sort
+Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13]
+Arguments: [ctr_store_sk#12 ASC NULLS FIRST], false, 0
+
+(114) Scan parquet
+Output [4]: [sr_returned_date_sk#14, sr_customer_sk#15, sr_store_sk#16, sr_return_amt#17]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(sr_returned_date_sk), IsNotNull(sr_store_sk)]
+ReadSchema: struct
+
+(115) Filter
+Input [4]: [sr_returned_date_sk#14, sr_customer_sk#15, sr_store_sk#16, sr_return_amt#17]
+Condition : (isnotnull(sr_returned_date_sk#14) AND isnotnull(sr_store_sk#16))
+
+(116) Exchange
+Input [4]: [sr_returned_date_sk#14, sr_customer_sk#15, sr_store_sk#16, sr_return_amt#17]
+Arguments: hashpartitioning(sr_returned_date_sk#14, 100), ENSURE_REQUIREMENTS, [plan_id=15]
+
+(117) Sort
+Input [4]: [sr_returned_date_sk#14, sr_customer_sk#15, sr_store_sk#16, sr_return_amt#17]
+Arguments: [sr_returned_date_sk#14 ASC NULLS FIRST], false, 0
+
+(118) Scan parquet
+Output [2]: [d_date_sk#18, d_year#32]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(119) Filter
+Input [2]: [d_date_sk#18, d_year#32]
+Condition : ((isnotnull(d_year#32) AND (d_year#32 = 2000)) AND isnotnull(d_date_sk#18))
+
+(120) Project
+Output [1]: [d_date_sk#18]
+Input [2]: [d_date_sk#18, d_year#32]
+
+(121) Exchange
+Input [1]: [d_date_sk#18]
+Arguments: hashpartitioning(d_date_sk#18, 100), ENSURE_REQUIREMENTS, [plan_id=16]
+
+(122) Sort
+Input [1]: [d_date_sk#18]
+Arguments: [d_date_sk#18 ASC NULLS FIRST], false, 0
+
+(123) SortMergeJoin
+Left keys [1]: [sr_returned_date_sk#14]
+Right keys [1]: [d_date_sk#18]
+Join type: Inner
+Join condition: None
+
+(124) Project
+Output [3]: [sr_customer_sk#15, sr_store_sk#16, sr_return_amt#17]
+Input [5]: [sr_returned_date_sk#14, sr_customer_sk#15, sr_store_sk#16, sr_return_amt#17, d_date_sk#18]
+
+(125) HashAggregate
+Input [3]: [sr_customer_sk#15, sr_store_sk#16, sr_return_amt#17]
+Keys [2]: [sr_customer_sk#15, sr_store_sk#16]
+Functions [1]: [partial_sum(UnscaledValue(sr_return_amt#17))]
+Aggregate Attributes [1]: [sum#20]
+Results [3]: [sr_customer_sk#15, sr_store_sk#16, sum#33]
+
+(126) Exchange
+Input [3]: [sr_customer_sk#15, sr_store_sk#16, sum#33]
+Arguments: hashpartitioning(sr_customer_sk#15, sr_store_sk#16, 100), ENSURE_REQUIREMENTS, [plan_id=17]
+
+(127) HashAggregate
+Input [3]: [sr_customer_sk#15, sr_store_sk#16, sum#33]
+Keys [2]: [sr_customer_sk#15, sr_store_sk#16]
+Functions [1]: [sum(UnscaledValue(sr_return_amt#17))]
+Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#17))#10]
+Results [2]: [sr_store_sk#16 AS ctr_store_sk#21, MakeDecimal(sum(UnscaledValue(sr_return_amt#17))#10,17,2) AS ctr_total_return#22]
+
+(128) HashAggregate
+Input [2]: [ctr_store_sk#21, ctr_total_return#22]
+Keys [1]: [ctr_store_sk#21]
+Functions [1]: [partial_avg(ctr_total_return#22)]
+Aggregate Attributes [2]: [sum#23, count#24]
+Results [3]: [ctr_store_sk#21, sum#34, count#35]
+
+(129) Exchange
+Input [3]: [ctr_store_sk#21, sum#34, count#35]
+Arguments: hashpartitioning(ctr_store_sk#21, 100), ENSURE_REQUIREMENTS, [plan_id=18]
+
+(130) HashAggregate
+Input [3]: [ctr_store_sk#21, sum#34, count#35]
+Keys [1]: [ctr_store_sk#21]
+Functions [1]: [avg(ctr_total_return#22)]
+Aggregate Attributes [1]: [avg(ctr_total_return#22)#25]
+Results [2]: [(avg(ctr_total_return#22)#25 * 1.2) AS (avg(ctr_total_return) * 1.2)#26, ctr_store_sk#21]
+
+(131) Filter
+Input [2]: [(avg(ctr_total_return) * 1.2)#26, ctr_store_sk#21]
+Condition : isnotnull((avg(ctr_total_return) * 1.2)#26)
+
+(132) Sort
+Input [2]: [(avg(ctr_total_return) * 1.2)#26, ctr_store_sk#21]
+Arguments: [ctr_store_sk#21 ASC NULLS FIRST], false, 0
+
+(133) SortMergeJoin
+Left keys [1]: [ctr_store_sk#12]
+Right keys [1]: [ctr_store_sk#21]
+Join type: Inner
+Join condition: (cast(ctr_total_return#13 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#26)
+
+(134) Project
+Output [2]: [ctr_customer_sk#11, ctr_store_sk#12]
+Input [5]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13, (avg(ctr_total_return) * 1.2)#26, ctr_store_sk#21]
+
+(135) Scan parquet
+Output [2]: [s_store_sk#27, s_state#28]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)]
+ReadSchema: struct
+
+(136) Filter
+Input [2]: [s_store_sk#27, s_state#28]
+Condition : ((isnotnull(s_state#28) AND (s_state#28 = TN)) AND isnotnull(s_store_sk#27))
+
+(137) Project
+Output [1]: [s_store_sk#27]
+Input [2]: [s_store_sk#27, s_state#28]
+
+(138) Exchange
+Input [1]: [s_store_sk#27]
+Arguments: hashpartitioning(s_store_sk#27, 100), ENSURE_REQUIREMENTS, [plan_id=19]
+
+(139) Sort
+Input [1]: [s_store_sk#27]
+Arguments: [s_store_sk#27 ASC NULLS FIRST], false, 0
+
+(140) SortMergeJoin
+Left keys [1]: [ctr_store_sk#12]
+Right keys [1]: [s_store_sk#27]
+Join type: Inner
+Join condition: None
+
+(141) Project
+Output [1]: [ctr_customer_sk#11]
+Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, s_store_sk#27]
+
+(142) Exchange
+Input [1]: [ctr_customer_sk#11]
+Arguments: hashpartitioning(ctr_customer_sk#11, 100), ENSURE_REQUIREMENTS, [plan_id=20]
+
+(143) Sort
+Input [1]: [ctr_customer_sk#11]
+Arguments: [ctr_customer_sk#11 ASC NULLS FIRST], false, 0
+
+(144) Scan parquet
+Output [2]: [c_customer_sk#29, c_customer_id#30]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(c_customer_sk)]
+ReadSchema: struct
+
+(145) Filter
+Input [2]: [c_customer_sk#29, c_customer_id#30]
+Condition : isnotnull(c_customer_sk#29)
+
+(146) Exchange
+Input [2]: [c_customer_sk#29, c_customer_id#30]
+Arguments: hashpartitioning(c_customer_sk#29, 100), ENSURE_REQUIREMENTS, [plan_id=21]
+
+(147) Sort
+Input [2]: [c_customer_sk#29, c_customer_id#30]
+Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0
+
+(148) SortMergeJoin
+Left keys [1]: [ctr_customer_sk#11]
+Right keys [1]: [c_customer_sk#29]
+Join type: Inner
+Join condition: None
+
+(149) Project
+Output [1]: [c_customer_id#30]
+Input [3]: [ctr_customer_sk#11, c_customer_sk#29, c_customer_id#30]
+
+(150) TakeOrderedAndProject
+Input [1]: [c_customer_id#30]
+Arguments: X, [c_customer_id#30 ASC NULLS FIRST], [c_customer_id#30]
+
+(151) AdaptiveSparkPlan
+Output [1]: [c_customer_id#30]
+Arguments: isFinalPlan=true
+
diff --git a/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q10.txt b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q10.txt
new file mode 100644
index 000000000..e48303a35
--- /dev/null
+++ b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q10.txt
@@ -0,0 +1,1020 @@
+== Physical Plan ==
+AdaptiveSparkPlan (188)
++- == Final Plan ==
+ NativeTakeOrdered (118)
+ +- NativeProject (117)
+ +- NativeHashAggregate (116)
+ +- InputAdapter (115)
+ +- AQEShuffleRead (114)
+ +- ShuffleQueryStage (113), Statistics(X)
+ +- NativeShuffleExchange (112)
+ +- NativeHashAggregate (111)
+ +- NativeProject (110)
+ +- NativeSortMergeJoin Inner (109)
+ :- NativeSort (100)
+ : +- InputAdapter (99)
+ : +- AQEShuffleRead (98)
+ : +- ShuffleQueryStage (97), Statistics(X)
+ : +- NativeShuffleExchange (96)
+ : +- NativeProject (95)
+ : +- NativeSortMergeJoin Inner (94)
+ : :- NativeSort (84)
+ : : +- InputAdapter (83)
+ : : +- AQEShuffleRead (82)
+ : : +- ShuffleQueryStage (81), Statistics(X)
+ : : +- NativeShuffleExchange (80)
+ : : +- NativeProject (79)
+ : : +- NativeFilter (78)
+ : : +- NativeSortMergeJoin ExistenceJoin(exists#1) (77)
+ : : :- NativeSortMergeJoin ExistenceJoin(exists#2) (55)
+ : : : :- NativeSortMergeJoin LeftSemi (33)
+ : : : : :- NativeSort (8)
+ : : : : : +- InputAdapter (7)
+ : : : : : +- AQEShuffleRead (6)
+ : : : : : +- ShuffleQueryStage (5), Statistics(X)
+ : : : : : +- NativeShuffleExchange (4)
+ : : : : : +- NativeFilter (3)
+ : : : : : +- InputAdapter (2)
+ : : : : : +- NativeParquetScan (1)
+ : : : : +- NativeSort (32)
+ : : : : +- InputAdapter (31)
+ : : : : +- AQEShuffleRead (30)
+ : : : : +- ShuffleQueryStage (29), Statistics(X)
+ : : : : +- NativeShuffleExchange (28)
+ : : : : +- NativeProject (27)
+ : : : : +- NativeSortMergeJoin Inner (26)
+ : : : : :- NativeSort (16)
+ : : : : : +- InputAdapter (15)
+ : : : : : +- AQEShuffleRead (14)
+ : : : : : +- ShuffleQueryStage (13), Statistics(X)
+ : : : : : +- NativeShuffleExchange (12)
+ : : : : : +- NativeFilter (11)
+ : : : : : +- InputAdapter (10)
+ : : : : : +- NativeParquetScan (9)
+ : : : : +- NativeSort (25)
+ : : : : +- InputAdapter (24)
+ : : : : +- AQEShuffleRead (23)
+ : : : : +- ShuffleQueryStage (22), Statistics(X)
+ : : : : +- NativeShuffleExchange (21)
+ : : : : +- NativeProject (20)
+ : : : : +- NativeFilter (19)
+ : : : : +- InputAdapter (18)
+ : : : : +- NativeParquetScan (17)
+ : : : +- NativeSort (54)
+ : : : +- InputAdapter (53)
+ : : : +- AQEShuffleRead (52)
+ : : : +- ShuffleQueryStage (51), Statistics(X)
+ : : : +- NativeShuffleExchange (50)
+ : : : +- NativeProject (49)
+ : : : +- NativeSortMergeJoin Inner (48)
+ : : : :- NativeSort (41)
+ : : : : +- InputAdapter (40)
+ : : : : +- AQEShuffleRead (39)
+ : : : : +- ShuffleQueryStage (38), Statistics(X)
+ : : : : +- NativeShuffleExchange (37)
+ : : : : +- NativeFilter (36)
+ : : : : +- InputAdapter (35)
+ : : : : +- NativeParquetScan (34)
+ : : : +- NativeSort (47)
+ : : : +- InputAdapter (46)
+ : : : +- InputAdapter (45)
+ : : : +- AQEShuffleRead (44)
+ : : : +- ShuffleQueryStage (43), Statistics(X)
+ : : : +- ReusedExchange (42)
+ : : +- NativeSort (76)
+ : : +- InputAdapter (75)
+ : : +- AQEShuffleRead (74)
+ : : +- ShuffleQueryStage (73), Statistics(X)
+ : : +- NativeShuffleExchange (72)
+ : : +- NativeProject (71)
+ : : +- NativeSortMergeJoin Inner (70)
+ : : :- NativeSort (63)
+ : : : +- InputAdapter (62)
+ : : : +- AQEShuffleRead (61)
+ : : : +- ShuffleQueryStage (60), Statistics(X)
+ : : : +- NativeShuffleExchange (59)
+ : : : +- NativeFilter (58)
+ : : : +- InputAdapter (57)
+ : : : +- NativeParquetScan (56)
+ : : +- NativeSort (69)
+ : : +- InputAdapter (68)
+ : : +- InputAdapter (67)
+ : : +- AQEShuffleRead (66)
+ : : +- ShuffleQueryStage (65), Statistics(X)
+ : : +- ReusedExchange (64)
+ : +- NativeSort (93)
+ : +- InputAdapter (92)
+ : +- AQEShuffleRead (91)
+ : +- ShuffleQueryStage (90), Statistics(X)
+ : +- NativeShuffleExchange (89)
+ : +- NativeProject (88)
+ : +- NativeFilter (87)
+ : +- InputAdapter (86)
+ : +- NativeParquetScan (85)
+ +- NativeSort (108)
+ +- InputAdapter (107)
+ +- AQEShuffleRead (106)
+ +- ShuffleQueryStage (105), Statistics(X)
+ +- NativeShuffleExchange (104)
+ +- NativeFilter (103)
+ +- InputAdapter (102)
+ +- NativeParquetScan (101)
++- == Initial Plan ==
+ TakeOrderedAndProject (187)
+ +- HashAggregate (186)
+ +- Exchange (185)
+ +- HashAggregate (184)
+ +- Project (183)
+ +- SortMergeJoin Inner (182)
+ :- Sort (177)
+ : +- Exchange (176)
+ : +- Project (175)
+ : +- SortMergeJoin Inner (174)
+ : :- Sort (168)
+ : : +- Exchange (167)
+ : : +- Project (166)
+ : : +- Filter (165)
+ : : +- SortMergeJoin ExistenceJoin(exists#1) (164)
+ : : :- SortMergeJoin ExistenceJoin(exists#2) (150)
+ : : : :- SortMergeJoin LeftSemi (136)
+ : : : : :- Sort (122)
+ : : : : : +- Exchange (121)
+ : : : : : +- Filter (120)
+ : : : : : +- Scan parquet (119)
+ : : : : +- Sort (135)
+ : : : : +- Exchange (134)
+ : : : : +- Project (133)
+ : : : : +- SortMergeJoin Inner (132)
+ : : : : :- Sort (126)
+ : : : : : +- Exchange (125)
+ : : : : : +- Filter (124)
+ : : : : : +- Scan parquet (123)
+ : : : : +- Sort (131)
+ : : : : +- Exchange (130)
+ : : : : +- Project (129)
+ : : : : +- Filter (128)
+ : : : : +- Scan parquet (127)
+ : : : +- Sort (149)
+ : : : +- Exchange (148)
+ : : : +- Project (147)
+ : : : +- SortMergeJoin Inner (146)
+ : : : :- Sort (140)
+ : : : : +- Exchange (139)
+ : : : : +- Filter (138)
+ : : : : +- Scan parquet (137)
+ : : : +- Sort (145)
+ : : : +- Exchange (144)
+ : : : +- Project (143)
+ : : : +- Filter (142)
+ : : : +- Scan parquet (141)
+ : : +- Sort (163)
+ : : +- Exchange (162)
+ : : +- Project (161)
+ : : +- SortMergeJoin Inner (160)
+ : : :- Sort (154)
+ : : : +- Exchange (153)
+ : : : +- Filter (152)
+ : : : +- Scan parquet (151)
+ : : +- Sort (159)
+ : : +- Exchange (158)
+ : : +- Project (157)
+ : : +- Filter (156)
+ : : +- Scan parquet (155)
+ : +- Sort (173)
+ : +- Exchange (172)
+ : +- Project (171)
+ : +- Filter (170)
+ : +- Scan parquet (169)
+ +- Sort (181)
+ +- Exchange (180)
+ +- Filter (179)
+ +- Scan parquet (178)
+
+
+(119) Scan parquet
+Output [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)]
+ReadSchema: struct
+
+(2) InputAdapter
+Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5]
+Arguments: [#3, #4, #5]
+
+(3) NativeFilter
+Input [3]: [#3#3, #4#4, #5#5]
+Condition : (isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4))
+
+(4) NativeShuffleExchange
+Input [3]: [#3#3, #4#4, #5#5]
+Arguments: hashpartitioning(c_customer_sk#3, 100), ENSURE_REQUIREMENTS, [plan_id=1]
+
+(5) ShuffleQueryStage
+Output [3]: [#3#3, #4#4, #5#5]
+Arguments: X
+
+(6) AQEShuffleRead
+Input [3]: [#3#3, #4#4, #5#5]
+Arguments: coalesced
+
+(7) InputAdapter
+Input [3]: [#3#3, #4#4, #5#5]
+
+(8) NativeSort
+Input [3]: [#3#3, #4#4, #5#5]
+Arguments: [c_customer_sk#3 ASC NULLS FIRST], false
+
+(123) Scan parquet
+Output [2]: [ss_sold_date_sk#6, ss_customer_sk#7]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(10) InputAdapter
+Input [2]: [ss_sold_date_sk#6, ss_customer_sk#7]
+Arguments: [#6, #7]
+
+(11) NativeFilter
+Input [2]: [#6#6, #7#7]
+Condition : isnotnull(ss_sold_date_sk#6)
+
+(12) NativeShuffleExchange
+Input [2]: [#6#6, #7#7]
+Arguments: hashpartitioning(ss_sold_date_sk#6, 100), ENSURE_REQUIREMENTS, [plan_id=2]
+
+(13) ShuffleQueryStage
+Output [2]: [#6#6, #7#7]
+Arguments: X
+
+(14) AQEShuffleRead
+Input [2]: [#6#6, #7#7]
+Arguments: coalesced
+
+(15) InputAdapter
+Input [2]: [#6#6, #7#7]
+
+(16) NativeSort
+Input [2]: [#6#6, #7#7]
+Arguments: [ss_sold_date_sk#6 ASC NULLS FIRST], false
+
+(127) Scan parquet
+Output [3]: [d_date_sk#8, d_year#9, d_moy#10]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,1), LessThanOrEqual(d_moy,4), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(18) InputAdapter
+Input [3]: [d_date_sk#8, d_year#9, d_moy#10]
+Arguments: [#8, #9, #10]
+
+(19) NativeFilter
+Input [3]: [#8#8, #9#9, #10#10]
+Condition : (((((isnotnull(d_year#9) AND isnotnull(d_moy#10)) AND (d_year#9 = 2002)) AND (d_moy#10 >= 1)) AND (d_moy#10 <= 4)) AND isnotnull(d_date_sk#8))
+
+(20) NativeProject
+Output [1]: [d_date_sk#8]
+Input [3]: [#8#8, #9#9, #10#10]
+
+(21) NativeShuffleExchange
+Input [1]: [d_date_sk#8]
+Arguments: hashpartitioning(d_date_sk#8, 100), ENSURE_REQUIREMENTS, [plan_id=3]
+
+(22) ShuffleQueryStage
+Output [1]: [d_date_sk#8]
+Arguments: X
+
+(23) AQEShuffleRead
+Input [1]: [d_date_sk#8]
+Arguments: coalesced
+
+(24) InputAdapter
+Input [1]: [d_date_sk#8]
+
+(25) NativeSort
+Input [1]: [d_date_sk#8]
+Arguments: [d_date_sk#8 ASC NULLS FIRST], false
+
+(26) NativeSortMergeJoin
+Left keys [1]: [ss_sold_date_sk#6]
+Right keys [1]: [d_date_sk#8]
+Join type: Inner
+Join condition: None
+
+(27) NativeProject
+Output [1]: [ss_customer_sk#7]
+Input [3]: [#6#6, #7#7, d_date_sk#8]
+
+(28) NativeShuffleExchange
+Input [1]: [ss_customer_sk#7]
+Arguments: hashpartitioning(ss_customer_sk#7, 100), ENSURE_REQUIREMENTS, [plan_id=4]
+
+(29) ShuffleQueryStage
+Output [1]: [ss_customer_sk#7]
+Arguments: X
+
+(30) AQEShuffleRead
+Input [1]: [ss_customer_sk#7]
+Arguments: coalesced
+
+(31) InputAdapter
+Input [1]: [ss_customer_sk#7]
+
+(32) NativeSort
+Input [1]: [ss_customer_sk#7]
+Arguments: [ss_customer_sk#7 ASC NULLS FIRST], false
+
+(33) NativeSortMergeJoin
+Left keys [1]: [c_customer_sk#3]
+Right keys [1]: [ss_customer_sk#7]
+Join type: LeftSemi
+Join condition: None
+
+(137) Scan parquet
+Output [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(35) InputAdapter
+Input [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12]
+Arguments: [#11, #12]
+
+(36) NativeFilter
+Input [2]: [#11#11, #12#12]
+Condition : isnotnull(ws_sold_date_sk#11)
+
+(37) NativeShuffleExchange
+Input [2]: [#11#11, #12#12]
+Arguments: hashpartitioning(ws_sold_date_sk#11, 100), ENSURE_REQUIREMENTS, [plan_id=5]
+
+(38) ShuffleQueryStage
+Output [2]: [#11#11, #12#12]
+Arguments: X
+
+(39) AQEShuffleRead
+Input [2]: [#11#11, #12#12]
+Arguments: coalesced
+
+(40) InputAdapter
+Input [2]: [#11#11, #12#12]
+
+(41) NativeSort
+Input [2]: [#11#11, #12#12]
+Arguments: [ws_sold_date_sk#11 ASC NULLS FIRST], false
+
+(42) ReusedExchange [Reuses operator id: 21]
+Output [1]: [d_date_sk#13]
+
+(43) ShuffleQueryStage
+Output [1]: [d_date_sk#13]
+Arguments: X
+
+(44) AQEShuffleRead
+Input [1]: [d_date_sk#13]
+Arguments: coalesced
+
+(45) InputAdapter
+Input [1]: [d_date_sk#13]
+Arguments: [#13]
+
+(46) InputAdapter
+Input [1]: [#13#13]
+
+(47) NativeSort
+Input [1]: [#13#13]
+Arguments: [d_date_sk#13 ASC NULLS FIRST], false
+
+(48) NativeSortMergeJoin
+Left keys [1]: [ws_sold_date_sk#11]
+Right keys [1]: [d_date_sk#13]
+Join type: Inner
+Join condition: None
+
+(49) NativeProject
+Output [1]: [ws_bill_customer_sk#12]
+Input [3]: [#11#11, #12#12, #13#13]
+
+(50) NativeShuffleExchange
+Input [1]: [ws_bill_customer_sk#12]
+Arguments: hashpartitioning(ws_bill_customer_sk#12, 100), ENSURE_REQUIREMENTS, [plan_id=6]
+
+(51) ShuffleQueryStage
+Output [1]: [ws_bill_customer_sk#12]
+Arguments: X
+
+(52) AQEShuffleRead
+Input [1]: [ws_bill_customer_sk#12]
+Arguments: coalesced
+
+(53) InputAdapter
+Input [1]: [ws_bill_customer_sk#12]
+
+(54) NativeSort
+Input [1]: [ws_bill_customer_sk#12]
+Arguments: [ws_bill_customer_sk#12 ASC NULLS FIRST], false
+
+(55) NativeSortMergeJoin
+Left keys [1]: [c_customer_sk#3]
+Right keys [1]: [ws_bill_customer_sk#12]
+Join type: ExistenceJoin(exists#2)
+Join condition: None
+
+(151) Scan parquet
+Output [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cs_sold_date_sk)]
+ReadSchema: struct
+
+(57) InputAdapter
+Input [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15]
+Arguments: [#14, #15]
+
+(58) NativeFilter
+Input [2]: [#14#14, #15#15]
+Condition : isnotnull(cs_sold_date_sk#14)
+
+(59) NativeShuffleExchange
+Input [2]: [#14#14, #15#15]
+Arguments: hashpartitioning(cs_sold_date_sk#14, 100), ENSURE_REQUIREMENTS, [plan_id=7]
+
+(60) ShuffleQueryStage
+Output [2]: [#14#14, #15#15]
+Arguments: X
+
+(61) AQEShuffleRead
+Input [2]: [#14#14, #15#15]
+Arguments: coalesced
+
+(62) InputAdapter
+Input [2]: [#14#14, #15#15]
+
+(63) NativeSort
+Input [2]: [#14#14, #15#15]
+Arguments: [cs_sold_date_sk#14 ASC NULLS FIRST], false
+
+(64) ReusedExchange [Reuses operator id: 21]
+Output [1]: [d_date_sk#16]
+
+(65) ShuffleQueryStage
+Output [1]: [d_date_sk#16]
+Arguments: X
+
+(66) AQEShuffleRead
+Input [1]: [d_date_sk#16]
+Arguments: coalesced
+
+(67) InputAdapter
+Input [1]: [d_date_sk#16]
+Arguments: [#16]
+
+(68) InputAdapter
+Input [1]: [#16#16]
+
+(69) NativeSort
+Input [1]: [#16#16]
+Arguments: [d_date_sk#16 ASC NULLS FIRST], false
+
+(70) NativeSortMergeJoin
+Left keys [1]: [cs_sold_date_sk#14]
+Right keys [1]: [d_date_sk#16]
+Join type: Inner
+Join condition: None
+
+(71) NativeProject
+Output [1]: [cs_ship_customer_sk#15]
+Input [3]: [#14#14, #15#15, #16#16]
+
+(72) NativeShuffleExchange
+Input [1]: [cs_ship_customer_sk#15]
+Arguments: hashpartitioning(cs_ship_customer_sk#15, 100), ENSURE_REQUIREMENTS, [plan_id=8]
+
+(73) ShuffleQueryStage
+Output [1]: [cs_ship_customer_sk#15]
+Arguments: X
+
+(74) AQEShuffleRead
+Input [1]: [cs_ship_customer_sk#15]
+Arguments: coalesced
+
+(75) InputAdapter
+Input [1]: [cs_ship_customer_sk#15]
+
+(76) NativeSort
+Input [1]: [cs_ship_customer_sk#15]
+Arguments: [cs_ship_customer_sk#15 ASC NULLS FIRST], false
+
+(77) NativeSortMergeJoin
+Left keys [1]: [c_customer_sk#3]
+Right keys [1]: [cs_ship_customer_sk#15]
+Join type: ExistenceJoin(exists#1)
+Join condition: None
+
+(78) NativeFilter
+Input [5]: [#3#3, #4#4, #5#5, exists#2, exists#1]
+Condition : (exists#2 OR exists#1)
+
+(79) NativeProject
+Output [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5]
+Input [5]: [#3#3, #4#4, #5#5, exists#2, exists#1]
+
+(80) NativeShuffleExchange
+Input [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5]
+Arguments: hashpartitioning(c_current_addr_sk#5, 100), ENSURE_REQUIREMENTS, [plan_id=9]
+
+(81) ShuffleQueryStage
+Output [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5]
+Arguments: X
+
+(82) AQEShuffleRead
+Input [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5]
+Arguments: coalesced
+
+(83) InputAdapter
+Input [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5]
+
+(84) NativeSort
+Input [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5]
+Arguments: [c_current_addr_sk#5 ASC NULLS FIRST], false
+
+(169) Scan parquet
+Output [2]: [ca_address_sk#17, ca_county#18]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [In(ca_county, [Dona Ana County,Jefferson County,La Porte County,Rush County,Toole County]), IsNotNull(ca_address_sk)]
+ReadSchema: struct
+
+(86) InputAdapter
+Input [2]: [ca_address_sk#17, ca_county#18]
+Arguments: [#17, #18]
+
+(87) NativeFilter
+Input [2]: [#17#17, #18#18]
+Condition : (ca_county#18 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#17))
+
+(88) NativeProject
+Output [1]: [ca_address_sk#17]
+Input [2]: [#17#17, #18#18]
+
+(89) NativeShuffleExchange
+Input [1]: [ca_address_sk#17]
+Arguments: hashpartitioning(ca_address_sk#17, 100), ENSURE_REQUIREMENTS, [plan_id=10]
+
+(90) ShuffleQueryStage
+Output [1]: [ca_address_sk#17]
+Arguments: X
+
+(91) AQEShuffleRead
+Input [1]: [ca_address_sk#17]
+Arguments: coalesced
+
+(92) InputAdapter
+Input [1]: [ca_address_sk#17]
+
+(93) NativeSort
+Input [1]: [ca_address_sk#17]
+Arguments: [ca_address_sk#17 ASC NULLS FIRST], false
+
+(94) NativeSortMergeJoin
+Left keys [1]: [c_current_addr_sk#5]
+Right keys [1]: [ca_address_sk#17]
+Join type: Inner
+Join condition: None
+
+(95) NativeProject
+Output [1]: [c_current_cdemo_sk#4]
+Input [3]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#17]
+
+(96) NativeShuffleExchange
+Input [1]: [c_current_cdemo_sk#4]
+Arguments: hashpartitioning(c_current_cdemo_sk#4, 100), ENSURE_REQUIREMENTS, [plan_id=11]
+
+(97) ShuffleQueryStage
+Output [1]: [c_current_cdemo_sk#4]
+Arguments: X
+
+(98) AQEShuffleRead
+Input [1]: [c_current_cdemo_sk#4]
+Arguments: coalesced
+
+(99) InputAdapter
+Input [1]: [c_current_cdemo_sk#4]
+
+(100) NativeSort
+Input [1]: [c_current_cdemo_sk#4]
+Arguments: [c_current_cdemo_sk#4 ASC NULLS FIRST], false
+
+(178) Scan parquet
+Output [9]: [cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cd_demo_sk)]
+ReadSchema: struct
+
+(102) InputAdapter
+Input [9]: [cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Arguments: [#19, #20, #21, #22, #23, #24, #25, #26, #27]
+
+(103) NativeFilter
+Input [9]: [#19#19, #20#20, #21#21, #22#22, #23#23, #24#24, #25#25, #26#26, #27#27]
+Condition : isnotnull(cd_demo_sk#19)
+
+(104) NativeShuffleExchange
+Input [9]: [#19#19, #20#20, #21#21, #22#22, #23#23, #24#24, #25#25, #26#26, #27#27]
+Arguments: hashpartitioning(cd_demo_sk#19, 100), ENSURE_REQUIREMENTS, [plan_id=12]
+
+(105) ShuffleQueryStage
+Output [9]: [#19#19, #20#20, #21#21, #22#22, #23#23, #24#24, #25#25, #26#26, #27#27]
+Arguments: X
+
+(106) AQEShuffleRead
+Input [9]: [#19#19, #20#20, #21#21, #22#22, #23#23, #24#24, #25#25, #26#26, #27#27]
+Arguments: coalesced
+
+(107) InputAdapter
+Input [9]: [#19#19, #20#20, #21#21, #22#22, #23#23, #24#24, #25#25, #26#26, #27#27]
+
+(108) NativeSort
+Input [9]: [#19#19, #20#20, #21#21, #22#22, #23#23, #24#24, #25#25, #26#26, #27#27]
+Arguments: [cd_demo_sk#19 ASC NULLS FIRST], false
+
+(109) NativeSortMergeJoin
+Left keys [1]: [c_current_cdemo_sk#4]
+Right keys [1]: [cd_demo_sk#19]
+Join type: Inner
+Join condition: None
+
+(110) NativeProject
+Output [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Input [10]: [c_current_cdemo_sk#4, #19#19, #20#20, #21#21, #22#22, #23#23, #24#24, #25#25, #26#26, #27#27]
+
+(111) NativeHashAggregate
+Input [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Keys [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Functions [1]: [partial_count(1)]
+Aggregate Attributes [1]: [count#28]
+Results [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, #29#29]
+
+(112) NativeShuffleExchange
+Input [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, #29#29]
+Arguments: hashpartitioning(cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, 100), ENSURE_REQUIREMENTS, [plan_id=13]
+
+(113) ShuffleQueryStage
+Output [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, #29#29]
+Arguments: X
+
+(114) AQEShuffleRead
+Input [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, #29#29]
+Arguments: coalesced
+
+(115) InputAdapter
+Input [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, #29#29]
+
+(116) NativeHashAggregate
+Input [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, #29#29]
+Keys [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Functions [1]: [count(1)]
+Aggregate Attributes [1]: [count(1)#30]
+Results [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count(1)#30]
+
+(117) NativeProject
+Output [14]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, count(1)#30 AS cnt1#31, cd_purchase_estimate#23, count(1)#30 AS cnt2#32, cd_credit_rating#24, count(1)#30 AS cnt3#33, cd_dep_count#25, count(1)#30 AS cnt4#34, cd_dep_employed_count#26, count(1)#30 AS cnt5#35, cd_dep_college_count#27, count(1)#30 AS cnt6#36]
+Input [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count(1)#30]
+
+(118) NativeTakeOrdered
+Input [14]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cnt1#31, cd_purchase_estimate#23, cnt2#32, cd_credit_rating#24, cnt3#33, cd_dep_count#25, cnt4#34, cd_dep_employed_count#26, cnt5#35, cd_dep_college_count#27, cnt6#36]
+Arguments: X, [cd_gender#20 ASC NULLS FIRST, cd_marital_status#21 ASC NULLS FIRST, cd_education_status#22 ASC NULLS FIRST, cd_purchase_estimate#23 ASC NULLS FIRST, cd_credit_rating#24 ASC NULLS FIRST, cd_dep_count#25 ASC NULLS FIRST, cd_dep_employed_count#26 ASC NULLS FIRST, cd_dep_college_count#27 ASC NULLS FIRST]
+
+(119) Scan parquet
+Output [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)]
+ReadSchema: struct
+
+(120) Filter
+Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5]
+Condition : (isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4))
+
+(121) Exchange
+Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5]
+Arguments: hashpartitioning(c_customer_sk#3, 100), ENSURE_REQUIREMENTS, [plan_id=14]
+
+(122) Sort
+Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5]
+Arguments: [c_customer_sk#3 ASC NULLS FIRST], false, 0
+
+(123) Scan parquet
+Output [2]: [ss_sold_date_sk#6, ss_customer_sk#7]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(124) Filter
+Input [2]: [ss_sold_date_sk#6, ss_customer_sk#7]
+Condition : isnotnull(ss_sold_date_sk#6)
+
+(125) Exchange
+Input [2]: [ss_sold_date_sk#6, ss_customer_sk#7]
+Arguments: hashpartitioning(ss_sold_date_sk#6, 100), ENSURE_REQUIREMENTS, [plan_id=15]
+
+(126) Sort
+Input [2]: [ss_sold_date_sk#6, ss_customer_sk#7]
+Arguments: [ss_sold_date_sk#6 ASC NULLS FIRST], false, 0
+
+(127) Scan parquet
+Output [3]: [d_date_sk#8, d_year#9, d_moy#10]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,1), LessThanOrEqual(d_moy,4), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(128) Filter
+Input [3]: [d_date_sk#8, d_year#9, d_moy#10]
+Condition : (((((isnotnull(d_year#9) AND isnotnull(d_moy#10)) AND (d_year#9 = 2002)) AND (d_moy#10 >= 1)) AND (d_moy#10 <= 4)) AND isnotnull(d_date_sk#8))
+
+(129) Project
+Output [1]: [d_date_sk#8]
+Input [3]: [d_date_sk#8, d_year#9, d_moy#10]
+
+(130) Exchange
+Input [1]: [d_date_sk#8]
+Arguments: hashpartitioning(d_date_sk#8, 100), ENSURE_REQUIREMENTS, [plan_id=16]
+
+(131) Sort
+Input [1]: [d_date_sk#8]
+Arguments: [d_date_sk#8 ASC NULLS FIRST], false, 0
+
+(132) SortMergeJoin
+Left keys [1]: [ss_sold_date_sk#6]
+Right keys [1]: [d_date_sk#8]
+Join type: Inner
+Join condition: None
+
+(133) Project
+Output [1]: [ss_customer_sk#7]
+Input [3]: [ss_sold_date_sk#6, ss_customer_sk#7, d_date_sk#8]
+
+(134) Exchange
+Input [1]: [ss_customer_sk#7]
+Arguments: hashpartitioning(ss_customer_sk#7, 100), ENSURE_REQUIREMENTS, [plan_id=17]
+
+(135) Sort
+Input [1]: [ss_customer_sk#7]
+Arguments: [ss_customer_sk#7 ASC NULLS FIRST], false, 0
+
+(136) SortMergeJoin
+Left keys [1]: [c_customer_sk#3]
+Right keys [1]: [ss_customer_sk#7]
+Join type: LeftSemi
+Join condition: None
+
+(137) Scan parquet
+Output [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(138) Filter
+Input [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12]
+Condition : isnotnull(ws_sold_date_sk#11)
+
+(139) Exchange
+Input [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12]
+Arguments: hashpartitioning(ws_sold_date_sk#11, 100), ENSURE_REQUIREMENTS, [plan_id=18]
+
+(140) Sort
+Input [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12]
+Arguments: [ws_sold_date_sk#11 ASC NULLS FIRST], false, 0
+
+(141) Scan parquet
+Output [3]: [d_date_sk#13, d_year#37, d_moy#38]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,1), LessThanOrEqual(d_moy,4), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(142) Filter
+Input [3]: [d_date_sk#13, d_year#37, d_moy#38]
+Condition : (((((isnotnull(d_year#37) AND isnotnull(d_moy#38)) AND (d_year#37 = 2002)) AND (d_moy#38 >= 1)) AND (d_moy#38 <= 4)) AND isnotnull(d_date_sk#13))
+
+(143) Project
+Output [1]: [d_date_sk#13]
+Input [3]: [d_date_sk#13, d_year#37, d_moy#38]
+
+(144) Exchange
+Input [1]: [d_date_sk#13]
+Arguments: hashpartitioning(d_date_sk#13, 100), ENSURE_REQUIREMENTS, [plan_id=19]
+
+(145) Sort
+Input [1]: [d_date_sk#13]
+Arguments: [d_date_sk#13 ASC NULLS FIRST], false, 0
+
+(146) SortMergeJoin
+Left keys [1]: [ws_sold_date_sk#11]
+Right keys [1]: [d_date_sk#13]
+Join type: Inner
+Join condition: None
+
+(147) Project
+Output [1]: [ws_bill_customer_sk#12]
+Input [3]: [ws_sold_date_sk#11, ws_bill_customer_sk#12, d_date_sk#13]
+
+(148) Exchange
+Input [1]: [ws_bill_customer_sk#12]
+Arguments: hashpartitioning(ws_bill_customer_sk#12, 100), ENSURE_REQUIREMENTS, [plan_id=20]
+
+(149) Sort
+Input [1]: [ws_bill_customer_sk#12]
+Arguments: [ws_bill_customer_sk#12 ASC NULLS FIRST], false, 0
+
+(150) SortMergeJoin
+Left keys [1]: [c_customer_sk#3]
+Right keys [1]: [ws_bill_customer_sk#12]
+Join type: ExistenceJoin(exists#2)
+Join condition: None
+
+(151) Scan parquet
+Output [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cs_sold_date_sk)]
+ReadSchema: struct
+
+(152) Filter
+Input [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15]
+Condition : isnotnull(cs_sold_date_sk#14)
+
+(153) Exchange
+Input [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15]
+Arguments: hashpartitioning(cs_sold_date_sk#14, 100), ENSURE_REQUIREMENTS, [plan_id=21]
+
+(154) Sort
+Input [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15]
+Arguments: [cs_sold_date_sk#14 ASC NULLS FIRST], false, 0
+
+(155) Scan parquet
+Output [3]: [d_date_sk#16, d_year#39, d_moy#40]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,1), LessThanOrEqual(d_moy,4), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(156) Filter
+Input [3]: [d_date_sk#16, d_year#39, d_moy#40]
+Condition : (((((isnotnull(d_year#39) AND isnotnull(d_moy#40)) AND (d_year#39 = 2002)) AND (d_moy#40 >= 1)) AND (d_moy#40 <= 4)) AND isnotnull(d_date_sk#16))
+
+(157) Project
+Output [1]: [d_date_sk#16]
+Input [3]: [d_date_sk#16, d_year#39, d_moy#40]
+
+(158) Exchange
+Input [1]: [d_date_sk#16]
+Arguments: hashpartitioning(d_date_sk#16, 100), ENSURE_REQUIREMENTS, [plan_id=22]
+
+(159) Sort
+Input [1]: [d_date_sk#16]
+Arguments: [d_date_sk#16 ASC NULLS FIRST], false, 0
+
+(160) SortMergeJoin
+Left keys [1]: [cs_sold_date_sk#14]
+Right keys [1]: [d_date_sk#16]
+Join type: Inner
+Join condition: None
+
+(161) Project
+Output [1]: [cs_ship_customer_sk#15]
+Input [3]: [cs_sold_date_sk#14, cs_ship_customer_sk#15, d_date_sk#16]
+
+(162) Exchange
+Input [1]: [cs_ship_customer_sk#15]
+Arguments: hashpartitioning(cs_ship_customer_sk#15, 100), ENSURE_REQUIREMENTS, [plan_id=23]
+
+(163) Sort
+Input [1]: [cs_ship_customer_sk#15]
+Arguments: [cs_ship_customer_sk#15 ASC NULLS FIRST], false, 0
+
+(164) SortMergeJoin
+Left keys [1]: [c_customer_sk#3]
+Right keys [1]: [cs_ship_customer_sk#15]
+Join type: ExistenceJoin(exists#1)
+Join condition: None
+
+(165) Filter
+Input [5]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5, exists#2, exists#1]
+Condition : (exists#2 OR exists#1)
+
+(166) Project
+Output [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5]
+Input [5]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5, exists#2, exists#1]
+
+(167) Exchange
+Input [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5]
+Arguments: hashpartitioning(c_current_addr_sk#5, 100), ENSURE_REQUIREMENTS, [plan_id=24]
+
+(168) Sort
+Input [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5]
+Arguments: [c_current_addr_sk#5 ASC NULLS FIRST], false, 0
+
+(169) Scan parquet
+Output [2]: [ca_address_sk#17, ca_county#18]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [In(ca_county, [Dona Ana County,Jefferson County,La Porte County,Rush County,Toole County]), IsNotNull(ca_address_sk)]
+ReadSchema: struct
+
+(170) Filter
+Input [2]: [ca_address_sk#17, ca_county#18]
+Condition : (ca_county#18 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#17))
+
+(171) Project
+Output [1]: [ca_address_sk#17]
+Input [2]: [ca_address_sk#17, ca_county#18]
+
+(172) Exchange
+Input [1]: [ca_address_sk#17]
+Arguments: hashpartitioning(ca_address_sk#17, 100), ENSURE_REQUIREMENTS, [plan_id=25]
+
+(173) Sort
+Input [1]: [ca_address_sk#17]
+Arguments: [ca_address_sk#17 ASC NULLS FIRST], false, 0
+
+(174) SortMergeJoin
+Left keys [1]: [c_current_addr_sk#5]
+Right keys [1]: [ca_address_sk#17]
+Join type: Inner
+Join condition: None
+
+(175) Project
+Output [1]: [c_current_cdemo_sk#4]
+Input [3]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#17]
+
+(176) Exchange
+Input [1]: [c_current_cdemo_sk#4]
+Arguments: hashpartitioning(c_current_cdemo_sk#4, 100), ENSURE_REQUIREMENTS, [plan_id=26]
+
+(177) Sort
+Input [1]: [c_current_cdemo_sk#4]
+Arguments: [c_current_cdemo_sk#4 ASC NULLS FIRST], false, 0
+
+(178) Scan parquet
+Output [9]: [cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cd_demo_sk)]
+ReadSchema: struct
+
+(179) Filter
+Input [9]: [cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Condition : isnotnull(cd_demo_sk#19)
+
+(180) Exchange
+Input [9]: [cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Arguments: hashpartitioning(cd_demo_sk#19, 100), ENSURE_REQUIREMENTS, [plan_id=27]
+
+(181) Sort
+Input [9]: [cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Arguments: [cd_demo_sk#19 ASC NULLS FIRST], false, 0
+
+(182) SortMergeJoin
+Left keys [1]: [c_current_cdemo_sk#4]
+Right keys [1]: [cd_demo_sk#19]
+Join type: Inner
+Join condition: None
+
+(183) Project
+Output [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Input [10]: [c_current_cdemo_sk#4, cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+
+(184) HashAggregate
+Input [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Keys [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Functions [1]: [partial_count(1)]
+Aggregate Attributes [1]: [count#28]
+Results [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#41]
+
+(185) Exchange
+Input [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#41]
+Arguments: hashpartitioning(cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, 100), ENSURE_REQUIREMENTS, [plan_id=28]
+
+(186) HashAggregate
+Input [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#41]
+Keys [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27]
+Functions [1]: [count(1)]
+Aggregate Attributes [1]: [count(1)#30]
+Results [14]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, count(1)#30 AS cnt1#31, cd_purchase_estimate#23, count(1)#30 AS cnt2#32, cd_credit_rating#24, count(1)#30 AS cnt3#33, cd_dep_count#25, count(1)#30 AS cnt4#34, cd_dep_employed_count#26, count(1)#30 AS cnt5#35, cd_dep_college_count#27, count(1)#30 AS cnt6#36]
+
+(187) TakeOrderedAndProject
+Input [14]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cnt1#31, cd_purchase_estimate#23, cnt2#32, cd_credit_rating#24, cnt3#33, cd_dep_count#25, cnt4#34, cd_dep_employed_count#26, cnt5#35, cd_dep_college_count#27, cnt6#36]
+Arguments: X, [cd_gender#20 ASC NULLS FIRST, cd_marital_status#21 ASC NULLS FIRST, cd_education_status#22 ASC NULLS FIRST, cd_purchase_estimate#23 ASC NULLS FIRST, cd_credit_rating#24 ASC NULLS FIRST, cd_dep_count#25 ASC NULLS FIRST, cd_dep_employed_count#26 ASC NULLS FIRST, cd_dep_college_count#27 ASC NULLS FIRST], [cd_gender#20, cd_marital_status#21, cd_education_status#22, cnt1#31, cd_purchase_estimate#23, cnt2#32, cd_credit_rating#24, cnt3#33, cd_dep_count#25, cnt4#34, cd_dep_employed_count#26, cnt5#35, cd_dep_college_count#27, cnt6#36]
+
+(188) AdaptiveSparkPlan
+Output [14]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cnt1#31, cd_purchase_estimate#23, cnt2#32, cd_credit_rating#24, cnt3#33, cd_dep_count#25, cnt4#34, cd_dep_employed_count#26, cnt5#35, cd_dep_college_count#27, cnt6#36]
+Arguments: isFinalPlan=true
+
diff --git a/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q11.txt b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q11.txt
new file mode 100644
index 000000000..dee507214
--- /dev/null
+++ b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q11.txt
@@ -0,0 +1,1394 @@
+== Physical Plan ==
+AdaptiveSparkPlan (255)
++- == Final Plan ==
+ TakeOrderedAndProject (153)
+ +- * Project (152)
+ +- * SortMergeJoin Inner (151)
+ :- NativeProject (123)
+ : +- NativeSortMergeJoin Inner (122)
+ : :- NativeProject (78)
+ : : +- NativeSortMergeJoin Inner (77)
+ : : :- NativeSort (47)
+ : : : +- InputAdapter (46)
+ : : : +- AQEShuffleRead (45)
+ : : : +- ShuffleQueryStage (44), Statistics(X)
+ : : : +- NativeShuffleExchange (43)
+ : : : +- NativeFilter (42)
+ : : : +- NativeProject (41)
+ : : : +- NativeHashAggregate (40)
+ : : : +- InputAdapter (39)
+ : : : +- AQEShuffleRead (38)
+ : : : +- ShuffleQueryStage (37), Statistics(X)
+ : : : +- NativeShuffleExchange (36)
+ : : : +- NativeHashAggregate (35)
+ : : : +- NativeProject (34)
+ : : : +- NativeProject (33)
+ : : : +- NativeSortMergeJoin Inner (32)
+ : : : :- NativeSort (23)
+ : : : : +- InputAdapter (22)
+ : : : : +- AQEShuffleRead (21)
+ : : : : +- ShuffleQueryStage (20), Statistics(X)
+ : : : : +- NativeShuffleExchange (19)
+ : : : : +- NativeProject (18)
+ : : : : +- NativeSortMergeJoin Inner (17)
+ : : : : :- NativeSort (8)
+ : : : : : +- InputAdapter (7)
+ : : : : : +- AQEShuffleRead (6)
+ : : : : : +- ShuffleQueryStage (5), Statistics(X)
+ : : : : : +- NativeShuffleExchange (4)
+ : : : : : +- NativeFilter (3)
+ : : : : : +- InputAdapter (2)
+ : : : : : +- NativeParquetScan (1)
+ : : : : +- NativeSort (16)
+ : : : : +- InputAdapter (15)
+ : : : : +- AQEShuffleRead (14)
+ : : : : +- ShuffleQueryStage (13), Statistics(X)
+ : : : : +- NativeShuffleExchange (12)
+ : : : : +- NativeFilter (11)
+ : : : : +- InputAdapter (10)
+ : : : : +- NativeParquetScan (9)
+ : : : +- NativeSort (31)
+ : : : +- InputAdapter (30)
+ : : : +- AQEShuffleRead (29)
+ : : : +- ShuffleQueryStage (28), Statistics(X)
+ : : : +- NativeShuffleExchange (27)
+ : : : +- NativeFilter (26)
+ : : : +- InputAdapter (25)
+ : : : +- NativeParquetScan (24)
+ : : +- NativeSort (76)
+ : : +- InputAdapter (75)
+ : : +- AQEShuffleRead (74)
+ : : +- ShuffleQueryStage (73), Statistics(X)
+ : : +- NativeShuffleExchange (72)
+ : : +- NativeProject (71)
+ : : +- NativeHashAggregate (70)
+ : : +- InputAdapter (69)
+ : : +- AQEShuffleRead (68)
+ : : +- ShuffleQueryStage (67), Statistics(X)
+ : : +- NativeShuffleExchange (66)
+ : : +- NativeHashAggregate (65)
+ : : +- NativeProject (64)
+ : : +- NativeProject (63)
+ : : +- NativeSortMergeJoin Inner (62)
+ : : :- NativeSort (53)
+ : : : +- InputAdapter (52)
+ : : : +- InputAdapter (51)
+ : : : +- AQEShuffleRead (50)
+ : : : +- ShuffleQueryStage (49), Statistics(X)
+ : : : +- ReusedExchange (48)
+ : : +- NativeSort (61)
+ : : +- InputAdapter (60)
+ : : +- AQEShuffleRead (59)
+ : : +- ShuffleQueryStage (58), Statistics(X)
+ : : +- NativeShuffleExchange (57)
+ : : +- NativeFilter (56)
+ : : +- InputAdapter (55)
+ : : +- NativeParquetScan (54)
+ : +- NativeSort (121)
+ : +- InputAdapter (120)
+ : +- AQEShuffleRead (119)
+ : +- ShuffleQueryStage (118), Statistics(X)
+ : +- NativeShuffleExchange (117)
+ : +- NativeFilter (116)
+ : +- NativeProject (115)
+ : +- NativeHashAggregate (114)
+ : +- InputAdapter (113)
+ : +- AQEShuffleRead (112)
+ : +- ShuffleQueryStage (111), Statistics(X)
+ : +- NativeShuffleExchange (110)
+ : +- NativeHashAggregate (109)
+ : +- NativeProject (108)
+ : +- NativeProject (107)
+ : +- NativeSortMergeJoin Inner (106)
+ : :- NativeSort (99)
+ : : +- InputAdapter (98)
+ : : +- AQEShuffleRead (97)
+ : : +- ShuffleQueryStage (96), Statistics(X)
+ : : +- NativeShuffleExchange (95)
+ : : +- NativeProject (94)
+ : : +- NativeSortMergeJoin Inner (93)
+ : : :- NativeSort (84)
+ : : : +- InputAdapter (83)
+ : : : +- InputAdapter (82)
+ : : : +- AQEShuffleRead (81)
+ : : : +- ShuffleQueryStage (80), Statistics(X)
+ : : : +- ReusedExchange (79)
+ : : +- NativeSort (92)
+ : : +- InputAdapter (91)
+ : : +- AQEShuffleRead (90)
+ : : +- ShuffleQueryStage (89), Statistics(X)
+ : : +- NativeShuffleExchange (88)
+ : : +- NativeFilter (87)
+ : : +- InputAdapter (86)
+ : : +- NativeParquetScan (85)
+ : +- NativeSort (105)
+ : +- InputAdapter (104)
+ : +- InputAdapter (103)
+ : +- AQEShuffleRead (102)
+ : +- ShuffleQueryStage (101), Statistics(X)
+ : +- ReusedExchange (100)
+ +- NativeSort (150)
+ +- InputAdapter (149)
+ +- AQEShuffleRead (148)
+ +- ShuffleQueryStage (147), Statistics(X)
+ +- NativeShuffleExchange (146)
+ +- NativeProject (145)
+ +- NativeHashAggregate (144)
+ +- InputAdapter (143)
+ +- AQEShuffleRead (142)
+ +- ShuffleQueryStage (141), Statistics(X)
+ +- NativeShuffleExchange (140)
+ +- NativeHashAggregate (139)
+ +- NativeProject (138)
+ +- NativeProject (137)
+ +- NativeSortMergeJoin Inner (136)
+ :- NativeSort (129)
+ : +- InputAdapter (128)
+ : +- InputAdapter (127)
+ : +- AQEShuffleRead (126)
+ : +- ShuffleQueryStage (125), Statistics(X)
+ : +- ReusedExchange (124)
+ +- NativeSort (135)
+ +- InputAdapter (134)
+ +- InputAdapter (133)
+ +- AQEShuffleRead (132)
+ +- ShuffleQueryStage (131), Statistics(X)
+ +- ReusedExchange (130)
++- == Initial Plan ==
+ TakeOrderedAndProject (254)
+ +- Project (253)
+ +- SortMergeJoin Inner (252)
+ :- Project (228)
+ : +- SortMergeJoin Inner (227)
+ : :- Project (202)
+ : : +- SortMergeJoin Inner (201)
+ : : :- Sort (177)
+ : : : +- Exchange (176)
+ : : : +- Filter (175)
+ : : : +- HashAggregate (174)
+ : : : +- Exchange (173)
+ : : : +- HashAggregate (172)
+ : : : +- Project (171)
+ : : : +- SortMergeJoin Inner (170)
+ : : : :- Sort (165)
+ : : : : +- Exchange (164)
+ : : : : +- Project (163)
+ : : : : +- SortMergeJoin Inner (162)
+ : : : : :- Sort (157)
+ : : : : : +- Exchange (156)
+ : : : : : +- Filter (155)
+ : : : : : +- Scan parquet (154)
+ : : : : +- Sort (161)
+ : : : : +- Exchange (160)
+ : : : : +- Filter (159)
+ : : : : +- Scan parquet (158)
+ : : : +- Sort (169)
+ : : : +- Exchange (168)
+ : : : +- Filter (167)
+ : : : +- Scan parquet (166)
+ : : +- Sort (200)
+ : : +- Exchange (199)
+ : : +- HashAggregate (198)
+ : : +- Exchange (197)
+ : : +- HashAggregate (196)
+ : : +- Project (195)
+ : : +- SortMergeJoin Inner (194)
+ : : :- Sort (189)
+ : : : +- Exchange (188)
+ : : : +- Project (187)
+ : : : +- SortMergeJoin Inner (186)
+ : : : :- Sort (181)
+ : : : : +- Exchange (180)
+ : : : : +- Filter (179)
+ : : : : +- Scan parquet (178)
+ : : : +- Sort (185)
+ : : : +- Exchange (184)
+ : : : +- Filter (183)
+ : : : +- Scan parquet (182)
+ : : +- Sort (193)
+ : : +- Exchange (192)
+ : : +- Filter (191)
+ : : +- Scan parquet (190)
+ : +- Sort (226)
+ : +- Exchange (225)
+ : +- Filter (224)
+ : +- HashAggregate (223)
+ : +- Exchange (222)
+ : +- HashAggregate (221)
+ : +- Project (220)
+ : +- SortMergeJoin Inner (219)
+ : :- Sort (214)
+ : : +- Exchange (213)
+ : : +- Project (212)
+ : : +- SortMergeJoin Inner (211)
+ : : :- Sort (206)
+ : : : +- Exchange (205)
+ : : : +- Filter (204)
+ : : : +- Scan parquet (203)
+ : : +- Sort (210)
+ : : +- Exchange (209)
+ : : +- Filter (208)
+ : : +- Scan parquet (207)
+ : +- Sort (218)
+ : +- Exchange (217)
+ : +- Filter (216)
+ : +- Scan parquet (215)
+ +- Sort (251)
+ +- Exchange (250)
+ +- HashAggregate (249)
+ +- Exchange (248)
+ +- HashAggregate (247)
+ +- Project (246)
+ +- SortMergeJoin Inner (245)
+ :- Sort (240)
+ : +- Exchange (239)
+ : +- Project (238)
+ : +- SortMergeJoin Inner (237)
+ : :- Sort (232)
+ : : +- Exchange (231)
+ : : +- Filter (230)
+ : : +- Scan parquet (229)
+ : +- Sort (236)
+ : +- Exchange (235)
+ : +- Filter (234)
+ : +- Scan parquet (233)
+ +- Sort (244)
+ +- Exchange (243)
+ +- Filter (242)
+ +- Scan parquet (241)
+
+
+(154) Scan parquet
+Output [8]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)]
+ReadSchema: struct
+
+(2) InputAdapter
+Input [8]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
+Arguments: [#1, #2, #3, #4, #5, #6, #7, #8]
+
+(3) NativeFilter
+Input [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]
+Condition : (isnotnull(c_customer_sk#1) AND isnotnull(c_customer_id#2))
+
+(4) NativeShuffleExchange
+Input [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]
+Arguments: hashpartitioning(c_customer_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=1]
+
+(5) ShuffleQueryStage
+Output [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]
+Arguments: X
+
+(6) AQEShuffleRead
+Input [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]
+Arguments: coalesced
+
+(7) InputAdapter
+Input [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]
+
+(8) NativeSort
+Input [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]
+Arguments: [c_customer_sk#1 ASC NULLS FIRST], false
+
+(158) Scan parquet
+Output [4]: [ss_sold_date_sk#9, ss_customer_sk#10, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_customer_sk), IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(10) InputAdapter
+Input [4]: [ss_sold_date_sk#9, ss_customer_sk#10, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Arguments: [#9, #10, #11, #12]
+
+(11) NativeFilter
+Input [4]: [#9#9, #10#10, #11#11, #12#12]
+Condition : (isnotnull(ss_customer_sk#10) AND isnotnull(ss_sold_date_sk#9))
+
+(12) NativeShuffleExchange
+Input [4]: [#9#9, #10#10, #11#11, #12#12]
+Arguments: hashpartitioning(ss_customer_sk#10, 100), ENSURE_REQUIREMENTS, [plan_id=2]
+
+(13) ShuffleQueryStage
+Output [4]: [#9#9, #10#10, #11#11, #12#12]
+Arguments: X
+
+(14) AQEShuffleRead
+Input [4]: [#9#9, #10#10, #11#11, #12#12]
+Arguments: coalesced
+
+(15) InputAdapter
+Input [4]: [#9#9, #10#10, #11#11, #12#12]
+
+(16) NativeSort
+Input [4]: [#9#9, #10#10, #11#11, #12#12]
+Arguments: [ss_customer_sk#10 ASC NULLS FIRST], false
+
+(17) NativeSortMergeJoin
+Left keys [1]: [c_customer_sk#1]
+Right keys [1]: [ss_customer_sk#10]
+Join type: Inner
+Join condition: None
+
+(18) NativeProject
+Output [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Input [12]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8, #9#9, #10#10, #11#11, #12#12]
+
+(19) NativeShuffleExchange
+Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Arguments: hashpartitioning(ss_sold_date_sk#9, 100), ENSURE_REQUIREMENTS, [plan_id=3]
+
+(20) ShuffleQueryStage
+Output [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Arguments: X
+
+(21) AQEShuffleRead
+Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Arguments: coalesced
+
+(22) InputAdapter
+Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_list_price#12]
+
+(23) NativeSort
+Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Arguments: [ss_sold_date_sk#9 ASC NULLS FIRST], false
+
+(166) Scan parquet
+Output [2]: [d_date_sk#13, d_year#14]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(25) InputAdapter
+Input [2]: [d_date_sk#13, d_year#14]
+Arguments: [#13, #14]
+
+(26) NativeFilter
+Input [2]: [#13#13, #14#14]
+Condition : ((isnotnull(d_year#14) AND (d_year#14 = 2001)) AND isnotnull(d_date_sk#13))
+
+(27) NativeShuffleExchange
+Input [2]: [#13#13, #14#14]
+Arguments: hashpartitioning(d_date_sk#13, 100), ENSURE_REQUIREMENTS, [plan_id=4]
+
+(28) ShuffleQueryStage
+Output [2]: [#13#13, #14#14]
+Arguments: X
+
+(29) AQEShuffleRead
+Input [2]: [#13#13, #14#14]
+Arguments: coalesced
+
+(30) InputAdapter
+Input [2]: [#13#13, #14#14]
+
+(31) NativeSort
+Input [2]: [#13#13, #14#14]
+Arguments: [d_date_sk#13 ASC NULLS FIRST], false
+
+(32) NativeSortMergeJoin
+Left keys [1]: [ss_sold_date_sk#9]
+Right keys [1]: [d_date_sk#13]
+Join type: Inner
+Join condition: None
+
+(33) NativeProject
+Output [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#11, ss_ext_list_price#12, d_year#14]
+Input [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_list_price#12, #13#13, #14#14]
+
+(34) NativeProject
+Output [9]: [c_customer_id#2 AS c_customer_id#2, c_first_name#3 AS c_first_name#3, c_last_name#4 AS c_last_name#4, d_year#14 AS d_year#14, c_preferred_cust_flag#5 AS c_preferred_cust_flag#5, c_birth_country#6 AS c_birth_country#6, c_login#7 AS c_login#7, c_email_address#8 AS c_email_address#8, UnscaledValue((ss_ext_list_price#12 - ss_ext_discount_amt#11)) AS _c8#15]
+Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#11, ss_ext_list_price#12, d_year#14]
+
+(35) NativeHashAggregate
+Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, _c8#15]
+Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
+Functions [1]: [partial_sum(_c8#15)]
+Aggregate Attributes [1]: [sum#16]
+Results [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, #17#17]
+
+(36) NativeShuffleExchange
+Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, #17#17]
+Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, 100), ENSURE_REQUIREMENTS, [plan_id=5]
+
+(37) ShuffleQueryStage
+Output [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, #17#17]
+Arguments: X
+
+(38) AQEShuffleRead
+Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, #17#17]
+Arguments: coalesced
+
+(39) InputAdapter
+Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, #17#17]
+
+(40) NativeHashAggregate
+Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, #17#17]
+Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
+Functions [1]: [sum(UnscaledValue((ss_ext_list_price#12 - ss_ext_discount_amt#11)))]
+Aggregate Attributes [1]: [sum(UnscaledValue((ss_ext_list_price#12 - ss_ext_discount_amt#11)))#18]
+Results [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum(UnscaledValue((ss_ext_list_price#12 - ss_ext_discount_amt#11)))#18]
+
+(41) NativeProject
+Output [2]: [c_customer_id#2 AS customer_id#19, MakeDecimal(sum(UnscaledValue((ss_ext_list_price#12 - ss_ext_discount_amt#11)))#18,18,2) AS year_total#20]
+Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum(UnscaledValue((ss_ext_list_price#12 - ss_ext_discount_amt#11)))#18]
+
+(42) NativeFilter
+Input [2]: [customer_id#19, year_total#20]
+Condition : (isnotnull(year_total#20) AND (year_total#20 > 0.00))
+
+(43) NativeShuffleExchange
+Input [2]: [customer_id#19, year_total#20]
+Arguments: hashpartitioning(customer_id#19, 100), ENSURE_REQUIREMENTS, [plan_id=6]
+
+(44) ShuffleQueryStage
+Output [2]: [customer_id#19, year_total#20]
+Arguments: X
+
+(45) AQEShuffleRead
+Input [2]: [customer_id#19, year_total#20]
+Arguments: coalesced
+
+(46) InputAdapter
+Input [2]: [customer_id#19, year_total#20]
+
+(47) NativeSort
+Input [2]: [customer_id#19, year_total#20]
+Arguments: [customer_id#19 ASC NULLS FIRST], false
+
+(48) ReusedExchange [Reuses operator id: 19]
+Output [10]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_sold_date_sk#28, ss_ext_discount_amt#29, ss_ext_list_price#30]
+
+(49) ShuffleQueryStage
+Output [10]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_sold_date_sk#28, ss_ext_discount_amt#29, ss_ext_list_price#30]
+Arguments: X
+
+(50) AQEShuffleRead
+Input [10]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_sold_date_sk#28, ss_ext_discount_amt#29, ss_ext_list_price#30]
+Arguments: coalesced
+
+(51) InputAdapter
+Input [10]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_sold_date_sk#28, ss_ext_discount_amt#29, ss_ext_list_price#30]
+Arguments: [#21, #22, #23, #24, #25, #26, #27, #28, #29, #30]
+
+(52) InputAdapter
+Input [10]: [#21#21, #22#22, #23#23, #24#24, #25#25, #26#26, #27#27, #28#28, #29#29, #30#30]
+
+(53) NativeSort
+Input [10]: [#21#21, #22#22, #23#23, #24#24, #25#25, #26#26, #27#27, #28#28, #29#29, #30#30]
+Arguments: [ss_sold_date_sk#28 ASC NULLS FIRST], false
+
+(190) Scan parquet
+Output [2]: [d_date_sk#31, d_year#32]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(55) InputAdapter
+Input [2]: [d_date_sk#31, d_year#32]
+Arguments: [#31, #32]
+
+(56) NativeFilter
+Input [2]: [#31#31, #32#32]
+Condition : ((isnotnull(d_year#32) AND (d_year#32 = 2002)) AND isnotnull(d_date_sk#31))
+
+(57) NativeShuffleExchange
+Input [2]: [#31#31, #32#32]
+Arguments: hashpartitioning(d_date_sk#31, 100), ENSURE_REQUIREMENTS, [plan_id=7]
+
+(58) ShuffleQueryStage
+Output [2]: [#31#31, #32#32]
+Arguments: X
+
+(59) AQEShuffleRead
+Input [2]: [#31#31, #32#32]
+Arguments: coalesced
+
+(60) InputAdapter
+Input [2]: [#31#31, #32#32]
+
+(61) NativeSort
+Input [2]: [#31#31, #32#32]
+Arguments: [d_date_sk#31 ASC NULLS FIRST], false
+
+(62) NativeSortMergeJoin
+Left keys [1]: [ss_sold_date_sk#28]
+Right keys [1]: [d_date_sk#31]
+Join type: Inner
+Join condition: None
+
+(63) NativeProject
+Output [10]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_ext_discount_amt#29, ss_ext_list_price#30, d_year#32]
+Input [12]: [#21#21, #22#22, #23#23, #24#24, #25#25, #26#26, #27#27, #28#28, #29#29, #30#30, #31#31, #32#32]
+
+(64) NativeProject
+Output [9]: [c_customer_id#21 AS c_customer_id#21, c_first_name#22 AS c_first_name#22, c_last_name#23 AS c_last_name#23, d_year#32 AS d_year#32, c_preferred_cust_flag#24 AS c_preferred_cust_flag#24, c_birth_country#25 AS c_birth_country#25, c_login#26 AS c_login#26, c_email_address#27 AS c_email_address#27, UnscaledValue((ss_ext_list_price#30 - ss_ext_discount_amt#29)) AS _c8#33]
+Input [10]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_ext_discount_amt#29, ss_ext_list_price#30, d_year#32]
+
+(65) NativeHashAggregate
+Input [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, _c8#33]
+Keys [8]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27]
+Functions [1]: [partial_sum(_c8#33)]
+Aggregate Attributes [1]: [sum#34]
+Results [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, #17#17]
+
+(66) NativeShuffleExchange
+Input [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, #17#17]
+Arguments: hashpartitioning(c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, 100), ENSURE_REQUIREMENTS, [plan_id=8]
+
+(67) ShuffleQueryStage
+Output [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, #17#17]
+Arguments: X
+
+(68) AQEShuffleRead
+Input [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, #17#17]
+Arguments: coalesced
+
+(69) InputAdapter
+Input [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, #17#17]
+
+(70) NativeHashAggregate
+Input [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, #17#17]
+Keys [8]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27]
+Functions [1]: [sum(UnscaledValue((ss_ext_list_price#30 - ss_ext_discount_amt#29)))]
+Aggregate Attributes [1]: [sum(UnscaledValue((ss_ext_list_price#30 - ss_ext_discount_amt#29)))#18]
+Results [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, sum(UnscaledValue((ss_ext_list_price#30 - ss_ext_discount_amt#29)))#18]
+
+(71) NativeProject
+Output [3]: [c_customer_id#21 AS customer_id#35, c_preferred_cust_flag#24 AS customer_preferred_cust_flag#36, MakeDecimal(sum(UnscaledValue((ss_ext_list_price#30 - ss_ext_discount_amt#29)))#18,18,2) AS year_total#37]
+Input [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, sum(UnscaledValue((ss_ext_list_price#30 - ss_ext_discount_amt#29)))#18]
+
+(72) NativeShuffleExchange
+Input [3]: [customer_id#35, customer_preferred_cust_flag#36, year_total#37]
+Arguments: hashpartitioning(customer_id#35, 100), ENSURE_REQUIREMENTS, [plan_id=9]
+
+(73) ShuffleQueryStage
+Output [3]: [customer_id#35, customer_preferred_cust_flag#36, year_total#37]
+Arguments: X
+
+(74) AQEShuffleRead
+Input [3]: [customer_id#35, customer_preferred_cust_flag#36, year_total#37]
+Arguments: coalesced
+
+(75) InputAdapter
+Input [3]: [customer_id#35, customer_preferred_cust_flag#36, year_total#37]
+
+(76) NativeSort
+Input [3]: [customer_id#35, customer_preferred_cust_flag#36, year_total#37]
+Arguments: [customer_id#35 ASC NULLS FIRST], false
+
+(77) NativeSortMergeJoin
+Left keys [1]: [customer_id#19]
+Right keys [1]: [customer_id#35]
+Join type: Inner
+Join condition: None
+
+(78) NativeProject
+Output [4]: [customer_id#19, year_total#20, customer_preferred_cust_flag#36, year_total#37]
+Input [5]: [customer_id#19, year_total#20, customer_id#35, customer_preferred_cust_flag#36, year_total#37]
+
+(79) ReusedExchange [Reuses operator id: 4]
+Output [8]: [c_customer_sk#38, c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45]
+
+(80) ShuffleQueryStage
+Output [8]: [c_customer_sk#38, c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45]
+Arguments: X
+
+(81) AQEShuffleRead
+Input [8]: [c_customer_sk#38, c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45]
+Arguments: coalesced
+
+(82) InputAdapter
+Input [8]: [c_customer_sk#38, c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45]
+Arguments: [#38, #39, #40, #41, #42, #43, #44, #45]
+
+(83) InputAdapter
+Input [8]: [#38#38, #39#39, #40#40, #41#41, #42#42, #43#43, #44#44, #45#45]
+
+(84) NativeSort
+Input [8]: [#38#38, #39#39, #40#40, #41#41, #42#42, #43#43, #44#44, #45#45]
+Arguments: [c_customer_sk#38 ASC NULLS FIRST], false
+
+(207) Scan parquet
+Output [4]: [ws_sold_date_sk#46, ws_bill_customer_sk#47, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_bill_customer_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(86) InputAdapter
+Input [4]: [ws_sold_date_sk#46, ws_bill_customer_sk#47, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Arguments: [#46, #47, #48, #49]
+
+(87) NativeFilter
+Input [4]: [#46#46, #47#47, #48#48, #49#49]
+Condition : (isnotnull(ws_bill_customer_sk#47) AND isnotnull(ws_sold_date_sk#46))
+
+(88) NativeShuffleExchange
+Input [4]: [#46#46, #47#47, #48#48, #49#49]
+Arguments: hashpartitioning(ws_bill_customer_sk#47, 100), ENSURE_REQUIREMENTS, [plan_id=10]
+
+(89) ShuffleQueryStage
+Output [4]: [#46#46, #47#47, #48#48, #49#49]
+Arguments: X
+
+(90) AQEShuffleRead
+Input [4]: [#46#46, #47#47, #48#48, #49#49]
+Arguments: coalesced
+
+(91) InputAdapter
+Input [4]: [#46#46, #47#47, #48#48, #49#49]
+
+(92) NativeSort
+Input [4]: [#46#46, #47#47, #48#48, #49#49]
+Arguments: [ws_bill_customer_sk#47 ASC NULLS FIRST], false
+
+(93) NativeSortMergeJoin
+Left keys [1]: [c_customer_sk#38]
+Right keys [1]: [ws_bill_customer_sk#47]
+Join type: Inner
+Join condition: None
+
+(94) NativeProject
+Output [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Input [12]: [#38#38, #39#39, #40#40, #41#41, #42#42, #43#43, #44#44, #45#45, #46#46, #47#47, #48#48, #49#49]
+
+(95) NativeShuffleExchange
+Input [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Arguments: hashpartitioning(ws_sold_date_sk#46, 100), ENSURE_REQUIREMENTS, [plan_id=11]
+
+(96) ShuffleQueryStage
+Output [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Arguments: X
+
+(97) AQEShuffleRead
+Input [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Arguments: coalesced
+
+(98) InputAdapter
+Input [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_ext_discount_amt#48, ws_ext_list_price#49]
+
+(99) NativeSort
+Input [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Arguments: [ws_sold_date_sk#46 ASC NULLS FIRST], false
+
+(100) ReusedExchange [Reuses operator id: 27]
+Output [2]: [d_date_sk#50, d_year#51]
+
+(101) ShuffleQueryStage
+Output [2]: [d_date_sk#50, d_year#51]
+Arguments: X
+
+(102) AQEShuffleRead
+Input [2]: [d_date_sk#50, d_year#51]
+Arguments: coalesced
+
+(103) InputAdapter
+Input [2]: [d_date_sk#50, d_year#51]
+Arguments: [#50, #51]
+
+(104) InputAdapter
+Input [2]: [#50#50, #51#51]
+
+(105) NativeSort
+Input [2]: [#50#50, #51#51]
+Arguments: [d_date_sk#50 ASC NULLS FIRST], false
+
+(106) NativeSortMergeJoin
+Left keys [1]: [ws_sold_date_sk#46]
+Right keys [1]: [d_date_sk#50]
+Join type: Inner
+Join condition: None
+
+(107) NativeProject
+Output [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_ext_discount_amt#48, ws_ext_list_price#49, d_year#51]
+Input [12]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_ext_discount_amt#48, ws_ext_list_price#49, #50#50, #51#51]
+
+(108) NativeProject
+Output [9]: [c_customer_id#39 AS c_customer_id#39, c_first_name#40 AS c_first_name#40, c_last_name#41 AS c_last_name#41, c_preferred_cust_flag#42 AS c_preferred_cust_flag#42, c_birth_country#43 AS c_birth_country#43, c_login#44 AS c_login#44, c_email_address#45 AS c_email_address#45, d_year#51 AS d_year#51, UnscaledValue((ws_ext_list_price#49 - ws_ext_discount_amt#48)) AS _c8#52]
+Input [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_ext_discount_amt#48, ws_ext_list_price#49, d_year#51]
+
+(109) NativeHashAggregate
+Input [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, _c8#52]
+Keys [8]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51]
+Functions [1]: [partial_sum(_c8#52)]
+Aggregate Attributes [1]: [sum#53]
+Results [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, #17#17]
+
+(110) NativeShuffleExchange
+Input [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, #17#17]
+Arguments: hashpartitioning(c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, 100), ENSURE_REQUIREMENTS, [plan_id=12]
+
+(111) ShuffleQueryStage
+Output [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, #17#17]
+Arguments: X
+
+(112) AQEShuffleRead
+Input [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, #17#17]
+Arguments: coalesced
+
+(113) InputAdapter
+Input [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, #17#17]
+
+(114) NativeHashAggregate
+Input [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, #17#17]
+Keys [8]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51]
+Functions [1]: [sum(UnscaledValue((ws_ext_list_price#49 - ws_ext_discount_amt#48)))]
+Aggregate Attributes [1]: [sum(UnscaledValue((ws_ext_list_price#49 - ws_ext_discount_amt#48)))#54]
+Results [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, sum(UnscaledValue((ws_ext_list_price#49 - ws_ext_discount_amt#48)))#54]
+
+(115) NativeProject
+Output [2]: [c_customer_id#39 AS customer_id#55, MakeDecimal(sum(UnscaledValue((ws_ext_list_price#49 - ws_ext_discount_amt#48)))#54,18,2) AS year_total#56]
+Input [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, sum(UnscaledValue((ws_ext_list_price#49 - ws_ext_discount_amt#48)))#54]
+
+(116) NativeFilter
+Input [2]: [customer_id#55, year_total#56]
+Condition : (isnotnull(year_total#56) AND (year_total#56 > 0.00))
+
+(117) NativeShuffleExchange
+Input [2]: [customer_id#55, year_total#56]
+Arguments: hashpartitioning(customer_id#55, 100), ENSURE_REQUIREMENTS, [plan_id=13]
+
+(118) ShuffleQueryStage
+Output [2]: [customer_id#55, year_total#56]
+Arguments: X
+
+(119) AQEShuffleRead
+Input [2]: [customer_id#55, year_total#56]
+Arguments: coalesced
+
+(120) InputAdapter
+Input [2]: [customer_id#55, year_total#56]
+
+(121) NativeSort
+Input [2]: [customer_id#55, year_total#56]
+Arguments: [customer_id#55 ASC NULLS FIRST], false
+
+(122) NativeSortMergeJoin
+Left keys [1]: [customer_id#19]
+Right keys [1]: [customer_id#55]
+Join type: Inner
+Join condition: None
+
+(123) NativeProject
+Output [5]: [customer_id#19, year_total#20, customer_preferred_cust_flag#36, year_total#37, year_total#56]
+Input [6]: [customer_id#19, year_total#20, customer_preferred_cust_flag#36, year_total#37, customer_id#55, year_total#56]
+
+(124) ReusedExchange [Reuses operator id: 95]
+Output [10]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_sold_date_sk#64, ws_ext_discount_amt#65, ws_ext_list_price#66]
+
+(125) ShuffleQueryStage
+Output [10]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_sold_date_sk#64, ws_ext_discount_amt#65, ws_ext_list_price#66]
+Arguments: X
+
+(126) AQEShuffleRead
+Input [10]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_sold_date_sk#64, ws_ext_discount_amt#65, ws_ext_list_price#66]
+Arguments: coalesced
+
+(127) InputAdapter
+Input [10]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_sold_date_sk#64, ws_ext_discount_amt#65, ws_ext_list_price#66]
+Arguments: [#57, #58, #59, #60, #61, #62, #63, #64, #65, #66]
+
+(128) InputAdapter
+Input [10]: [#57#57, #58#58, #59#59, #60#60, #61#61, #62#62, #63#63, #64#64, #65#65, #66#66]
+
+(129) NativeSort
+Input [10]: [#57#57, #58#58, #59#59, #60#60, #61#61, #62#62, #63#63, #64#64, #65#65, #66#66]
+Arguments: [ws_sold_date_sk#64 ASC NULLS FIRST], false
+
+(130) ReusedExchange [Reuses operator id: 57]
+Output [2]: [d_date_sk#67, d_year#68]
+
+(131) ShuffleQueryStage
+Output [2]: [d_date_sk#67, d_year#68]
+Arguments: X
+
+(132) AQEShuffleRead
+Input [2]: [d_date_sk#67, d_year#68]
+Arguments: coalesced
+
+(133) InputAdapter
+Input [2]: [d_date_sk#67, d_year#68]
+Arguments: [#67, #68]
+
+(134) InputAdapter
+Input [2]: [#67#67, #68#68]
+
+(135) NativeSort
+Input [2]: [#67#67, #68#68]
+Arguments: [d_date_sk#67 ASC NULLS FIRST], false
+
+(136) NativeSortMergeJoin
+Left keys [1]: [ws_sold_date_sk#64]
+Right keys [1]: [d_date_sk#67]
+Join type: Inner
+Join condition: None
+
+(137) NativeProject
+Output [10]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_ext_discount_amt#65, ws_ext_list_price#66, d_year#68]
+Input [12]: [#57#57, #58#58, #59#59, #60#60, #61#61, #62#62, #63#63, #64#64, #65#65, #66#66, #67#67, #68#68]
+
+(138) NativeProject
+Output [9]: [c_customer_id#57 AS c_customer_id#57, c_first_name#58 AS c_first_name#58, c_last_name#59 AS c_last_name#59, c_preferred_cust_flag#60 AS c_preferred_cust_flag#60, c_birth_country#61 AS c_birth_country#61, c_login#62 AS c_login#62, c_email_address#63 AS c_email_address#63, d_year#68 AS d_year#68, UnscaledValue((ws_ext_list_price#66 - ws_ext_discount_amt#65)) AS _c8#69]
+Input [10]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_ext_discount_amt#65, ws_ext_list_price#66, d_year#68]
+
+(139) NativeHashAggregate
+Input [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, _c8#69]
+Keys [8]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68]
+Functions [1]: [partial_sum(_c8#69)]
+Aggregate Attributes [1]: [sum#70]
+Results [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, #17#17]
+
+(140) NativeShuffleExchange
+Input [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, #17#17]
+Arguments: hashpartitioning(c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, 100), ENSURE_REQUIREMENTS, [plan_id=14]
+
+(141) ShuffleQueryStage
+Output [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, #17#17]
+Arguments: X
+
+(142) AQEShuffleRead
+Input [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, #17#17]
+Arguments: coalesced
+
+(143) InputAdapter
+Input [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, #17#17]
+
+(144) NativeHashAggregate
+Input [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, #17#17]
+Keys [8]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68]
+Functions [1]: [sum(UnscaledValue((ws_ext_list_price#66 - ws_ext_discount_amt#65)))]
+Aggregate Attributes [1]: [sum(UnscaledValue((ws_ext_list_price#66 - ws_ext_discount_amt#65)))#54]
+Results [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, sum(UnscaledValue((ws_ext_list_price#66 - ws_ext_discount_amt#65)))#54]
+
+(145) NativeProject
+Output [2]: [c_customer_id#57 AS customer_id#71, MakeDecimal(sum(UnscaledValue((ws_ext_list_price#66 - ws_ext_discount_amt#65)))#54,18,2) AS year_total#72]
+Input [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, sum(UnscaledValue((ws_ext_list_price#66 - ws_ext_discount_amt#65)))#54]
+
+(146) NativeShuffleExchange
+Input [2]: [customer_id#71, year_total#72]
+Arguments: hashpartitioning(customer_id#71, 100), ENSURE_REQUIREMENTS, [plan_id=15]
+
+(147) ShuffleQueryStage
+Output [2]: [customer_id#71, year_total#72]
+Arguments: X
+
+(148) AQEShuffleRead
+Input [2]: [customer_id#71, year_total#72]
+Arguments: coalesced
+
+(149) InputAdapter
+Input [2]: [customer_id#71, year_total#72]
+
+(150) NativeSort
+Input [2]: [customer_id#71, year_total#72]
+Arguments: [customer_id#71 ASC NULLS FIRST], false
+
+(151) SortMergeJoin [codegen id : 1]
+Left keys [1]: [customer_id#19]
+Right keys [1]: [customer_id#71]
+Join type: Inner
+Join condition: (CASE WHEN (year_total#56 > 0.00) THEN (year_total#72 / year_total#56) END > CASE WHEN (year_total#20 > 0.00) THEN (year_total#37 / year_total#20) END)
+
+(152) Project [codegen id : 1]
+Output [1]: [customer_preferred_cust_flag#36]
+Input [7]: [customer_id#19, year_total#20, customer_preferred_cust_flag#36, year_total#37, year_total#56, customer_id#71, year_total#72]
+
+(153) TakeOrderedAndProject
+Input [1]: [customer_preferred_cust_flag#36]
+Arguments: X, [customer_preferred_cust_flag#36 ASC NULLS FIRST], [customer_preferred_cust_flag#36]
+
+(154) Scan parquet
+Output [8]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)]
+ReadSchema: struct
+
+(155) Filter
+Input [8]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
+Condition : (isnotnull(c_customer_sk#1) AND isnotnull(c_customer_id#2))
+
+(156) Exchange
+Input [8]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
+Arguments: hashpartitioning(c_customer_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=16]
+
+(157) Sort
+Input [8]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
+Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0
+
+(158) Scan parquet
+Output [4]: [ss_sold_date_sk#9, ss_customer_sk#10, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_customer_sk), IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(159) Filter
+Input [4]: [ss_sold_date_sk#9, ss_customer_sk#10, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Condition : (isnotnull(ss_customer_sk#10) AND isnotnull(ss_sold_date_sk#9))
+
+(160) Exchange
+Input [4]: [ss_sold_date_sk#9, ss_customer_sk#10, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Arguments: hashpartitioning(ss_customer_sk#10, 100), ENSURE_REQUIREMENTS, [plan_id=17]
+
+(161) Sort
+Input [4]: [ss_sold_date_sk#9, ss_customer_sk#10, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Arguments: [ss_customer_sk#10 ASC NULLS FIRST], false, 0
+
+(162) SortMergeJoin
+Left keys [1]: [c_customer_sk#1]
+Right keys [1]: [ss_customer_sk#10]
+Join type: Inner
+Join condition: None
+
+(163) Project
+Output [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Input [12]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_customer_sk#10, ss_ext_discount_amt#11, ss_ext_list_price#12]
+
+(164) Exchange
+Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Arguments: hashpartitioning(ss_sold_date_sk#9, 100), ENSURE_REQUIREMENTS, [plan_id=18]
+
+(165) Sort
+Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_list_price#12]
+Arguments: [ss_sold_date_sk#9 ASC NULLS FIRST], false, 0
+
+(166) Scan parquet
+Output [2]: [d_date_sk#13, d_year#14]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(167) Filter
+Input [2]: [d_date_sk#13, d_year#14]
+Condition : ((isnotnull(d_year#14) AND (d_year#14 = 2001)) AND isnotnull(d_date_sk#13))
+
+(168) Exchange
+Input [2]: [d_date_sk#13, d_year#14]
+Arguments: hashpartitioning(d_date_sk#13, 100), ENSURE_REQUIREMENTS, [plan_id=19]
+
+(169) Sort
+Input [2]: [d_date_sk#13, d_year#14]
+Arguments: [d_date_sk#13 ASC NULLS FIRST], false, 0
+
+(170) SortMergeJoin
+Left keys [1]: [ss_sold_date_sk#9]
+Right keys [1]: [d_date_sk#13]
+Join type: Inner
+Join condition: None
+
+(171) Project
+Output [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#11, ss_ext_list_price#12, d_year#14]
+Input [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_list_price#12, d_date_sk#13, d_year#14]
+
+(172) HashAggregate
+Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#11, ss_ext_list_price#12, d_year#14]
+Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
+Functions [1]: [partial_sum(UnscaledValue((ss_ext_list_price#12 - ss_ext_discount_amt#11)))]
+Aggregate Attributes [1]: [sum#16]
+Results [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#73]
+
+(173) Exchange
+Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#73]
+Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, 100), ENSURE_REQUIREMENTS, [plan_id=20]
+
+(174) HashAggregate
+Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#73]
+Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#14, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
+Functions [1]: [sum(UnscaledValue((ss_ext_list_price#12 - ss_ext_discount_amt#11)))]
+Aggregate Attributes [1]: [sum(UnscaledValue((ss_ext_list_price#12 - ss_ext_discount_amt#11)))#18]
+Results [2]: [c_customer_id#2 AS customer_id#19, MakeDecimal(sum(UnscaledValue((ss_ext_list_price#12 - ss_ext_discount_amt#11)))#18,18,2) AS year_total#20]
+
+(175) Filter
+Input [2]: [customer_id#19, year_total#20]
+Condition : (isnotnull(year_total#20) AND (year_total#20 > 0.00))
+
+(176) Exchange
+Input [2]: [customer_id#19, year_total#20]
+Arguments: hashpartitioning(customer_id#19, 100), ENSURE_REQUIREMENTS, [plan_id=21]
+
+(177) Sort
+Input [2]: [customer_id#19, year_total#20]
+Arguments: [customer_id#19 ASC NULLS FIRST], false, 0
+
+(178) Scan parquet
+Output [8]: [c_customer_sk#74, c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)]
+ReadSchema: struct
+
+(179) Filter
+Input [8]: [c_customer_sk#74, c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27]
+Condition : (isnotnull(c_customer_sk#74) AND isnotnull(c_customer_id#21))
+
+(180) Exchange
+Input [8]: [c_customer_sk#74, c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27]
+Arguments: hashpartitioning(c_customer_sk#74, 100), ENSURE_REQUIREMENTS, [plan_id=22]
+
+(181) Sort
+Input [8]: [c_customer_sk#74, c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27]
+Arguments: [c_customer_sk#74 ASC NULLS FIRST], false, 0
+
+(182) Scan parquet
+Output [4]: [ss_sold_date_sk#28, ss_customer_sk#75, ss_ext_discount_amt#29, ss_ext_list_price#30]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_customer_sk), IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(183) Filter
+Input [4]: [ss_sold_date_sk#28, ss_customer_sk#75, ss_ext_discount_amt#29, ss_ext_list_price#30]
+Condition : (isnotnull(ss_customer_sk#75) AND isnotnull(ss_sold_date_sk#28))
+
+(184) Exchange
+Input [4]: [ss_sold_date_sk#28, ss_customer_sk#75, ss_ext_discount_amt#29, ss_ext_list_price#30]
+Arguments: hashpartitioning(ss_customer_sk#75, 100), ENSURE_REQUIREMENTS, [plan_id=23]
+
+(185) Sort
+Input [4]: [ss_sold_date_sk#28, ss_customer_sk#75, ss_ext_discount_amt#29, ss_ext_list_price#30]
+Arguments: [ss_customer_sk#75 ASC NULLS FIRST], false, 0
+
+(186) SortMergeJoin
+Left keys [1]: [c_customer_sk#74]
+Right keys [1]: [ss_customer_sk#75]
+Join type: Inner
+Join condition: None
+
+(187) Project
+Output [10]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_sold_date_sk#28, ss_ext_discount_amt#29, ss_ext_list_price#30]
+Input [12]: [c_customer_sk#74, c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_sold_date_sk#28, ss_customer_sk#75, ss_ext_discount_amt#29, ss_ext_list_price#30]
+
+(188) Exchange
+Input [10]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_sold_date_sk#28, ss_ext_discount_amt#29, ss_ext_list_price#30]
+Arguments: hashpartitioning(ss_sold_date_sk#28, 100), ENSURE_REQUIREMENTS, [plan_id=24]
+
+(189) Sort
+Input [10]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_sold_date_sk#28, ss_ext_discount_amt#29, ss_ext_list_price#30]
+Arguments: [ss_sold_date_sk#28 ASC NULLS FIRST], false, 0
+
+(190) Scan parquet
+Output [2]: [d_date_sk#31, d_year#32]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(191) Filter
+Input [2]: [d_date_sk#31, d_year#32]
+Condition : ((isnotnull(d_year#32) AND (d_year#32 = 2002)) AND isnotnull(d_date_sk#31))
+
+(192) Exchange
+Input [2]: [d_date_sk#31, d_year#32]
+Arguments: hashpartitioning(d_date_sk#31, 100), ENSURE_REQUIREMENTS, [plan_id=25]
+
+(193) Sort
+Input [2]: [d_date_sk#31, d_year#32]
+Arguments: [d_date_sk#31 ASC NULLS FIRST], false, 0
+
+(194) SortMergeJoin
+Left keys [1]: [ss_sold_date_sk#28]
+Right keys [1]: [d_date_sk#31]
+Join type: Inner
+Join condition: None
+
+(195) Project
+Output [10]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_ext_discount_amt#29, ss_ext_list_price#30, d_year#32]
+Input [12]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_sold_date_sk#28, ss_ext_discount_amt#29, ss_ext_list_price#30, d_date_sk#31, d_year#32]
+
+(196) HashAggregate
+Input [10]: [c_customer_id#21, c_first_name#22, c_last_name#23, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, ss_ext_discount_amt#29, ss_ext_list_price#30, d_year#32]
+Keys [8]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27]
+Functions [1]: [partial_sum(UnscaledValue((ss_ext_list_price#30 - ss_ext_discount_amt#29)))]
+Aggregate Attributes [1]: [sum#34]
+Results [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, sum#76]
+
+(197) Exchange
+Input [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, sum#76]
+Arguments: hashpartitioning(c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, 100), ENSURE_REQUIREMENTS, [plan_id=26]
+
+(198) HashAggregate
+Input [9]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27, sum#76]
+Keys [8]: [c_customer_id#21, c_first_name#22, c_last_name#23, d_year#32, c_preferred_cust_flag#24, c_birth_country#25, c_login#26, c_email_address#27]
+Functions [1]: [sum(UnscaledValue((ss_ext_list_price#30 - ss_ext_discount_amt#29)))]
+Aggregate Attributes [1]: [sum(UnscaledValue((ss_ext_list_price#30 - ss_ext_discount_amt#29)))#18]
+Results [3]: [c_customer_id#21 AS customer_id#35, c_preferred_cust_flag#24 AS customer_preferred_cust_flag#36, MakeDecimal(sum(UnscaledValue((ss_ext_list_price#30 - ss_ext_discount_amt#29)))#18,18,2) AS year_total#37]
+
+(199) Exchange
+Input [3]: [customer_id#35, customer_preferred_cust_flag#36, year_total#37]
+Arguments: hashpartitioning(customer_id#35, 100), ENSURE_REQUIREMENTS, [plan_id=27]
+
+(200) Sort
+Input [3]: [customer_id#35, customer_preferred_cust_flag#36, year_total#37]
+Arguments: [customer_id#35 ASC NULLS FIRST], false, 0
+
+(201) SortMergeJoin
+Left keys [1]: [customer_id#19]
+Right keys [1]: [customer_id#35]
+Join type: Inner
+Join condition: None
+
+(202) Project
+Output [4]: [customer_id#19, year_total#20, customer_preferred_cust_flag#36, year_total#37]
+Input [5]: [customer_id#19, year_total#20, customer_id#35, customer_preferred_cust_flag#36, year_total#37]
+
+(203) Scan parquet
+Output [8]: [c_customer_sk#38, c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)]
+ReadSchema: struct
+
+(204) Filter
+Input [8]: [c_customer_sk#38, c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45]
+Condition : (isnotnull(c_customer_sk#38) AND isnotnull(c_customer_id#39))
+
+(205) Exchange
+Input [8]: [c_customer_sk#38, c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45]
+Arguments: hashpartitioning(c_customer_sk#38, 100), ENSURE_REQUIREMENTS, [plan_id=28]
+
+(206) Sort
+Input [8]: [c_customer_sk#38, c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45]
+Arguments: [c_customer_sk#38 ASC NULLS FIRST], false, 0
+
+(207) Scan parquet
+Output [4]: [ws_sold_date_sk#46, ws_bill_customer_sk#47, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_bill_customer_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(208) Filter
+Input [4]: [ws_sold_date_sk#46, ws_bill_customer_sk#47, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Condition : (isnotnull(ws_bill_customer_sk#47) AND isnotnull(ws_sold_date_sk#46))
+
+(209) Exchange
+Input [4]: [ws_sold_date_sk#46, ws_bill_customer_sk#47, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Arguments: hashpartitioning(ws_bill_customer_sk#47, 100), ENSURE_REQUIREMENTS, [plan_id=29]
+
+(210) Sort
+Input [4]: [ws_sold_date_sk#46, ws_bill_customer_sk#47, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Arguments: [ws_bill_customer_sk#47 ASC NULLS FIRST], false, 0
+
+(211) SortMergeJoin
+Left keys [1]: [c_customer_sk#38]
+Right keys [1]: [ws_bill_customer_sk#47]
+Join type: Inner
+Join condition: None
+
+(212) Project
+Output [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Input [12]: [c_customer_sk#38, c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_bill_customer_sk#47, ws_ext_discount_amt#48, ws_ext_list_price#49]
+
+(213) Exchange
+Input [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Arguments: hashpartitioning(ws_sold_date_sk#46, 100), ENSURE_REQUIREMENTS, [plan_id=30]
+
+(214) Sort
+Input [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_ext_discount_amt#48, ws_ext_list_price#49]
+Arguments: [ws_sold_date_sk#46 ASC NULLS FIRST], false, 0
+
+(215) Scan parquet
+Output [2]: [d_date_sk#50, d_year#51]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(216) Filter
+Input [2]: [d_date_sk#50, d_year#51]
+Condition : ((isnotnull(d_year#51) AND (d_year#51 = 2001)) AND isnotnull(d_date_sk#50))
+
+(217) Exchange
+Input [2]: [d_date_sk#50, d_year#51]
+Arguments: hashpartitioning(d_date_sk#50, 100), ENSURE_REQUIREMENTS, [plan_id=31]
+
+(218) Sort
+Input [2]: [d_date_sk#50, d_year#51]
+Arguments: [d_date_sk#50 ASC NULLS FIRST], false, 0
+
+(219) SortMergeJoin
+Left keys [1]: [ws_sold_date_sk#46]
+Right keys [1]: [d_date_sk#50]
+Join type: Inner
+Join condition: None
+
+(220) Project
+Output [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_ext_discount_amt#48, ws_ext_list_price#49, d_year#51]
+Input [12]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_sold_date_sk#46, ws_ext_discount_amt#48, ws_ext_list_price#49, d_date_sk#50, d_year#51]
+
+(221) HashAggregate
+Input [10]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, ws_ext_discount_amt#48, ws_ext_list_price#49, d_year#51]
+Keys [8]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51]
+Functions [1]: [partial_sum(UnscaledValue((ws_ext_list_price#49 - ws_ext_discount_amt#48)))]
+Aggregate Attributes [1]: [sum#53]
+Results [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, sum#77]
+
+(222) Exchange
+Input [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, sum#77]
+Arguments: hashpartitioning(c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, 100), ENSURE_REQUIREMENTS, [plan_id=32]
+
+(223) HashAggregate
+Input [9]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51, sum#77]
+Keys [8]: [c_customer_id#39, c_first_name#40, c_last_name#41, c_preferred_cust_flag#42, c_birth_country#43, c_login#44, c_email_address#45, d_year#51]
+Functions [1]: [sum(UnscaledValue((ws_ext_list_price#49 - ws_ext_discount_amt#48)))]
+Aggregate Attributes [1]: [sum(UnscaledValue((ws_ext_list_price#49 - ws_ext_discount_amt#48)))#54]
+Results [2]: [c_customer_id#39 AS customer_id#55, MakeDecimal(sum(UnscaledValue((ws_ext_list_price#49 - ws_ext_discount_amt#48)))#54,18,2) AS year_total#56]
+
+(224) Filter
+Input [2]: [customer_id#55, year_total#56]
+Condition : (isnotnull(year_total#56) AND (year_total#56 > 0.00))
+
+(225) Exchange
+Input [2]: [customer_id#55, year_total#56]
+Arguments: hashpartitioning(customer_id#55, 100), ENSURE_REQUIREMENTS, [plan_id=33]
+
+(226) Sort
+Input [2]: [customer_id#55, year_total#56]
+Arguments: [customer_id#55 ASC NULLS FIRST], false, 0
+
+(227) SortMergeJoin
+Left keys [1]: [customer_id#19]
+Right keys [1]: [customer_id#55]
+Join type: Inner
+Join condition: None
+
+(228) Project
+Output [5]: [customer_id#19, year_total#20, customer_preferred_cust_flag#36, year_total#37, year_total#56]
+Input [6]: [customer_id#19, year_total#20, customer_preferred_cust_flag#36, year_total#37, customer_id#55, year_total#56]
+
+(229) Scan parquet
+Output [8]: [c_customer_sk#78, c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)]
+ReadSchema: struct
+
+(230) Filter
+Input [8]: [c_customer_sk#78, c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63]
+Condition : (isnotnull(c_customer_sk#78) AND isnotnull(c_customer_id#57))
+
+(231) Exchange
+Input [8]: [c_customer_sk#78, c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63]
+Arguments: hashpartitioning(c_customer_sk#78, 100), ENSURE_REQUIREMENTS, [plan_id=34]
+
+(232) Sort
+Input [8]: [c_customer_sk#78, c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63]
+Arguments: [c_customer_sk#78 ASC NULLS FIRST], false, 0
+
+(233) Scan parquet
+Output [4]: [ws_sold_date_sk#64, ws_bill_customer_sk#79, ws_ext_discount_amt#65, ws_ext_list_price#66]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_bill_customer_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(234) Filter
+Input [4]: [ws_sold_date_sk#64, ws_bill_customer_sk#79, ws_ext_discount_amt#65, ws_ext_list_price#66]
+Condition : (isnotnull(ws_bill_customer_sk#79) AND isnotnull(ws_sold_date_sk#64))
+
+(235) Exchange
+Input [4]: [ws_sold_date_sk#64, ws_bill_customer_sk#79, ws_ext_discount_amt#65, ws_ext_list_price#66]
+Arguments: hashpartitioning(ws_bill_customer_sk#79, 100), ENSURE_REQUIREMENTS, [plan_id=35]
+
+(236) Sort
+Input [4]: [ws_sold_date_sk#64, ws_bill_customer_sk#79, ws_ext_discount_amt#65, ws_ext_list_price#66]
+Arguments: [ws_bill_customer_sk#79 ASC NULLS FIRST], false, 0
+
+(237) SortMergeJoin
+Left keys [1]: [c_customer_sk#78]
+Right keys [1]: [ws_bill_customer_sk#79]
+Join type: Inner
+Join condition: None
+
+(238) Project
+Output [10]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_sold_date_sk#64, ws_ext_discount_amt#65, ws_ext_list_price#66]
+Input [12]: [c_customer_sk#78, c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_sold_date_sk#64, ws_bill_customer_sk#79, ws_ext_discount_amt#65, ws_ext_list_price#66]
+
+(239) Exchange
+Input [10]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_sold_date_sk#64, ws_ext_discount_amt#65, ws_ext_list_price#66]
+Arguments: hashpartitioning(ws_sold_date_sk#64, 100), ENSURE_REQUIREMENTS, [plan_id=36]
+
+(240) Sort
+Input [10]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_sold_date_sk#64, ws_ext_discount_amt#65, ws_ext_list_price#66]
+Arguments: [ws_sold_date_sk#64 ASC NULLS FIRST], false, 0
+
+(241) Scan parquet
+Output [2]: [d_date_sk#67, d_year#68]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(242) Filter
+Input [2]: [d_date_sk#67, d_year#68]
+Condition : ((isnotnull(d_year#68) AND (d_year#68 = 2002)) AND isnotnull(d_date_sk#67))
+
+(243) Exchange
+Input [2]: [d_date_sk#67, d_year#68]
+Arguments: hashpartitioning(d_date_sk#67, 100), ENSURE_REQUIREMENTS, [plan_id=37]
+
+(244) Sort
+Input [2]: [d_date_sk#67, d_year#68]
+Arguments: [d_date_sk#67 ASC NULLS FIRST], false, 0
+
+(245) SortMergeJoin
+Left keys [1]: [ws_sold_date_sk#64]
+Right keys [1]: [d_date_sk#67]
+Join type: Inner
+Join condition: None
+
+(246) Project
+Output [10]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_ext_discount_amt#65, ws_ext_list_price#66, d_year#68]
+Input [12]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_sold_date_sk#64, ws_ext_discount_amt#65, ws_ext_list_price#66, d_date_sk#67, d_year#68]
+
+(247) HashAggregate
+Input [10]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, ws_ext_discount_amt#65, ws_ext_list_price#66, d_year#68]
+Keys [8]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68]
+Functions [1]: [partial_sum(UnscaledValue((ws_ext_list_price#66 - ws_ext_discount_amt#65)))]
+Aggregate Attributes [1]: [sum#70]
+Results [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, sum#80]
+
+(248) Exchange
+Input [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, sum#80]
+Arguments: hashpartitioning(c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, 100), ENSURE_REQUIREMENTS, [plan_id=38]
+
+(249) HashAggregate
+Input [9]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68, sum#80]
+Keys [8]: [c_customer_id#57, c_first_name#58, c_last_name#59, c_preferred_cust_flag#60, c_birth_country#61, c_login#62, c_email_address#63, d_year#68]
+Functions [1]: [sum(UnscaledValue((ws_ext_list_price#66 - ws_ext_discount_amt#65)))]
+Aggregate Attributes [1]: [sum(UnscaledValue((ws_ext_list_price#66 - ws_ext_discount_amt#65)))#54]
+Results [2]: [c_customer_id#57 AS customer_id#71, MakeDecimal(sum(UnscaledValue((ws_ext_list_price#66 - ws_ext_discount_amt#65)))#54,18,2) AS year_total#72]
+
+(250) Exchange
+Input [2]: [customer_id#71, year_total#72]
+Arguments: hashpartitioning(customer_id#71, 100), ENSURE_REQUIREMENTS, [plan_id=39]
+
+(251) Sort
+Input [2]: [customer_id#71, year_total#72]
+Arguments: [customer_id#71 ASC NULLS FIRST], false, 0
+
+(252) SortMergeJoin
+Left keys [1]: [customer_id#19]
+Right keys [1]: [customer_id#71]
+Join type: Inner
+Join condition: (CASE WHEN (year_total#56 > 0.00) THEN (year_total#72 / year_total#56) END > CASE WHEN (year_total#20 > 0.00) THEN (year_total#37 / year_total#20) END)
+
+(253) Project
+Output [1]: [customer_preferred_cust_flag#36]
+Input [7]: [customer_id#19, year_total#20, customer_preferred_cust_flag#36, year_total#37, year_total#56, customer_id#71, year_total#72]
+
+(254) TakeOrderedAndProject
+Input [1]: [customer_preferred_cust_flag#36]
+Arguments: X, [customer_preferred_cust_flag#36 ASC NULLS FIRST], [customer_preferred_cust_flag#36]
+
+(255) AdaptiveSparkPlan
+Output [1]: [customer_preferred_cust_flag#36]
+Arguments: isFinalPlan=true
+
diff --git a/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q12.txt b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q12.txt
new file mode 100644
index 000000000..0c56ed9fd
--- /dev/null
+++ b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q12.txt
@@ -0,0 +1,427 @@
+== Physical Plan ==
+AdaptiveSparkPlan (78)
++- == Final Plan ==
+ TakeOrderedAndProject (50)
+ +- * Project (49)
+ +- Window (48)
+ +- NativeSort (47)
+ +- InputAdapter (46)
+ +- AQEShuffleRead (45)
+ +- ShuffleQueryStage (44), Statistics(X)
+ +- NativeShuffleExchange (43)
+ +- NativeProject (42)
+ +- NativeHashAggregate (41)
+ +- InputAdapter (40)
+ +- AQEShuffleRead (39)
+ +- ShuffleQueryStage (38), Statistics(X)
+ +- NativeShuffleExchange (37)
+ +- NativeHashAggregate (36)
+ +- NativeProject (35)
+ +- NativeProject (34)
+ +- NativeSortMergeJoin Inner (33)
+ :- NativeSort (23)
+ : +- InputAdapter (22)
+ : +- AQEShuffleRead (21)
+ : +- ShuffleQueryStage (20), Statistics(X)
+ : +- NativeShuffleExchange (19)
+ : +- NativeProject (18)
+ : +- NativeSortMergeJoin Inner (17)
+ : :- NativeSort (8)
+ : : +- InputAdapter (7)
+ : : +- AQEShuffleRead (6)
+ : : +- ShuffleQueryStage (5), Statistics(X)
+ : : +- NativeShuffleExchange (4)
+ : : +- NativeFilter (3)
+ : : +- InputAdapter (2)
+ : : +- NativeParquetScan (1)
+ : +- NativeSort (16)
+ : +- InputAdapter (15)
+ : +- AQEShuffleRead (14)
+ : +- ShuffleQueryStage (13), Statistics(X)
+ : +- NativeShuffleExchange (12)
+ : +- NativeFilter (11)
+ : +- InputAdapter (10)
+ : +- NativeParquetScan (9)
+ +- NativeSort (32)
+ +- InputAdapter (31)
+ +- AQEShuffleRead (30)
+ +- ShuffleQueryStage (29), Statistics(X)
+ +- NativeShuffleExchange (28)
+ +- NativeProject (27)
+ +- NativeFilter (26)
+ +- InputAdapter (25)
+ +- NativeParquetScan (24)
++- == Initial Plan ==
+ TakeOrderedAndProject (77)
+ +- Project (76)
+ +- Window (75)
+ +- Sort (74)
+ +- Exchange (73)
+ +- HashAggregate (72)
+ +- Exchange (71)
+ +- HashAggregate (70)
+ +- Project (69)
+ +- SortMergeJoin Inner (68)
+ :- Sort (62)
+ : +- Exchange (61)
+ : +- Project (60)
+ : +- SortMergeJoin Inner (59)
+ : :- Sort (54)
+ : : +- Exchange (53)
+ : : +- Filter (52)
+ : : +- Scan parquet (51)
+ : +- Sort (58)
+ : +- Exchange (57)
+ : +- Filter (56)
+ : +- Scan parquet (55)
+ +- Sort (67)
+ +- Exchange (66)
+ +- Project (65)
+ +- Filter (64)
+ +- Scan parquet (63)
+
+
+(51) Scan parquet
+Output [3]: [ws_sold_date_sk#1, ws_item_sk#2, ws_ext_sales_price#3]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(2) InputAdapter
+Input [3]: [ws_sold_date_sk#1, ws_item_sk#2, ws_ext_sales_price#3]
+Arguments: [#1, #2, #3]
+
+(3) NativeFilter
+Input [3]: [#1#1, #2#2, #3#3]
+Condition : (isnotnull(ws_item_sk#2) AND isnotnull(ws_sold_date_sk#1))
+
+(4) NativeShuffleExchange
+Input [3]: [#1#1, #2#2, #3#3]
+Arguments: hashpartitioning(ws_item_sk#2, 100), ENSURE_REQUIREMENTS, [plan_id=1]
+
+(5) ShuffleQueryStage
+Output [3]: [#1#1, #2#2, #3#3]
+Arguments: X
+
+(6) AQEShuffleRead
+Input [3]: [#1#1, #2#2, #3#3]
+Arguments: coalesced
+
+(7) InputAdapter
+Input [3]: [#1#1, #2#2, #3#3]
+
+(8) NativeSort
+Input [3]: [#1#1, #2#2, #3#3]
+Arguments: [ws_item_sk#2 ASC NULLS FIRST], false
+
+(55) Scan parquet
+Output [6]: [i_item_sk#4, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [In(i_category, [Books,Home,Sports]), IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(10) InputAdapter
+Input [6]: [i_item_sk#4, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Arguments: [#4, #5, #6, #7, #8, #9]
+
+(11) NativeFilter
+Input [6]: [#4#4, #5#5, #6#6, #7#7, #8#8, #9#9]
+Condition : (i_category#9 IN (Sports,Books,Home) AND isnotnull(i_item_sk#4))
+
+(12) NativeShuffleExchange
+Input [6]: [#4#4, #5#5, #6#6, #7#7, #8#8, #9#9]
+Arguments: hashpartitioning(i_item_sk#4, 100), ENSURE_REQUIREMENTS, [plan_id=2]
+
+(13) ShuffleQueryStage
+Output [6]: [#4#4, #5#5, #6#6, #7#7, #8#8, #9#9]
+Arguments: X
+
+(14) AQEShuffleRead
+Input [6]: [#4#4, #5#5, #6#6, #7#7, #8#8, #9#9]
+Arguments: coalesced
+
+(15) InputAdapter
+Input [6]: [#4#4, #5#5, #6#6, #7#7, #8#8, #9#9]
+
+(16) NativeSort
+Input [6]: [#4#4, #5#5, #6#6, #7#7, #8#8, #9#9]
+Arguments: [i_item_sk#4 ASC NULLS FIRST], false
+
+(17) NativeSortMergeJoin
+Left keys [1]: [ws_item_sk#2]
+Right keys [1]: [i_item_sk#4]
+Join type: Inner
+Join condition: None
+
+(18) NativeProject
+Output [7]: [ws_sold_date_sk#1, ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Input [9]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8, #9#9]
+
+(19) NativeShuffleExchange
+Input [7]: [ws_sold_date_sk#1, ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Arguments: hashpartitioning(ws_sold_date_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=3]
+
+(20) ShuffleQueryStage
+Output [7]: [ws_sold_date_sk#1, ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Arguments: X
+
+(21) AQEShuffleRead
+Input [7]: [ws_sold_date_sk#1, ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Arguments: coalesced
+
+(22) InputAdapter
+Input [7]: [ws_sold_date_sk#1, ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+
+(23) NativeSort
+Input [7]: [ws_sold_date_sk#1, ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Arguments: [ws_sold_date_sk#1 ASC NULLS FIRST], false
+
+(63) Scan parquet
+Output [2]: [d_date_sk#10, d_date#11]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(25) InputAdapter
+Input [2]: [d_date_sk#10, d_date#11]
+Arguments: [#10, #11]
+
+(26) NativeFilter
+Input [2]: [#10#10, #11#11]
+Condition : (((isnotnull(d_date#11) AND (d_date#11 >= 1999-02-22)) AND (d_date#11 <= 1999-03-24)) AND isnotnull(d_date_sk#10))
+
+(27) NativeProject
+Output [1]: [d_date_sk#10]
+Input [2]: [#10#10, #11#11]
+
+(28) NativeShuffleExchange
+Input [1]: [d_date_sk#10]
+Arguments: hashpartitioning(d_date_sk#10, 100), ENSURE_REQUIREMENTS, [plan_id=4]
+
+(29) ShuffleQueryStage
+Output [1]: [d_date_sk#10]
+Arguments: X
+
+(30) AQEShuffleRead
+Input [1]: [d_date_sk#10]
+Arguments: coalesced
+
+(31) InputAdapter
+Input [1]: [d_date_sk#10]
+
+(32) NativeSort
+Input [1]: [d_date_sk#10]
+Arguments: [d_date_sk#10 ASC NULLS FIRST], false
+
+(33) NativeSortMergeJoin
+Left keys [1]: [ws_sold_date_sk#1]
+Right keys [1]: [d_date_sk#10]
+Join type: Inner
+Join condition: None
+
+(34) NativeProject
+Output [6]: [ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Input [8]: [ws_sold_date_sk#1, ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9, d_date_sk#10]
+
+(35) NativeProject
+Output [6]: [i_item_id#5 AS i_item_id#5, i_item_desc#6 AS i_item_desc#6, i_category#9 AS i_category#9, i_class#8 AS i_class#8, i_current_price#7 AS i_current_price#7, UnscaledValue(ws_ext_sales_price#3) AS _c5#12]
+Input [6]: [ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+
+(36) NativeHashAggregate
+Input [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, _c5#12]
+Keys [5]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7]
+Functions [1]: [partial_sum(_c5#12)]
+Aggregate Attributes [1]: [sum#13]
+Results [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, #14#14]
+
+(37) NativeShuffleExchange
+Input [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, #14#14]
+Arguments: hashpartitioning(i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, 100), ENSURE_REQUIREMENTS, [plan_id=5]
+
+(38) ShuffleQueryStage
+Output [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, #14#14]
+Arguments: X
+
+(39) AQEShuffleRead
+Input [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, #14#14]
+Arguments: coalesced
+
+(40) InputAdapter
+Input [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, #14#14]
+
+(41) NativeHashAggregate
+Input [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, #14#14]
+Keys [5]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7]
+Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#3))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#3))#15]
+Results [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, sum(UnscaledValue(ws_ext_sales_price#3))#15]
+
+(42) NativeProject
+Output [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#3))#15,17,2) AS itemrevenue#16, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#3))#15,17,2) AS _w0#17, i_item_id#5]
+Input [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, sum(UnscaledValue(ws_ext_sales_price#3))#15]
+
+(43) NativeShuffleExchange
+Input [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, _w0#17, i_item_id#5]
+Arguments: hashpartitioning(i_class#8, 100), ENSURE_REQUIREMENTS, [plan_id=6]
+
+(44) ShuffleQueryStage
+Output [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, _w0#17, i_item_id#5]
+Arguments: X
+
+(45) AQEShuffleRead
+Input [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, _w0#17, i_item_id#5]
+Arguments: coalesced
+
+(46) InputAdapter
+Input [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, _w0#17, i_item_id#5]
+
+(47) NativeSort
+Input [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, _w0#17, i_item_id#5]
+Arguments: [i_class#8 ASC NULLS FIRST], false
+
+(48) Window
+Input [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, _w0#17, i_item_id#5]
+Arguments: [sum(_w0#17) windowspecdefinition(i_class#8, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#8]
+
+(49) Project [codegen id : 1]
+Output [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, ((_w0#17 * 100) / _we0#18) AS revenueratio#19, i_item_id#5]
+Input [8]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, _w0#17, i_item_id#5, _we0#18]
+
+(50) TakeOrderedAndProject
+Input [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, revenueratio#19, i_item_id#5]
+Arguments: X, [i_category#9 ASC NULLS FIRST, i_class#8 ASC NULLS FIRST, i_item_id#5 ASC NULLS FIRST, i_item_desc#6 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, revenueratio#19]
+
+(51) Scan parquet
+Output [3]: [ws_sold_date_sk#1, ws_item_sk#2, ws_ext_sales_price#3]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(52) Filter
+Input [3]: [ws_sold_date_sk#1, ws_item_sk#2, ws_ext_sales_price#3]
+Condition : (isnotnull(ws_item_sk#2) AND isnotnull(ws_sold_date_sk#1))
+
+(53) Exchange
+Input [3]: [ws_sold_date_sk#1, ws_item_sk#2, ws_ext_sales_price#3]
+Arguments: hashpartitioning(ws_item_sk#2, 100), ENSURE_REQUIREMENTS, [plan_id=7]
+
+(54) Sort
+Input [3]: [ws_sold_date_sk#1, ws_item_sk#2, ws_ext_sales_price#3]
+Arguments: [ws_item_sk#2 ASC NULLS FIRST], false, 0
+
+(55) Scan parquet
+Output [6]: [i_item_sk#4, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [In(i_category, [Books,Home,Sports]), IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(56) Filter
+Input [6]: [i_item_sk#4, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Condition : (i_category#9 IN (Sports,Books,Home) AND isnotnull(i_item_sk#4))
+
+(57) Exchange
+Input [6]: [i_item_sk#4, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Arguments: hashpartitioning(i_item_sk#4, 100), ENSURE_REQUIREMENTS, [plan_id=8]
+
+(58) Sort
+Input [6]: [i_item_sk#4, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Arguments: [i_item_sk#4 ASC NULLS FIRST], false, 0
+
+(59) SortMergeJoin
+Left keys [1]: [ws_item_sk#2]
+Right keys [1]: [i_item_sk#4]
+Join type: Inner
+Join condition: None
+
+(60) Project
+Output [7]: [ws_sold_date_sk#1, ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Input [9]: [ws_sold_date_sk#1, ws_item_sk#2, ws_ext_sales_price#3, i_item_sk#4, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+
+(61) Exchange
+Input [7]: [ws_sold_date_sk#1, ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Arguments: hashpartitioning(ws_sold_date_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=9]
+
+(62) Sort
+Input [7]: [ws_sold_date_sk#1, ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Arguments: [ws_sold_date_sk#1 ASC NULLS FIRST], false, 0
+
+(63) Scan parquet
+Output [2]: [d_date_sk#10, d_date#11]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(64) Filter
+Input [2]: [d_date_sk#10, d_date#11]
+Condition : (((isnotnull(d_date#11) AND (d_date#11 >= 1999-02-22)) AND (d_date#11 <= 1999-03-24)) AND isnotnull(d_date_sk#10))
+
+(65) Project
+Output [1]: [d_date_sk#10]
+Input [2]: [d_date_sk#10, d_date#11]
+
+(66) Exchange
+Input [1]: [d_date_sk#10]
+Arguments: hashpartitioning(d_date_sk#10, 100), ENSURE_REQUIREMENTS, [plan_id=10]
+
+(67) Sort
+Input [1]: [d_date_sk#10]
+Arguments: [d_date_sk#10 ASC NULLS FIRST], false, 0
+
+(68) SortMergeJoin
+Left keys [1]: [ws_sold_date_sk#1]
+Right keys [1]: [d_date_sk#10]
+Join type: Inner
+Join condition: None
+
+(69) Project
+Output [6]: [ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Input [8]: [ws_sold_date_sk#1, ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9, d_date_sk#10]
+
+(70) HashAggregate
+Input [6]: [ws_ext_sales_price#3, i_item_id#5, i_item_desc#6, i_current_price#7, i_class#8, i_category#9]
+Keys [5]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7]
+Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#3))]
+Aggregate Attributes [1]: [sum#13]
+Results [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, sum#20]
+
+(71) Exchange
+Input [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, sum#20]
+Arguments: hashpartitioning(i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, 100), ENSURE_REQUIREMENTS, [plan_id=11]
+
+(72) HashAggregate
+Input [6]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7, sum#20]
+Keys [5]: [i_item_id#5, i_item_desc#6, i_category#9, i_class#8, i_current_price#7]
+Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#3))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#3))#15]
+Results [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#3))#15,17,2) AS itemrevenue#16, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#3))#15,17,2) AS _w0#17, i_item_id#5]
+
+(73) Exchange
+Input [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, _w0#17, i_item_id#5]
+Arguments: hashpartitioning(i_class#8, 100), ENSURE_REQUIREMENTS, [plan_id=12]
+
+(74) Sort
+Input [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, _w0#17, i_item_id#5]
+Arguments: [i_class#8 ASC NULLS FIRST], false, 0
+
+(75) Window
+Input [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, _w0#17, i_item_id#5]
+Arguments: [sum(_w0#17) windowspecdefinition(i_class#8, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#8]
+
+(76) Project
+Output [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, ((_w0#17 * 100) / _we0#18) AS revenueratio#19, i_item_id#5]
+Input [8]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, _w0#17, i_item_id#5, _we0#18]
+
+(77) TakeOrderedAndProject
+Input [7]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, revenueratio#19, i_item_id#5]
+Arguments: X, [i_category#9 ASC NULLS FIRST, i_class#8 ASC NULLS FIRST, i_item_id#5 ASC NULLS FIRST, i_item_desc#6 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, revenueratio#19]
+
+(78) AdaptiveSparkPlan
+Output [6]: [i_item_desc#6, i_category#9, i_class#8, i_current_price#7, itemrevenue#16, revenueratio#19]
+Arguments: isFinalPlan=true
+
diff --git a/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q13.txt b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q13.txt
new file mode 100644
index 000000000..a952eab95
--- /dev/null
+++ b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q13.txt
@@ -0,0 +1,731 @@
+== Physical Plan ==
+AdaptiveSparkPlan (134)
++- == Final Plan ==
+ * HashAggregate (86)
+ +- ShuffleQueryStage (85), Statistics(X)
+ +- Exchange (84)
+ +- * HashAggregate (83)
+ +- * Project (82)
+ +- * SortMergeJoin Inner (81)
+ :- NativeSort (72)
+ : +- InputAdapter (71)
+ : +- AQEShuffleRead (70)
+ : +- ShuffleQueryStage (69), Statistics(X)
+ : +- NativeShuffleExchange (68)
+ : +- ConvertToNative (67)
+ : +- * Project (66)
+ : +- * SortMergeJoin Inner (65)
+ : :- NativeSort (56)
+ : : +- InputAdapter (55)
+ : : +- AQEShuffleRead (54)
+ : : +- ShuffleQueryStage (53), Statistics(X)
+ : : +- NativeShuffleExchange (52)
+ : : +- NativeProject (51)
+ : : +- NativeSortMergeJoin Inner (50)
+ : : :- NativeSort (40)
+ : : : +- InputAdapter (39)
+ : : : +- AQEShuffleRead (38)
+ : : : +- ShuffleQueryStage (37), Statistics(X)
+ : : : +- NativeShuffleExchange (36)
+ : : : +- ConvertToNative (35)
+ : : : +- * Project (34)
+ : : : +- * SortMergeJoin Inner (33)
+ : : : :- NativeSort (23)
+ : : : : +- InputAdapter (22)
+ : : : : +- AQEShuffleRead (21)
+ : : : : +- ShuffleQueryStage (20), Statistics(X)
+ : : : : +- NativeShuffleExchange (19)
+ : : : : +- NativeProject (18)
+ : : : : +- NativeSortMergeJoin Inner (17)
+ : : : : :- NativeSort (8)
+ : : : : : +- InputAdapter (7)
+ : : : : : +- AQEShuffleRead (6)
+ : : : : : +- ShuffleQueryStage (5), Statistics(X)
+ : : : : : +- NativeShuffleExchange (4)
+ : : : : : +- NativeFilter (3)
+ : : : : : +- InputAdapter (2)
+ : : : : : +- NativeParquetScan (1)
+ : : : : +- NativeSort (16)
+ : : : : +- InputAdapter (15)
+ : : : : +- AQEShuffleRead (14)
+ : : : : +- ShuffleQueryStage (13), Statistics(X)
+ : : : : +- NativeShuffleExchange (12)
+ : : : : +- NativeFilter (11)
+ : : : : +- InputAdapter (10)
+ : : : : +- NativeParquetScan (9)
+ : : : +- NativeSort (32)
+ : : : +- InputAdapter (31)
+ : : : +- AQEShuffleRead (30)
+ : : : +- ShuffleQueryStage (29), Statistics(X)
+ : : : +- NativeShuffleExchange (28)
+ : : : +- NativeProject (27)
+ : : : +- NativeFilter (26)
+ : : : +- InputAdapter (25)
+ : : : +- NativeParquetScan (24)
+ : : +- NativeSort (49)
+ : : +- InputAdapter (48)
+ : : +- AQEShuffleRead (47)
+ : : +- ShuffleQueryStage (46), Statistics(X)
+ : : +- NativeShuffleExchange (45)
+ : : +- NativeProject (44)
+ : : +- NativeFilter (43)
+ : : +- InputAdapter (42)
+ : : +- NativeParquetScan (41)
+ : +- NativeSort (64)
+ : +- InputAdapter (63)
+ : +- AQEShuffleRead (62)
+ : +- ShuffleQueryStage (61), Statistics(X)
+ : +- NativeShuffleExchange (60)
+ : +- NativeFilter (59)
+ : +- InputAdapter (58)
+ : +- NativeParquetScan (57)
+ +- NativeSort (80)
+ +- InputAdapter (79)
+ +- AQEShuffleRead (78)
+ +- ShuffleQueryStage (77), Statistics(X)
+ +- NativeShuffleExchange (76)
+ +- NativeFilter (75)
+ +- InputAdapter (74)
+ +- NativeParquetScan (73)
++- == Initial Plan ==
+ HashAggregate (133)
+ +- Exchange (132)
+ +- HashAggregate (131)
+ +- Project (130)
+ +- SortMergeJoin Inner (129)
+ :- Sort (124)
+ : +- Exchange (123)
+ : +- Project (122)
+ : +- SortMergeJoin Inner (121)
+ : :- Sort (116)
+ : : +- Exchange (115)
+ : : +- Project (114)
+ : : +- SortMergeJoin Inner (113)
+ : : :- Sort (107)
+ : : : +- Exchange (106)
+ : : : +- Project (105)
+ : : : +- SortMergeJoin Inner (104)
+ : : : :- Sort (98)
+ : : : : +- Exchange (97)
+ : : : : +- Project (96)
+ : : : : +- SortMergeJoin Inner (95)
+ : : : : :- Sort (90)
+ : : : : : +- Exchange (89)
+ : : : : : +- Filter (88)
+ : : : : : +- Scan parquet (87)
+ : : : : +- Sort (94)
+ : : : : +- Exchange (93)
+ : : : : +- Filter (92)
+ : : : : +- Scan parquet (91)
+ : : : +- Sort (103)
+ : : : +- Exchange (102)
+ : : : +- Project (101)
+ : : : +- Filter (100)
+ : : : +- Scan parquet (99)
+ : : +- Sort (112)
+ : : +- Exchange (111)
+ : : +- Project (110)
+ : : +- Filter (109)
+ : : +- Scan parquet (108)
+ : +- Sort (120)
+ : +- Exchange (119)
+ : +- Filter (118)
+ : +- Scan parquet (117)
+ +- Sort (128)
+ +- Exchange (127)
+ +- Filter (126)
+ +- Scan parquet (125)
+
+
+(87) Scan parquet
+Output [10]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_addr_sk), IsNotNull(ss_sold_date_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_hdemo_sk), Or(Or(And(GreaterThanOrEqual(ss_net_profit,100.00),LessThanOrEqual(ss_net_profit,200.00)),And(GreaterThanOrEqual(ss_net_profit,150.00),LessThanOrEqual(ss_net_profit,300.00))),And(GreaterThanOrEqual(ss_net_profit,50.00),LessThanOrEqual(ss_net_profit,250.00))), Or(Or(And(GreaterThanOrEqual(ss_sales_price,100.00),LessThanOrEqual(ss_sales_price,150.00)),And(GreaterThanOrEqual(ss_sales_price,50.00),LessThanOrEqual(ss_sales_price,100.00))),And(GreaterThanOrEqual(ss_sales_price,150.00),LessThanOrEqual(ss_sales_price,200.00)))]
+ReadSchema: struct
+
+(2) InputAdapter
+Input [10]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Arguments: [#1, #2, #3, #4, #5, #6, #7, #8, #9, #10]
+
+(3) NativeFilter
+Input [10]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8, #9#9, #10#10]
+Condition : ((((((isnotnull(ss_store_sk#5) AND isnotnull(ss_addr_sk#4)) AND isnotnull(ss_sold_date_sk#1)) AND isnotnull(ss_cdemo_sk#2)) AND isnotnull(ss_hdemo_sk#3)) AND ((((ss_net_profit#10 >= 100.00) AND (ss_net_profit#10 <= 200.00)) OR ((ss_net_profit#10 >= 150.00) AND (ss_net_profit#10 <= 300.00))) OR ((ss_net_profit#10 >= 50.00) AND (ss_net_profit#10 <= 250.00)))) AND ((((ss_sales_price#7 >= 100.00) AND (ss_sales_price#7 <= 150.00)) OR ((ss_sales_price#7 >= 50.00) AND (ss_sales_price#7 <= 100.00))) OR ((ss_sales_price#7 >= 150.00) AND (ss_sales_price#7 <= 200.00))))
+
+(4) NativeShuffleExchange
+Input [10]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8, #9#9, #10#10]
+Arguments: hashpartitioning(ss_store_sk#5, 100), ENSURE_REQUIREMENTS, [plan_id=1]
+
+(5) ShuffleQueryStage
+Output [10]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8, #9#9, #10#10]
+Arguments: X
+
+(6) AQEShuffleRead
+Input [10]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8, #9#9, #10#10]
+Arguments: coalesced
+
+(7) InputAdapter
+Input [10]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8, #9#9, #10#10]
+
+(8) NativeSort
+Input [10]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8, #9#9, #10#10]
+Arguments: [ss_store_sk#5 ASC NULLS FIRST], false
+
+(91) Scan parquet
+Output [1]: [s_store_sk#11]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(s_store_sk)]
+ReadSchema: struct
+
+(10) InputAdapter
+Input [1]: [s_store_sk#11]
+Arguments: [#11]
+
+(11) NativeFilter
+Input [1]: [#11#11]
+Condition : isnotnull(s_store_sk#11)
+
+(12) NativeShuffleExchange
+Input [1]: [#11#11]
+Arguments: hashpartitioning(s_store_sk#11, 100), ENSURE_REQUIREMENTS, [plan_id=2]
+
+(13) ShuffleQueryStage
+Output [1]: [#11#11]
+Arguments: X
+
+(14) AQEShuffleRead
+Input [1]: [#11#11]
+Arguments: coalesced
+
+(15) InputAdapter
+Input [1]: [#11#11]
+
+(16) NativeSort
+Input [1]: [#11#11]
+Arguments: [s_store_sk#11 ASC NULLS FIRST], false
+
+(17) NativeSortMergeJoin
+Left keys [1]: [ss_store_sk#5]
+Right keys [1]: [s_store_sk#11]
+Join type: Inner
+Join condition: None
+
+(18) NativeProject
+Output [9]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Input [11]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8, #9#9, #10#10, #11#11]
+
+(19) NativeShuffleExchange
+Input [9]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Arguments: hashpartitioning(ss_addr_sk#4, 100), ENSURE_REQUIREMENTS, [plan_id=3]
+
+(20) ShuffleQueryStage
+Output [9]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Arguments: X
+
+(21) AQEShuffleRead
+Input [9]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Arguments: coalesced
+
+(22) InputAdapter
+Input [9]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+
+(23) NativeSort
+Input [9]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Arguments: [ss_addr_sk#4 ASC NULLS FIRST], false
+
+(99) Scan parquet
+Output [3]: [ca_address_sk#12, ca_state#13, ca_country#14]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [OH,TX]),In(ca_state, [KY,NM,OR])),In(ca_state, [MS,TX,VA]))]
+ReadSchema: struct
+
+(25) InputAdapter
+Input [3]: [ca_address_sk#12, ca_state#13, ca_country#14]
+Arguments: [#12, #13, #14]
+
+(26) NativeFilter
+Input [3]: [#12#12, #13#13, #14#14]
+Condition : (((isnotnull(ca_country#14) AND (ca_country#14 = United States)) AND isnotnull(ca_address_sk#12)) AND ((ca_state#13 IN (TX,OH) OR ca_state#13 IN (OR,NM,KY)) OR ca_state#13 IN (VA,TX,MS)))
+
+(27) NativeProject
+Output [2]: [ca_address_sk#12, ca_state#13]
+Input [3]: [#12#12, #13#13, #14#14]
+
+(28) NativeShuffleExchange
+Input [2]: [ca_address_sk#12, ca_state#13]
+Arguments: hashpartitioning(ca_address_sk#12, 100), ENSURE_REQUIREMENTS, [plan_id=4]
+
+(29) ShuffleQueryStage
+Output [2]: [ca_address_sk#12, ca_state#13]
+Arguments: X
+
+(30) AQEShuffleRead
+Input [2]: [ca_address_sk#12, ca_state#13]
+Arguments: coalesced
+
+(31) InputAdapter
+Input [2]: [ca_address_sk#12, ca_state#13]
+
+(32) NativeSort
+Input [2]: [ca_address_sk#12, ca_state#13]
+Arguments: [ca_address_sk#12 ASC NULLS FIRST], false
+
+(33) SortMergeJoin [codegen id : 1]
+Left keys [1]: [ss_addr_sk#4]
+Right keys [1]: [ca_address_sk#12]
+Join type: Inner
+Join condition: ((((ca_state#13 IN (TX,OH) AND (ss_net_profit#10 >= 100.00)) AND (ss_net_profit#10 <= 200.00)) OR ((ca_state#13 IN (OR,NM,KY) AND (ss_net_profit#10 >= 150.00)) AND (ss_net_profit#10 <= 300.00))) OR ((ca_state#13 IN (VA,TX,MS) AND (ss_net_profit#10 >= 50.00)) AND (ss_net_profit#10 <= 250.00)))
+
+(34) Project [codegen id : 1]
+Output [7]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Input [11]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10, ca_address_sk#12, ca_state#13]
+
+(35) ConvertToNative
+Input [7]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+
+(36) NativeShuffleExchange
+Input [7]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: hashpartitioning(ss_sold_date_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=5]
+
+(37) ShuffleQueryStage
+Output [7]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: X
+
+(38) AQEShuffleRead
+Input [7]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: coalesced
+
+(39) InputAdapter
+Input [7]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+
+(40) NativeSort
+Input [7]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: [ss_sold_date_sk#1 ASC NULLS FIRST], false
+
+(108) Scan parquet
+Output [2]: [d_date_sk#15, d_year#16]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(42) InputAdapter
+Input [2]: [d_date_sk#15, d_year#16]
+Arguments: [#15, #16]
+
+(43) NativeFilter
+Input [2]: [#15#15, #16#16]
+Condition : ((isnotnull(d_year#16) AND (d_year#16 = 2001)) AND isnotnull(d_date_sk#15))
+
+(44) NativeProject
+Output [1]: [d_date_sk#15]
+Input [2]: [#15#15, #16#16]
+
+(45) NativeShuffleExchange
+Input [1]: [d_date_sk#15]
+Arguments: hashpartitioning(d_date_sk#15, 100), ENSURE_REQUIREMENTS, [plan_id=6]
+
+(46) ShuffleQueryStage
+Output [1]: [d_date_sk#15]
+Arguments: X
+
+(47) AQEShuffleRead
+Input [1]: [d_date_sk#15]
+Arguments: coalesced
+
+(48) InputAdapter
+Input [1]: [d_date_sk#15]
+
+(49) NativeSort
+Input [1]: [d_date_sk#15]
+Arguments: [d_date_sk#15 ASC NULLS FIRST], false
+
+(50) NativeSortMergeJoin
+Left keys [1]: [ss_sold_date_sk#1]
+Right keys [1]: [d_date_sk#15]
+Join type: Inner
+Join condition: None
+
+(51) NativeProject
+Output [6]: [ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Input [8]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, d_date_sk#15]
+
+(52) NativeShuffleExchange
+Input [6]: [ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: hashpartitioning(ss_cdemo_sk#2, 100), ENSURE_REQUIREMENTS, [plan_id=7]
+
+(53) ShuffleQueryStage
+Output [6]: [ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: X
+
+(54) AQEShuffleRead
+Input [6]: [ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: coalesced
+
+(55) InputAdapter
+Input [6]: [ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+
+(56) NativeSort
+Input [6]: [ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: [ss_cdemo_sk#2 ASC NULLS FIRST], false
+
+(117) Scan parquet
+Output [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cd_demo_sk), Or(Or(And(EqualTo(cd_marital_status,M),EqualTo(cd_education_status,Advanced Degree)),And(EqualTo(cd_marital_status,S),EqualTo(cd_education_status,College))),And(EqualTo(cd_marital_status,W),EqualTo(cd_education_status,2 yr Degree)))]
+ReadSchema: struct
+
+(58) InputAdapter
+Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]
+Arguments: [#17, #18, #19]
+
+(59) NativeFilter
+Input [3]: [#17#17, #18#18, #19#19]
+Condition : (isnotnull(cd_demo_sk#17) AND ((((cd_marital_status#18 = M) AND (cd_education_status#19 = Advanced Degree)) OR ((cd_marital_status#18 = S) AND (cd_education_status#19 = College))) OR ((cd_marital_status#18 = W) AND (cd_education_status#19 = 2 yr Degree))))
+
+(60) NativeShuffleExchange
+Input [3]: [#17#17, #18#18, #19#19]
+Arguments: hashpartitioning(cd_demo_sk#17, 100), ENSURE_REQUIREMENTS, [plan_id=8]
+
+(61) ShuffleQueryStage
+Output [3]: [#17#17, #18#18, #19#19]
+Arguments: X
+
+(62) AQEShuffleRead
+Input [3]: [#17#17, #18#18, #19#19]
+Arguments: coalesced
+
+(63) InputAdapter
+Input [3]: [#17#17, #18#18, #19#19]
+
+(64) NativeSort
+Input [3]: [#17#17, #18#18, #19#19]
+Arguments: [cd_demo_sk#17 ASC NULLS FIRST], false
+
+(65) SortMergeJoin [codegen id : 2]
+Left keys [1]: [ss_cdemo_sk#2]
+Right keys [1]: [cd_demo_sk#17]
+Join type: Inner
+Join condition: ((((((cd_marital_status#18 = M) AND (cd_education_status#19 = Advanced Degree)) AND (ss_sales_price#7 >= 100.00)) AND (ss_sales_price#7 <= 150.00)) OR ((((cd_marital_status#18 = S) AND (cd_education_status#19 = College)) AND (ss_sales_price#7 >= 50.00)) AND (ss_sales_price#7 <= 100.00))) OR ((((cd_marital_status#18 = W) AND (cd_education_status#19 = 2 yr Degree)) AND (ss_sales_price#7 >= 150.00)) AND (ss_sales_price#7 <= 200.00)))
+
+(66) Project [codegen id : 2]
+Output [7]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19]
+Input [9]: [ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, #17#17, #18#18, #19#19]
+
+(67) ConvertToNative
+Input [7]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19]
+
+(68) NativeShuffleExchange
+Input [7]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19]
+Arguments: hashpartitioning(ss_hdemo_sk#3, 100), ENSURE_REQUIREMENTS, [plan_id=9]
+
+(69) ShuffleQueryStage
+Output [7]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19]
+Arguments: X
+
+(70) AQEShuffleRead
+Input [7]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19]
+Arguments: coalesced
+
+(71) InputAdapter
+Input [7]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19]
+
+(72) NativeSort
+Input [7]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19]
+Arguments: [ss_hdemo_sk#3 ASC NULLS FIRST], false
+
+(125) Scan parquet
+Output [2]: [hd_demo_sk#20, hd_dep_count#21]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(hd_demo_sk), Or(EqualTo(hd_dep_count,3),EqualTo(hd_dep_count,1))]
+ReadSchema: struct
+
+(74) InputAdapter
+Input [2]: [hd_demo_sk#20, hd_dep_count#21]
+Arguments: [#20, #21]
+
+(75) NativeFilter
+Input [2]: [#20#20, #21#21]
+Condition : (isnotnull(hd_demo_sk#20) AND ((hd_dep_count#21 = 3) OR (hd_dep_count#21 = 1)))
+
+(76) NativeShuffleExchange
+Input [2]: [#20#20, #21#21]
+Arguments: hashpartitioning(hd_demo_sk#20, 100), ENSURE_REQUIREMENTS, [plan_id=10]
+
+(77) ShuffleQueryStage
+Output [2]: [#20#20, #21#21]
+Arguments: X
+
+(78) AQEShuffleRead
+Input [2]: [#20#20, #21#21]
+Arguments: coalesced
+
+(79) InputAdapter
+Input [2]: [#20#20, #21#21]
+
+(80) NativeSort
+Input [2]: [#20#20, #21#21]
+Arguments: [hd_demo_sk#20 ASC NULLS FIRST], false
+
+(81) SortMergeJoin [codegen id : 3]
+Left keys [1]: [ss_hdemo_sk#3]
+Right keys [1]: [hd_demo_sk#20]
+Join type: Inner
+Join condition: (((((((cd_marital_status#18 = M) AND (cd_education_status#19 = Advanced Degree)) AND (ss_sales_price#7 >= 100.00)) AND (ss_sales_price#7 <= 150.00)) AND (hd_dep_count#21 = 3)) OR (((((cd_marital_status#18 = S) AND (cd_education_status#19 = College)) AND (ss_sales_price#7 >= 50.00)) AND (ss_sales_price#7 <= 100.00)) AND (hd_dep_count#21 = 1))) OR (((((cd_marital_status#18 = W) AND (cd_education_status#19 = 2 yr Degree)) AND (ss_sales_price#7 >= 150.00)) AND (ss_sales_price#7 <= 200.00)) AND (hd_dep_count#21 = 1)))
+
+(82) Project [codegen id : 3]
+Output [3]: [ss_quantity#6, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Input [9]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19, #20#20, #21#21]
+
+(83) HashAggregate [codegen id : 3]
+Input [3]: [ss_quantity#6, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Keys: []
+Functions [4]: [partial_avg(ss_quantity#6), partial_avg(UnscaledValue(ss_ext_sales_price#8)), partial_avg(UnscaledValue(ss_ext_wholesale_cost#9)), partial_sum(UnscaledValue(ss_ext_wholesale_cost#9))]
+Aggregate Attributes [7]: [sum#22, count#23, sum#24, count#25, sum#26, count#27, sum#28]
+Results [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35]
+
+(84) Exchange
+Input [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35]
+Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11]
+
+(85) ShuffleQueryStage
+Output [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35]
+Arguments: X
+
+(86) HashAggregate [codegen id : 4]
+Input [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35]
+Keys: []
+Functions [4]: [avg(ss_quantity#6), avg(UnscaledValue(ss_ext_sales_price#8)), avg(UnscaledValue(ss_ext_wholesale_cost#9)), sum(UnscaledValue(ss_ext_wholesale_cost#9))]
+Aggregate Attributes [4]: [avg(ss_quantity#6)#36, avg(UnscaledValue(ss_ext_sales_price#8))#37, avg(UnscaledValue(ss_ext_wholesale_cost#9))#38, sum(UnscaledValue(ss_ext_wholesale_cost#9))#39]
+Results [4]: [avg(ss_quantity#6)#36 AS avg(ss_quantity)#40, cast((avg(UnscaledValue(ss_ext_sales_price#8))#37 / 100.0) as decimal(11,6)) AS avg(ss_ext_sales_price)#41, cast((avg(UnscaledValue(ss_ext_wholesale_cost#9))#38 / 100.0) as decimal(11,6)) AS avg(ss_ext_wholesale_cost)#42, MakeDecimal(sum(UnscaledValue(ss_ext_wholesale_cost#9))#39,17,2) AS sum(ss_ext_wholesale_cost)#43]
+
+(87) Scan parquet
+Output [10]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_addr_sk), IsNotNull(ss_sold_date_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_hdemo_sk), Or(Or(And(GreaterThanOrEqual(ss_net_profit,100.00),LessThanOrEqual(ss_net_profit,200.00)),And(GreaterThanOrEqual(ss_net_profit,150.00),LessThanOrEqual(ss_net_profit,300.00))),And(GreaterThanOrEqual(ss_net_profit,50.00),LessThanOrEqual(ss_net_profit,250.00))), Or(Or(And(GreaterThanOrEqual(ss_sales_price,100.00),LessThanOrEqual(ss_sales_price,150.00)),And(GreaterThanOrEqual(ss_sales_price,50.00),LessThanOrEqual(ss_sales_price,100.00))),And(GreaterThanOrEqual(ss_sales_price,150.00),LessThanOrEqual(ss_sales_price,200.00)))]
+ReadSchema: struct
+
+(88) Filter
+Input [10]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Condition : ((((((isnotnull(ss_store_sk#5) AND isnotnull(ss_addr_sk#4)) AND isnotnull(ss_sold_date_sk#1)) AND isnotnull(ss_cdemo_sk#2)) AND isnotnull(ss_hdemo_sk#3)) AND ((((ss_net_profit#10 >= 100.00) AND (ss_net_profit#10 <= 200.00)) OR ((ss_net_profit#10 >= 150.00) AND (ss_net_profit#10 <= 300.00))) OR ((ss_net_profit#10 >= 50.00) AND (ss_net_profit#10 <= 250.00)))) AND ((((ss_sales_price#7 >= 100.00) AND (ss_sales_price#7 <= 150.00)) OR ((ss_sales_price#7 >= 50.00) AND (ss_sales_price#7 <= 100.00))) OR ((ss_sales_price#7 >= 150.00) AND (ss_sales_price#7 <= 200.00))))
+
+(89) Exchange
+Input [10]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Arguments: hashpartitioning(ss_store_sk#5, 100), ENSURE_REQUIREMENTS, [plan_id=12]
+
+(90) Sort
+Input [10]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Arguments: [ss_store_sk#5 ASC NULLS FIRST], false, 0
+
+(91) Scan parquet
+Output [1]: [s_store_sk#11]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(s_store_sk)]
+ReadSchema: struct
+
+(92) Filter
+Input [1]: [s_store_sk#11]
+Condition : isnotnull(s_store_sk#11)
+
+(93) Exchange
+Input [1]: [s_store_sk#11]
+Arguments: hashpartitioning(s_store_sk#11, 100), ENSURE_REQUIREMENTS, [plan_id=13]
+
+(94) Sort
+Input [1]: [s_store_sk#11]
+Arguments: [s_store_sk#11 ASC NULLS FIRST], false, 0
+
+(95) SortMergeJoin
+Left keys [1]: [ss_store_sk#5]
+Right keys [1]: [s_store_sk#11]
+Join type: Inner
+Join condition: None
+
+(96) Project
+Output [9]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Input [11]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10, s_store_sk#11]
+
+(97) Exchange
+Input [9]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Arguments: hashpartitioning(ss_addr_sk#4, 100), ENSURE_REQUIREMENTS, [plan_id=14]
+
+(98) Sort
+Input [9]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10]
+Arguments: [ss_addr_sk#4 ASC NULLS FIRST], false, 0
+
+(99) Scan parquet
+Output [3]: [ca_address_sk#12, ca_state#13, ca_country#14]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [OH,TX]),In(ca_state, [KY,NM,OR])),In(ca_state, [MS,TX,VA]))]
+ReadSchema: struct
+
+(100) Filter
+Input [3]: [ca_address_sk#12, ca_state#13, ca_country#14]
+Condition : (((isnotnull(ca_country#14) AND (ca_country#14 = United States)) AND isnotnull(ca_address_sk#12)) AND ((ca_state#13 IN (TX,OH) OR ca_state#13 IN (OR,NM,KY)) OR ca_state#13 IN (VA,TX,MS)))
+
+(101) Project
+Output [2]: [ca_address_sk#12, ca_state#13]
+Input [3]: [ca_address_sk#12, ca_state#13, ca_country#14]
+
+(102) Exchange
+Input [2]: [ca_address_sk#12, ca_state#13]
+Arguments: hashpartitioning(ca_address_sk#12, 100), ENSURE_REQUIREMENTS, [plan_id=15]
+
+(103) Sort
+Input [2]: [ca_address_sk#12, ca_state#13]
+Arguments: [ca_address_sk#12 ASC NULLS FIRST], false, 0
+
+(104) SortMergeJoin
+Left keys [1]: [ss_addr_sk#4]
+Right keys [1]: [ca_address_sk#12]
+Join type: Inner
+Join condition: ((((ca_state#13 IN (TX,OH) AND (ss_net_profit#10 >= 100.00)) AND (ss_net_profit#10 <= 200.00)) OR ((ca_state#13 IN (OR,NM,KY) AND (ss_net_profit#10 >= 150.00)) AND (ss_net_profit#10 <= 300.00))) OR ((ca_state#13 IN (VA,TX,MS) AND (ss_net_profit#10 >= 50.00)) AND (ss_net_profit#10 <= 250.00)))
+
+(105) Project
+Output [7]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Input [11]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, ss_net_profit#10, ca_address_sk#12, ca_state#13]
+
+(106) Exchange
+Input [7]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: hashpartitioning(ss_sold_date_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=16]
+
+(107) Sort
+Input [7]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: [ss_sold_date_sk#1 ASC NULLS FIRST], false, 0
+
+(108) Scan parquet
+Output [2]: [d_date_sk#15, d_year#16]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(109) Filter
+Input [2]: [d_date_sk#15, d_year#16]
+Condition : ((isnotnull(d_year#16) AND (d_year#16 = 2001)) AND isnotnull(d_date_sk#15))
+
+(110) Project
+Output [1]: [d_date_sk#15]
+Input [2]: [d_date_sk#15, d_year#16]
+
+(111) Exchange
+Input [1]: [d_date_sk#15]
+Arguments: hashpartitioning(d_date_sk#15, 100), ENSURE_REQUIREMENTS, [plan_id=17]
+
+(112) Sort
+Input [1]: [d_date_sk#15]
+Arguments: [d_date_sk#15 ASC NULLS FIRST], false, 0
+
+(113) SortMergeJoin
+Left keys [1]: [ss_sold_date_sk#1]
+Right keys [1]: [d_date_sk#15]
+Join type: Inner
+Join condition: None
+
+(114) Project
+Output [6]: [ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Input [8]: [ss_sold_date_sk#1, ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, d_date_sk#15]
+
+(115) Exchange
+Input [6]: [ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: hashpartitioning(ss_cdemo_sk#2, 100), ENSURE_REQUIREMENTS, [plan_id=18]
+
+(116) Sort
+Input [6]: [ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Arguments: [ss_cdemo_sk#2 ASC NULLS FIRST], false, 0
+
+(117) Scan parquet
+Output [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cd_demo_sk), Or(Or(And(EqualTo(cd_marital_status,M),EqualTo(cd_education_status,Advanced Degree)),And(EqualTo(cd_marital_status,S),EqualTo(cd_education_status,College))),And(EqualTo(cd_marital_status,W),EqualTo(cd_education_status,2 yr Degree)))]
+ReadSchema: struct
+
+(118) Filter
+Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]
+Condition : (isnotnull(cd_demo_sk#17) AND ((((cd_marital_status#18 = M) AND (cd_education_status#19 = Advanced Degree)) OR ((cd_marital_status#18 = S) AND (cd_education_status#19 = College))) OR ((cd_marital_status#18 = W) AND (cd_education_status#19 = 2 yr Degree))))
+
+(119) Exchange
+Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]
+Arguments: hashpartitioning(cd_demo_sk#17, 100), ENSURE_REQUIREMENTS, [plan_id=19]
+
+(120) Sort
+Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]
+Arguments: [cd_demo_sk#17 ASC NULLS FIRST], false, 0
+
+(121) SortMergeJoin
+Left keys [1]: [ss_cdemo_sk#2]
+Right keys [1]: [cd_demo_sk#17]
+Join type: Inner
+Join condition: ((((((cd_marital_status#18 = M) AND (cd_education_status#19 = Advanced Degree)) AND (ss_sales_price#7 >= 100.00)) AND (ss_sales_price#7 <= 150.00)) OR ((((cd_marital_status#18 = S) AND (cd_education_status#19 = College)) AND (ss_sales_price#7 >= 50.00)) AND (ss_sales_price#7 <= 100.00))) OR ((((cd_marital_status#18 = W) AND (cd_education_status#19 = 2 yr Degree)) AND (ss_sales_price#7 >= 150.00)) AND (ss_sales_price#7 <= 200.00)))
+
+(122) Project
+Output [7]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19]
+Input [9]: [ss_cdemo_sk#2, ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]
+
+(123) Exchange
+Input [7]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19]
+Arguments: hashpartitioning(ss_hdemo_sk#3, 100), ENSURE_REQUIREMENTS, [plan_id=20]
+
+(124) Sort
+Input [7]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19]
+Arguments: [ss_hdemo_sk#3 ASC NULLS FIRST], false, 0
+
+(125) Scan parquet
+Output [2]: [hd_demo_sk#20, hd_dep_count#21]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(hd_demo_sk), Or(EqualTo(hd_dep_count,3),EqualTo(hd_dep_count,1))]
+ReadSchema: struct
+
+(126) Filter
+Input [2]: [hd_demo_sk#20, hd_dep_count#21]
+Condition : (isnotnull(hd_demo_sk#20) AND ((hd_dep_count#21 = 3) OR (hd_dep_count#21 = 1)))
+
+(127) Exchange
+Input [2]: [hd_demo_sk#20, hd_dep_count#21]
+Arguments: hashpartitioning(hd_demo_sk#20, 100), ENSURE_REQUIREMENTS, [plan_id=21]
+
+(128) Sort
+Input [2]: [hd_demo_sk#20, hd_dep_count#21]
+Arguments: [hd_demo_sk#20 ASC NULLS FIRST], false, 0
+
+(129) SortMergeJoin
+Left keys [1]: [ss_hdemo_sk#3]
+Right keys [1]: [hd_demo_sk#20]
+Join type: Inner
+Join condition: (((((((cd_marital_status#18 = M) AND (cd_education_status#19 = Advanced Degree)) AND (ss_sales_price#7 >= 100.00)) AND (ss_sales_price#7 <= 150.00)) AND (hd_dep_count#21 = 3)) OR (((((cd_marital_status#18 = S) AND (cd_education_status#19 = College)) AND (ss_sales_price#7 >= 50.00)) AND (ss_sales_price#7 <= 100.00)) AND (hd_dep_count#21 = 1))) OR (((((cd_marital_status#18 = W) AND (cd_education_status#19 = 2 yr Degree)) AND (ss_sales_price#7 >= 150.00)) AND (ss_sales_price#7 <= 200.00)) AND (hd_dep_count#21 = 1)))
+
+(130) Project
+Output [3]: [ss_quantity#6, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Input [9]: [ss_hdemo_sk#3, ss_quantity#6, ss_sales_price#7, ss_ext_sales_price#8, ss_ext_wholesale_cost#9, cd_marital_status#18, cd_education_status#19, hd_demo_sk#20, hd_dep_count#21]
+
+(131) HashAggregate
+Input [3]: [ss_quantity#6, ss_ext_sales_price#8, ss_ext_wholesale_cost#9]
+Keys: []
+Functions [4]: [partial_avg(ss_quantity#6), partial_avg(UnscaledValue(ss_ext_sales_price#8)), partial_avg(UnscaledValue(ss_ext_wholesale_cost#9)), partial_sum(UnscaledValue(ss_ext_wholesale_cost#9))]
+Aggregate Attributes [7]: [sum#22, count#23, sum#24, count#25, sum#26, count#27, sum#28]
+Results [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35]
+
+(132) Exchange
+Input [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35]
+Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=22]
+
+(133) HashAggregate
+Input [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35]
+Keys: []
+Functions [4]: [avg(ss_quantity#6), avg(UnscaledValue(ss_ext_sales_price#8)), avg(UnscaledValue(ss_ext_wholesale_cost#9)), sum(UnscaledValue(ss_ext_wholesale_cost#9))]
+Aggregate Attributes [4]: [avg(ss_quantity#6)#36, avg(UnscaledValue(ss_ext_sales_price#8))#37, avg(UnscaledValue(ss_ext_wholesale_cost#9))#38, sum(UnscaledValue(ss_ext_wholesale_cost#9))#39]
+Results [4]: [avg(ss_quantity#6)#36 AS avg(ss_quantity)#40, cast((avg(UnscaledValue(ss_ext_sales_price#8))#37 / 100.0) as decimal(11,6)) AS avg(ss_ext_sales_price)#41, cast((avg(UnscaledValue(ss_ext_wholesale_cost#9))#38 / 100.0) as decimal(11,6)) AS avg(ss_ext_wholesale_cost)#42, MakeDecimal(sum(UnscaledValue(ss_ext_wholesale_cost#9))#39,17,2) AS sum(ss_ext_wholesale_cost)#43]
+
+(134) AdaptiveSparkPlan
+Output [4]: [avg(ss_quantity)#40, avg(ss_ext_sales_price)#41, avg(ss_ext_wholesale_cost)#42, sum(ss_ext_wholesale_cost)#43]
+Arguments: isFinalPlan=true
+
diff --git a/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q14a.txt b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q14a.txt
new file mode 100644
index 000000000..993561aa7
--- /dev/null
+++ b/dev/auron-it/src/main/resources/tpcds-plan-stability/spark-3.5/q14a.txt
@@ -0,0 +1,5343 @@
+== Physical Plan ==
+AdaptiveSparkPlan (874)
++- == Final Plan ==
+ NativeTakeOrdered (309)
+ +- NativeProject (308)
+ +- NativeHashAggregate (307)
+ +- InputAdapter (306)
+ +- AQEShuffleRead (305)
+ +- ShuffleQueryStage (304), Statistics(X)
+ +- NativeShuffleExchange (303)
+ +- NativeHashAggregate (302)
+ +- NativeExpand (301)
+ +- InputAdapter (300)
+ +- NativeUnion (299)
+ :- NativeProject (192)
+ : +- NativeFilter (191)
+ : +- NativeProject (190)
+ : +- NativeHashAggregate (189)
+ : +- InputAdapter (188)
+ : +- AQEShuffleRead (187)
+ : +- ShuffleQueryStage (186), Statistics(X)
+ : +- NativeShuffleExchange (185)
+ : +- NativeHashAggregate (184)
+ : +- NativeProject (183)
+ : +- NativeProject (182)
+ : +- NativeSortMergeJoin Inner (181)
+ : :- NativeSort (171)
+ : : +- InputAdapter (170)
+ : : +- AQEShuffleRead (169)
+ : : +- ShuffleQueryStage (168), Statistics(X)
+ : : +- NativeShuffleExchange (167)
+ : : +- NativeProject (166)
+ : : +- NativeSortMergeJoin Inner (165)
+ : : :- NativeSortMergeJoin LeftSemi (152)
+ : : : :- NativeSort (8)
+ : : : : +- InputAdapter (7)
+ : : : : +- AQEShuffleRead (6)
+ : : : : +- ShuffleQueryStage (5), Statistics(X)
+ : : : : +- NativeShuffleExchange (4)
+ : : : : +- NativeFilter (3)
+ : : : : +- InputAdapter (2)
+ : : : : +- NativeParquetScan (1)
+ : : : +- NativeSort (151)
+ : : : +- InputAdapter (150)
+ : : : +- AQEShuffleRead (149)
+ : : : +- ShuffleQueryStage (148), Statistics(X)
+ : : : +- NativeShuffleExchange (147)
+ : : : +- NativeProject (146)
+ : : : +- NativeSortMergeJoin Inner (145)
+ : : : :- NativeSort (16)
+ : : : : +- InputAdapter (15)
+ : : : : +- AQEShuffleRead (14)
+ : : : : +- ShuffleQueryStage (13), Statistics(X)
+ : : : : +- NativeShuffleExchange (12)
+ : : : : +- NativeFilter (11)
+ : : : : +- InputAdapter (10)
+ : : : : +- NativeParquetScan (9)
+ : : : +- NativeSort (144)
+ : : : +- InputAdapter (143)
+ : : : +- AQEShuffleRead (142)
+ : : : +- ShuffleQueryStage (141), Statistics(X)
+ : : : +- NativeShuffleExchange (140)
+ : : : +- NativeSortMergeJoin LeftSemi (139)
+ : : : :- NativeSort (104)
+ : : : : +- InputAdapter (103)
+ : : : : +- AQEShuffleRead (102)
+ : : : : +- ShuffleQueryStage (101), Statistics(X)
+ : : : : +- NativeShuffleExchange (100)
+ : : : : +- NativeProject (99)
+ : : : : +- NativeHashAggregate (98)
+ : : : : +- InputAdapter (97)
+ : : : : +- AQEShuffleRead (96)
+ : : : : +- ShuffleQueryStage (95), Statistics(X)
+ : : : : +- NativeShuffleExchange (94)
+ : : : : +- NativeHashAggregate (93)
+ : : : : +- NativeProject (92)
+ : : : : +- NativeSortMergeJoin Inner (91)
+ : : : : :- NativeSort (84)
+ : : : : : +- InputAdapter (83)
+ : : : : : +- AQEShuffleRead (82)
+ : : : : : +- ShuffleQueryStage (81), Statistics(X)
+ : : : : : +- NativeShuffleExchange (80)
+ : : : : : +- NativeProject (79)
+ : : : : : +- NativeSortMergeJoin Inner (78)
+ : : : : : :- NativeSort (24)
+ : : : : : : +- InputAdapter (23)
+ : : : : : : +- AQEShuffleRead (22)
+ : : : : : : +- ShuffleQueryStage (21), Statistics(X)
+ : : : : : : +- NativeShuffleExchange (20)
+ : : : : : : +- NativeFilter (19)
+ : : : : : : +- InputAdapter (18)
+ : : : : : : +- NativeParquetScan (17)
+ : : : : : +- NativeSort (77)
+ : : : : : +- InputAdapter (76)
+ : : : : : +- AQEShuffleRead (75)
+ : : : : : +- ShuffleQueryStage (74), Statistics(X)
+ : : : : : +- NativeShuffleExchange (73)
+ : : : : : +- NativeSortMergeJoin LeftSemi (72)
+ : : : : : :- NativeSort (32)
+ : : : : : : +- InputAdapter (31)
+ : : : : : : +- AQEShuffleRead (30)
+ : : : : : : +- ShuffleQueryStage (29), Statistics(X)
+ : : : : : : +- NativeShuffleExchange (28)
+ : : : : : : +- NativeFilter (27)
+ : : : : : : +- InputAdapter (26)
+ : : : : : : +- NativeParquetScan (25)
+ : : : : : +- NativeSort (71)
+ : : : : : +- InputAdapter (70)
+ : : : : : +- AQEShuffleRead (69)
+ : : : : : +- ShuffleQueryStage (68), Statistics(X)
+ : : : : : +- NativeShuffleExchange (67)
+ : : : : : +- NativeProject (66)
+ : : : : : +- NativeSortMergeJoin Inner (65)
+ : : : : : :- NativeSort (55)
+ : : : : : : +- InputAdapter (54)
+ : : : : : : +- AQEShuffleRead (53)
+ : : : : : : +- ShuffleQueryStage (52), Statistics(X)
+ : : : : : : +- NativeShuffleExchange (51)
+ : : : : : : +- NativeProject (50)
+ : : : : : : +- NativeSortMergeJoin Inner (49)
+ : : : : : : :- NativeSort (40)
+ : : : : : : : +- InputAdapter (39)
+ : : : : : : : +- AQEShuffleRead (38)
+ : : : : : : : +- ShuffleQueryStage (37), Statistics(X)
+ : : : : : : : +- NativeShuffleExchange (36)
+ : : : : : : : +- NativeFilter (35)
+ : : : : : : : +- InputAdapter (34)
+ : : : : : : : +- NativeParquetScan (33)
+ : : : : : : +- NativeSort (48)
+ : : : : : : +- InputAdapter (47)
+ : : : : : : +- AQEShuffleRead (46)
+ : : : : : : +- ShuffleQueryStage (45), Statistics(X)
+ : : : : : : +- NativeShuffleExchange (44)
+ : : : : : : +- NativeFilter (43)
+ : : : : : : +- InputAdapter (42)
+ : : : : : : +- NativeParquetScan (41)
+ : : : : : +- NativeSort (64)
+ : : : : : +- InputAdapter (63)
+ : : : : : +- AQEShuffleRead (62)
+ : : : : : +- ShuffleQueryStage (61), Statistics(X)
+ : : : : : +- NativeShuffleExchange (60)
+ : : : : : +- NativeProject (59)
+ : : : : : +- NativeFilter (58)
+ : : : : : +- InputAdapter (57)
+ : : : : : +- NativeParquetScan (56)
+ : : : : +- NativeSort (90)
+ : : : : +- InputAdapter (89)
+ : : : : +- InputAdapter (88)
+ : : : : +- AQEShuffleRead (87)
+ : : : : +- ShuffleQueryStage (86), Statistics(X)
+ : : : : +- ReusedExchange (85)
+ : : : +- NativeSort (138)
+ : : : +- InputAdapter (137)
+ : : : +- AQEShuffleRead (136)
+ : : : +- ShuffleQueryStage (135), Statistics(X)
+ : : : +- NativeShuffleExchange (134)
+ : : : +- NativeProject (133)
+ : : : +- NativeSortMergeJoin Inner (132)
+ : : : :- NativeSort (125)
+ : : : : +- InputAdapter (124)
+ : : : : +- AQEShuffleRead (123)
+ : : : : +- ShuffleQueryStage (122), Statistics(X)
+ : : : : +- NativeShuffleExchange (121)
+ : : : : +- NativeProject (120)
+ : : : : +- NativeSortMergeJoin Inner (119)
+ : : : : :- NativeSort (112)
+ : : : : : +- InputAdapter (111)
+ : : : : : +- AQEShuffleRead (110)
+ : : : : : +- ShuffleQueryStage (109), Statistics(X)
+ : : : : : +- NativeShuffleExchange (108)
+ : : : : : +- NativeFilter (107)
+ : : : : : +- InputAdapter (106)
+ : : : : : +- NativeParquetScan (105)
+ : : : : +- NativeSort (118)
+ : : : : +- InputAdapter (117)
+ : : : : +- InputAdapter (116)
+ : : : : +- AQEShuffleRead (115)
+ : : : : +- ShuffleQueryStage (114), Statistics(X)
+ : : : : +- ReusedExchange (113)
+ : : : +- NativeSort (131)
+ : : : +- InputAdapter (130)
+ : : : +- InputAdapter (129)
+ : : : +- AQEShuffleRead (128)
+ : : : +- ShuffleQueryStage (127), Statistics(X)
+ : : : +- ReusedExchange (126)
+ : : +- NativeSortMergeJoin LeftSemi (164)
+ : : :- NativeSort (158)
+ : : : +- InputAdapter (157)
+ : : : +- InputAdapter (156)
+ : : : +- AQEShuffleRead (155)
+ : : : +- ShuffleQueryStage (154), Statistics(X)
+ : : : +- ReusedExchange (153)
+ : : +- NativeSort (163)
+ : : +- InputAdapter (162)
+ : : +- AQEShuffleRead (161)
+ : : +- ShuffleQueryStage (160), Statistics(X)
+ : : +- ReusedExchange (159)
+ : +- NativeSort (180)
+ : +- InputAdapter (179)
+ : +- AQEShuffleRead (178)
+ : +- ShuffleQueryStage (177), Statistics(X)
+ : +- NativeShuffleExchange (176)
+ : +- NativeProject (175)
+ : +- NativeFilter (174)
+ : +- InputAdapter (173)
+ : +- NativeParquetScan (172)
+ :- NativeProject (245)
+ : +- NativeFilter (244)
+ : +- NativeProject (243)
+ : +- NativeHashAggregate (242)
+ : +- InputAdapter (241)
+ : +- AQEShuffleRead (240)
+ : +- ShuffleQueryStage (239), Statistics(X)
+ : +- NativeShuffleExchange (238)
+ : +- NativeHashAggregate (237)
+ : +- NativeProject (236)
+ : +- NativeProject (235)
+ : +- NativeSortMergeJoin Inner (234)
+ : :- NativeSort (227)
+ : : +- InputAdapter (226)
+ : : +- AQEShuffleRead (225)
+ : : +- ShuffleQueryStage (224), Statistics(X)
+ : : +- NativeShuffleExchange (223)
+ : : +- NativeProject (222)
+ : : +- NativeSortMergeJoin Inner (221)
+ : : :- NativeSortMergeJoin LeftSemi (207)
+ : : : :- NativeSort (200)
+ : : : : +- InputAdapter (199)
+ : : : : +- AQEShuffleRead (198)
+ : : : : +- ShuffleQueryStage (197), Statistics(X)
+ : : : : +- NativeShuffleExchange (196)
+ : : : : +- NativeFilter (195)
+ : : : : +- InputAdapter (194)
+ : : : : +- NativeParquetScan (193)
+ : : : +- NativeSort (206)
+ : : : +- InputAdapter (205)
+ : : : +- InputAdapter (204)
+ : : : +- AQEShuffleRead (203)
+ : : : +- ShuffleQueryStage (202), Statistics(X)
+ : : : +- ReusedExchange (201)
+ : : +- NativeSortMergeJoin LeftSemi (220)
+ : : :- NativeSort (213)
+ : : : +- InputAdapter (212)
+ : : : +- InputAdapter (211)
+ : : : +- AQEShuffleRead (210)
+ : : : +- ShuffleQueryStage (209), Statistics(X)
+ : : : +- ReusedExchange (208)
+ : : +- NativeSort (219)
+ : : +- InputAdapter (218)
+ : : +- InputAdapter (217)
+ : : +- AQEShuffleRead (216)
+ : : +- ShuffleQueryStage (215), Statistics(X)
+ : : +- ReusedExchange (214)
+ : +- NativeSort (233)
+ : +- InputAdapter (232)
+ : +- InputAdapter (231)
+ : +- AQEShuffleRead (230)
+ : +- ShuffleQueryStage (229), Statistics(X)
+ : +- ReusedExchange (228)
+ +- NativeProject (298)
+ +- NativeFilter (297)
+ +- NativeProject (296)
+ +- NativeHashAggregate (295)
+ +- InputAdapter (294)
+ +- AQEShuffleRead (293)
+ +- ShuffleQueryStage (292), Statistics(X)
+ +- NativeShuffleExchange (291)
+ +- NativeHashAggregate (290)
+ +- NativeProject (289)
+ +- NativeProject (288)
+ +- NativeSortMergeJoin Inner (287)
+ :- NativeSort (280)
+ : +- InputAdapter (279)
+ : +- AQEShuffleRead (278)
+ : +- ShuffleQueryStage (277), Statistics(X)
+ : +- NativeShuffleExchange (276)
+ : +- NativeProject (275)
+ : +- NativeSortMergeJoin Inner (274)
+ : :- NativeSortMergeJoin LeftSemi (260)
+ : : :- NativeSort (253)
+ : : : +- InputAdapter (252)
+ : : : +- AQEShuffleRead (251)
+ : : : +- ShuffleQueryStage (250), Statistics(X)
+ : : : +- NativeShuffleExchange (249)
+ : : : +- NativeFilter (248)
+ : : : +- InputAdapter (247)
+ : : : +- NativeParquetScan (246)
+ : : +- NativeSort (259)
+ : : +- InputAdapter (258)
+ : : +- InputAdapter (257)
+ : : +- AQEShuffleRead (256)
+ : : +- ShuffleQueryStage (255), Statistics(X)
+ : : +- ReusedExchange (254)
+ : +- NativeSortMergeJoin LeftSemi (273)
+ : :- NativeSort (266)
+ : : +- InputAdapter (265)
+ : : +- InputAdapter (264)
+ : : +- AQEShuffleRead (263)
+ : : +- ShuffleQueryStage (262), Statistics(X)
+ : : +- ReusedExchange (261)
+ : +- NativeSort (272)
+ : +- InputAdapter (271)
+ : +- InputAdapter (270)
+ : +- AQEShuffleRead (269)
+ : +- ShuffleQueryStage (268), Statistics(X)
+ : +- ReusedExchange (267)
+ +- NativeSort (286)
+ +- InputAdapter (285)
+ +- InputAdapter (284)
+ +- AQEShuffleRead (283)
+ +- ShuffleQueryStage (282), Statistics(X)
+ +- ReusedExchange (281)
++- == Initial Plan ==
+ TakeOrderedAndProject (873)
+ +- HashAggregate (872)
+ +- Exchange (871)
+ +- HashAggregate (870)
+ +- Expand (869)
+ +- Union (868)
+ :- Project (495)
+ : +- Filter (494)
+ : +- HashAggregate (493)
+ : +- Exchange (492)
+ : +- HashAggregate (491)
+ : +- Project (490)
+ : +- SortMergeJoin Inner (489)
+ : :- Sort (483)
+ : : +- Exchange (482)
+ : : +- Project (481)
+ : : +- SortMergeJoin Inner (480)
+ : : :- SortMergeJoin LeftSemi (394)
+ : : : :- Sort (313)
+ : : : : +- Exchange (312)
+ : : : : +- Filter (311)
+ : : : : +- Scan parquet (310)
+ : : : +- Sort (393)
+ : : : +- Exchange (392)
+ : : : +- Project (391)
+ : : : +- SortMergeJoin Inner (390)
+ : : : :- Sort (317)
+ : : : : +- Exchange (316)
+ : : : : +- Filter (315)
+ : : : : +- Scan parquet (314)
+ : : : +- Sort (389)
+ : : : +- Exchange (388)
+ : : : +- SortMergeJoin LeftSemi (387)
+ : : : :- Sort (365)
+ : : : : +- Exchange (364)
+ : : : : +- HashAggregate (363)
+ : : : : +- Exchange (362)
+ : : : : +- HashAggregate (361)
+ : : : : +- Project (360)
+ : : : : +- SortMergeJoin Inner (359)
+ : : : : :- Sort (353)
+ : : : : : +- Exchange (352)
+ : : : : : +- Project (351)
+ : : : : : +- SortMergeJoin Inner (350)
+ : : : : : :- Sort (321)
+ : : : : : : +- Exchange (320)
+ : : : : : : +- Filter (319)
+ : : : : : : +- Scan parquet (318)
+ : : : : : +- Sort (349)
+ : : : : : +- Exchange (348)
+ : : : : : +- SortMergeJoin LeftSemi (347)
+ : : : : : :- Sort (325)
+ : : : : : : +- Exchange (324)
+ : : : : : : +- Filter (323)
+ : : : : : : +- Scan parquet (322)
+ : : : : : +- Sort (346)
+ : : : : : +- Exchange (345)
+ : : : : : +- Project (344)
+ : : : : : +- SortMergeJoin Inner (343)
+ : : : : : :- Sort (337)
+ : : : : : : +- Exchange (336)
+ : : : : : : +- Project (335)
+ : : : : : : +- SortMergeJoin Inner (334)
+ : : : : : : :- Sort (329)
+ : : : : : : : +- Exchange (328)
+ : : : : : : : +- Filter (327)
+ : : : : : : : +- Scan parquet (326)
+ : : : : : : +- Sort (333)
+ : : : : : : +- Exchange (332)
+ : : : : : : +- Filter (331)
+ : : : : : : +- Scan parquet (330)
+ : : : : : +- Sort (342)
+ : : : : : +- Exchange (341)
+ : : : : : +- Project (340)
+ : : : : : +- Filter (339)
+ : : : : : +- Scan parquet (338)
+ : : : : +- Sort (358)
+ : : : : +- Exchange (357)
+ : : : : +- Project (356)
+ : : : : +- Filter (355)
+ : : : : +- Scan parquet (354)
+ : : : +- Sort (386)
+ : : : +- Exchange (385)
+ : : : +- Project (384)
+ : : : +- SortMergeJoin Inner (383)
+ : : : :- Sort (377)
+ : : : : +- Exchange (376)
+ : : : : +- Project (375)
+ : : : : +- SortMergeJoin Inner (374)
+ : : : : :- Sort (369)
+ : : : : : +- Exchange (368)
+ : : : : : +- Filter (367)
+ : : : : : +- Scan parquet (366)
+ : : : : +- Sort (373)
+ : : : : +- Exchange (372)
+ : : : : +- Filter (371)
+ : : : : +- Scan parquet (370)
+ : : : +- Sort (382)
+ : : : +- Exchange (381)
+ : : : +- Project (380)
+ : : : +- Filter (379)
+ : : : +- Scan parquet (378)
+ : : +- SortMergeJoin LeftSemi (479)
+ : : :- Sort (398)
+ : : : +- Exchange (397)
+ : : : +- Filter (396)
+ : : : +- Scan parquet (395)
+ : : +- Sort (478)
+ : : +- Exchange (477)
+ : : +- Project (476)
+ : : +- SortMergeJoin Inner (475)
+ : : :- Sort (402)
+ : : : +- Exchange (401)
+ : : : +- Filter (400)
+ : : : +- Scan parquet (399)
+ : : +- Sort (474)
+ : : +- Exchange (473)
+ : : +- SortMergeJoin LeftSemi (472)
+ : : :- Sort (450)
+ : : : +- Exchange (449)
+ : : : +- HashAggregate (448)
+ : : : +- Exchange (447)
+ : : : +- HashAggregate (446)
+ : : : +- Project (445)
+ : : : +- SortMergeJoin Inner (444)
+ : : : :- Sort (438)
+ : : : : +- Exchange (437)
+ : : : : +- Project (436)
+ : : : : +- SortMergeJoin Inner (435)
+ : : : : :- Sort (406)
+ : : : : : +- Exchange (405)
+ : : : : : +- Filter (404)
+ : : : : : +- Scan parquet (403)
+ : : : : +- Sort (434)
+ : : : : +- Exchange (433)
+ : : : : +- SortMergeJoin LeftSemi (432)
+ : : : : :- Sort (410)
+ : : : : : +- Exchange (409)
+ : : : : : +- Filter (408)
+ : : : : : +- Scan parquet (407)
+ : : : : +- Sort (431)
+ : : : : +- Exchange (430)
+ : : : : +- Project (429)
+ : : : : +- SortMergeJoin Inner (428)
+ : : : : :- Sort (422)
+ : : : : : +- Exchange (421)
+ : : : : : +- Project (420)
+ : : : : : +- SortMergeJoin Inner (419)
+ : : : : : :- Sort (414)
+ : : : : : : +- Exchange (413)
+ : : : : : : +- Filter (412)
+ : : : : : : +- Scan parquet (411)
+ : : : : : +- Sort (418)
+ : : : : : +- Exchange (417)
+ : : : : : +- Filter (416)
+ : : : : : +- Scan parquet (415)
+ : : : : +- Sort (427)
+ : : : : +- Exchange (426)
+ : : : : +- Project (425)
+ : : : : +- Filter (424)
+ : : : : +- Scan parquet (423)
+ : : : +- Sort (443)
+ : : : +- Exchange (442)
+ : : : +- Project (441)
+ : : : +- Filter (440)
+ : : : +- Scan parquet (439)
+ : : +- Sort (471)
+ : : +- Exchange (470)
+ : : +- Project (469)
+ : : +- SortMergeJoin Inner (468)
+ : : :- Sort (462)
+ : : : +- Exchange (461)
+ : : : +- Project (460)
+ : : : +- SortMergeJoin Inner (459)
+ : : : :- Sort (454)
+ : : : : +- Exchange (453)
+ : : : : +- Filter (452)
+ : : : : +- Scan parquet (451)
+ : : : +- Sort (458)
+ : : : +- Exchange (457)
+ : : : +- Filter (456)
+ : : : +- Scan parquet (455)
+ : : +- Sort (467)
+ : : +- Exchange (466)
+ : : +- Project (465)
+ : : +- Filter (464)
+ : : +- Scan parquet (463)
+ : +- Sort (488)
+ : +- Exchange (487)
+ : +- Project (486)
+ : +- Filter (485)
+ : +- Scan parquet (484)
+ :- Project (681)
+ : +- Filter (680)
+ : +- HashAggregate (679)
+ : +- Exchange (678)
+ : +- HashAggregate (677)
+ : +- Project (676)
+ : +- SortMergeJoin Inner (675)
+ : :- Sort (669)
+ : : +- Exchange (668)
+ : : +- Project (667)
+ : : +- SortMergeJoin Inner (666)
+ : : :- SortMergeJoin LeftSemi (580)
+ : : : :- Sort (499)
+ : : : : +- Exchange (498)
+ : : : : +- Filter (497)
+ : : : : +- Scan parquet (496)
+ : : : +- Sort (579)
+ : : : +- Exchange (578)
+ : : : +- Project (577)
+ : : : +- SortMergeJoin Inner (576)
+ : : : :- Sort (503)
+ : : : : +- Exchange (502)
+ : : : : +- Filter (501)
+ : : : : +- Scan parquet (500)
+ : : : +- Sort (575)
+ : : : +- Exchange (574)
+ : : : +- SortMergeJoin LeftSemi (573)
+ : : : :- Sort (551)
+ : : : : +- Exchange (550)
+ : : : : +- HashAggregate (549)
+ : : : : +- Exchange (548)
+ : : : : +- HashAggregate (547)
+ : : : : +- Project (546)
+ : : : : +- SortMergeJoin Inner (545)
+ : : : : :- Sort (539)
+ : : : : : +- Exchange (538)
+ : : : : : +- Project (537)
+ : : : : : +- SortMergeJoin Inner (536)
+ : : : : : :- Sort (507)
+ : : : : : : +- Exchange (506)
+ : : : : : : +- Filter (505)
+ : : : : : : +- Scan parquet (504)
+ : : : : : +- Sort (535)
+ : : : : : +- Exchange (534)
+ : : : : : +- SortMergeJoin LeftSemi (533)
+ : : : : : :- Sort (511)
+ : : : : : : +- Exchange (510)
+ : : : : : : +- Filter (509)
+ : : : : : : +- Scan parquet (508)
+ : : : : : +- Sort (532)
+ : : : : : +- Exchange (531)
+ : : : : : +- Project (530)
+ : : : : : +- SortMergeJoin Inner (529)
+ : : : : : :- Sort (523)
+ : : : : : : +- Exchange (522)
+ : : : : : : +- Project (521)
+ : : : : : : +- SortMergeJoin Inner (520)
+ : : : : : : :- Sort (515)
+ : : : : : : : +- Exchange (514)
+ : : : : : : : +- Filter (513)
+ : : : : : : : +- Scan parquet (512)
+ : : : : : : +- Sort (519)
+ : : : : : : +- Exchange (518)
+ : : : : : : +- Filter (517)
+ : : : : : : +- Scan parquet (516)
+ : : : : : +- Sort (528)
+ : : : : : +- Exchange (527)
+ : : : : : +- Project (526)
+ : : : : : +- Filter (525)
+ : : : : : +- Scan parquet (524)
+ : : : : +- Sort (544)
+ : : : : +- Exchange (543)
+ : : : : +- Project (542)
+ : : : : +- Filter (541)
+ : : : : +- Scan parquet (540)
+ : : : +- Sort (572)
+ : : : +- Exchange (571)
+ : : : +- Project (570)
+ : : : +- SortMergeJoin Inner (569)
+ : : : :- Sort (563)
+ : : : : +- Exchange (562)
+ : : : : +- Project (561)
+ : : : : +- SortMergeJoin Inner (560)
+ : : : : :- Sort (555)
+ : : : : : +- Exchange (554)
+ : : : : : +- Filter (553)
+ : : : : : +- Scan parquet (552)
+ : : : : +- Sort (559)
+ : : : : +- Exchange (558)
+ : : : : +- Filter (557)
+ : : : : +- Scan parquet (556)
+ : : : +- Sort (568)
+ : : : +- Exchange (567)
+ : : : +- Project (566)
+ : : : +- Filter (565)
+ : : : +- Scan parquet (564)
+ : : +- SortMergeJoin LeftSemi (665)
+ : : :- Sort (584)
+ : : : +- Exchange (583)
+ : : : +- Filter (582)
+ : : : +- Scan parquet (581)
+ : : +- Sort (664)
+ : : +- Exchange (663)
+ : : +- Project (662)
+ : : +- SortMergeJoin Inner (661)
+ : : :- Sort (588)
+ : : : +- Exchange (587)
+ : : : +- Filter (586)
+ : : : +- Scan parquet (585)
+ : : +- Sort (660)
+ : : +- Exchange (659)
+ : : +- SortMergeJoin LeftSemi (658)
+ : : :- Sort (636)
+ : : : +- Exchange (635)
+ : : : +- HashAggregate (634)
+ : : : +- Exchange (633)
+ : : : +- HashAggregate (632)
+ : : : +- Project (631)
+ : : : +- SortMergeJoin Inner (630)
+ : : : :- Sort (624)
+ : : : : +- Exchange (623)
+ : : : : +- Project (622)
+ : : : : +- SortMergeJoin Inner (621)
+ : : : : :- Sort (592)
+ : : : : : +- Exchange (591)
+ : : : : : +- Filter (590)
+ : : : : : +- Scan parquet (589)
+ : : : : +- Sort (620)
+ : : : : +- Exchange (619)
+ : : : : +- SortMergeJoin LeftSemi (618)
+ : : : : :- Sort (596)
+ : : : : : +- Exchange (595)
+ : : : : : +- Filter (594)
+ : : : : : +- Scan parquet (593)
+ : : : : +- Sort (617)
+ : : : : +- Exchange (616)
+ : : : : +- Project (615)
+ : : : : +- SortMergeJoin Inner (614)
+ : : : : :- Sort (608)
+ : : : : : +- Exchange (607)
+ : : : : : +- Project (606)
+ : : : : : +- SortMergeJoin Inner (605)
+ : : : : : :- Sort (600)
+ : : : : : : +- Exchange (599)
+ : : : : : : +- Filter (598)
+ : : : : : : +- Scan parquet (597)
+ : : : : : +- Sort (604)
+ : : : : : +- Exchange (603)
+ : : : : : +- Filter (602)
+ : : : : : +- Scan parquet (601)
+ : : : : +- Sort (613)
+ : : : : +- Exchange (612)
+ : : : : +- Project (611)
+ : : : : +- Filter (610)
+ : : : : +- Scan parquet (609)
+ : : : +- Sort (629)
+ : : : +- Exchange (628)
+ : : : +- Project (627)
+ : : : +- Filter (626)
+ : : : +- Scan parquet (625)
+ : : +- Sort (657)
+ : : +- Exchange (656)
+ : : +- Project (655)
+ : : +- SortMergeJoin Inner (654)
+ : : :- Sort (648)
+ : : : +- Exchange (647)
+ : : : +- Project (646)
+ : : : +- SortMergeJoin Inner (645)
+ : : : :- Sort (640)
+ : : : : +- Exchange (639)
+ : : : : +- Filter (638)
+ : : : : +- Scan parquet (637)
+ : : : +- Sort (644)
+ : : : +- Exchange (643)
+ : : : +- Filter (642)
+ : : : +- Scan parquet (641)
+ : : +- Sort (653)
+ : : +- Exchange (652)
+ : : +- Project (651)
+ : : +- Filter (650)
+ : : +- Scan parquet (649)
+ : +- Sort (674)
+ : +- Exchange (673)
+ : +- Project (672)
+ : +- Filter (671)
+ : +- Scan parquet (670)
+ +- Project (867)
+ +- Filter (866)
+ +- HashAggregate (865)
+ +- Exchange (864)
+ +- HashAggregate (863)
+ +- Project (862)
+ +- SortMergeJoin Inner (861)
+ :- Sort (855)
+ : +- Exchange (854)
+ : +- Project (853)
+ : +- SortMergeJoin Inner (852)
+ : :- SortMergeJoin LeftSemi (766)
+ : : :- Sort (685)
+ : : : +- Exchange (684)
+ : : : +- Filter (683)
+ : : : +- Scan parquet (682)
+ : : +- Sort (765)
+ : : +- Exchange (764)
+ : : +- Project (763)
+ : : +- SortMergeJoin Inner (762)
+ : : :- Sort (689)
+ : : : +- Exchange (688)
+ : : : +- Filter (687)
+ : : : +- Scan parquet (686)
+ : : +- Sort (761)
+ : : +- Exchange (760)
+ : : +- SortMergeJoin LeftSemi (759)
+ : : :- Sort (737)
+ : : : +- Exchange (736)
+ : : : +- HashAggregate (735)
+ : : : +- Exchange (734)
+ : : : +- HashAggregate (733)
+ : : : +- Project (732)
+ : : : +- SortMergeJoin Inner (731)
+ : : : :- Sort (725)
+ : : : : +- Exchange (724)
+ : : : : +- Project (723)
+ : : : : +- SortMergeJoin Inner (722)
+ : : : : :- Sort (693)
+ : : : : : +- Exchange (692)
+ : : : : : +- Filter (691)
+ : : : : : +- Scan parquet (690)
+ : : : : +- Sort (721)
+ : : : : +- Exchange (720)
+ : : : : +- SortMergeJoin LeftSemi (719)
+ : : : : :- Sort (697)
+ : : : : : +- Exchange (696)
+ : : : : : +- Filter (695)
+ : : : : : +- Scan parquet (694)
+ : : : : +- Sort (718)
+ : : : : +- Exchange (717)
+ : : : : +- Project (716)
+ : : : : +- SortMergeJoin Inner (715)
+ : : : : :- Sort (709)
+ : : : : : +- Exchange (708)
+ : : : : : +- Project (707)
+ : : : : : +- SortMergeJoin Inner (706)
+ : : : : : :- Sort (701)
+ : : : : : : +- Exchange (700)
+ : : : : : : +- Filter (699)
+ : : : : : : +- Scan parquet (698)
+ : : : : : +- Sort (705)
+ : : : : : +- Exchange (704)
+ : : : : : +- Filter (703)
+ : : : : : +- Scan parquet (702)
+ : : : : +- Sort (714)
+ : : : : +- Exchange (713)
+ : : : : +- Project (712)
+ : : : : +- Filter (711)
+ : : : : +- Scan parquet (710)
+ : : : +- Sort (730)
+ : : : +- Exchange (729)
+ : : : +- Project (728)
+ : : : +- Filter (727)
+ : : : +- Scan parquet (726)
+ : : +- Sort (758)
+ : : +- Exchange (757)
+ : : +- Project (756)
+ : : +- SortMergeJoin Inner (755)
+ : : :- Sort (749)
+ : : : +- Exchange (748)
+ : : : +- Project (747)
+ : : : +- SortMergeJoin Inner (746)
+ : : : :- Sort (741)
+ : : : : +- Exchange (740)
+ : : : : +- Filter (739)
+ : : : : +- Scan parquet (738)
+ : : : +- Sort (745)
+ : : : +- Exchange (744)
+ : : : +- Filter (743)
+ : : : +- Scan parquet (742)
+ : : +- Sort (754)
+ : : +- Exchange (753)
+ : : +- Project (752)
+ : : +- Filter (751)
+ : : +- Scan parquet (750)
+ : +- SortMergeJoin LeftSemi (851)
+ : :- Sort (770)
+ : : +- Exchange (769)
+ : : +- Filter (768)
+ : : +- Scan parquet (767)
+ : +- Sort (850)
+ : +- Exchange (849)
+ : +- Project (848)
+ : +- SortMergeJoin Inner (847)
+ : :- Sort (774)
+ : : +- Exchange (773)
+ : : +- Filter (772)
+ : : +- Scan parquet (771)
+ : +- Sort (846)
+ : +- Exchange (845)
+ : +- SortMergeJoin LeftSemi (844)
+ : :- Sort (822)
+ : : +- Exchange (821)
+ : : +- HashAggregate (820)
+ : : +- Exchange (819)
+ : : +- HashAggregate (818)
+ : : +- Project (817)
+ : : +- SortMergeJoin Inner (816)
+ : : :- Sort (810)
+ : : : +- Exchange (809)
+ : : : +- Project (808)
+ : : : +- SortMergeJoin Inner (807)
+ : : : :- Sort (778)
+ : : : : +- Exchange (777)
+ : : : : +- Filter (776)
+ : : : : +- Scan parquet (775)
+ : : : +- Sort (806)
+ : : : +- Exchange (805)
+ : : : +- SortMergeJoin LeftSemi (804)
+ : : : :- Sort (782)
+ : : : : +- Exchange (781)
+ : : : : +- Filter (780)
+ : : : : +- Scan parquet (779)
+ : : : +- Sort (803)
+ : : : +- Exchange (802)
+ : : : +- Project (801)
+ : : : +- SortMergeJoin Inner (800)
+ : : : :- Sort (794)
+ : : : : +- Exchange (793)
+ : : : : +- Project (792)
+ : : : : +- SortMergeJoin Inner (791)
+ : : : : :- Sort (786)
+ : : : : : +- Exchange (785)
+ : : : : : +- Filter (784)
+ : : : : : +- Scan parquet (783)
+ : : : : +- Sort (790)
+ : : : : +- Exchange (789)
+ : : : : +- Filter (788)
+ : : : : +- Scan parquet (787)
+ : : : +- Sort (799)
+ : : : +- Exchange (798)
+ : : : +- Project (797)
+ : : : +- Filter (796)
+ : : : +- Scan parquet (795)
+ : : +- Sort (815)
+ : : +- Exchange (814)
+ : : +- Project (813)
+ : : +- Filter (812)
+ : : +- Scan parquet (811)
+ : +- Sort (843)
+ : +- Exchange (842)
+ : +- Project (841)
+ : +- SortMergeJoin Inner (840)
+ : :- Sort (834)
+ : : +- Exchange (833)
+ : : +- Project (832)
+ : : +- SortMergeJoin Inner (831)
+ : : :- Sort (826)
+ : : : +- Exchange (825)
+ : : : +- Filter (824)
+ : : : +- Scan parquet (823)
+ : : +- Sort (830)
+ : : +- Exchange (829)
+ : : +- Filter (828)
+ : : +- Scan parquet (827)
+ : +- Sort (839)
+ : +- Exchange (838)
+ : +- Project (837)
+ : +- Filter (836)
+ : +- Scan parquet (835)
+ +- Sort (860)
+ +- Exchange (859)
+ +- Project (858)
+ +- Filter (857)
+ +- Scan parquet (856)
+
+
+(310) Scan parquet
+Output [4]: [ss_sold_date_sk#1, ss_item_sk#2, ss_quantity#3, ss_list_price#4]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(2) InputAdapter
+Input [4]: [ss_sold_date_sk#1, ss_item_sk#2, ss_quantity#3, ss_list_price#4]
+Arguments: [#1, #2, #3, #4]
+
+(3) NativeFilter
+Input [4]: [#1#1, #2#2, #3#3, #4#4]
+Condition : (isnotnull(ss_item_sk#2) AND isnotnull(ss_sold_date_sk#1))
+
+(4) NativeShuffleExchange
+Input [4]: [#1#1, #2#2, #3#3, #4#4]
+Arguments: hashpartitioning(ss_item_sk#2, 100), ENSURE_REQUIREMENTS, [plan_id=1]
+
+(5) ShuffleQueryStage
+Output [4]: [#1#1, #2#2, #3#3, #4#4]
+Arguments: X
+
+(6) AQEShuffleRead
+Input [4]: [#1#1, #2#2, #3#3, #4#4]
+Arguments: coalesced
+
+(7) InputAdapter
+Input [4]: [#1#1, #2#2, #3#3, #4#4]
+
+(8) NativeSort
+Input [4]: [#1#1, #2#2, #3#3, #4#4]
+Arguments: [ss_item_sk#2 ASC NULLS FIRST], false
+
+(314) Scan parquet
+Output [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(10) InputAdapter
+Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8]
+Arguments: [#5, #6, #7, #8]
+
+(11) NativeFilter
+Input [4]: [#5#5, #6#6, #7#7, #8#8]
+Condition : ((isnotnull(i_brand_id#6) AND isnotnull(i_class_id#7)) AND isnotnull(i_category_id#8))
+
+(12) NativeShuffleExchange
+Input [4]: [#5#5, #6#6, #7#7, #8#8]
+Arguments: hashpartitioning(i_brand_id#6, i_class_id#7, i_category_id#8, 100), ENSURE_REQUIREMENTS, [plan_id=2]
+
+(13) ShuffleQueryStage
+Output [4]: [#5#5, #6#6, #7#7, #8#8]
+Arguments: X
+
+(14) AQEShuffleRead
+Input [4]: [#5#5, #6#6, #7#7, #8#8]
+Arguments: coalesced
+
+(15) InputAdapter
+Input [4]: [#5#5, #6#6, #7#7, #8#8]
+
+(16) NativeSort
+Input [4]: [#5#5, #6#6, #7#7, #8#8]
+Arguments: [i_brand_id#6 ASC NULLS FIRST, i_class_id#7 ASC NULLS FIRST, i_category_id#8 ASC NULLS FIRST], false
+
+(318) Scan parquet
+Output [2]: [ss_sold_date_sk#9, ss_item_sk#10]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(18) InputAdapter
+Input [2]: [ss_sold_date_sk#9, ss_item_sk#10]
+Arguments: [#9, #10]
+
+(19) NativeFilter
+Input [2]: [#9#9, #10#10]
+Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_sold_date_sk#9))
+
+(20) NativeShuffleExchange
+Input [2]: [#9#9, #10#10]
+Arguments: hashpartitioning(ss_item_sk#10, 100), ENSURE_REQUIREMENTS, [plan_id=3]
+
+(21) ShuffleQueryStage
+Output [2]: [#9#9, #10#10]
+Arguments: X
+
+(22) AQEShuffleRead
+Input [2]: [#9#9, #10#10]
+Arguments: coalesced
+
+(23) InputAdapter
+Input [2]: [#9#9, #10#10]
+
+(24) NativeSort
+Input [2]: [#9#9, #10#10]
+Arguments: [ss_item_sk#10 ASC NULLS FIRST], false
+
+(322) Scan parquet
+Output [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(26) InputAdapter
+Input [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: [#11, #12, #13, #14]
+
+(27) NativeFilter
+Input [4]: [#11#11, #12#12, #13#13, #14#14]
+Condition : (((isnotnull(i_item_sk#11) AND isnotnull(i_brand_id#12)) AND isnotnull(i_class_id#13)) AND isnotnull(i_category_id#14))
+
+(28) NativeShuffleExchange
+Input [4]: [#11#11, #12#12, #13#13, #14#14]
+Arguments: hashpartitioning(coalesce(i_brand_id#12, 0), isnull(i_brand_id#12), coalesce(i_class_id#13, 0), isnull(i_class_id#13), coalesce(i_category_id#14, 0), isnull(i_category_id#14), 100), ENSURE_REQUIREMENTS, [plan_id=4]
+
+(29) ShuffleQueryStage
+Output [4]: [#11#11, #12#12, #13#13, #14#14]
+Arguments: X
+
+(30) AQEShuffleRead
+Input [4]: [#11#11, #12#12, #13#13, #14#14]
+Arguments: coalesced
+
+(31) InputAdapter
+Input [4]: [#11#11, #12#12, #13#13, #14#14]
+
+(32) NativeSort
+Input [4]: [#11#11, #12#12, #13#13, #14#14]
+Arguments: [coalesce(i_brand_id#12, 0) ASC NULLS FIRST, isnull(i_brand_id#12) ASC NULLS FIRST, coalesce(i_class_id#13, 0) ASC NULLS FIRST, isnull(i_class_id#13) ASC NULLS FIRST, coalesce(i_category_id#14, 0) ASC NULLS FIRST, isnull(i_category_id#14) ASC NULLS FIRST], false
+
+(326) Scan parquet
+Output [2]: [cs_sold_date_sk#15, cs_item_sk#16]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_sold_date_sk)]
+ReadSchema: struct
+
+(34) InputAdapter
+Input [2]: [cs_sold_date_sk#15, cs_item_sk#16]
+Arguments: [#15, #16]
+
+(35) NativeFilter
+Input [2]: [#15#15, #16#16]
+Condition : (isnotnull(cs_item_sk#16) AND isnotnull(cs_sold_date_sk#15))
+
+(36) NativeShuffleExchange
+Input [2]: [#15#15, #16#16]
+Arguments: hashpartitioning(cs_item_sk#16, 100), ENSURE_REQUIREMENTS, [plan_id=5]
+
+(37) ShuffleQueryStage
+Output [2]: [#15#15, #16#16]
+Arguments: X
+
+(38) AQEShuffleRead
+Input [2]: [#15#15, #16#16]
+Arguments: coalesced
+
+(39) InputAdapter
+Input [2]: [#15#15, #16#16]
+
+(40) NativeSort
+Input [2]: [#15#15, #16#16]
+Arguments: [cs_item_sk#16 ASC NULLS FIRST], false
+
+(330) Scan parquet
+Output [4]: [i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(42) InputAdapter
+Input [4]: [i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: [#17, #18, #19, #20]
+
+(43) NativeFilter
+Input [4]: [#17#17, #18#18, #19#19, #20#20]
+Condition : isnotnull(i_item_sk#17)
+
+(44) NativeShuffleExchange
+Input [4]: [#17#17, #18#18, #19#19, #20#20]
+Arguments: hashpartitioning(i_item_sk#17, 100), ENSURE_REQUIREMENTS, [plan_id=6]
+
+(45) ShuffleQueryStage
+Output [4]: [#17#17, #18#18, #19#19, #20#20]
+Arguments: X
+
+(46) AQEShuffleRead
+Input [4]: [#17#17, #18#18, #19#19, #20#20]
+Arguments: coalesced
+
+(47) InputAdapter
+Input [4]: [#17#17, #18#18, #19#19, #20#20]
+
+(48) NativeSort
+Input [4]: [#17#17, #18#18, #19#19, #20#20]
+Arguments: [i_item_sk#17 ASC NULLS FIRST], false
+
+(49) NativeSortMergeJoin
+Left keys [1]: [cs_item_sk#16]
+Right keys [1]: [i_item_sk#17]
+Join type: Inner
+Join condition: None
+
+(50) NativeProject
+Output [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+Input [6]: [#15#15, #16#16, #17#17, #18#18, #19#19, #20#20]
+
+(51) NativeShuffleExchange
+Input [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: hashpartitioning(cs_sold_date_sk#15, 100), ENSURE_REQUIREMENTS, [plan_id=7]
+
+(52) ShuffleQueryStage
+Output [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: X
+
+(53) AQEShuffleRead
+Input [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: coalesced
+
+(54) InputAdapter
+Input [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+
+(55) NativeSort
+Input [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: [cs_sold_date_sk#15 ASC NULLS FIRST], false
+
+(338) Scan parquet
+Output [2]: [d_date_sk#21, d_year#22]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(57) InputAdapter
+Input [2]: [d_date_sk#21, d_year#22]
+Arguments: [#21, #22]
+
+(58) NativeFilter
+Input [2]: [#21#21, #22#22]
+Condition : (((isnotnull(d_year#22) AND (d_year#22 >= 1999)) AND (d_year#22 <= 2001)) AND isnotnull(d_date_sk#21))
+
+(59) NativeProject
+Output [1]: [d_date_sk#21]
+Input [2]: [#21#21, #22#22]
+
+(60) NativeShuffleExchange
+Input [1]: [d_date_sk#21]
+Arguments: hashpartitioning(d_date_sk#21, 100), ENSURE_REQUIREMENTS, [plan_id=8]
+
+(61) ShuffleQueryStage
+Output [1]: [d_date_sk#21]
+Arguments: X
+
+(62) AQEShuffleRead
+Input [1]: [d_date_sk#21]
+Arguments: coalesced
+
+(63) InputAdapter
+Input [1]: [d_date_sk#21]
+
+(64) NativeSort
+Input [1]: [d_date_sk#21]
+Arguments: [d_date_sk#21 ASC NULLS FIRST], false
+
+(65) NativeSortMergeJoin
+Left keys [1]: [cs_sold_date_sk#15]
+Right keys [1]: [d_date_sk#21]
+Join type: Inner
+Join condition: None
+
+(66) NativeProject
+Output [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+Input [5]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20, d_date_sk#21]
+
+(67) NativeShuffleExchange
+Input [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: hashpartitioning(coalesce(i_brand_id#18, 0), isnull(i_brand_id#18), coalesce(i_class_id#19, 0), isnull(i_class_id#19), coalesce(i_category_id#20, 0), isnull(i_category_id#20), 100), ENSURE_REQUIREMENTS, [plan_id=9]
+
+(68) ShuffleQueryStage
+Output [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: X
+
+(69) AQEShuffleRead
+Input [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: coalesced
+
+(70) InputAdapter
+Input [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+
+(71) NativeSort
+Input [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: [coalesce(i_brand_id#18, 0) ASC NULLS FIRST, isnull(i_brand_id#18) ASC NULLS FIRST, coalesce(i_class_id#19, 0) ASC NULLS FIRST, isnull(i_class_id#19) ASC NULLS FIRST, coalesce(i_category_id#20, 0) ASC NULLS FIRST, isnull(i_category_id#20) ASC NULLS FIRST], false
+
+(72) NativeSortMergeJoin
+Left keys [6]: [coalesce(i_brand_id#12, 0), isnull(i_brand_id#12), coalesce(i_class_id#13, 0), isnull(i_class_id#13), coalesce(i_category_id#14, 0), isnull(i_category_id#14)]
+Right keys [6]: [coalesce(i_brand_id#18, 0), isnull(i_brand_id#18), coalesce(i_class_id#19, 0), isnull(i_class_id#19), coalesce(i_category_id#20, 0), isnull(i_category_id#20)]
+Join type: LeftSemi
+Join condition: None
+
+(73) NativeShuffleExchange
+Input [4]: [#11#11, #12#12, #13#13, #14#14]
+Arguments: hashpartitioning(i_item_sk#11, 100), ENSURE_REQUIREMENTS, [plan_id=10]
+
+(74) ShuffleQueryStage
+Output [4]: [#11#11, #12#12, #13#13, #14#14]
+Arguments: X
+
+(75) AQEShuffleRead
+Input [4]: [#11#11, #12#12, #13#13, #14#14]
+Arguments: coalesced
+
+(76) InputAdapter
+Input [4]: [#11#11, #12#12, #13#13, #14#14]
+
+(77) NativeSort
+Input [4]: [#11#11, #12#12, #13#13, #14#14]
+Arguments: [i_item_sk#11 ASC NULLS FIRST], false
+
+(78) NativeSortMergeJoin
+Left keys [1]: [ss_item_sk#10]
+Right keys [1]: [i_item_sk#11]
+Join type: Inner
+Join condition: None
+
+(79) NativeProject
+Output [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+Input [6]: [#9#9, #10#10, #11#11, #12#12, #13#13, #14#14]
+
+(80) NativeShuffleExchange
+Input [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: hashpartitioning(ss_sold_date_sk#9, 100), ENSURE_REQUIREMENTS, [plan_id=11]
+
+(81) ShuffleQueryStage
+Output [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: X
+
+(82) AQEShuffleRead
+Input [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: coalesced
+
+(83) InputAdapter
+Input [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+
+(84) NativeSort
+Input [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: [ss_sold_date_sk#9 ASC NULLS FIRST], false
+
+(85) ReusedExchange [Reuses operator id: 60]
+Output [1]: [d_date_sk#23]
+
+(86) ShuffleQueryStage
+Output [1]: [d_date_sk#23]
+Arguments: X
+
+(87) AQEShuffleRead
+Input [1]: [d_date_sk#23]
+Arguments: coalesced
+
+(88) InputAdapter
+Input [1]: [d_date_sk#23]
+Arguments: [#23]
+
+(89) InputAdapter
+Input [1]: [#23#23]
+
+(90) NativeSort
+Input [1]: [#23#23]
+Arguments: [d_date_sk#23 ASC NULLS FIRST], false
+
+(91) NativeSortMergeJoin
+Left keys [1]: [ss_sold_date_sk#9]
+Right keys [1]: [d_date_sk#23]
+Join type: Inner
+Join condition: None
+
+(92) NativeProject
+Output [3]: [i_brand_id#12 AS brand_id#24, i_class_id#13 AS class_id#25, i_category_id#14 AS category_id#26]
+Input [5]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14, #23#23]
+
+(93) NativeHashAggregate
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [4]: [brand_id#24, class_id#25, category_id#26, #27#27]
+
+(94) NativeShuffleExchange
+Input [4]: [brand_id#24, class_id#25, category_id#26, #27#27]
+Arguments: hashpartitioning(brand_id#24, class_id#25, category_id#26, 100), ENSURE_REQUIREMENTS, [plan_id=12]
+
+(95) ShuffleQueryStage
+Output [4]: [brand_id#24, class_id#25, category_id#26, #27#27]
+Arguments: X
+
+(96) AQEShuffleRead
+Input [4]: [brand_id#24, class_id#25, category_id#26, #27#27]
+Arguments: coalesced
+
+(97) InputAdapter
+Input [4]: [brand_id#24, class_id#25, category_id#26, #27#27]
+
+(98) NativeHashAggregate
+Input [4]: [brand_id#24, class_id#25, category_id#26, #27#27]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [4]: [brand_id#24, class_id#25, category_id#26, #27#27]
+
+(99) NativeProject
+Output [3]: [brand_id#24, class_id#25, category_id#26]
+Input [4]: [brand_id#24, class_id#25, category_id#26, #27#27]
+
+(100) NativeShuffleExchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(coalesce(brand_id#24, 0), isnull(brand_id#24), coalesce(class_id#25, 0), isnull(class_id#25), coalesce(category_id#26, 0), isnull(category_id#26), 100), ENSURE_REQUIREMENTS, [plan_id=13]
+
+(101) ShuffleQueryStage
+Output [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: X
+
+(102) AQEShuffleRead
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: coalesced
+
+(103) InputAdapter
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+
+(104) NativeSort
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: [coalesce(brand_id#24, 0) ASC NULLS FIRST, isnull(brand_id#24) ASC NULLS FIRST, coalesce(class_id#25, 0) ASC NULLS FIRST, isnull(class_id#25) ASC NULLS FIRST, coalesce(category_id#26, 0) ASC NULLS FIRST, isnull(category_id#26) ASC NULLS FIRST], false
+
+(366) Scan parquet
+Output [2]: [ws_sold_date_sk#28, ws_item_sk#29]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(106) InputAdapter
+Input [2]: [ws_sold_date_sk#28, ws_item_sk#29]
+Arguments: [#28, #29]
+
+(107) NativeFilter
+Input [2]: [#28#28, #29#29]
+Condition : (isnotnull(ws_item_sk#29) AND isnotnull(ws_sold_date_sk#28))
+
+(108) NativeShuffleExchange
+Input [2]: [#28#28, #29#29]
+Arguments: hashpartitioning(ws_item_sk#29, 100), ENSURE_REQUIREMENTS, [plan_id=14]
+
+(109) ShuffleQueryStage
+Output [2]: [#28#28, #29#29]
+Arguments: X
+
+(110) AQEShuffleRead
+Input [2]: [#28#28, #29#29]
+Arguments: coalesced
+
+(111) InputAdapter
+Input [2]: [#28#28, #29#29]
+
+(112) NativeSort
+Input [2]: [#28#28, #29#29]
+Arguments: [ws_item_sk#29 ASC NULLS FIRST], false
+
+(113) ReusedExchange [Reuses operator id: 44]
+Output [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+
+(114) ShuffleQueryStage
+Output [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: X
+
+(115) AQEShuffleRead
+Input [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: coalesced
+
+(116) InputAdapter
+Input [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: [#30, #31, #32, #33]
+
+(117) InputAdapter
+Input [4]: [#30#30, #31#31, #32#32, #33#33]
+
+(118) NativeSort
+Input [4]: [#30#30, #31#31, #32#32, #33#33]
+Arguments: [i_item_sk#30 ASC NULLS FIRST], false
+
+(119) NativeSortMergeJoin
+Left keys [1]: [ws_item_sk#29]
+Right keys [1]: [i_item_sk#30]
+Join type: Inner
+Join condition: None
+
+(120) NativeProject
+Output [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+Input [6]: [#28#28, #29#29, #30#30, #31#31, #32#32, #33#33]
+
+(121) NativeShuffleExchange
+Input [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: hashpartitioning(ws_sold_date_sk#28, 100), ENSURE_REQUIREMENTS, [plan_id=15]
+
+(122) ShuffleQueryStage
+Output [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: X
+
+(123) AQEShuffleRead
+Input [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: coalesced
+
+(124) InputAdapter
+Input [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+
+(125) NativeSort
+Input [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: [ws_sold_date_sk#28 ASC NULLS FIRST], false
+
+(126) ReusedExchange [Reuses operator id: 60]
+Output [1]: [d_date_sk#34]
+
+(127) ShuffleQueryStage
+Output [1]: [d_date_sk#34]
+Arguments: X
+
+(128) AQEShuffleRead
+Input [1]: [d_date_sk#34]
+Arguments: coalesced
+
+(129) InputAdapter
+Input [1]: [d_date_sk#34]
+Arguments: [#34]
+
+(130) InputAdapter
+Input [1]: [#34#34]
+
+(131) NativeSort
+Input [1]: [#34#34]
+Arguments: [d_date_sk#34 ASC NULLS FIRST], false
+
+(132) NativeSortMergeJoin
+Left keys [1]: [ws_sold_date_sk#28]
+Right keys [1]: [d_date_sk#34]
+Join type: Inner
+Join condition: None
+
+(133) NativeProject
+Output [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+Input [5]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33, #34#34]
+
+(134) NativeShuffleExchange
+Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: hashpartitioning(coalesce(i_brand_id#31, 0), isnull(i_brand_id#31), coalesce(i_class_id#32, 0), isnull(i_class_id#32), coalesce(i_category_id#33, 0), isnull(i_category_id#33), 100), ENSURE_REQUIREMENTS, [plan_id=16]
+
+(135) ShuffleQueryStage
+Output [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: X
+
+(136) AQEShuffleRead
+Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: coalesced
+
+(137) InputAdapter
+Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+
+(138) NativeSort
+Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: [coalesce(i_brand_id#31, 0) ASC NULLS FIRST, isnull(i_brand_id#31) ASC NULLS FIRST, coalesce(i_class_id#32, 0) ASC NULLS FIRST, isnull(i_class_id#32) ASC NULLS FIRST, coalesce(i_category_id#33, 0) ASC NULLS FIRST, isnull(i_category_id#33) ASC NULLS FIRST], false
+
+(139) NativeSortMergeJoin
+Left keys [6]: [coalesce(brand_id#24, 0), isnull(brand_id#24), coalesce(class_id#25, 0), isnull(class_id#25), coalesce(category_id#26, 0), isnull(category_id#26)]
+Right keys [6]: [coalesce(i_brand_id#31, 0), isnull(i_brand_id#31), coalesce(i_class_id#32, 0), isnull(i_class_id#32), coalesce(i_category_id#33, 0), isnull(i_category_id#33)]
+Join type: LeftSemi
+Join condition: None
+
+(140) NativeShuffleExchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(brand_id#24, class_id#25, category_id#26, 100), ENSURE_REQUIREMENTS, [plan_id=17]
+
+(141) ShuffleQueryStage
+Output [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: X
+
+(142) AQEShuffleRead
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: coalesced
+
+(143) InputAdapter
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+
+(144) NativeSort
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: [brand_id#24 ASC NULLS FIRST, class_id#25 ASC NULLS FIRST, category_id#26 ASC NULLS FIRST], false
+
+(145) NativeSortMergeJoin
+Left keys [3]: [i_brand_id#6, i_class_id#7, i_category_id#8]
+Right keys [3]: [brand_id#24, class_id#25, category_id#26]
+Join type: Inner
+Join condition: None
+
+(146) NativeProject
+Output [1]: [i_item_sk#5 AS ss_item_sk#35]
+Input [7]: [#5#5, #6#6, #7#7, #8#8, brand_id#24, class_id#25, category_id#26]
+
+(147) NativeShuffleExchange
+Input [1]: [ss_item_sk#35]
+Arguments: hashpartitioning(ss_item_sk#35, 100), ENSURE_REQUIREMENTS, [plan_id=18]
+
+(148) ShuffleQueryStage
+Output [1]: [ss_item_sk#35]
+Arguments: X
+
+(149) AQEShuffleRead
+Input [1]: [ss_item_sk#35]
+Arguments: coalesced
+
+(150) InputAdapter
+Input [1]: [ss_item_sk#35]
+
+(151) NativeSort
+Input [1]: [ss_item_sk#35]
+Arguments: [ss_item_sk#35 ASC NULLS FIRST], false
+
+(152) NativeSortMergeJoin
+Left keys [1]: [ss_item_sk#2]
+Right keys [1]: [ss_item_sk#35]
+Join type: LeftSemi
+Join condition: None
+
+(153) ReusedExchange [Reuses operator id: 44]
+Output [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39]
+
+(154) ShuffleQueryStage
+Output [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39]
+Arguments: X
+
+(155) AQEShuffleRead
+Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39]
+Arguments: coalesced
+
+(156) InputAdapter
+Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39]
+Arguments: [#36, #37, #38, #39]
+
+(157) InputAdapter
+Input [4]: [#36#36, #37#37, #38#38, #39#39]
+
+(158) NativeSort
+Input [4]: [#36#36, #37#37, #38#38, #39#39]
+Arguments: [i_item_sk#36 ASC NULLS FIRST], false
+
+(159) ReusedExchange [Reuses operator id: 147]
+Output [1]: [ss_item_sk#35]
+
+(160) ShuffleQueryStage
+Output [1]: [ss_item_sk#35]
+Arguments: X
+
+(161) AQEShuffleRead
+Input [1]: [ss_item_sk#35]
+Arguments: coalesced
+
+(162) InputAdapter
+Input [1]: [ss_item_sk#35]
+
+(163) NativeSort
+Input [1]: [ss_item_sk#35]
+Arguments: [ss_item_sk#35 ASC NULLS FIRST], false
+
+(164) NativeSortMergeJoin
+Left keys [1]: [i_item_sk#36]
+Right keys [1]: [ss_item_sk#35]
+Join type: LeftSemi
+Join condition: None
+
+(165) NativeSortMergeJoin
+Left keys [1]: [ss_item_sk#2]
+Right keys [1]: [i_item_sk#36]
+Join type: Inner
+Join condition: None
+
+(166) NativeProject
+Output [6]: [ss_sold_date_sk#1, ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+Input [8]: [#1#1, #2#2, #3#3, #4#4, #36#36, #37#37, #38#38, #39#39]
+
+(167) NativeShuffleExchange
+Input [6]: [ss_sold_date_sk#1, ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+Arguments: hashpartitioning(ss_sold_date_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=19]
+
+(168) ShuffleQueryStage
+Output [6]: [ss_sold_date_sk#1, ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+Arguments: X
+
+(169) AQEShuffleRead
+Input [6]: [ss_sold_date_sk#1, ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+Arguments: coalesced
+
+(170) InputAdapter
+Input [6]: [ss_sold_date_sk#1, ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+
+(171) NativeSort
+Input [6]: [ss_sold_date_sk#1, ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+Arguments: [ss_sold_date_sk#1 ASC NULLS FIRST], false
+
+(484) Scan parquet
+Output [3]: [d_date_sk#40, d_year#41, d_moy#42]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,11), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(173) InputAdapter
+Input [3]: [d_date_sk#40, d_year#41, d_moy#42]
+Arguments: [#40, #41, #42]
+
+(174) NativeFilter
+Input [3]: [#40#40, #41#41, #42#42]
+Condition : ((((isnotnull(d_year#41) AND isnotnull(d_moy#42)) AND (d_year#41 = 2001)) AND (d_moy#42 = 11)) AND isnotnull(d_date_sk#40))
+
+(175) NativeProject
+Output [1]: [d_date_sk#40]
+Input [3]: [#40#40, #41#41, #42#42]
+
+(176) NativeShuffleExchange
+Input [1]: [d_date_sk#40]
+Arguments: hashpartitioning(d_date_sk#40, 100), ENSURE_REQUIREMENTS, [plan_id=20]
+
+(177) ShuffleQueryStage
+Output [1]: [d_date_sk#40]
+Arguments: X
+
+(178) AQEShuffleRead
+Input [1]: [d_date_sk#40]
+Arguments: coalesced
+
+(179) InputAdapter
+Input [1]: [d_date_sk#40]
+
+(180) NativeSort
+Input [1]: [d_date_sk#40]
+Arguments: [d_date_sk#40 ASC NULLS FIRST], false
+
+(181) NativeSortMergeJoin
+Left keys [1]: [ss_sold_date_sk#1]
+Right keys [1]: [d_date_sk#40]
+Join type: Inner
+Join condition: None
+
+(182) NativeProject
+Output [5]: [ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+Input [7]: [ss_sold_date_sk#1, ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39, d_date_sk#40]
+
+(183) NativeProject
+Output [4]: [i_brand_id#37 AS i_brand_id#37, i_class_id#38 AS i_class_id#38, i_category_id#39 AS i_category_id#39, (cast(ss_quantity#3 as decimal(10,0)) * ss_list_price#4) AS _c3#43]
+Input [5]: [ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+
+(184) NativeHashAggregate
+Input [4]: [i_brand_id#37, i_class_id#38, i_category_id#39, _c3#43]
+Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39]
+Functions [2]: [partial_sum(_c3#43), partial_count(1)]
+Aggregate Attributes [3]: [sum#44, isEmpty#45, count#46]
+Results [4]: [i_brand_id#37, i_class_id#38, i_category_id#39, #27#27]
+
+(185) NativeShuffleExchange
+Input [4]: [i_brand_id#37, i_class_id#38, i_category_id#39, #27#27]
+Arguments: hashpartitioning(i_brand_id#37, i_class_id#38, i_category_id#39, 100), ENSURE_REQUIREMENTS, [plan_id=21]
+
+(186) ShuffleQueryStage
+Output [4]: [i_brand_id#37, i_class_id#38, i_category_id#39, #27#27]
+Arguments: X
+
+(187) AQEShuffleRead
+Input [4]: [i_brand_id#37, i_class_id#38, i_category_id#39, #27#27]
+Arguments: coalesced
+
+(188) InputAdapter
+Input [4]: [i_brand_id#37, i_class_id#38, i_category_id#39, #27#27]
+
+(189) NativeHashAggregate
+Input [4]: [i_brand_id#37, i_class_id#38, i_category_id#39, #27#27]
+Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39]
+Functions [2]: [sum((cast(ss_quantity#3 as decimal(10,0)) * ss_list_price#4)), count(1)]
+Aggregate Attributes [2]: [sum((cast(ss_quantity#3 as decimal(10,0)) * ss_list_price#4))#47, count(1)#48]
+Results [5]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum((cast(ss_quantity#3 as decimal(10,0)) * ss_list_price#4))#47, count(1)#48]
+
+(190) NativeProject
+Output [5]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum((cast(ss_quantity#3 as decimal(10,0)) * ss_list_price#4))#47 AS sales#49, count(1)#48 AS number_sales#50]
+Input [5]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum((cast(ss_quantity#3 as decimal(10,0)) * ss_list_price#4))#47, count(1)#48]
+
+(191) NativeFilter
+Input [5]: [i_brand_id#37, i_class_id#38, i_category_id#39, sales#49, number_sales#50]
+Condition : (isnotnull(sales#49) AND (cast(sales#49 as decimal(32,6)) > cast(Subquery subquery#51, [id=#52] as decimal(32,6))))
+
+(192) NativeProject
+Output [6]: [sales#49, number_sales#50, store AS channel#53, i_brand_id#37 AS i_brand_id#54, i_class_id#38 AS i_class_id#55, i_category_id#39 AS i_category_id#56]
+Input [5]: [i_brand_id#37, i_class_id#38, i_category_id#39, sales#49, number_sales#50]
+
+(496) Scan parquet
+Output [4]: [cs_sold_date_sk#57, cs_item_sk#58, cs_quantity#59, cs_list_price#60]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_sold_date_sk)]
+ReadSchema: struct
+
+(194) InputAdapter
+Input [4]: [cs_sold_date_sk#57, cs_item_sk#58, cs_quantity#59, cs_list_price#60]
+Arguments: [#57, #58, #59, #60]
+
+(195) NativeFilter
+Input [4]: [#57#57, #58#58, #59#59, #60#60]
+Condition : (isnotnull(cs_item_sk#58) AND isnotnull(cs_sold_date_sk#57))
+
+(196) NativeShuffleExchange
+Input [4]: [#57#57, #58#58, #59#59, #60#60]
+Arguments: hashpartitioning(cs_item_sk#58, 100), ENSURE_REQUIREMENTS, [plan_id=22]
+
+(197) ShuffleQueryStage
+Output [4]: [#57#57, #58#58, #59#59, #60#60]
+Arguments: X
+
+(198) AQEShuffleRead
+Input [4]: [#57#57, #58#58, #59#59, #60#60]
+Arguments: coalesced
+
+(199) InputAdapter
+Input [4]: [#57#57, #58#58, #59#59, #60#60]
+
+(200) NativeSort
+Input [4]: [#57#57, #58#58, #59#59, #60#60]
+Arguments: [cs_item_sk#58 ASC NULLS FIRST], false
+
+(201) ReusedExchange [Reuses operator id: 147]
+Output [1]: [ss_item_sk#61]
+
+(202) ShuffleQueryStage
+Output [1]: [ss_item_sk#61]
+Arguments: X
+
+(203) AQEShuffleRead
+Input [1]: [ss_item_sk#61]
+Arguments: coalesced
+
+(204) InputAdapter
+Input [1]: [ss_item_sk#61]
+Arguments: [#61]
+
+(205) InputAdapter
+Input [1]: [#61#61]
+
+(206) NativeSort
+Input [1]: [#61#61]
+Arguments: [ss_item_sk#61 ASC NULLS FIRST], false
+
+(207) NativeSortMergeJoin
+Left keys [1]: [cs_item_sk#58]
+Right keys [1]: [ss_item_sk#61]
+Join type: LeftSemi
+Join condition: None
+
+(208) ReusedExchange [Reuses operator id: 44]
+Output [4]: [i_item_sk#62, i_brand_id#63, i_class_id#64, i_category_id#65]
+
+(209) ShuffleQueryStage
+Output [4]: [i_item_sk#62, i_brand_id#63, i_class_id#64, i_category_id#65]
+Arguments: X
+
+(210) AQEShuffleRead
+Input [4]: [i_item_sk#62, i_brand_id#63, i_class_id#64, i_category_id#65]
+Arguments: coalesced
+
+(211) InputAdapter
+Input [4]: [i_item_sk#62, i_brand_id#63, i_class_id#64, i_category_id#65]
+Arguments: [#62, #63, #64, #65]
+
+(212) InputAdapter
+Input [4]: [#62#62, #63#63, #64#64, #65#65]
+
+(213) NativeSort
+Input [4]: [#62#62, #63#63, #64#64, #65#65]
+Arguments: [i_item_sk#62 ASC NULLS FIRST], false
+
+(214) ReusedExchange [Reuses operator id: 147]
+Output [1]: [ss_item_sk#61]
+
+(215) ShuffleQueryStage
+Output [1]: [ss_item_sk#61]
+Arguments: X
+
+(216) AQEShuffleRead
+Input [1]: [ss_item_sk#61]
+Arguments: coalesced
+
+(217) InputAdapter
+Input [1]: [ss_item_sk#61]
+Arguments: [#61]
+
+(218) InputAdapter
+Input [1]: [#61#61]
+
+(219) NativeSort
+Input [1]: [#61#61]
+Arguments: [ss_item_sk#61 ASC NULLS FIRST], false
+
+(220) NativeSortMergeJoin
+Left keys [1]: [i_item_sk#62]
+Right keys [1]: [ss_item_sk#61]
+Join type: LeftSemi
+Join condition: None
+
+(221) NativeSortMergeJoin
+Left keys [1]: [cs_item_sk#58]
+Right keys [1]: [i_item_sk#62]
+Join type: Inner
+Join condition: None
+
+(222) NativeProject
+Output [6]: [cs_sold_date_sk#57, cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+Input [8]: [#57#57, #58#58, #59#59, #60#60, #62#62, #63#63, #64#64, #65#65]
+
+(223) NativeShuffleExchange
+Input [6]: [cs_sold_date_sk#57, cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+Arguments: hashpartitioning(cs_sold_date_sk#57, 100), ENSURE_REQUIREMENTS, [plan_id=23]
+
+(224) ShuffleQueryStage
+Output [6]: [cs_sold_date_sk#57, cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+Arguments: X
+
+(225) AQEShuffleRead
+Input [6]: [cs_sold_date_sk#57, cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+Arguments: coalesced
+
+(226) InputAdapter
+Input [6]: [cs_sold_date_sk#57, cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+
+(227) NativeSort
+Input [6]: [cs_sold_date_sk#57, cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+Arguments: [cs_sold_date_sk#57 ASC NULLS FIRST], false
+
+(228) ReusedExchange [Reuses operator id: 176]
+Output [1]: [d_date_sk#66]
+
+(229) ShuffleQueryStage
+Output [1]: [d_date_sk#66]
+Arguments: X
+
+(230) AQEShuffleRead
+Input [1]: [d_date_sk#66]
+Arguments: coalesced
+
+(231) InputAdapter
+Input [1]: [d_date_sk#66]
+Arguments: [#66]
+
+(232) InputAdapter
+Input [1]: [#66#66]
+
+(233) NativeSort
+Input [1]: [#66#66]
+Arguments: [d_date_sk#66 ASC NULLS FIRST], false
+
+(234) NativeSortMergeJoin
+Left keys [1]: [cs_sold_date_sk#57]
+Right keys [1]: [d_date_sk#66]
+Join type: Inner
+Join condition: None
+
+(235) NativeProject
+Output [5]: [cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+Input [7]: [cs_sold_date_sk#57, cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65, #66#66]
+
+(236) NativeProject
+Output [4]: [i_brand_id#63 AS i_brand_id#63, i_class_id#64 AS i_class_id#64, i_category_id#65 AS i_category_id#65, (cast(cs_quantity#59 as decimal(10,0)) * cs_list_price#60) AS _c3#67]
+Input [5]: [cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+
+(237) NativeHashAggregate
+Input [4]: [i_brand_id#63, i_class_id#64, i_category_id#65, _c3#67]
+Keys [3]: [i_brand_id#63, i_class_id#64, i_category_id#65]
+Functions [2]: [partial_sum(_c3#67), partial_count(1)]
+Aggregate Attributes [3]: [sum#68, isEmpty#69, count#70]
+Results [4]: [i_brand_id#63, i_class_id#64, i_category_id#65, #27#27]
+
+(238) NativeShuffleExchange
+Input [4]: [i_brand_id#63, i_class_id#64, i_category_id#65, #27#27]
+Arguments: hashpartitioning(i_brand_id#63, i_class_id#64, i_category_id#65, 100), ENSURE_REQUIREMENTS, [plan_id=24]
+
+(239) ShuffleQueryStage
+Output [4]: [i_brand_id#63, i_class_id#64, i_category_id#65, #27#27]
+Arguments: X
+
+(240) AQEShuffleRead
+Input [4]: [i_brand_id#63, i_class_id#64, i_category_id#65, #27#27]
+Arguments: coalesced
+
+(241) InputAdapter
+Input [4]: [i_brand_id#63, i_class_id#64, i_category_id#65, #27#27]
+
+(242) NativeHashAggregate
+Input [4]: [i_brand_id#63, i_class_id#64, i_category_id#65, #27#27]
+Keys [3]: [i_brand_id#63, i_class_id#64, i_category_id#65]
+Functions [2]: [sum((cast(cs_quantity#59 as decimal(10,0)) * cs_list_price#60)), count(1)]
+Aggregate Attributes [2]: [sum((cast(cs_quantity#59 as decimal(10,0)) * cs_list_price#60))#71, count(1)#72]
+Results [5]: [i_brand_id#63, i_class_id#64, i_category_id#65, sum((cast(cs_quantity#59 as decimal(10,0)) * cs_list_price#60))#71, count(1)#72]
+
+(243) NativeProject
+Output [5]: [i_brand_id#63, i_class_id#64, i_category_id#65, sum((cast(cs_quantity#59 as decimal(10,0)) * cs_list_price#60))#71 AS sales#73, count(1)#72 AS number_sales#74]
+Input [5]: [i_brand_id#63, i_class_id#64, i_category_id#65, sum((cast(cs_quantity#59 as decimal(10,0)) * cs_list_price#60))#71, count(1)#72]
+
+(244) NativeFilter
+Input [5]: [i_brand_id#63, i_class_id#64, i_category_id#65, sales#73, number_sales#74]
+Condition : (isnotnull(sales#73) AND (cast(sales#73 as decimal(32,6)) > cast(ReusedSubquery Subquery subquery#51, [id=#52] as decimal(32,6))))
+
+(245) NativeProject
+Output [6]: [sales#73, number_sales#74, catalog AS channel#75, i_brand_id#63, i_class_id#64, i_category_id#65]
+Input [5]: [i_brand_id#63, i_class_id#64, i_category_id#65, sales#73, number_sales#74]
+
+(682) Scan parquet
+Output [4]: [ws_sold_date_sk#76, ws_item_sk#77, ws_quantity#78, ws_list_price#79]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(247) InputAdapter
+Input [4]: [ws_sold_date_sk#76, ws_item_sk#77, ws_quantity#78, ws_list_price#79]
+Arguments: [#76, #77, #78, #79]
+
+(248) NativeFilter
+Input [4]: [#76#76, #77#77, #78#78, #79#79]
+Condition : (isnotnull(ws_item_sk#77) AND isnotnull(ws_sold_date_sk#76))
+
+(249) NativeShuffleExchange
+Input [4]: [#76#76, #77#77, #78#78, #79#79]
+Arguments: hashpartitioning(ws_item_sk#77, 100), ENSURE_REQUIREMENTS, [plan_id=25]
+
+(250) ShuffleQueryStage
+Output [4]: [#76#76, #77#77, #78#78, #79#79]
+Arguments: X
+
+(251) AQEShuffleRead
+Input [4]: [#76#76, #77#77, #78#78, #79#79]
+Arguments: coalesced
+
+(252) InputAdapter
+Input [4]: [#76#76, #77#77, #78#78, #79#79]
+
+(253) NativeSort
+Input [4]: [#76#76, #77#77, #78#78, #79#79]
+Arguments: [ws_item_sk#77 ASC NULLS FIRST], false
+
+(254) ReusedExchange [Reuses operator id: 147]
+Output [1]: [ss_item_sk#80]
+
+(255) ShuffleQueryStage
+Output [1]: [ss_item_sk#80]
+Arguments: X
+
+(256) AQEShuffleRead
+Input [1]: [ss_item_sk#80]
+Arguments: coalesced
+
+(257) InputAdapter
+Input [1]: [ss_item_sk#80]
+Arguments: [#80]
+
+(258) InputAdapter
+Input [1]: [#80#80]
+
+(259) NativeSort
+Input [1]: [#80#80]
+Arguments: [ss_item_sk#80 ASC NULLS FIRST], false
+
+(260) NativeSortMergeJoin
+Left keys [1]: [ws_item_sk#77]
+Right keys [1]: [ss_item_sk#80]
+Join type: LeftSemi
+Join condition: None
+
+(261) ReusedExchange [Reuses operator id: 44]
+Output [4]: [i_item_sk#81, i_brand_id#82, i_class_id#83, i_category_id#84]
+
+(262) ShuffleQueryStage
+Output [4]: [i_item_sk#81, i_brand_id#82, i_class_id#83, i_category_id#84]
+Arguments: X
+
+(263) AQEShuffleRead
+Input [4]: [i_item_sk#81, i_brand_id#82, i_class_id#83, i_category_id#84]
+Arguments: coalesced
+
+(264) InputAdapter
+Input [4]: [i_item_sk#81, i_brand_id#82, i_class_id#83, i_category_id#84]
+Arguments: [#81, #82, #83, #84]
+
+(265) InputAdapter
+Input [4]: [#81#81, #82#82, #83#83, #84#84]
+
+(266) NativeSort
+Input [4]: [#81#81, #82#82, #83#83, #84#84]
+Arguments: [i_item_sk#81 ASC NULLS FIRST], false
+
+(267) ReusedExchange [Reuses operator id: 147]
+Output [1]: [ss_item_sk#80]
+
+(268) ShuffleQueryStage
+Output [1]: [ss_item_sk#80]
+Arguments: X
+
+(269) AQEShuffleRead
+Input [1]: [ss_item_sk#80]
+Arguments: coalesced
+
+(270) InputAdapter
+Input [1]: [ss_item_sk#80]
+Arguments: [#80]
+
+(271) InputAdapter
+Input [1]: [#80#80]
+
+(272) NativeSort
+Input [1]: [#80#80]
+Arguments: [ss_item_sk#80 ASC NULLS FIRST], false
+
+(273) NativeSortMergeJoin
+Left keys [1]: [i_item_sk#81]
+Right keys [1]: [ss_item_sk#80]
+Join type: LeftSemi
+Join condition: None
+
+(274) NativeSortMergeJoin
+Left keys [1]: [ws_item_sk#77]
+Right keys [1]: [i_item_sk#81]
+Join type: Inner
+Join condition: None
+
+(275) NativeProject
+Output [6]: [ws_sold_date_sk#76, ws_quantity#78, ws_list_price#79, i_brand_id#82, i_class_id#83, i_category_id#84]
+Input [8]: [#76#76, #77#77, #78#78, #79#79, #81#81, #82#82, #83#83, #84#84]
+
+(276) NativeShuffleExchange
+Input [6]: [ws_sold_date_sk#76, ws_quantity#78, ws_list_price#79, i_brand_id#82, i_class_id#83, i_category_id#84]
+Arguments: hashpartitioning(ws_sold_date_sk#76, 100), ENSURE_REQUIREMENTS, [plan_id=26]
+
+(277) ShuffleQueryStage
+Output [6]: [ws_sold_date_sk#76, ws_quantity#78, ws_list_price#79, i_brand_id#82, i_class_id#83, i_category_id#84]
+Arguments: X
+
+(278) AQEShuffleRead
+Input [6]: [ws_sold_date_sk#76, ws_quantity#78, ws_list_price#79, i_brand_id#82, i_class_id#83, i_category_id#84]
+Arguments: coalesced
+
+(279) InputAdapter
+Input [6]: [ws_sold_date_sk#76, ws_quantity#78, ws_list_price#79, i_brand_id#82, i_class_id#83, i_category_id#84]
+
+(280) NativeSort
+Input [6]: [ws_sold_date_sk#76, ws_quantity#78, ws_list_price#79, i_brand_id#82, i_class_id#83, i_category_id#84]
+Arguments: [ws_sold_date_sk#76 ASC NULLS FIRST], false
+
+(281) ReusedExchange [Reuses operator id: 176]
+Output [1]: [d_date_sk#85]
+
+(282) ShuffleQueryStage
+Output [1]: [d_date_sk#85]
+Arguments: X
+
+(283) AQEShuffleRead
+Input [1]: [d_date_sk#85]
+Arguments: coalesced
+
+(284) InputAdapter
+Input [1]: [d_date_sk#85]
+Arguments: [#85]
+
+(285) InputAdapter
+Input [1]: [#85#85]
+
+(286) NativeSort
+Input [1]: [#85#85]
+Arguments: [d_date_sk#85 ASC NULLS FIRST], false
+
+(287) NativeSortMergeJoin
+Left keys [1]: [ws_sold_date_sk#76]
+Right keys [1]: [d_date_sk#85]
+Join type: Inner
+Join condition: None
+
+(288) NativeProject
+Output [5]: [ws_quantity#78, ws_list_price#79, i_brand_id#82, i_class_id#83, i_category_id#84]
+Input [7]: [ws_sold_date_sk#76, ws_quantity#78, ws_list_price#79, i_brand_id#82, i_class_id#83, i_category_id#84, #85#85]
+
+(289) NativeProject
+Output [4]: [i_brand_id#82 AS i_brand_id#82, i_class_id#83 AS i_class_id#83, i_category_id#84 AS i_category_id#84, (cast(ws_quantity#78 as decimal(10,0)) * ws_list_price#79) AS _c3#86]
+Input [5]: [ws_quantity#78, ws_list_price#79, i_brand_id#82, i_class_id#83, i_category_id#84]
+
+(290) NativeHashAggregate
+Input [4]: [i_brand_id#82, i_class_id#83, i_category_id#84, _c3#86]
+Keys [3]: [i_brand_id#82, i_class_id#83, i_category_id#84]
+Functions [2]: [partial_sum(_c3#86), partial_count(1)]
+Aggregate Attributes [3]: [sum#87, isEmpty#88, count#89]
+Results [4]: [i_brand_id#82, i_class_id#83, i_category_id#84, #27#27]
+
+(291) NativeShuffleExchange
+Input [4]: [i_brand_id#82, i_class_id#83, i_category_id#84, #27#27]
+Arguments: hashpartitioning(i_brand_id#82, i_class_id#83, i_category_id#84, 100), ENSURE_REQUIREMENTS, [plan_id=27]
+
+(292) ShuffleQueryStage
+Output [4]: [i_brand_id#82, i_class_id#83, i_category_id#84, #27#27]
+Arguments: X
+
+(293) AQEShuffleRead
+Input [4]: [i_brand_id#82, i_class_id#83, i_category_id#84, #27#27]
+Arguments: coalesced
+
+(294) InputAdapter
+Input [4]: [i_brand_id#82, i_class_id#83, i_category_id#84, #27#27]
+
+(295) NativeHashAggregate
+Input [4]: [i_brand_id#82, i_class_id#83, i_category_id#84, #27#27]
+Keys [3]: [i_brand_id#82, i_class_id#83, i_category_id#84]
+Functions [2]: [sum((cast(ws_quantity#78 as decimal(10,0)) * ws_list_price#79)), count(1)]
+Aggregate Attributes [2]: [sum((cast(ws_quantity#78 as decimal(10,0)) * ws_list_price#79))#90, count(1)#91]
+Results [5]: [i_brand_id#82, i_class_id#83, i_category_id#84, sum((cast(ws_quantity#78 as decimal(10,0)) * ws_list_price#79))#90, count(1)#91]
+
+(296) NativeProject
+Output [5]: [i_brand_id#82, i_class_id#83, i_category_id#84, sum((cast(ws_quantity#78 as decimal(10,0)) * ws_list_price#79))#90 AS sales#92, count(1)#91 AS number_sales#93]
+Input [5]: [i_brand_id#82, i_class_id#83, i_category_id#84, sum((cast(ws_quantity#78 as decimal(10,0)) * ws_list_price#79))#90, count(1)#91]
+
+(297) NativeFilter
+Input [5]: [i_brand_id#82, i_class_id#83, i_category_id#84, sales#92, number_sales#93]
+Condition : (isnotnull(sales#92) AND (cast(sales#92 as decimal(32,6)) > cast(ReusedSubquery Subquery subquery#51, [id=#52] as decimal(32,6))))
+
+(298) NativeProject
+Output [6]: [sales#92, number_sales#93, web AS channel#94, i_brand_id#82, i_class_id#83, i_category_id#84]
+Input [5]: [i_brand_id#82, i_class_id#83, i_category_id#84, sales#92, number_sales#93]
+
+(299) NativeUnion
+Arguments: [sales#49, number_sales#50, channel#53, i_brand_id#54, i_class_id#55, i_category_id#56]
+
+(300) InputAdapter
+Input [6]: [sales#49, number_sales#50, channel#53, i_brand_id#54, i_class_id#55, i_category_id#56]
+Arguments: [#49, #95, #53, #54, #55, #56]
+
+(301) NativeExpand
+Input [6]: [#49#49, #95#50, #53#53, #54#54, #55#55, #56#56]
+Arguments: [[sales#49, number_sales#50, channel#53, i_brand_id#54, i_class_id#55, i_category_id#56, 0], [sales#49, number_sales#50, channel#53, i_brand_id#54, i_class_id#55, null, 1], [sales#49, number_sales#50, channel#53, i_brand_id#54, null, null, 3], [sales#49, number_sales#50, channel#53, null, null, null, 7], [sales#49, number_sales#50, null, null, null, null, 15]], [sales#49, number_sales#50, channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100]
+
+(302) NativeHashAggregate
+Input [7]: [sales#49, number_sales#50, channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100]
+Keys [5]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100]
+Functions [2]: [partial_sum(sales#49), partial_sum(number_sales#50)]
+Aggregate Attributes [3]: [sum#101, isEmpty#102, sum#103]
+Results [6]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100, #27#27]
+
+(303) NativeShuffleExchange
+Input [6]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100, #27#27]
+Arguments: hashpartitioning(channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100, 100), ENSURE_REQUIREMENTS, [plan_id=28]
+
+(304) ShuffleQueryStage
+Output [6]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100, #27#27]
+Arguments: X
+
+(305) AQEShuffleRead
+Input [6]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100, #27#27]
+Arguments: coalesced
+
+(306) InputAdapter
+Input [6]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100, #27#27]
+
+(307) NativeHashAggregate
+Input [6]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100, #27#27]
+Keys [5]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100]
+Functions [2]: [sum(sales#49), sum(number_sales#50)]
+Aggregate Attributes [2]: [sum(sales#49)#104, sum(number_sales#50)#105]
+Results [7]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100, sum(sales#49)#104, sum(number_sales#50)#105]
+
+(308) NativeProject
+Output [6]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, sum(sales#49)#104 AS sum(sales)#106, sum(number_sales#50)#105 AS sum(number_sales)#107]
+Input [7]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, spark_grouping_id#100, sum(sales#49)#104, sum(number_sales#50)#105]
+
+(309) NativeTakeOrdered
+Input [6]: [channel#96, i_brand_id#97, i_class_id#98, i_category_id#99, sum(sales)#106, sum(number_sales)#107]
+Arguments: X, [channel#96 ASC NULLS FIRST, i_brand_id#97 ASC NULLS FIRST, i_class_id#98 ASC NULLS FIRST, i_category_id#99 ASC NULLS FIRST]
+
+(310) Scan parquet
+Output [4]: [ss_sold_date_sk#1, ss_item_sk#2, ss_quantity#3, ss_list_price#4]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(311) Filter
+Input [4]: [ss_sold_date_sk#1, ss_item_sk#2, ss_quantity#3, ss_list_price#4]
+Condition : (isnotnull(ss_item_sk#2) AND isnotnull(ss_sold_date_sk#1))
+
+(312) Exchange
+Input [4]: [ss_sold_date_sk#1, ss_item_sk#2, ss_quantity#3, ss_list_price#4]
+Arguments: hashpartitioning(ss_item_sk#2, 100), ENSURE_REQUIREMENTS, [plan_id=29]
+
+(313) Sort
+Input [4]: [ss_sold_date_sk#1, ss_item_sk#2, ss_quantity#3, ss_list_price#4]
+Arguments: [ss_item_sk#2 ASC NULLS FIRST], false, 0
+
+(314) Scan parquet
+Output [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(315) Filter
+Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8]
+Condition : ((isnotnull(i_brand_id#6) AND isnotnull(i_class_id#7)) AND isnotnull(i_category_id#8))
+
+(316) Exchange
+Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8]
+Arguments: hashpartitioning(i_brand_id#6, i_class_id#7, i_category_id#8, 100), ENSURE_REQUIREMENTS, [plan_id=30]
+
+(317) Sort
+Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8]
+Arguments: [i_brand_id#6 ASC NULLS FIRST, i_class_id#7 ASC NULLS FIRST, i_category_id#8 ASC NULLS FIRST], false, 0
+
+(318) Scan parquet
+Output [2]: [ss_sold_date_sk#9, ss_item_sk#10]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(319) Filter
+Input [2]: [ss_sold_date_sk#9, ss_item_sk#10]
+Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_sold_date_sk#9))
+
+(320) Exchange
+Input [2]: [ss_sold_date_sk#9, ss_item_sk#10]
+Arguments: hashpartitioning(ss_item_sk#10, 100), ENSURE_REQUIREMENTS, [plan_id=31]
+
+(321) Sort
+Input [2]: [ss_sold_date_sk#9, ss_item_sk#10]
+Arguments: [ss_item_sk#10 ASC NULLS FIRST], false, 0
+
+(322) Scan parquet
+Output [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(323) Filter
+Input [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Condition : (((isnotnull(i_item_sk#11) AND isnotnull(i_brand_id#12)) AND isnotnull(i_class_id#13)) AND isnotnull(i_category_id#14))
+
+(324) Exchange
+Input [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: hashpartitioning(coalesce(i_brand_id#12, 0), isnull(i_brand_id#12), coalesce(i_class_id#13, 0), isnull(i_class_id#13), coalesce(i_category_id#14, 0), isnull(i_category_id#14), 100), ENSURE_REQUIREMENTS, [plan_id=32]
+
+(325) Sort
+Input [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: [coalesce(i_brand_id#12, 0) ASC NULLS FIRST, isnull(i_brand_id#12) ASC NULLS FIRST, coalesce(i_class_id#13, 0) ASC NULLS FIRST, isnull(i_class_id#13) ASC NULLS FIRST, coalesce(i_category_id#14, 0) ASC NULLS FIRST, isnull(i_category_id#14) ASC NULLS FIRST], false, 0
+
+(326) Scan parquet
+Output [2]: [cs_sold_date_sk#15, cs_item_sk#16]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_sold_date_sk)]
+ReadSchema: struct
+
+(327) Filter
+Input [2]: [cs_sold_date_sk#15, cs_item_sk#16]
+Condition : (isnotnull(cs_item_sk#16) AND isnotnull(cs_sold_date_sk#15))
+
+(328) Exchange
+Input [2]: [cs_sold_date_sk#15, cs_item_sk#16]
+Arguments: hashpartitioning(cs_item_sk#16, 100), ENSURE_REQUIREMENTS, [plan_id=33]
+
+(329) Sort
+Input [2]: [cs_sold_date_sk#15, cs_item_sk#16]
+Arguments: [cs_item_sk#16 ASC NULLS FIRST], false, 0
+
+(330) Scan parquet
+Output [4]: [i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(331) Filter
+Input [4]: [i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+Condition : isnotnull(i_item_sk#17)
+
+(332) Exchange
+Input [4]: [i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: hashpartitioning(i_item_sk#17, 100), ENSURE_REQUIREMENTS, [plan_id=34]
+
+(333) Sort
+Input [4]: [i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: [i_item_sk#17 ASC NULLS FIRST], false, 0
+
+(334) SortMergeJoin
+Left keys [1]: [cs_item_sk#16]
+Right keys [1]: [i_item_sk#17]
+Join type: Inner
+Join condition: None
+
+(335) Project
+Output [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+Input [6]: [cs_sold_date_sk#15, cs_item_sk#16, i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+
+(336) Exchange
+Input [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: hashpartitioning(cs_sold_date_sk#15, 100), ENSURE_REQUIREMENTS, [plan_id=35]
+
+(337) Sort
+Input [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: [cs_sold_date_sk#15 ASC NULLS FIRST], false, 0
+
+(338) Scan parquet
+Output [2]: [d_date_sk#21, d_year#22]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(339) Filter
+Input [2]: [d_date_sk#21, d_year#22]
+Condition : (((isnotnull(d_year#22) AND (d_year#22 >= 1999)) AND (d_year#22 <= 2001)) AND isnotnull(d_date_sk#21))
+
+(340) Project
+Output [1]: [d_date_sk#21]
+Input [2]: [d_date_sk#21, d_year#22]
+
+(341) Exchange
+Input [1]: [d_date_sk#21]
+Arguments: hashpartitioning(d_date_sk#21, 100), ENSURE_REQUIREMENTS, [plan_id=36]
+
+(342) Sort
+Input [1]: [d_date_sk#21]
+Arguments: [d_date_sk#21 ASC NULLS FIRST], false, 0
+
+(343) SortMergeJoin
+Left keys [1]: [cs_sold_date_sk#15]
+Right keys [1]: [d_date_sk#21]
+Join type: Inner
+Join condition: None
+
+(344) Project
+Output [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+Input [5]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20, d_date_sk#21]
+
+(345) Exchange
+Input [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: hashpartitioning(coalesce(i_brand_id#18, 0), isnull(i_brand_id#18), coalesce(i_class_id#19, 0), isnull(i_class_id#19), coalesce(i_category_id#20, 0), isnull(i_category_id#20), 100), ENSURE_REQUIREMENTS, [plan_id=37]
+
+(346) Sort
+Input [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: [coalesce(i_brand_id#18, 0) ASC NULLS FIRST, isnull(i_brand_id#18) ASC NULLS FIRST, coalesce(i_class_id#19, 0) ASC NULLS FIRST, isnull(i_class_id#19) ASC NULLS FIRST, coalesce(i_category_id#20, 0) ASC NULLS FIRST, isnull(i_category_id#20) ASC NULLS FIRST], false, 0
+
+(347) SortMergeJoin
+Left keys [6]: [coalesce(i_brand_id#12, 0), isnull(i_brand_id#12), coalesce(i_class_id#13, 0), isnull(i_class_id#13), coalesce(i_category_id#14, 0), isnull(i_category_id#14)]
+Right keys [6]: [coalesce(i_brand_id#18, 0), isnull(i_brand_id#18), coalesce(i_class_id#19, 0), isnull(i_class_id#19), coalesce(i_category_id#20, 0), isnull(i_category_id#20)]
+Join type: LeftSemi
+Join condition: None
+
+(348) Exchange
+Input [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: hashpartitioning(i_item_sk#11, 100), ENSURE_REQUIREMENTS, [plan_id=38]
+
+(349) Sort
+Input [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: [i_item_sk#11 ASC NULLS FIRST], false, 0
+
+(350) SortMergeJoin
+Left keys [1]: [ss_item_sk#10]
+Right keys [1]: [i_item_sk#11]
+Join type: Inner
+Join condition: None
+
+(351) Project
+Output [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+Input [6]: [ss_sold_date_sk#9, ss_item_sk#10, i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+
+(352) Exchange
+Input [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: hashpartitioning(ss_sold_date_sk#9, 100), ENSURE_REQUIREMENTS, [plan_id=39]
+
+(353) Sort
+Input [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: [ss_sold_date_sk#9 ASC NULLS FIRST], false, 0
+
+(354) Scan parquet
+Output [2]: [d_date_sk#23, d_year#108]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(355) Filter
+Input [2]: [d_date_sk#23, d_year#108]
+Condition : (((isnotnull(d_year#108) AND (d_year#108 >= 1999)) AND (d_year#108 <= 2001)) AND isnotnull(d_date_sk#23))
+
+(356) Project
+Output [1]: [d_date_sk#23]
+Input [2]: [d_date_sk#23, d_year#108]
+
+(357) Exchange
+Input [1]: [d_date_sk#23]
+Arguments: hashpartitioning(d_date_sk#23, 100), ENSURE_REQUIREMENTS, [plan_id=40]
+
+(358) Sort
+Input [1]: [d_date_sk#23]
+Arguments: [d_date_sk#23 ASC NULLS FIRST], false, 0
+
+(359) SortMergeJoin
+Left keys [1]: [ss_sold_date_sk#9]
+Right keys [1]: [d_date_sk#23]
+Join type: Inner
+Join condition: None
+
+(360) Project
+Output [3]: [i_brand_id#12 AS brand_id#24, i_class_id#13 AS class_id#25, i_category_id#14 AS category_id#26]
+Input [5]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14, d_date_sk#23]
+
+(361) HashAggregate
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [3]: [brand_id#24, class_id#25, category_id#26]
+
+(362) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(brand_id#24, class_id#25, category_id#26, 100), ENSURE_REQUIREMENTS, [plan_id=41]
+
+(363) HashAggregate
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [3]: [brand_id#24, class_id#25, category_id#26]
+
+(364) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(coalesce(brand_id#24, 0), isnull(brand_id#24), coalesce(class_id#25, 0), isnull(class_id#25), coalesce(category_id#26, 0), isnull(category_id#26), 100), ENSURE_REQUIREMENTS, [plan_id=42]
+
+(365) Sort
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: [coalesce(brand_id#24, 0) ASC NULLS FIRST, isnull(brand_id#24) ASC NULLS FIRST, coalesce(class_id#25, 0) ASC NULLS FIRST, isnull(class_id#25) ASC NULLS FIRST, coalesce(category_id#26, 0) ASC NULLS FIRST, isnull(category_id#26) ASC NULLS FIRST], false, 0
+
+(366) Scan parquet
+Output [2]: [ws_sold_date_sk#28, ws_item_sk#29]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(367) Filter
+Input [2]: [ws_sold_date_sk#28, ws_item_sk#29]
+Condition : (isnotnull(ws_item_sk#29) AND isnotnull(ws_sold_date_sk#28))
+
+(368) Exchange
+Input [2]: [ws_sold_date_sk#28, ws_item_sk#29]
+Arguments: hashpartitioning(ws_item_sk#29, 100), ENSURE_REQUIREMENTS, [plan_id=43]
+
+(369) Sort
+Input [2]: [ws_sold_date_sk#28, ws_item_sk#29]
+Arguments: [ws_item_sk#29 ASC NULLS FIRST], false, 0
+
+(370) Scan parquet
+Output [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(371) Filter
+Input [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+Condition : isnotnull(i_item_sk#30)
+
+(372) Exchange
+Input [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: hashpartitioning(i_item_sk#30, 100), ENSURE_REQUIREMENTS, [plan_id=44]
+
+(373) Sort
+Input [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: [i_item_sk#30 ASC NULLS FIRST], false, 0
+
+(374) SortMergeJoin
+Left keys [1]: [ws_item_sk#29]
+Right keys [1]: [i_item_sk#30]
+Join type: Inner
+Join condition: None
+
+(375) Project
+Output [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+Input [6]: [ws_sold_date_sk#28, ws_item_sk#29, i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+
+(376) Exchange
+Input [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: hashpartitioning(ws_sold_date_sk#28, 100), ENSURE_REQUIREMENTS, [plan_id=45]
+
+(377) Sort
+Input [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: [ws_sold_date_sk#28 ASC NULLS FIRST], false, 0
+
+(378) Scan parquet
+Output [2]: [d_date_sk#34, d_year#109]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(379) Filter
+Input [2]: [d_date_sk#34, d_year#109]
+Condition : (((isnotnull(d_year#109) AND (d_year#109 >= 1999)) AND (d_year#109 <= 2001)) AND isnotnull(d_date_sk#34))
+
+(380) Project
+Output [1]: [d_date_sk#34]
+Input [2]: [d_date_sk#34, d_year#109]
+
+(381) Exchange
+Input [1]: [d_date_sk#34]
+Arguments: hashpartitioning(d_date_sk#34, 100), ENSURE_REQUIREMENTS, [plan_id=46]
+
+(382) Sort
+Input [1]: [d_date_sk#34]
+Arguments: [d_date_sk#34 ASC NULLS FIRST], false, 0
+
+(383) SortMergeJoin
+Left keys [1]: [ws_sold_date_sk#28]
+Right keys [1]: [d_date_sk#34]
+Join type: Inner
+Join condition: None
+
+(384) Project
+Output [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+Input [5]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33, d_date_sk#34]
+
+(385) Exchange
+Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: hashpartitioning(coalesce(i_brand_id#31, 0), isnull(i_brand_id#31), coalesce(i_class_id#32, 0), isnull(i_class_id#32), coalesce(i_category_id#33, 0), isnull(i_category_id#33), 100), ENSURE_REQUIREMENTS, [plan_id=47]
+
+(386) Sort
+Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: [coalesce(i_brand_id#31, 0) ASC NULLS FIRST, isnull(i_brand_id#31) ASC NULLS FIRST, coalesce(i_class_id#32, 0) ASC NULLS FIRST, isnull(i_class_id#32) ASC NULLS FIRST, coalesce(i_category_id#33, 0) ASC NULLS FIRST, isnull(i_category_id#33) ASC NULLS FIRST], false, 0
+
+(387) SortMergeJoin
+Left keys [6]: [coalesce(brand_id#24, 0), isnull(brand_id#24), coalesce(class_id#25, 0), isnull(class_id#25), coalesce(category_id#26, 0), isnull(category_id#26)]
+Right keys [6]: [coalesce(i_brand_id#31, 0), isnull(i_brand_id#31), coalesce(i_class_id#32, 0), isnull(i_class_id#32), coalesce(i_category_id#33, 0), isnull(i_category_id#33)]
+Join type: LeftSemi
+Join condition: None
+
+(388) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(brand_id#24, class_id#25, category_id#26, 100), ENSURE_REQUIREMENTS, [plan_id=48]
+
+(389) Sort
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: [brand_id#24 ASC NULLS FIRST, class_id#25 ASC NULLS FIRST, category_id#26 ASC NULLS FIRST], false, 0
+
+(390) SortMergeJoin
+Left keys [3]: [i_brand_id#6, i_class_id#7, i_category_id#8]
+Right keys [3]: [brand_id#24, class_id#25, category_id#26]
+Join type: Inner
+Join condition: None
+
+(391) Project
+Output [1]: [i_item_sk#5 AS ss_item_sk#35]
+Input [7]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8, brand_id#24, class_id#25, category_id#26]
+
+(392) Exchange
+Input [1]: [ss_item_sk#35]
+Arguments: hashpartitioning(ss_item_sk#35, 100), ENSURE_REQUIREMENTS, [plan_id=49]
+
+(393) Sort
+Input [1]: [ss_item_sk#35]
+Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0
+
+(394) SortMergeJoin
+Left keys [1]: [ss_item_sk#2]
+Right keys [1]: [ss_item_sk#35]
+Join type: LeftSemi
+Join condition: None
+
+(395) Scan parquet
+Output [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(396) Filter
+Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39]
+Condition : isnotnull(i_item_sk#36)
+
+(397) Exchange
+Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39]
+Arguments: hashpartitioning(i_item_sk#36, 100), ENSURE_REQUIREMENTS, [plan_id=50]
+
+(398) Sort
+Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39]
+Arguments: [i_item_sk#36 ASC NULLS FIRST], false, 0
+
+(399) Scan parquet
+Output [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(400) Filter
+Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8]
+Condition : ((isnotnull(i_brand_id#6) AND isnotnull(i_class_id#7)) AND isnotnull(i_category_id#8))
+
+(401) Exchange
+Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8]
+Arguments: hashpartitioning(i_brand_id#6, i_class_id#7, i_category_id#8, 100), ENSURE_REQUIREMENTS, [plan_id=51]
+
+(402) Sort
+Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8]
+Arguments: [i_brand_id#6 ASC NULLS FIRST, i_class_id#7 ASC NULLS FIRST, i_category_id#8 ASC NULLS FIRST], false, 0
+
+(403) Scan parquet
+Output [2]: [ss_sold_date_sk#9, ss_item_sk#10]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(404) Filter
+Input [2]: [ss_sold_date_sk#9, ss_item_sk#10]
+Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_sold_date_sk#9))
+
+(405) Exchange
+Input [2]: [ss_sold_date_sk#9, ss_item_sk#10]
+Arguments: hashpartitioning(ss_item_sk#10, 100), ENSURE_REQUIREMENTS, [plan_id=52]
+
+(406) Sort
+Input [2]: [ss_sold_date_sk#9, ss_item_sk#10]
+Arguments: [ss_item_sk#10 ASC NULLS FIRST], false, 0
+
+(407) Scan parquet
+Output [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(408) Filter
+Input [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Condition : (((isnotnull(i_item_sk#11) AND isnotnull(i_brand_id#12)) AND isnotnull(i_class_id#13)) AND isnotnull(i_category_id#14))
+
+(409) Exchange
+Input [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: hashpartitioning(coalesce(i_brand_id#12, 0), isnull(i_brand_id#12), coalesce(i_class_id#13, 0), isnull(i_class_id#13), coalesce(i_category_id#14, 0), isnull(i_category_id#14), 100), ENSURE_REQUIREMENTS, [plan_id=53]
+
+(410) Sort
+Input [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: [coalesce(i_brand_id#12, 0) ASC NULLS FIRST, isnull(i_brand_id#12) ASC NULLS FIRST, coalesce(i_class_id#13, 0) ASC NULLS FIRST, isnull(i_class_id#13) ASC NULLS FIRST, coalesce(i_category_id#14, 0) ASC NULLS FIRST, isnull(i_category_id#14) ASC NULLS FIRST], false, 0
+
+(411) Scan parquet
+Output [2]: [cs_sold_date_sk#15, cs_item_sk#16]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_sold_date_sk)]
+ReadSchema: struct
+
+(412) Filter
+Input [2]: [cs_sold_date_sk#15, cs_item_sk#16]
+Condition : (isnotnull(cs_item_sk#16) AND isnotnull(cs_sold_date_sk#15))
+
+(413) Exchange
+Input [2]: [cs_sold_date_sk#15, cs_item_sk#16]
+Arguments: hashpartitioning(cs_item_sk#16, 100), ENSURE_REQUIREMENTS, [plan_id=54]
+
+(414) Sort
+Input [2]: [cs_sold_date_sk#15, cs_item_sk#16]
+Arguments: [cs_item_sk#16 ASC NULLS FIRST], false, 0
+
+(415) Scan parquet
+Output [4]: [i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(416) Filter
+Input [4]: [i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+Condition : isnotnull(i_item_sk#17)
+
+(417) Exchange
+Input [4]: [i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: hashpartitioning(i_item_sk#17, 100), ENSURE_REQUIREMENTS, [plan_id=55]
+
+(418) Sort
+Input [4]: [i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: [i_item_sk#17 ASC NULLS FIRST], false, 0
+
+(419) SortMergeJoin
+Left keys [1]: [cs_item_sk#16]
+Right keys [1]: [i_item_sk#17]
+Join type: Inner
+Join condition: None
+
+(420) Project
+Output [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+Input [6]: [cs_sold_date_sk#15, cs_item_sk#16, i_item_sk#17, i_brand_id#18, i_class_id#19, i_category_id#20]
+
+(421) Exchange
+Input [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: hashpartitioning(cs_sold_date_sk#15, 100), ENSURE_REQUIREMENTS, [plan_id=56]
+
+(422) Sort
+Input [4]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: [cs_sold_date_sk#15 ASC NULLS FIRST], false, 0
+
+(423) Scan parquet
+Output [2]: [d_date_sk#21, d_year#22]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(424) Filter
+Input [2]: [d_date_sk#21, d_year#22]
+Condition : (((isnotnull(d_year#22) AND (d_year#22 >= 1999)) AND (d_year#22 <= 2001)) AND isnotnull(d_date_sk#21))
+
+(425) Project
+Output [1]: [d_date_sk#21]
+Input [2]: [d_date_sk#21, d_year#22]
+
+(426) Exchange
+Input [1]: [d_date_sk#21]
+Arguments: hashpartitioning(d_date_sk#21, 100), ENSURE_REQUIREMENTS, [plan_id=57]
+
+(427) Sort
+Input [1]: [d_date_sk#21]
+Arguments: [d_date_sk#21 ASC NULLS FIRST], false, 0
+
+(428) SortMergeJoin
+Left keys [1]: [cs_sold_date_sk#15]
+Right keys [1]: [d_date_sk#21]
+Join type: Inner
+Join condition: None
+
+(429) Project
+Output [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+Input [5]: [cs_sold_date_sk#15, i_brand_id#18, i_class_id#19, i_category_id#20, d_date_sk#21]
+
+(430) Exchange
+Input [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: hashpartitioning(coalesce(i_brand_id#18, 0), isnull(i_brand_id#18), coalesce(i_class_id#19, 0), isnull(i_class_id#19), coalesce(i_category_id#20, 0), isnull(i_category_id#20), 100), ENSURE_REQUIREMENTS, [plan_id=58]
+
+(431) Sort
+Input [3]: [i_brand_id#18, i_class_id#19, i_category_id#20]
+Arguments: [coalesce(i_brand_id#18, 0) ASC NULLS FIRST, isnull(i_brand_id#18) ASC NULLS FIRST, coalesce(i_class_id#19, 0) ASC NULLS FIRST, isnull(i_class_id#19) ASC NULLS FIRST, coalesce(i_category_id#20, 0) ASC NULLS FIRST, isnull(i_category_id#20) ASC NULLS FIRST], false, 0
+
+(432) SortMergeJoin
+Left keys [6]: [coalesce(i_brand_id#12, 0), isnull(i_brand_id#12), coalesce(i_class_id#13, 0), isnull(i_class_id#13), coalesce(i_category_id#14, 0), isnull(i_category_id#14)]
+Right keys [6]: [coalesce(i_brand_id#18, 0), isnull(i_brand_id#18), coalesce(i_class_id#19, 0), isnull(i_class_id#19), coalesce(i_category_id#20, 0), isnull(i_category_id#20)]
+Join type: LeftSemi
+Join condition: None
+
+(433) Exchange
+Input [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: hashpartitioning(i_item_sk#11, 100), ENSURE_REQUIREMENTS, [plan_id=59]
+
+(434) Sort
+Input [4]: [i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: [i_item_sk#11 ASC NULLS FIRST], false, 0
+
+(435) SortMergeJoin
+Left keys [1]: [ss_item_sk#10]
+Right keys [1]: [i_item_sk#11]
+Join type: Inner
+Join condition: None
+
+(436) Project
+Output [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+Input [6]: [ss_sold_date_sk#9, ss_item_sk#10, i_item_sk#11, i_brand_id#12, i_class_id#13, i_category_id#14]
+
+(437) Exchange
+Input [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: hashpartitioning(ss_sold_date_sk#9, 100), ENSURE_REQUIREMENTS, [plan_id=60]
+
+(438) Sort
+Input [4]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14]
+Arguments: [ss_sold_date_sk#9 ASC NULLS FIRST], false, 0
+
+(439) Scan parquet
+Output [2]: [d_date_sk#23, d_year#108]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(440) Filter
+Input [2]: [d_date_sk#23, d_year#108]
+Condition : (((isnotnull(d_year#108) AND (d_year#108 >= 1999)) AND (d_year#108 <= 2001)) AND isnotnull(d_date_sk#23))
+
+(441) Project
+Output [1]: [d_date_sk#23]
+Input [2]: [d_date_sk#23, d_year#108]
+
+(442) Exchange
+Input [1]: [d_date_sk#23]
+Arguments: hashpartitioning(d_date_sk#23, 100), ENSURE_REQUIREMENTS, [plan_id=61]
+
+(443) Sort
+Input [1]: [d_date_sk#23]
+Arguments: [d_date_sk#23 ASC NULLS FIRST], false, 0
+
+(444) SortMergeJoin
+Left keys [1]: [ss_sold_date_sk#9]
+Right keys [1]: [d_date_sk#23]
+Join type: Inner
+Join condition: None
+
+(445) Project
+Output [3]: [i_brand_id#12 AS brand_id#24, i_class_id#13 AS class_id#25, i_category_id#14 AS category_id#26]
+Input [5]: [ss_sold_date_sk#9, i_brand_id#12, i_class_id#13, i_category_id#14, d_date_sk#23]
+
+(446) HashAggregate
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [3]: [brand_id#24, class_id#25, category_id#26]
+
+(447) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(brand_id#24, class_id#25, category_id#26, 100), ENSURE_REQUIREMENTS, [plan_id=62]
+
+(448) HashAggregate
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [3]: [brand_id#24, class_id#25, category_id#26]
+
+(449) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(coalesce(brand_id#24, 0), isnull(brand_id#24), coalesce(class_id#25, 0), isnull(class_id#25), coalesce(category_id#26, 0), isnull(category_id#26), 100), ENSURE_REQUIREMENTS, [plan_id=63]
+
+(450) Sort
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: [coalesce(brand_id#24, 0) ASC NULLS FIRST, isnull(brand_id#24) ASC NULLS FIRST, coalesce(class_id#25, 0) ASC NULLS FIRST, isnull(class_id#25) ASC NULLS FIRST, coalesce(category_id#26, 0) ASC NULLS FIRST, isnull(category_id#26) ASC NULLS FIRST], false, 0
+
+(451) Scan parquet
+Output [2]: [ws_sold_date_sk#28, ws_item_sk#29]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(452) Filter
+Input [2]: [ws_sold_date_sk#28, ws_item_sk#29]
+Condition : (isnotnull(ws_item_sk#29) AND isnotnull(ws_sold_date_sk#28))
+
+(453) Exchange
+Input [2]: [ws_sold_date_sk#28, ws_item_sk#29]
+Arguments: hashpartitioning(ws_item_sk#29, 100), ENSURE_REQUIREMENTS, [plan_id=64]
+
+(454) Sort
+Input [2]: [ws_sold_date_sk#28, ws_item_sk#29]
+Arguments: [ws_item_sk#29 ASC NULLS FIRST], false, 0
+
+(455) Scan parquet
+Output [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(456) Filter
+Input [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+Condition : isnotnull(i_item_sk#30)
+
+(457) Exchange
+Input [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: hashpartitioning(i_item_sk#30, 100), ENSURE_REQUIREMENTS, [plan_id=65]
+
+(458) Sort
+Input [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: [i_item_sk#30 ASC NULLS FIRST], false, 0
+
+(459) SortMergeJoin
+Left keys [1]: [ws_item_sk#29]
+Right keys [1]: [i_item_sk#30]
+Join type: Inner
+Join condition: None
+
+(460) Project
+Output [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+Input [6]: [ws_sold_date_sk#28, ws_item_sk#29, i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33]
+
+(461) Exchange
+Input [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: hashpartitioning(ws_sold_date_sk#28, 100), ENSURE_REQUIREMENTS, [plan_id=66]
+
+(462) Sort
+Input [4]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: [ws_sold_date_sk#28 ASC NULLS FIRST], false, 0
+
+(463) Scan parquet
+Output [2]: [d_date_sk#34, d_year#109]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(464) Filter
+Input [2]: [d_date_sk#34, d_year#109]
+Condition : (((isnotnull(d_year#109) AND (d_year#109 >= 1999)) AND (d_year#109 <= 2001)) AND isnotnull(d_date_sk#34))
+
+(465) Project
+Output [1]: [d_date_sk#34]
+Input [2]: [d_date_sk#34, d_year#109]
+
+(466) Exchange
+Input [1]: [d_date_sk#34]
+Arguments: hashpartitioning(d_date_sk#34, 100), ENSURE_REQUIREMENTS, [plan_id=67]
+
+(467) Sort
+Input [1]: [d_date_sk#34]
+Arguments: [d_date_sk#34 ASC NULLS FIRST], false, 0
+
+(468) SortMergeJoin
+Left keys [1]: [ws_sold_date_sk#28]
+Right keys [1]: [d_date_sk#34]
+Join type: Inner
+Join condition: None
+
+(469) Project
+Output [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+Input [5]: [ws_sold_date_sk#28, i_brand_id#31, i_class_id#32, i_category_id#33, d_date_sk#34]
+
+(470) Exchange
+Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: hashpartitioning(coalesce(i_brand_id#31, 0), isnull(i_brand_id#31), coalesce(i_class_id#32, 0), isnull(i_class_id#32), coalesce(i_category_id#33, 0), isnull(i_category_id#33), 100), ENSURE_REQUIREMENTS, [plan_id=68]
+
+(471) Sort
+Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33]
+Arguments: [coalesce(i_brand_id#31, 0) ASC NULLS FIRST, isnull(i_brand_id#31) ASC NULLS FIRST, coalesce(i_class_id#32, 0) ASC NULLS FIRST, isnull(i_class_id#32) ASC NULLS FIRST, coalesce(i_category_id#33, 0) ASC NULLS FIRST, isnull(i_category_id#33) ASC NULLS FIRST], false, 0
+
+(472) SortMergeJoin
+Left keys [6]: [coalesce(brand_id#24, 0), isnull(brand_id#24), coalesce(class_id#25, 0), isnull(class_id#25), coalesce(category_id#26, 0), isnull(category_id#26)]
+Right keys [6]: [coalesce(i_brand_id#31, 0), isnull(i_brand_id#31), coalesce(i_class_id#32, 0), isnull(i_class_id#32), coalesce(i_category_id#33, 0), isnull(i_category_id#33)]
+Join type: LeftSemi
+Join condition: None
+
+(473) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(brand_id#24, class_id#25, category_id#26, 100), ENSURE_REQUIREMENTS, [plan_id=69]
+
+(474) Sort
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: [brand_id#24 ASC NULLS FIRST, class_id#25 ASC NULLS FIRST, category_id#26 ASC NULLS FIRST], false, 0
+
+(475) SortMergeJoin
+Left keys [3]: [i_brand_id#6, i_class_id#7, i_category_id#8]
+Right keys [3]: [brand_id#24, class_id#25, category_id#26]
+Join type: Inner
+Join condition: None
+
+(476) Project
+Output [1]: [i_item_sk#5 AS ss_item_sk#35]
+Input [7]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8, brand_id#24, class_id#25, category_id#26]
+
+(477) Exchange
+Input [1]: [ss_item_sk#35]
+Arguments: hashpartitioning(ss_item_sk#35, 100), ENSURE_REQUIREMENTS, [plan_id=70]
+
+(478) Sort
+Input [1]: [ss_item_sk#35]
+Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0
+
+(479) SortMergeJoin
+Left keys [1]: [i_item_sk#36]
+Right keys [1]: [ss_item_sk#35]
+Join type: LeftSemi
+Join condition: None
+
+(480) SortMergeJoin
+Left keys [1]: [ss_item_sk#2]
+Right keys [1]: [i_item_sk#36]
+Join type: Inner
+Join condition: None
+
+(481) Project
+Output [6]: [ss_sold_date_sk#1, ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_quantity#3, ss_list_price#4, i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39]
+
+(482) Exchange
+Input [6]: [ss_sold_date_sk#1, ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+Arguments: hashpartitioning(ss_sold_date_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=71]
+
+(483) Sort
+Input [6]: [ss_sold_date_sk#1, ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+Arguments: [ss_sold_date_sk#1 ASC NULLS FIRST], false, 0
+
+(484) Scan parquet
+Output [3]: [d_date_sk#40, d_year#41, d_moy#42]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,11), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(485) Filter
+Input [3]: [d_date_sk#40, d_year#41, d_moy#42]
+Condition : ((((isnotnull(d_year#41) AND isnotnull(d_moy#42)) AND (d_year#41 = 2001)) AND (d_moy#42 = 11)) AND isnotnull(d_date_sk#40))
+
+(486) Project
+Output [1]: [d_date_sk#40]
+Input [3]: [d_date_sk#40, d_year#41, d_moy#42]
+
+(487) Exchange
+Input [1]: [d_date_sk#40]
+Arguments: hashpartitioning(d_date_sk#40, 100), ENSURE_REQUIREMENTS, [plan_id=72]
+
+(488) Sort
+Input [1]: [d_date_sk#40]
+Arguments: [d_date_sk#40 ASC NULLS FIRST], false, 0
+
+(489) SortMergeJoin
+Left keys [1]: [ss_sold_date_sk#1]
+Right keys [1]: [d_date_sk#40]
+Join type: Inner
+Join condition: None
+
+(490) Project
+Output [5]: [ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+Input [7]: [ss_sold_date_sk#1, ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39, d_date_sk#40]
+
+(491) HashAggregate
+Input [5]: [ss_quantity#3, ss_list_price#4, i_brand_id#37, i_class_id#38, i_category_id#39]
+Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39]
+Functions [2]: [partial_sum((cast(ss_quantity#3 as decimal(10,0)) * ss_list_price#4)), partial_count(1)]
+Aggregate Attributes [3]: [sum#44, isEmpty#45, count#46]
+Results [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#110, isEmpty#111, count#112]
+
+(492) Exchange
+Input [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#110, isEmpty#111, count#112]
+Arguments: hashpartitioning(i_brand_id#37, i_class_id#38, i_category_id#39, 100), ENSURE_REQUIREMENTS, [plan_id=73]
+
+(493) HashAggregate
+Input [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#110, isEmpty#111, count#112]
+Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39]
+Functions [2]: [sum((cast(ss_quantity#3 as decimal(10,0)) * ss_list_price#4)), count(1)]
+Aggregate Attributes [2]: [sum((cast(ss_quantity#3 as decimal(10,0)) * ss_list_price#4))#47, count(1)#48]
+Results [5]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum((cast(ss_quantity#3 as decimal(10,0)) * ss_list_price#4))#47 AS sales#49, count(1)#48 AS number_sales#50]
+
+(494) Filter
+Input [5]: [i_brand_id#37, i_class_id#38, i_category_id#39, sales#49, number_sales#50]
+Condition : (isnotnull(sales#49) AND (cast(sales#49 as decimal(32,6)) > cast(Subquery subquery#51, [id=#52] as decimal(32,6))))
+
+(495) Project
+Output [6]: [sales#49, number_sales#50, store AS channel#53, i_brand_id#37 AS i_brand_id#54, i_class_id#38 AS i_class_id#55, i_category_id#39 AS i_category_id#56]
+Input [5]: [i_brand_id#37, i_class_id#38, i_category_id#39, sales#49, number_sales#50]
+
+(496) Scan parquet
+Output [4]: [cs_sold_date_sk#57, cs_item_sk#58, cs_quantity#59, cs_list_price#60]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_sold_date_sk)]
+ReadSchema: struct
+
+(497) Filter
+Input [4]: [cs_sold_date_sk#57, cs_item_sk#58, cs_quantity#59, cs_list_price#60]
+Condition : (isnotnull(cs_item_sk#58) AND isnotnull(cs_sold_date_sk#57))
+
+(498) Exchange
+Input [4]: [cs_sold_date_sk#57, cs_item_sk#58, cs_quantity#59, cs_list_price#60]
+Arguments: hashpartitioning(cs_item_sk#58, 100), ENSURE_REQUIREMENTS, [plan_id=74]
+
+(499) Sort
+Input [4]: [cs_sold_date_sk#57, cs_item_sk#58, cs_quantity#59, cs_list_price#60]
+Arguments: [cs_item_sk#58 ASC NULLS FIRST], false, 0
+
+(500) Scan parquet
+Output [4]: [i_item_sk#113, i_brand_id#114, i_class_id#115, i_category_id#116]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(501) Filter
+Input [4]: [i_item_sk#113, i_brand_id#114, i_class_id#115, i_category_id#116]
+Condition : ((isnotnull(i_brand_id#114) AND isnotnull(i_class_id#115)) AND isnotnull(i_category_id#116))
+
+(502) Exchange
+Input [4]: [i_item_sk#113, i_brand_id#114, i_class_id#115, i_category_id#116]
+Arguments: hashpartitioning(i_brand_id#114, i_class_id#115, i_category_id#116, 100), ENSURE_REQUIREMENTS, [plan_id=75]
+
+(503) Sort
+Input [4]: [i_item_sk#113, i_brand_id#114, i_class_id#115, i_category_id#116]
+Arguments: [i_brand_id#114 ASC NULLS FIRST, i_class_id#115 ASC NULLS FIRST, i_category_id#116 ASC NULLS FIRST], false, 0
+
+(504) Scan parquet
+Output [2]: [ss_sold_date_sk#117, ss_item_sk#118]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(505) Filter
+Input [2]: [ss_sold_date_sk#117, ss_item_sk#118]
+Condition : (isnotnull(ss_item_sk#118) AND isnotnull(ss_sold_date_sk#117))
+
+(506) Exchange
+Input [2]: [ss_sold_date_sk#117, ss_item_sk#118]
+Arguments: hashpartitioning(ss_item_sk#118, 100), ENSURE_REQUIREMENTS, [plan_id=76]
+
+(507) Sort
+Input [2]: [ss_sold_date_sk#117, ss_item_sk#118]
+Arguments: [ss_item_sk#118 ASC NULLS FIRST], false, 0
+
+(508) Scan parquet
+Output [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(509) Filter
+Input [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Condition : (((isnotnull(i_item_sk#119) AND isnotnull(i_brand_id#120)) AND isnotnull(i_class_id#121)) AND isnotnull(i_category_id#122))
+
+(510) Exchange
+Input [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: hashpartitioning(coalesce(i_brand_id#120, 0), isnull(i_brand_id#120), coalesce(i_class_id#121, 0), isnull(i_class_id#121), coalesce(i_category_id#122, 0), isnull(i_category_id#122), 100), ENSURE_REQUIREMENTS, [plan_id=77]
+
+(511) Sort
+Input [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: [coalesce(i_brand_id#120, 0) ASC NULLS FIRST, isnull(i_brand_id#120) ASC NULLS FIRST, coalesce(i_class_id#121, 0) ASC NULLS FIRST, isnull(i_class_id#121) ASC NULLS FIRST, coalesce(i_category_id#122, 0) ASC NULLS FIRST, isnull(i_category_id#122) ASC NULLS FIRST], false, 0
+
+(512) Scan parquet
+Output [2]: [cs_sold_date_sk#123, cs_item_sk#124]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_sold_date_sk)]
+ReadSchema: struct
+
+(513) Filter
+Input [2]: [cs_sold_date_sk#123, cs_item_sk#124]
+Condition : (isnotnull(cs_item_sk#124) AND isnotnull(cs_sold_date_sk#123))
+
+(514) Exchange
+Input [2]: [cs_sold_date_sk#123, cs_item_sk#124]
+Arguments: hashpartitioning(cs_item_sk#124, 100), ENSURE_REQUIREMENTS, [plan_id=78]
+
+(515) Sort
+Input [2]: [cs_sold_date_sk#123, cs_item_sk#124]
+Arguments: [cs_item_sk#124 ASC NULLS FIRST], false, 0
+
+(516) Scan parquet
+Output [4]: [i_item_sk#125, i_brand_id#126, i_class_id#127, i_category_id#128]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(517) Filter
+Input [4]: [i_item_sk#125, i_brand_id#126, i_class_id#127, i_category_id#128]
+Condition : isnotnull(i_item_sk#125)
+
+(518) Exchange
+Input [4]: [i_item_sk#125, i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: hashpartitioning(i_item_sk#125, 100), ENSURE_REQUIREMENTS, [plan_id=79]
+
+(519) Sort
+Input [4]: [i_item_sk#125, i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: [i_item_sk#125 ASC NULLS FIRST], false, 0
+
+(520) SortMergeJoin
+Left keys [1]: [cs_item_sk#124]
+Right keys [1]: [i_item_sk#125]
+Join type: Inner
+Join condition: None
+
+(521) Project
+Output [4]: [cs_sold_date_sk#123, i_brand_id#126, i_class_id#127, i_category_id#128]
+Input [6]: [cs_sold_date_sk#123, cs_item_sk#124, i_item_sk#125, i_brand_id#126, i_class_id#127, i_category_id#128]
+
+(522) Exchange
+Input [4]: [cs_sold_date_sk#123, i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: hashpartitioning(cs_sold_date_sk#123, 100), ENSURE_REQUIREMENTS, [plan_id=80]
+
+(523) Sort
+Input [4]: [cs_sold_date_sk#123, i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: [cs_sold_date_sk#123 ASC NULLS FIRST], false, 0
+
+(524) Scan parquet
+Output [2]: [d_date_sk#129, d_year#130]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(525) Filter
+Input [2]: [d_date_sk#129, d_year#130]
+Condition : (((isnotnull(d_year#130) AND (d_year#130 >= 1999)) AND (d_year#130 <= 2001)) AND isnotnull(d_date_sk#129))
+
+(526) Project
+Output [1]: [d_date_sk#129]
+Input [2]: [d_date_sk#129, d_year#130]
+
+(527) Exchange
+Input [1]: [d_date_sk#129]
+Arguments: hashpartitioning(d_date_sk#129, 100), ENSURE_REQUIREMENTS, [plan_id=81]
+
+(528) Sort
+Input [1]: [d_date_sk#129]
+Arguments: [d_date_sk#129 ASC NULLS FIRST], false, 0
+
+(529) SortMergeJoin
+Left keys [1]: [cs_sold_date_sk#123]
+Right keys [1]: [d_date_sk#129]
+Join type: Inner
+Join condition: None
+
+(530) Project
+Output [3]: [i_brand_id#126, i_class_id#127, i_category_id#128]
+Input [5]: [cs_sold_date_sk#123, i_brand_id#126, i_class_id#127, i_category_id#128, d_date_sk#129]
+
+(531) Exchange
+Input [3]: [i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: hashpartitioning(coalesce(i_brand_id#126, 0), isnull(i_brand_id#126), coalesce(i_class_id#127, 0), isnull(i_class_id#127), coalesce(i_category_id#128, 0), isnull(i_category_id#128), 100), ENSURE_REQUIREMENTS, [plan_id=82]
+
+(532) Sort
+Input [3]: [i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: [coalesce(i_brand_id#126, 0) ASC NULLS FIRST, isnull(i_brand_id#126) ASC NULLS FIRST, coalesce(i_class_id#127, 0) ASC NULLS FIRST, isnull(i_class_id#127) ASC NULLS FIRST, coalesce(i_category_id#128, 0) ASC NULLS FIRST, isnull(i_category_id#128) ASC NULLS FIRST], false, 0
+
+(533) SortMergeJoin
+Left keys [6]: [coalesce(i_brand_id#120, 0), isnull(i_brand_id#120), coalesce(i_class_id#121, 0), isnull(i_class_id#121), coalesce(i_category_id#122, 0), isnull(i_category_id#122)]
+Right keys [6]: [coalesce(i_brand_id#126, 0), isnull(i_brand_id#126), coalesce(i_class_id#127, 0), isnull(i_class_id#127), coalesce(i_category_id#128, 0), isnull(i_category_id#128)]
+Join type: LeftSemi
+Join condition: None
+
+(534) Exchange
+Input [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: hashpartitioning(i_item_sk#119, 100), ENSURE_REQUIREMENTS, [plan_id=83]
+
+(535) Sort
+Input [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: [i_item_sk#119 ASC NULLS FIRST], false, 0
+
+(536) SortMergeJoin
+Left keys [1]: [ss_item_sk#118]
+Right keys [1]: [i_item_sk#119]
+Join type: Inner
+Join condition: None
+
+(537) Project
+Output [4]: [ss_sold_date_sk#117, i_brand_id#120, i_class_id#121, i_category_id#122]
+Input [6]: [ss_sold_date_sk#117, ss_item_sk#118, i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+
+(538) Exchange
+Input [4]: [ss_sold_date_sk#117, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: hashpartitioning(ss_sold_date_sk#117, 100), ENSURE_REQUIREMENTS, [plan_id=84]
+
+(539) Sort
+Input [4]: [ss_sold_date_sk#117, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: [ss_sold_date_sk#117 ASC NULLS FIRST], false, 0
+
+(540) Scan parquet
+Output [2]: [d_date_sk#131, d_year#132]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(541) Filter
+Input [2]: [d_date_sk#131, d_year#132]
+Condition : (((isnotnull(d_year#132) AND (d_year#132 >= 1999)) AND (d_year#132 <= 2001)) AND isnotnull(d_date_sk#131))
+
+(542) Project
+Output [1]: [d_date_sk#131]
+Input [2]: [d_date_sk#131, d_year#132]
+
+(543) Exchange
+Input [1]: [d_date_sk#131]
+Arguments: hashpartitioning(d_date_sk#131, 100), ENSURE_REQUIREMENTS, [plan_id=85]
+
+(544) Sort
+Input [1]: [d_date_sk#131]
+Arguments: [d_date_sk#131 ASC NULLS FIRST], false, 0
+
+(545) SortMergeJoin
+Left keys [1]: [ss_sold_date_sk#117]
+Right keys [1]: [d_date_sk#131]
+Join type: Inner
+Join condition: None
+
+(546) Project
+Output [3]: [i_brand_id#120 AS brand_id#24, i_class_id#121 AS class_id#25, i_category_id#122 AS category_id#26]
+Input [5]: [ss_sold_date_sk#117, i_brand_id#120, i_class_id#121, i_category_id#122, d_date_sk#131]
+
+(547) HashAggregate
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [3]: [brand_id#24, class_id#25, category_id#26]
+
+(548) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(brand_id#24, class_id#25, category_id#26, 100), ENSURE_REQUIREMENTS, [plan_id=86]
+
+(549) HashAggregate
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [3]: [brand_id#24, class_id#25, category_id#26]
+
+(550) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(coalesce(brand_id#24, 0), isnull(brand_id#24), coalesce(class_id#25, 0), isnull(class_id#25), coalesce(category_id#26, 0), isnull(category_id#26), 100), ENSURE_REQUIREMENTS, [plan_id=87]
+
+(551) Sort
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: [coalesce(brand_id#24, 0) ASC NULLS FIRST, isnull(brand_id#24) ASC NULLS FIRST, coalesce(class_id#25, 0) ASC NULLS FIRST, isnull(class_id#25) ASC NULLS FIRST, coalesce(category_id#26, 0) ASC NULLS FIRST, isnull(category_id#26) ASC NULLS FIRST], false, 0
+
+(552) Scan parquet
+Output [2]: [ws_sold_date_sk#133, ws_item_sk#134]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(553) Filter
+Input [2]: [ws_sold_date_sk#133, ws_item_sk#134]
+Condition : (isnotnull(ws_item_sk#134) AND isnotnull(ws_sold_date_sk#133))
+
+(554) Exchange
+Input [2]: [ws_sold_date_sk#133, ws_item_sk#134]
+Arguments: hashpartitioning(ws_item_sk#134, 100), ENSURE_REQUIREMENTS, [plan_id=88]
+
+(555) Sort
+Input [2]: [ws_sold_date_sk#133, ws_item_sk#134]
+Arguments: [ws_item_sk#134 ASC NULLS FIRST], false, 0
+
+(556) Scan parquet
+Output [4]: [i_item_sk#135, i_brand_id#136, i_class_id#137, i_category_id#138]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(557) Filter
+Input [4]: [i_item_sk#135, i_brand_id#136, i_class_id#137, i_category_id#138]
+Condition : isnotnull(i_item_sk#135)
+
+(558) Exchange
+Input [4]: [i_item_sk#135, i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: hashpartitioning(i_item_sk#135, 100), ENSURE_REQUIREMENTS, [plan_id=89]
+
+(559) Sort
+Input [4]: [i_item_sk#135, i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: [i_item_sk#135 ASC NULLS FIRST], false, 0
+
+(560) SortMergeJoin
+Left keys [1]: [ws_item_sk#134]
+Right keys [1]: [i_item_sk#135]
+Join type: Inner
+Join condition: None
+
+(561) Project
+Output [4]: [ws_sold_date_sk#133, i_brand_id#136, i_class_id#137, i_category_id#138]
+Input [6]: [ws_sold_date_sk#133, ws_item_sk#134, i_item_sk#135, i_brand_id#136, i_class_id#137, i_category_id#138]
+
+(562) Exchange
+Input [4]: [ws_sold_date_sk#133, i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: hashpartitioning(ws_sold_date_sk#133, 100), ENSURE_REQUIREMENTS, [plan_id=90]
+
+(563) Sort
+Input [4]: [ws_sold_date_sk#133, i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: [ws_sold_date_sk#133 ASC NULLS FIRST], false, 0
+
+(564) Scan parquet
+Output [2]: [d_date_sk#139, d_year#140]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(565) Filter
+Input [2]: [d_date_sk#139, d_year#140]
+Condition : (((isnotnull(d_year#140) AND (d_year#140 >= 1999)) AND (d_year#140 <= 2001)) AND isnotnull(d_date_sk#139))
+
+(566) Project
+Output [1]: [d_date_sk#139]
+Input [2]: [d_date_sk#139, d_year#140]
+
+(567) Exchange
+Input [1]: [d_date_sk#139]
+Arguments: hashpartitioning(d_date_sk#139, 100), ENSURE_REQUIREMENTS, [plan_id=91]
+
+(568) Sort
+Input [1]: [d_date_sk#139]
+Arguments: [d_date_sk#139 ASC NULLS FIRST], false, 0
+
+(569) SortMergeJoin
+Left keys [1]: [ws_sold_date_sk#133]
+Right keys [1]: [d_date_sk#139]
+Join type: Inner
+Join condition: None
+
+(570) Project
+Output [3]: [i_brand_id#136, i_class_id#137, i_category_id#138]
+Input [5]: [ws_sold_date_sk#133, i_brand_id#136, i_class_id#137, i_category_id#138, d_date_sk#139]
+
+(571) Exchange
+Input [3]: [i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: hashpartitioning(coalesce(i_brand_id#136, 0), isnull(i_brand_id#136), coalesce(i_class_id#137, 0), isnull(i_class_id#137), coalesce(i_category_id#138, 0), isnull(i_category_id#138), 100), ENSURE_REQUIREMENTS, [plan_id=92]
+
+(572) Sort
+Input [3]: [i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: [coalesce(i_brand_id#136, 0) ASC NULLS FIRST, isnull(i_brand_id#136) ASC NULLS FIRST, coalesce(i_class_id#137, 0) ASC NULLS FIRST, isnull(i_class_id#137) ASC NULLS FIRST, coalesce(i_category_id#138, 0) ASC NULLS FIRST, isnull(i_category_id#138) ASC NULLS FIRST], false, 0
+
+(573) SortMergeJoin
+Left keys [6]: [coalesce(brand_id#24, 0), isnull(brand_id#24), coalesce(class_id#25, 0), isnull(class_id#25), coalesce(category_id#26, 0), isnull(category_id#26)]
+Right keys [6]: [coalesce(i_brand_id#136, 0), isnull(i_brand_id#136), coalesce(i_class_id#137, 0), isnull(i_class_id#137), coalesce(i_category_id#138, 0), isnull(i_category_id#138)]
+Join type: LeftSemi
+Join condition: None
+
+(574) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(brand_id#24, class_id#25, category_id#26, 100), ENSURE_REQUIREMENTS, [plan_id=93]
+
+(575) Sort
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: [brand_id#24 ASC NULLS FIRST, class_id#25 ASC NULLS FIRST, category_id#26 ASC NULLS FIRST], false, 0
+
+(576) SortMergeJoin
+Left keys [3]: [i_brand_id#114, i_class_id#115, i_category_id#116]
+Right keys [3]: [brand_id#24, class_id#25, category_id#26]
+Join type: Inner
+Join condition: None
+
+(577) Project
+Output [1]: [i_item_sk#113 AS ss_item_sk#61]
+Input [7]: [i_item_sk#113, i_brand_id#114, i_class_id#115, i_category_id#116, brand_id#24, class_id#25, category_id#26]
+
+(578) Exchange
+Input [1]: [ss_item_sk#61]
+Arguments: hashpartitioning(ss_item_sk#61, 100), ENSURE_REQUIREMENTS, [plan_id=94]
+
+(579) Sort
+Input [1]: [ss_item_sk#61]
+Arguments: [ss_item_sk#61 ASC NULLS FIRST], false, 0
+
+(580) SortMergeJoin
+Left keys [1]: [cs_item_sk#58]
+Right keys [1]: [ss_item_sk#61]
+Join type: LeftSemi
+Join condition: None
+
+(581) Scan parquet
+Output [4]: [i_item_sk#62, i_brand_id#63, i_class_id#64, i_category_id#65]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(582) Filter
+Input [4]: [i_item_sk#62, i_brand_id#63, i_class_id#64, i_category_id#65]
+Condition : isnotnull(i_item_sk#62)
+
+(583) Exchange
+Input [4]: [i_item_sk#62, i_brand_id#63, i_class_id#64, i_category_id#65]
+Arguments: hashpartitioning(i_item_sk#62, 100), ENSURE_REQUIREMENTS, [plan_id=95]
+
+(584) Sort
+Input [4]: [i_item_sk#62, i_brand_id#63, i_class_id#64, i_category_id#65]
+Arguments: [i_item_sk#62 ASC NULLS FIRST], false, 0
+
+(585) Scan parquet
+Output [4]: [i_item_sk#113, i_brand_id#114, i_class_id#115, i_category_id#116]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(586) Filter
+Input [4]: [i_item_sk#113, i_brand_id#114, i_class_id#115, i_category_id#116]
+Condition : ((isnotnull(i_brand_id#114) AND isnotnull(i_class_id#115)) AND isnotnull(i_category_id#116))
+
+(587) Exchange
+Input [4]: [i_item_sk#113, i_brand_id#114, i_class_id#115, i_category_id#116]
+Arguments: hashpartitioning(i_brand_id#114, i_class_id#115, i_category_id#116, 100), ENSURE_REQUIREMENTS, [plan_id=96]
+
+(588) Sort
+Input [4]: [i_item_sk#113, i_brand_id#114, i_class_id#115, i_category_id#116]
+Arguments: [i_brand_id#114 ASC NULLS FIRST, i_class_id#115 ASC NULLS FIRST, i_category_id#116 ASC NULLS FIRST], false, 0
+
+(589) Scan parquet
+Output [2]: [ss_sold_date_sk#117, ss_item_sk#118]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(590) Filter
+Input [2]: [ss_sold_date_sk#117, ss_item_sk#118]
+Condition : (isnotnull(ss_item_sk#118) AND isnotnull(ss_sold_date_sk#117))
+
+(591) Exchange
+Input [2]: [ss_sold_date_sk#117, ss_item_sk#118]
+Arguments: hashpartitioning(ss_item_sk#118, 100), ENSURE_REQUIREMENTS, [plan_id=97]
+
+(592) Sort
+Input [2]: [ss_sold_date_sk#117, ss_item_sk#118]
+Arguments: [ss_item_sk#118 ASC NULLS FIRST], false, 0
+
+(593) Scan parquet
+Output [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(594) Filter
+Input [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Condition : (((isnotnull(i_item_sk#119) AND isnotnull(i_brand_id#120)) AND isnotnull(i_class_id#121)) AND isnotnull(i_category_id#122))
+
+(595) Exchange
+Input [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: hashpartitioning(coalesce(i_brand_id#120, 0), isnull(i_brand_id#120), coalesce(i_class_id#121, 0), isnull(i_class_id#121), coalesce(i_category_id#122, 0), isnull(i_category_id#122), 100), ENSURE_REQUIREMENTS, [plan_id=98]
+
+(596) Sort
+Input [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: [coalesce(i_brand_id#120, 0) ASC NULLS FIRST, isnull(i_brand_id#120) ASC NULLS FIRST, coalesce(i_class_id#121, 0) ASC NULLS FIRST, isnull(i_class_id#121) ASC NULLS FIRST, coalesce(i_category_id#122, 0) ASC NULLS FIRST, isnull(i_category_id#122) ASC NULLS FIRST], false, 0
+
+(597) Scan parquet
+Output [2]: [cs_sold_date_sk#123, cs_item_sk#124]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_sold_date_sk)]
+ReadSchema: struct
+
+(598) Filter
+Input [2]: [cs_sold_date_sk#123, cs_item_sk#124]
+Condition : (isnotnull(cs_item_sk#124) AND isnotnull(cs_sold_date_sk#123))
+
+(599) Exchange
+Input [2]: [cs_sold_date_sk#123, cs_item_sk#124]
+Arguments: hashpartitioning(cs_item_sk#124, 100), ENSURE_REQUIREMENTS, [plan_id=99]
+
+(600) Sort
+Input [2]: [cs_sold_date_sk#123, cs_item_sk#124]
+Arguments: [cs_item_sk#124 ASC NULLS FIRST], false, 0
+
+(601) Scan parquet
+Output [4]: [i_item_sk#125, i_brand_id#126, i_class_id#127, i_category_id#128]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(602) Filter
+Input [4]: [i_item_sk#125, i_brand_id#126, i_class_id#127, i_category_id#128]
+Condition : isnotnull(i_item_sk#125)
+
+(603) Exchange
+Input [4]: [i_item_sk#125, i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: hashpartitioning(i_item_sk#125, 100), ENSURE_REQUIREMENTS, [plan_id=100]
+
+(604) Sort
+Input [4]: [i_item_sk#125, i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: [i_item_sk#125 ASC NULLS FIRST], false, 0
+
+(605) SortMergeJoin
+Left keys [1]: [cs_item_sk#124]
+Right keys [1]: [i_item_sk#125]
+Join type: Inner
+Join condition: None
+
+(606) Project
+Output [4]: [cs_sold_date_sk#123, i_brand_id#126, i_class_id#127, i_category_id#128]
+Input [6]: [cs_sold_date_sk#123, cs_item_sk#124, i_item_sk#125, i_brand_id#126, i_class_id#127, i_category_id#128]
+
+(607) Exchange
+Input [4]: [cs_sold_date_sk#123, i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: hashpartitioning(cs_sold_date_sk#123, 100), ENSURE_REQUIREMENTS, [plan_id=101]
+
+(608) Sort
+Input [4]: [cs_sold_date_sk#123, i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: [cs_sold_date_sk#123 ASC NULLS FIRST], false, 0
+
+(609) Scan parquet
+Output [2]: [d_date_sk#129, d_year#130]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(610) Filter
+Input [2]: [d_date_sk#129, d_year#130]
+Condition : (((isnotnull(d_year#130) AND (d_year#130 >= 1999)) AND (d_year#130 <= 2001)) AND isnotnull(d_date_sk#129))
+
+(611) Project
+Output [1]: [d_date_sk#129]
+Input [2]: [d_date_sk#129, d_year#130]
+
+(612) Exchange
+Input [1]: [d_date_sk#129]
+Arguments: hashpartitioning(d_date_sk#129, 100), ENSURE_REQUIREMENTS, [plan_id=102]
+
+(613) Sort
+Input [1]: [d_date_sk#129]
+Arguments: [d_date_sk#129 ASC NULLS FIRST], false, 0
+
+(614) SortMergeJoin
+Left keys [1]: [cs_sold_date_sk#123]
+Right keys [1]: [d_date_sk#129]
+Join type: Inner
+Join condition: None
+
+(615) Project
+Output [3]: [i_brand_id#126, i_class_id#127, i_category_id#128]
+Input [5]: [cs_sold_date_sk#123, i_brand_id#126, i_class_id#127, i_category_id#128, d_date_sk#129]
+
+(616) Exchange
+Input [3]: [i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: hashpartitioning(coalesce(i_brand_id#126, 0), isnull(i_brand_id#126), coalesce(i_class_id#127, 0), isnull(i_class_id#127), coalesce(i_category_id#128, 0), isnull(i_category_id#128), 100), ENSURE_REQUIREMENTS, [plan_id=103]
+
+(617) Sort
+Input [3]: [i_brand_id#126, i_class_id#127, i_category_id#128]
+Arguments: [coalesce(i_brand_id#126, 0) ASC NULLS FIRST, isnull(i_brand_id#126) ASC NULLS FIRST, coalesce(i_class_id#127, 0) ASC NULLS FIRST, isnull(i_class_id#127) ASC NULLS FIRST, coalesce(i_category_id#128, 0) ASC NULLS FIRST, isnull(i_category_id#128) ASC NULLS FIRST], false, 0
+
+(618) SortMergeJoin
+Left keys [6]: [coalesce(i_brand_id#120, 0), isnull(i_brand_id#120), coalesce(i_class_id#121, 0), isnull(i_class_id#121), coalesce(i_category_id#122, 0), isnull(i_category_id#122)]
+Right keys [6]: [coalesce(i_brand_id#126, 0), isnull(i_brand_id#126), coalesce(i_class_id#127, 0), isnull(i_class_id#127), coalesce(i_category_id#128, 0), isnull(i_category_id#128)]
+Join type: LeftSemi
+Join condition: None
+
+(619) Exchange
+Input [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: hashpartitioning(i_item_sk#119, 100), ENSURE_REQUIREMENTS, [plan_id=104]
+
+(620) Sort
+Input [4]: [i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: [i_item_sk#119 ASC NULLS FIRST], false, 0
+
+(621) SortMergeJoin
+Left keys [1]: [ss_item_sk#118]
+Right keys [1]: [i_item_sk#119]
+Join type: Inner
+Join condition: None
+
+(622) Project
+Output [4]: [ss_sold_date_sk#117, i_brand_id#120, i_class_id#121, i_category_id#122]
+Input [6]: [ss_sold_date_sk#117, ss_item_sk#118, i_item_sk#119, i_brand_id#120, i_class_id#121, i_category_id#122]
+
+(623) Exchange
+Input [4]: [ss_sold_date_sk#117, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: hashpartitioning(ss_sold_date_sk#117, 100), ENSURE_REQUIREMENTS, [plan_id=105]
+
+(624) Sort
+Input [4]: [ss_sold_date_sk#117, i_brand_id#120, i_class_id#121, i_category_id#122]
+Arguments: [ss_sold_date_sk#117 ASC NULLS FIRST], false, 0
+
+(625) Scan parquet
+Output [2]: [d_date_sk#131, d_year#132]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(626) Filter
+Input [2]: [d_date_sk#131, d_year#132]
+Condition : (((isnotnull(d_year#132) AND (d_year#132 >= 1999)) AND (d_year#132 <= 2001)) AND isnotnull(d_date_sk#131))
+
+(627) Project
+Output [1]: [d_date_sk#131]
+Input [2]: [d_date_sk#131, d_year#132]
+
+(628) Exchange
+Input [1]: [d_date_sk#131]
+Arguments: hashpartitioning(d_date_sk#131, 100), ENSURE_REQUIREMENTS, [plan_id=106]
+
+(629) Sort
+Input [1]: [d_date_sk#131]
+Arguments: [d_date_sk#131 ASC NULLS FIRST], false, 0
+
+(630) SortMergeJoin
+Left keys [1]: [ss_sold_date_sk#117]
+Right keys [1]: [d_date_sk#131]
+Join type: Inner
+Join condition: None
+
+(631) Project
+Output [3]: [i_brand_id#120 AS brand_id#24, i_class_id#121 AS class_id#25, i_category_id#122 AS category_id#26]
+Input [5]: [ss_sold_date_sk#117, i_brand_id#120, i_class_id#121, i_category_id#122, d_date_sk#131]
+
+(632) HashAggregate
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [3]: [brand_id#24, class_id#25, category_id#26]
+
+(633) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(brand_id#24, class_id#25, category_id#26, 100), ENSURE_REQUIREMENTS, [plan_id=107]
+
+(634) HashAggregate
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [3]: [brand_id#24, class_id#25, category_id#26]
+
+(635) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(coalesce(brand_id#24, 0), isnull(brand_id#24), coalesce(class_id#25, 0), isnull(class_id#25), coalesce(category_id#26, 0), isnull(category_id#26), 100), ENSURE_REQUIREMENTS, [plan_id=108]
+
+(636) Sort
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: [coalesce(brand_id#24, 0) ASC NULLS FIRST, isnull(brand_id#24) ASC NULLS FIRST, coalesce(class_id#25, 0) ASC NULLS FIRST, isnull(class_id#25) ASC NULLS FIRST, coalesce(category_id#26, 0) ASC NULLS FIRST, isnull(category_id#26) ASC NULLS FIRST], false, 0
+
+(637) Scan parquet
+Output [2]: [ws_sold_date_sk#133, ws_item_sk#134]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(638) Filter
+Input [2]: [ws_sold_date_sk#133, ws_item_sk#134]
+Condition : (isnotnull(ws_item_sk#134) AND isnotnull(ws_sold_date_sk#133))
+
+(639) Exchange
+Input [2]: [ws_sold_date_sk#133, ws_item_sk#134]
+Arguments: hashpartitioning(ws_item_sk#134, 100), ENSURE_REQUIREMENTS, [plan_id=109]
+
+(640) Sort
+Input [2]: [ws_sold_date_sk#133, ws_item_sk#134]
+Arguments: [ws_item_sk#134 ASC NULLS FIRST], false, 0
+
+(641) Scan parquet
+Output [4]: [i_item_sk#135, i_brand_id#136, i_class_id#137, i_category_id#138]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(642) Filter
+Input [4]: [i_item_sk#135, i_brand_id#136, i_class_id#137, i_category_id#138]
+Condition : isnotnull(i_item_sk#135)
+
+(643) Exchange
+Input [4]: [i_item_sk#135, i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: hashpartitioning(i_item_sk#135, 100), ENSURE_REQUIREMENTS, [plan_id=110]
+
+(644) Sort
+Input [4]: [i_item_sk#135, i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: [i_item_sk#135 ASC NULLS FIRST], false, 0
+
+(645) SortMergeJoin
+Left keys [1]: [ws_item_sk#134]
+Right keys [1]: [i_item_sk#135]
+Join type: Inner
+Join condition: None
+
+(646) Project
+Output [4]: [ws_sold_date_sk#133, i_brand_id#136, i_class_id#137, i_category_id#138]
+Input [6]: [ws_sold_date_sk#133, ws_item_sk#134, i_item_sk#135, i_brand_id#136, i_class_id#137, i_category_id#138]
+
+(647) Exchange
+Input [4]: [ws_sold_date_sk#133, i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: hashpartitioning(ws_sold_date_sk#133, 100), ENSURE_REQUIREMENTS, [plan_id=111]
+
+(648) Sort
+Input [4]: [ws_sold_date_sk#133, i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: [ws_sold_date_sk#133 ASC NULLS FIRST], false, 0
+
+(649) Scan parquet
+Output [2]: [d_date_sk#139, d_year#140]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(650) Filter
+Input [2]: [d_date_sk#139, d_year#140]
+Condition : (((isnotnull(d_year#140) AND (d_year#140 >= 1999)) AND (d_year#140 <= 2001)) AND isnotnull(d_date_sk#139))
+
+(651) Project
+Output [1]: [d_date_sk#139]
+Input [2]: [d_date_sk#139, d_year#140]
+
+(652) Exchange
+Input [1]: [d_date_sk#139]
+Arguments: hashpartitioning(d_date_sk#139, 100), ENSURE_REQUIREMENTS, [plan_id=112]
+
+(653) Sort
+Input [1]: [d_date_sk#139]
+Arguments: [d_date_sk#139 ASC NULLS FIRST], false, 0
+
+(654) SortMergeJoin
+Left keys [1]: [ws_sold_date_sk#133]
+Right keys [1]: [d_date_sk#139]
+Join type: Inner
+Join condition: None
+
+(655) Project
+Output [3]: [i_brand_id#136, i_class_id#137, i_category_id#138]
+Input [5]: [ws_sold_date_sk#133, i_brand_id#136, i_class_id#137, i_category_id#138, d_date_sk#139]
+
+(656) Exchange
+Input [3]: [i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: hashpartitioning(coalesce(i_brand_id#136, 0), isnull(i_brand_id#136), coalesce(i_class_id#137, 0), isnull(i_class_id#137), coalesce(i_category_id#138, 0), isnull(i_category_id#138), 100), ENSURE_REQUIREMENTS, [plan_id=113]
+
+(657) Sort
+Input [3]: [i_brand_id#136, i_class_id#137, i_category_id#138]
+Arguments: [coalesce(i_brand_id#136, 0) ASC NULLS FIRST, isnull(i_brand_id#136) ASC NULLS FIRST, coalesce(i_class_id#137, 0) ASC NULLS FIRST, isnull(i_class_id#137) ASC NULLS FIRST, coalesce(i_category_id#138, 0) ASC NULLS FIRST, isnull(i_category_id#138) ASC NULLS FIRST], false, 0
+
+(658) SortMergeJoin
+Left keys [6]: [coalesce(brand_id#24, 0), isnull(brand_id#24), coalesce(class_id#25, 0), isnull(class_id#25), coalesce(category_id#26, 0), isnull(category_id#26)]
+Right keys [6]: [coalesce(i_brand_id#136, 0), isnull(i_brand_id#136), coalesce(i_class_id#137, 0), isnull(i_class_id#137), coalesce(i_category_id#138, 0), isnull(i_category_id#138)]
+Join type: LeftSemi
+Join condition: None
+
+(659) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(brand_id#24, class_id#25, category_id#26, 100), ENSURE_REQUIREMENTS, [plan_id=114]
+
+(660) Sort
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: [brand_id#24 ASC NULLS FIRST, class_id#25 ASC NULLS FIRST, category_id#26 ASC NULLS FIRST], false, 0
+
+(661) SortMergeJoin
+Left keys [3]: [i_brand_id#114, i_class_id#115, i_category_id#116]
+Right keys [3]: [brand_id#24, class_id#25, category_id#26]
+Join type: Inner
+Join condition: None
+
+(662) Project
+Output [1]: [i_item_sk#113 AS ss_item_sk#61]
+Input [7]: [i_item_sk#113, i_brand_id#114, i_class_id#115, i_category_id#116, brand_id#24, class_id#25, category_id#26]
+
+(663) Exchange
+Input [1]: [ss_item_sk#61]
+Arguments: hashpartitioning(ss_item_sk#61, 100), ENSURE_REQUIREMENTS, [plan_id=115]
+
+(664) Sort
+Input [1]: [ss_item_sk#61]
+Arguments: [ss_item_sk#61 ASC NULLS FIRST], false, 0
+
+(665) SortMergeJoin
+Left keys [1]: [i_item_sk#62]
+Right keys [1]: [ss_item_sk#61]
+Join type: LeftSemi
+Join condition: None
+
+(666) SortMergeJoin
+Left keys [1]: [cs_item_sk#58]
+Right keys [1]: [i_item_sk#62]
+Join type: Inner
+Join condition: None
+
+(667) Project
+Output [6]: [cs_sold_date_sk#57, cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+Input [8]: [cs_sold_date_sk#57, cs_item_sk#58, cs_quantity#59, cs_list_price#60, i_item_sk#62, i_brand_id#63, i_class_id#64, i_category_id#65]
+
+(668) Exchange
+Input [6]: [cs_sold_date_sk#57, cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+Arguments: hashpartitioning(cs_sold_date_sk#57, 100), ENSURE_REQUIREMENTS, [plan_id=116]
+
+(669) Sort
+Input [6]: [cs_sold_date_sk#57, cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+Arguments: [cs_sold_date_sk#57 ASC NULLS FIRST], false, 0
+
+(670) Scan parquet
+Output [3]: [d_date_sk#66, d_year#141, d_moy#142]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,11), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(671) Filter
+Input [3]: [d_date_sk#66, d_year#141, d_moy#142]
+Condition : ((((isnotnull(d_year#141) AND isnotnull(d_moy#142)) AND (d_year#141 = 2001)) AND (d_moy#142 = 11)) AND isnotnull(d_date_sk#66))
+
+(672) Project
+Output [1]: [d_date_sk#66]
+Input [3]: [d_date_sk#66, d_year#141, d_moy#142]
+
+(673) Exchange
+Input [1]: [d_date_sk#66]
+Arguments: hashpartitioning(d_date_sk#66, 100), ENSURE_REQUIREMENTS, [plan_id=117]
+
+(674) Sort
+Input [1]: [d_date_sk#66]
+Arguments: [d_date_sk#66 ASC NULLS FIRST], false, 0
+
+(675) SortMergeJoin
+Left keys [1]: [cs_sold_date_sk#57]
+Right keys [1]: [d_date_sk#66]
+Join type: Inner
+Join condition: None
+
+(676) Project
+Output [5]: [cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+Input [7]: [cs_sold_date_sk#57, cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65, d_date_sk#66]
+
+(677) HashAggregate
+Input [5]: [cs_quantity#59, cs_list_price#60, i_brand_id#63, i_class_id#64, i_category_id#65]
+Keys [3]: [i_brand_id#63, i_class_id#64, i_category_id#65]
+Functions [2]: [partial_sum((cast(cs_quantity#59 as decimal(10,0)) * cs_list_price#60)), partial_count(1)]
+Aggregate Attributes [3]: [sum#68, isEmpty#69, count#70]
+Results [6]: [i_brand_id#63, i_class_id#64, i_category_id#65, sum#143, isEmpty#144, count#145]
+
+(678) Exchange
+Input [6]: [i_brand_id#63, i_class_id#64, i_category_id#65, sum#143, isEmpty#144, count#145]
+Arguments: hashpartitioning(i_brand_id#63, i_class_id#64, i_category_id#65, 100), ENSURE_REQUIREMENTS, [plan_id=118]
+
+(679) HashAggregate
+Input [6]: [i_brand_id#63, i_class_id#64, i_category_id#65, sum#143, isEmpty#144, count#145]
+Keys [3]: [i_brand_id#63, i_class_id#64, i_category_id#65]
+Functions [2]: [sum((cast(cs_quantity#59 as decimal(10,0)) * cs_list_price#60)), count(1)]
+Aggregate Attributes [2]: [sum((cast(cs_quantity#59 as decimal(10,0)) * cs_list_price#60))#71, count(1)#72]
+Results [5]: [i_brand_id#63, i_class_id#64, i_category_id#65, sum((cast(cs_quantity#59 as decimal(10,0)) * cs_list_price#60))#71 AS sales#73, count(1)#72 AS number_sales#74]
+
+(680) Filter
+Input [5]: [i_brand_id#63, i_class_id#64, i_category_id#65, sales#73, number_sales#74]
+Condition : (isnotnull(sales#73) AND (cast(sales#73 as decimal(32,6)) > cast(Subquery subquery#146, [id=#147] as decimal(32,6))))
+
+(681) Project
+Output [6]: [sales#73, number_sales#74, catalog AS channel#75, i_brand_id#63, i_class_id#64, i_category_id#65]
+Input [5]: [i_brand_id#63, i_class_id#64, i_category_id#65, sales#73, number_sales#74]
+
+(682) Scan parquet
+Output [4]: [ws_sold_date_sk#76, ws_item_sk#77, ws_quantity#78, ws_list_price#79]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_sold_date_sk)]
+ReadSchema: struct
+
+(683) Filter
+Input [4]: [ws_sold_date_sk#76, ws_item_sk#77, ws_quantity#78, ws_list_price#79]
+Condition : (isnotnull(ws_item_sk#77) AND isnotnull(ws_sold_date_sk#76))
+
+(684) Exchange
+Input [4]: [ws_sold_date_sk#76, ws_item_sk#77, ws_quantity#78, ws_list_price#79]
+Arguments: hashpartitioning(ws_item_sk#77, 100), ENSURE_REQUIREMENTS, [plan_id=119]
+
+(685) Sort
+Input [4]: [ws_sold_date_sk#76, ws_item_sk#77, ws_quantity#78, ws_list_price#79]
+Arguments: [ws_item_sk#77 ASC NULLS FIRST], false, 0
+
+(686) Scan parquet
+Output [4]: [i_item_sk#148, i_brand_id#149, i_class_id#150, i_category_id#151]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(687) Filter
+Input [4]: [i_item_sk#148, i_brand_id#149, i_class_id#150, i_category_id#151]
+Condition : ((isnotnull(i_brand_id#149) AND isnotnull(i_class_id#150)) AND isnotnull(i_category_id#151))
+
+(688) Exchange
+Input [4]: [i_item_sk#148, i_brand_id#149, i_class_id#150, i_category_id#151]
+Arguments: hashpartitioning(i_brand_id#149, i_class_id#150, i_category_id#151, 100), ENSURE_REQUIREMENTS, [plan_id=120]
+
+(689) Sort
+Input [4]: [i_item_sk#148, i_brand_id#149, i_class_id#150, i_category_id#151]
+Arguments: [i_brand_id#149 ASC NULLS FIRST, i_class_id#150 ASC NULLS FIRST, i_category_id#151 ASC NULLS FIRST], false, 0
+
+(690) Scan parquet
+Output [2]: [ss_sold_date_sk#152, ss_item_sk#153]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_sold_date_sk)]
+ReadSchema: struct
+
+(691) Filter
+Input [2]: [ss_sold_date_sk#152, ss_item_sk#153]
+Condition : (isnotnull(ss_item_sk#153) AND isnotnull(ss_sold_date_sk#152))
+
+(692) Exchange
+Input [2]: [ss_sold_date_sk#152, ss_item_sk#153]
+Arguments: hashpartitioning(ss_item_sk#153, 100), ENSURE_REQUIREMENTS, [plan_id=121]
+
+(693) Sort
+Input [2]: [ss_sold_date_sk#152, ss_item_sk#153]
+Arguments: [ss_item_sk#153 ASC NULLS FIRST], false, 0
+
+(694) Scan parquet
+Output [4]: [i_item_sk#154, i_brand_id#155, i_class_id#156, i_category_id#157]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
+ReadSchema: struct
+
+(695) Filter
+Input [4]: [i_item_sk#154, i_brand_id#155, i_class_id#156, i_category_id#157]
+Condition : (((isnotnull(i_item_sk#154) AND isnotnull(i_brand_id#155)) AND isnotnull(i_class_id#156)) AND isnotnull(i_category_id#157))
+
+(696) Exchange
+Input [4]: [i_item_sk#154, i_brand_id#155, i_class_id#156, i_category_id#157]
+Arguments: hashpartitioning(coalesce(i_brand_id#155, 0), isnull(i_brand_id#155), coalesce(i_class_id#156, 0), isnull(i_class_id#156), coalesce(i_category_id#157, 0), isnull(i_category_id#157), 100), ENSURE_REQUIREMENTS, [plan_id=122]
+
+(697) Sort
+Input [4]: [i_item_sk#154, i_brand_id#155, i_class_id#156, i_category_id#157]
+Arguments: [coalesce(i_brand_id#155, 0) ASC NULLS FIRST, isnull(i_brand_id#155) ASC NULLS FIRST, coalesce(i_class_id#156, 0) ASC NULLS FIRST, isnull(i_class_id#156) ASC NULLS FIRST, coalesce(i_category_id#157, 0) ASC NULLS FIRST, isnull(i_category_id#157) ASC NULLS FIRST], false, 0
+
+(698) Scan parquet
+Output [2]: [cs_sold_date_sk#158, cs_item_sk#159]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_sold_date_sk)]
+ReadSchema: struct
+
+(699) Filter
+Input [2]: [cs_sold_date_sk#158, cs_item_sk#159]
+Condition : (isnotnull(cs_item_sk#159) AND isnotnull(cs_sold_date_sk#158))
+
+(700) Exchange
+Input [2]: [cs_sold_date_sk#158, cs_item_sk#159]
+Arguments: hashpartitioning(cs_item_sk#159, 100), ENSURE_REQUIREMENTS, [plan_id=123]
+
+(701) Sort
+Input [2]: [cs_sold_date_sk#158, cs_item_sk#159]
+Arguments: [cs_item_sk#159 ASC NULLS FIRST], false, 0
+
+(702) Scan parquet
+Output [4]: [i_item_sk#160, i_brand_id#161, i_class_id#162, i_category_id#163]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(i_item_sk)]
+ReadSchema: struct
+
+(703) Filter
+Input [4]: [i_item_sk#160, i_brand_id#161, i_class_id#162, i_category_id#163]
+Condition : isnotnull(i_item_sk#160)
+
+(704) Exchange
+Input [4]: [i_item_sk#160, i_brand_id#161, i_class_id#162, i_category_id#163]
+Arguments: hashpartitioning(i_item_sk#160, 100), ENSURE_REQUIREMENTS, [plan_id=124]
+
+(705) Sort
+Input [4]: [i_item_sk#160, i_brand_id#161, i_class_id#162, i_category_id#163]
+Arguments: [i_item_sk#160 ASC NULLS FIRST], false, 0
+
+(706) SortMergeJoin
+Left keys [1]: [cs_item_sk#159]
+Right keys [1]: [i_item_sk#160]
+Join type: Inner
+Join condition: None
+
+(707) Project
+Output [4]: [cs_sold_date_sk#158, i_brand_id#161, i_class_id#162, i_category_id#163]
+Input [6]: [cs_sold_date_sk#158, cs_item_sk#159, i_item_sk#160, i_brand_id#161, i_class_id#162, i_category_id#163]
+
+(708) Exchange
+Input [4]: [cs_sold_date_sk#158, i_brand_id#161, i_class_id#162, i_category_id#163]
+Arguments: hashpartitioning(cs_sold_date_sk#158, 100), ENSURE_REQUIREMENTS, [plan_id=125]
+
+(709) Sort
+Input [4]: [cs_sold_date_sk#158, i_brand_id#161, i_class_id#162, i_category_id#163]
+Arguments: [cs_sold_date_sk#158 ASC NULLS FIRST], false, 0
+
+(710) Scan parquet
+Output [2]: [d_date_sk#164, d_year#165]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(711) Filter
+Input [2]: [d_date_sk#164, d_year#165]
+Condition : (((isnotnull(d_year#165) AND (d_year#165 >= 1999)) AND (d_year#165 <= 2001)) AND isnotnull(d_date_sk#164))
+
+(712) Project
+Output [1]: [d_date_sk#164]
+Input [2]: [d_date_sk#164, d_year#165]
+
+(713) Exchange
+Input [1]: [d_date_sk#164]
+Arguments: hashpartitioning(d_date_sk#164, 100), ENSURE_REQUIREMENTS, [plan_id=126]
+
+(714) Sort
+Input [1]: [d_date_sk#164]
+Arguments: [d_date_sk#164 ASC NULLS FIRST], false, 0
+
+(715) SortMergeJoin
+Left keys [1]: [cs_sold_date_sk#158]
+Right keys [1]: [d_date_sk#164]
+Join type: Inner
+Join condition: None
+
+(716) Project
+Output [3]: [i_brand_id#161, i_class_id#162, i_category_id#163]
+Input [5]: [cs_sold_date_sk#158, i_brand_id#161, i_class_id#162, i_category_id#163, d_date_sk#164]
+
+(717) Exchange
+Input [3]: [i_brand_id#161, i_class_id#162, i_category_id#163]
+Arguments: hashpartitioning(coalesce(i_brand_id#161, 0), isnull(i_brand_id#161), coalesce(i_class_id#162, 0), isnull(i_class_id#162), coalesce(i_category_id#163, 0), isnull(i_category_id#163), 100), ENSURE_REQUIREMENTS, [plan_id=127]
+
+(718) Sort
+Input [3]: [i_brand_id#161, i_class_id#162, i_category_id#163]
+Arguments: [coalesce(i_brand_id#161, 0) ASC NULLS FIRST, isnull(i_brand_id#161) ASC NULLS FIRST, coalesce(i_class_id#162, 0) ASC NULLS FIRST, isnull(i_class_id#162) ASC NULLS FIRST, coalesce(i_category_id#163, 0) ASC NULLS FIRST, isnull(i_category_id#163) ASC NULLS FIRST], false, 0
+
+(719) SortMergeJoin
+Left keys [6]: [coalesce(i_brand_id#155, 0), isnull(i_brand_id#155), coalesce(i_class_id#156, 0), isnull(i_class_id#156), coalesce(i_category_id#157, 0), isnull(i_category_id#157)]
+Right keys [6]: [coalesce(i_brand_id#161, 0), isnull(i_brand_id#161), coalesce(i_class_id#162, 0), isnull(i_class_id#162), coalesce(i_category_id#163, 0), isnull(i_category_id#163)]
+Join type: LeftSemi
+Join condition: None
+
+(720) Exchange
+Input [4]: [i_item_sk#154, i_brand_id#155, i_class_id#156, i_category_id#157]
+Arguments: hashpartitioning(i_item_sk#154, 100), ENSURE_REQUIREMENTS, [plan_id=128]
+
+(721) Sort
+Input [4]: [i_item_sk#154, i_brand_id#155, i_class_id#156, i_category_id#157]
+Arguments: [i_item_sk#154 ASC NULLS FIRST], false, 0
+
+(722) SortMergeJoin
+Left keys [1]: [ss_item_sk#153]
+Right keys [1]: [i_item_sk#154]
+Join type: Inner
+Join condition: None
+
+(723) Project
+Output [4]: [ss_sold_date_sk#152, i_brand_id#155, i_class_id#156, i_category_id#157]
+Input [6]: [ss_sold_date_sk#152, ss_item_sk#153, i_item_sk#154, i_brand_id#155, i_class_id#156, i_category_id#157]
+
+(724) Exchange
+Input [4]: [ss_sold_date_sk#152, i_brand_id#155, i_class_id#156, i_category_id#157]
+Arguments: hashpartitioning(ss_sold_date_sk#152, 100), ENSURE_REQUIREMENTS, [plan_id=129]
+
+(725) Sort
+Input [4]: [ss_sold_date_sk#152, i_brand_id#155, i_class_id#156, i_category_id#157]
+Arguments: [ss_sold_date_sk#152 ASC NULLS FIRST], false, 0
+
+(726) Scan parquet
+Output [2]: [d_date_sk#166, d_year#167]
+Batched: true
+Location: InMemoryFileIndex [file:/]
+PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)]
+ReadSchema: struct
+
+(727) Filter
+Input [2]: [d_date_sk#166, d_year#167]
+Condition : (((isnotnull(d_year#167) AND (d_year#167 >= 1999)) AND (d_year#167 <= 2001)) AND isnotnull(d_date_sk#166))
+
+(728) Project
+Output [1]: [d_date_sk#166]
+Input [2]: [d_date_sk#166, d_year#167]
+
+(729) Exchange
+Input [1]: [d_date_sk#166]
+Arguments: hashpartitioning(d_date_sk#166, 100), ENSURE_REQUIREMENTS, [plan_id=130]
+
+(730) Sort
+Input [1]: [d_date_sk#166]
+Arguments: [d_date_sk#166 ASC NULLS FIRST], false, 0
+
+(731) SortMergeJoin
+Left keys [1]: [ss_sold_date_sk#152]
+Right keys [1]: [d_date_sk#166]
+Join type: Inner
+Join condition: None
+
+(732) Project
+Output [3]: [i_brand_id#155 AS brand_id#24, i_class_id#156 AS class_id#25, i_category_id#157 AS category_id#26]
+Input [5]: [ss_sold_date_sk#152, i_brand_id#155, i_class_id#156, i_category_id#157, d_date_sk#166]
+
+(733) HashAggregate
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [3]: [brand_id#24, class_id#25, category_id#26]
+
+(734) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(brand_id#24, class_id#25, category_id#26, 100), ENSURE_REQUIREMENTS, [plan_id=131]
+
+(735) HashAggregate
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Keys [3]: [brand_id#24, class_id#25, category_id#26]
+Functions: []
+Aggregate Attributes: []
+Results [3]: [brand_id#24, class_id#25, category_id#26]
+
+(736) Exchange
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: hashpartitioning(coalesce(brand_id#24, 0), isnull(brand_id#24), coalesce(class_id#25, 0), isnull(class_id#25), coalesce(category_id#26, 0), isnull(category_id#26), 100), ENSURE_REQUIREMENTS, [plan_id=132]
+
+(737) Sort
+Input [3]: [brand_id#24, class_id#25, category_id#26]
+Arguments: [coalesce(brand_id#24, 0) ASC NULLS FIRST, isnull(brand_id#24) ASC NULLS FIRST, coalesce(class_id#25, 0) ASC NULLS FIRST, isnull(class_id#25) ASC NULLS FIRST, coalesce(category_id#26, 0) ASC NULLS FIRST, isnull(category_id#26) ASC NULLS FIRST], false, 0
+
+(738) Scan parquet
+Output [2]: [ws_sold_date_sk#168, ws_item_sk#169]
+Batched: true
+Location: InMemoryFileIndex [file:/