From 33832e2431dbdf770b369535aad1395ec1738d54 Mon Sep 17 00:00:00 2001 From: brijrajk <22271048+brijrajk@users.noreply.github.com> Date: Sun, 28 Jun 2026 23:00:30 +0530 Subject: [PATCH 1/3] [GLUTEN-12013][VL] Fix bloom-filter bytes corruption on whole-stage AQE fallback (incl. SPARK-54336) BloomFilterMightContainJointRewriteRule keeps a bloom-filter producer (bloom_filter_agg) and its consumer (might_contain) on the same serialized byte format, so they never end up mismatched (Velox version=1 vs Spark version=0) when AQE promotes an individual-stage fallback to a whole-stage fallback -- the original GLUTEN-12013 crash (java.io.IOException: Unexpected Bloom filter version number). The rule runs as a Rule[LogicalPlan] via injectOptimizerRule (Operator Optimization batch), so the substitution is captured in the originalPlan snapshot that ExpandFallbackPolicy uses when promoting a stage fallback to a whole-stage AQE fallback -- both sides stay consistent regardless of which stages fall back to JVM execution. - might_contain(ScalarSubquery(...), col) with a plain column value: rewrite both the inner aggregate and the outer might-contain to their Velox forms. - might_contain(ScalarSubquery(...), ) -- e.g. a literal, as in SPARK-54336: might_contain((SELECT bloom_filter_agg(col) FROM t), 0L): leave both vanilla (version=0), which also preserves vanilla's NULL-on-empty-input semantics. Rewriting only the outer side caused kBloomFilterV1 == version (1 vs. 0). - Standalone BloomFilterAggregate (e.g. DataFrame.stat.bloomFilter()) is never matched, so its bytes stay Spark-native (fixes GlutenDataFrameStatSuite). Because the rule runs before InjectRuntimeFilter and MergeScalarSubqueries, DPP/runtime-filter might_contain expressions and ScalarSubqueryReference nodes are never observed here, so no special handling is needed for them. Adds GlutenBloomFilterFallbackSuite (gluten-ut/test) covering: only-filter-stage fallback (threshold=2), both-stages fallback (threshold=1), DataFrame.stat.bloomFilter() standalone usage, native-bloom-filter-disabled early-exit, and the SPARK-54336 literal-value query. Also removes the now-unused CallerInfo.isBloomFilterStatFunction() helper. Co-Authored-By: Claude Sonnet 4.6 Co-Authored-By: Claude Opus 4.8 (1M context) --- .../backendsapi/velox/VeloxRuleApi.scala | 6 +- ...omFilterMightContainJointRewriteRule.scala | 113 ++++---- .../gluten/extension/caller/CallerInfo.scala | 19 +- .../sql/GlutenBloomFilterFallbackSuite.scala | 269 ++++++++++++++++++ 4 files changed, 334 insertions(+), 73 deletions(-) create mode 100644 gluten-ut/test/src/test/scala/org/apache/gluten/sql/GlutenBloomFilterFallbackSuite.scala diff --git a/backends-velox/src/main/scala/org/apache/gluten/backendsapi/velox/VeloxRuleApi.scala b/backends-velox/src/main/scala/org/apache/gluten/backendsapi/velox/VeloxRuleApi.scala index d63928527df..dd2c4defc8b 100644 --- a/backends-velox/src/main/scala/org/apache/gluten/backendsapi/velox/VeloxRuleApi.scala +++ b/backends-velox/src/main/scala/org/apache/gluten/backendsapi/velox/VeloxRuleApi.scala @@ -53,6 +53,7 @@ object VeloxRuleApi { private def injectSpark(injector: SparkInjector): Unit = { // Inject the regular Spark rules directly. injector.injectOptimizerRule(CollectRewriteRule.apply) + injector.injectOptimizerRule(BloomFilterMightContainJointRewriteRule.apply) injector.injectOptimizerRule(HLLRewriteRule.apply) injector.injectOptimizerRule(CollapseGetJsonObjectExpressionRule.apply) injector.injectOptimizerRule(RewriteCastFromArray.apply) @@ -81,11 +82,6 @@ object VeloxRuleApi { injector.injectPreTransform(c => FallbackMultiCodegens.apply(c.session)) injector.injectPreTransform(c => MergeTwoPhasesHashBaseAggregate(c.session)) injector.injectPreTransform(_ => RewriteSubqueryBroadcast()) - injector.injectPreTransform( - c => - BloomFilterMightContainJointRewriteRule.apply( - c.session, - c.caller.isBloomFilterStatFunction())) injector.injectPreTransform(_ => EliminateRedundantGetTimestamp) // Legacy: The legacy transform rule. diff --git a/backends-velox/src/main/scala/org/apache/gluten/extension/BloomFilterMightContainJointRewriteRule.scala b/backends-velox/src/main/scala/org/apache/gluten/extension/BloomFilterMightContainJointRewriteRule.scala index efbedc6ca00..c51fb3a2167 100644 --- a/backends-velox/src/main/scala/org/apache/gluten/extension/BloomFilterMightContainJointRewriteRule.scala +++ b/backends-velox/src/main/scala/org/apache/gluten/extension/BloomFilterMightContainJointRewriteRule.scala @@ -21,63 +21,70 @@ import org.apache.gluten.expression.VeloxBloomFilterMightContain import org.apache.gluten.expression.aggregate.VeloxBloomFilterAggregate import org.apache.spark.sql.SparkSession -import org.apache.spark.sql.catalyst.expressions.{BinaryExpression, BloomFilterMightContain, Expression} -import org.apache.spark.sql.catalyst.expressions.aggregate.{BloomFilterAggregate, TypedImperativeAggregate} +import org.apache.spark.sql.catalyst.expressions.{Attribute, BloomFilterMightContain, ScalarSubquery} +import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, BloomFilterAggregate} +import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.catalyst.rules.Rule -import org.apache.spark.sql.execution.SparkPlan -case class BloomFilterMightContainJointRewriteRule( - spark: SparkSession, - isBloomFilterStatFunction: Boolean) - extends Rule[SparkPlan] { - override def apply(plan: SparkPlan): SparkPlan = { - if (isBloomFilterStatFunction || !GlutenConfig.get.enableNativeBloomFilter) { +/** + * Optimizer rule that rewrites `BloomFilterAggregate` -> `VeloxBloomFilterAggregate` and + * `BloomFilterMightContain` -> `VeloxBloomFilterMightContain` at the logical plan level. + * + * Running as an optimizer rule ensures the substitution is captured in the `originalPlan` snapshot + * that [[org.apache.gluten.extension.columnar.heuristic.ExpandFallbackPolicy]] uses when promoting + * an individual stage fallback to a whole-stage AQE fallback. This guarantees that both sides of + * the bloom-filter pair always produce and consume the same byte format, regardless of whether + * stages fall back to JVM execution after AQE re-planning. + * + * The aggregate (producer) and the might-contain (consumer) are always rewritten as a pair, or not + * at all, so they never end up on different serialized byte formats: + * - `might_contain(ScalarSubquery(...), col)` with a plain column value ([[Attribute]]): rewrite + * both to their Velox forms (version=1). This is the user-facing filter path that GLUTEN-12013 + * protects across whole-stage AQE fallback. + * - `might_contain(ScalarSubquery(...), )` (e.g. a literal, as in SPARK-54336): leave + * both vanilla (version=0). Rewriting only the outer side to Velox while the inner aggregate + * stayed vanilla `bloom_filter_agg` is exactly what caused the `kBloomFilterV1 == version` (1 + * vs. 0) crash. + * + * Standalone `BloomFilterAggregate` (e.g., `DataFrame.stat.bloomFilter()`) is never matched, so its + * bytes stay in Spark-native format. DPP/runtime-filter `might_contain` expressions are injected by + * Spark's `InjectRuntimeFilter`, which runs after this rule's batch, so they are never seen here. + */ +case class BloomFilterMightContainJointRewriteRule(spark: SparkSession) + extends Rule[LogicalPlan] { + + override def apply(plan: LogicalPlan): LogicalPlan = { + if (!GlutenConfig.get.enableNativeBloomFilter) { return plan } - val out = plan.transformWithSubqueries { - case p => - applyForNode(p) - } - out - } - - private def replaceBloomFilterAggregate[T]( - expr: Expression, - bloomFilterAggReplacer: ( - Expression, - Expression, - Expression, - Int, - Int) => TypedImperativeAggregate[T]): Expression = expr match { - case BloomFilterAggregate( - child, - estimatedNumItemsExpression, - numBitsExpression, - mutableAggBufferOffset, - inputAggBufferOffset) => - bloomFilterAggReplacer( - child, - estimatedNumItemsExpression, - numBitsExpression, - mutableAggBufferOffset, - inputAggBufferOffset) - case other => other - } - - private def replaceMightContain[T]( - expr: Expression, - mightContainReplacer: (Expression, Expression) => BinaryExpression): Expression = expr match { - case BloomFilterMightContain(bloomFilterExpression, valueExpression) => - mightContainReplacer(bloomFilterExpression, valueExpression) - case other => other - } - - private def applyForNode(p: SparkPlan) = { - p.transformExpressions { - case e => - replaceMightContain( - replaceBloomFilterAggregate(e, VeloxBloomFilterAggregate.apply), - VeloxBloomFilterMightContain.apply) + plan.transformAllExpressions { + case BloomFilterMightContain(subq: ScalarSubquery, v: Attribute) => + // User-facing bloom filter: value is a plain column reference. + // Rewrite both the outer might-contain and the inner aggregate to Velox format so that + // both sides always produce/consume the same byte layout (even when one stage falls back). + val rewrittenPlan = subq.plan.transformAllExpressions { + case ae @ AggregateExpression(b: BloomFilterAggregate, _, _, _, _) => + ae.copy(aggregateFunction = VeloxBloomFilterAggregate( + b.child, + b.estimatedNumItemsExpression, + b.numBitsExpression, + b.mutableAggBufferOffset, + b.inputAggBufferOffset)) + } + VeloxBloomFilterMightContain(subq.withNewPlan(rewrittenPlan), v) + case bfmc @ BloomFilterMightContain(_: ScalarSubquery, _) => + // Inline subquery whose value is NOT a plain column -- e.g. a literal, as in SPARK-54336 + // (`might_contain((SELECT bloom_filter_agg(col) FROM t), 0L)`). Leave BOTH the inner + // aggregate and the outer might-contain as vanilla Spark expressions so they stay on the + // same Spark-native (version=0) byte format, and so an empty aggregate input still yields + // vanilla's NULL bloom filter. Rewriting only the outer side to Velox (which expects + // version=1) while the inner aggregate stays vanilla `bloom_filter_agg` (no Substrait + // mapping -> JVM -> version=0) is what caused the `kBloomFilterV1 == version` (1 vs. 0) + // crash. + bfmc + case BloomFilterMightContain(bf, v) => + // Pre-computed literal bloom filter bytes -- rewrite to consume Velox-format bytes. + VeloxBloomFilterMightContain(bf, v) } } } diff --git a/gluten-core/src/main/scala/org/apache/gluten/extension/caller/CallerInfo.scala b/gluten-core/src/main/scala/org/apache/gluten/extension/caller/CallerInfo.scala index 7dfaaaa774c..f7bd42916bf 100644 --- a/gluten-core/src/main/scala/org/apache/gluten/extension/caller/CallerInfo.scala +++ b/gluten-core/src/main/scala/org/apache/gluten/extension/caller/CallerInfo.scala @@ -30,7 +30,6 @@ trait CallerInfo { def isAqe(): Boolean def isCache(): Boolean def isStreaming(): Boolean - def isBloomFilterStatFunction(): Boolean } object CallerInfo { @@ -42,8 +41,7 @@ object CallerInfo { private class Impl( override val isAqe: Boolean, override val isCache: Boolean, - override val isStreaming: Boolean, - override val isBloomFilterStatFunction: Boolean + override val isStreaming: Boolean ) extends CallerInfo /* @@ -57,8 +55,7 @@ object CallerInfo { new Impl( isAqe = inAqeCall(stack), isCache = inCacheCall(stack), - isStreaming = inStreamingCall(stack), - isBloomFilterStatFunction = inBloomFilterStatFunctionCall(stack)) + isStreaming = inStreamingCall(stack)) } private def inAqeCall(stack: Seq[StackTraceElement]): Boolean = { @@ -78,21 +75,13 @@ object CallerInfo { stack.exists(_.getClassName.equals(streamName)) } - private def inBloomFilterStatFunctionCall(stack: Seq[StackTraceElement]): Boolean = { - val res = stack.exists( - _.getClassName.equals("org.apache.spark.sql.DataFrameStatFunctions") - && stack.exists(_.getMethodName.equals("bloomFilter"))) - res - } - /** For testing only. */ def withLocalValue[T]( isAqe: Boolean, isCache: Boolean, - isStreaming: Boolean = false, - isBloomFilterStatFunction: Boolean = false)(body: => T): T = { + isStreaming: Boolean = false)(body: => T): T = { val prevValue = localStorage.get() - val newValue = new Impl(isAqe, isCache, isStreaming, isBloomFilterStatFunction) + val newValue = new Impl(isAqe, isCache, isStreaming) localStorage.set(Some(newValue)) try { body diff --git a/gluten-ut/test/src/test/scala/org/apache/gluten/sql/GlutenBloomFilterFallbackSuite.scala b/gluten-ut/test/src/test/scala/org/apache/gluten/sql/GlutenBloomFilterFallbackSuite.scala new file mode 100644 index 00000000000..c89e0144072 --- /dev/null +++ b/gluten-ut/test/src/test/scala/org/apache/gluten/sql/GlutenBloomFilterFallbackSuite.scala @@ -0,0 +1,269 @@ +/* + * 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. + */ +package org.apache.gluten.sql + +import org.apache.gluten.backendsapi.BackendsApiManager +import org.apache.gluten.config.GlutenConfig +import org.apache.gluten.execution.WholeStageTransformerSuite + +import org.apache.spark.sql.Row +import org.apache.spark.sql.catalyst.FunctionIdentifier +import org.apache.spark.sql.catalyst.expressions.BloomFilterMightContain +import org.apache.spark.sql.catalyst.expressions.ExpressionInfo +import org.apache.spark.sql.catalyst.expressions.aggregate.BloomFilterAggregate +import org.apache.spark.sql.internal.SQLConf + +/** + * Regression tests for https://github.com/apache/gluten/issues/12013. + * + * Verifies that `BloomFilterMightContainJointRewriteRule`, registered as a `Rule[LogicalPlan]` via + * `injectOptimizerRule`, keeps the bloom-filter producer (`bloom_filter_agg`) and consumer + * (`might_contain`) on a consistent serialized byte format -- both across whole-stage AQE fallback + * (column-valued filters, rewritten to their Velox forms) and for a `might_contain` whose value is + * a literal rather than a column (SPARK-54336), which must leave both sides vanilla. + */ +class GlutenBloomFilterFallbackSuite extends WholeStageTransformerSuite { + protected val resourcePath: String = null + protected val fileFormat: String = null + + import testImplicits._ + + private val funcIdBloomFilterAgg = FunctionIdentifier("bloom_filter_agg") + private val funcIdMightContain = FunctionIdentifier("might_contain") + + override def beforeAll(): Unit = { + super.beforeAll() + spark.sessionState.functionRegistry.registerFunction( + funcIdBloomFilterAgg, + new ExpressionInfo(classOf[BloomFilterAggregate].getName, "bloom_filter_agg"), + args => + args.size match { + case 1 => new BloomFilterAggregate(args(0)) + case 2 => new BloomFilterAggregate(args(0), args(1)) + case 3 => new BloomFilterAggregate(args(0), args(1), args(2)) + case _ => throw new IllegalArgumentException("bloom_filter_agg requires 1-3 arguments") + } + ) + spark.sessionState.functionRegistry.registerFunction( + funcIdMightContain, + new ExpressionInfo(classOf[BloomFilterMightContain].getName, "might_contain"), + args => BloomFilterMightContain(args(0), args(1))) + } + + override def afterAll(): Unit = { + spark.sessionState.functionRegistry.dropFunction(funcIdBloomFilterAgg) + spark.sessionState.functionRegistry.dropFunction(funcIdMightContain) + super.afterAll() + } + + private val veloxBloomFilterMaxNumBits = 4194304L + + // GLUTEN-12013: only filter stage falls back (threshold=2). + // bloom_filter_agg subquery runs natively and produces Velox-format bytes; the filter stage + // falls back via ExpandFallbackPolicy. The optimizer-level substitution ensures the fallback + // plan still uses VeloxBloomFilterMightContain so the JVM filter reads Velox-format bytes. + test("GLUTEN-12013: bloom_filter_agg whole-stage fallback does not corrupt bloom filter bytes") { + if (BackendsApiManager.getSettings.requireBloomFilterAggMightContainJointFallback()) { + val table = "bloom_filter_test" + val numEstimatedItems = 5000000L + val sqlString = + s""" + |SELECT col positive_membership_test + |FROM $table + |WHERE might_contain( + | (SELECT bloom_filter_agg(col, + | cast($numEstimatedItems as long), + | cast($veloxBloomFilterMaxNumBits as long)) + | FROM $table), col) + |""".stripMargin + withTempView(table) { + (Seq(Long.MinValue, 0, Long.MaxValue) ++ (1L to 200000L)) + .toDF("col") + .createOrReplaceTempView(table) + // Threshold=2: FilterExec fallback cost=2 triggers whole-stage fallback; agg cost=1 + // does not, so Stage 0 runs natively. ANSI off keeps agg cost at 1 on Spark 4.0+. + withSQLConf( + GlutenConfig.COLUMNAR_FILTER_ENABLED.key -> "false", + GlutenConfig.COLUMNAR_WHOLESTAGE_FALLBACK_THRESHOLD.key -> "2", + SQLConf.ANSI_ENABLED.key -> "false" + ) { + val df = spark.sql(sqlString) + // Must not throw: java.io.IOException: Unexpected Bloom filter version number. + assert(df.collect().length == 200003) + // Verify the optimizer rule ran: VeloxBloomFilterMightContain must be present even + // though Stage 1 executes inside a FallbackNode. + assert( + df.queryExecution.optimizedPlan.toString.contains("velox_might_contain"), + "Expected velox_might_contain in optimized plan -- optimizer rule may not have run" + ) + } + } + } + } + + // GLUTEN-12013: both stages fall back (threshold=1). + // Stage 0's inherent transition cost of 1 meets the threshold so ExpandFallbackPolicy + // promotes it to a whole-stage fallback too. The optimizer rule has already rewritten both + // sides to Velox variants before ExpandFallbackPolicy captures its snapshot. Even in JVM + // row-mode, VeloxBloomFilterAggregate produces Velox-format bytes (via JNI) and + // VeloxBloomFilterMightContain consumes them -- both sides are consistent. + test("GLUTEN-12013: bloom_filter_agg whole-stage fallback when both stages fall back") { + if (BackendsApiManager.getSettings.requireBloomFilterAggMightContainJointFallback()) { + val table = "bloom_filter_test" + val numEstimatedItems = 5000000L + val sqlString = + s""" + |SELECT col positive_membership_test + |FROM $table + |WHERE might_contain( + | (SELECT bloom_filter_agg(col, + | cast($numEstimatedItems as long), + | cast($veloxBloomFilterMaxNumBits as long)) + | FROM $table), col) + |""".stripMargin + withTempView(table) { + (Seq(Long.MinValue, 0, Long.MaxValue) ++ (1L to 200000L)) + .toDF("col") + .createOrReplaceTempView(table) + // Threshold=1: both stages fall back; both use Velox variants via JNI. + withSQLConf( + GlutenConfig.COLUMNAR_FILTER_ENABLED.key -> "false", + GlutenConfig.COLUMNAR_WHOLESTAGE_FALLBACK_THRESHOLD.key -> "1", + SQLConf.ANSI_ENABLED.key -> "false" + ) { + val df = spark.sql(sqlString) + // Must not throw: java.io.IOException: Unexpected Bloom filter version number. + assert(df.collect().length == 200003) + // Verify the optimizer rule ran on both sides. + assert( + df.queryExecution.optimizedPlan.toString.contains("velox_might_contain"), + "Expected velox_might_contain in optimized plan -- optimizer rule may not have run" + ) + } + } + } + } + + // GLUTEN-12013: DataFrame.stat.bloomFilter() must not be affected by the optimizer rule. + // The rule must only rewrite BloomFilterAggregate inside a BloomFilterMightContain subquery. + // A standalone BloomFilterAggregate (as used here) must remain vanilla so that the collected + // bytes are in Spark-native format and BloomFilter.readFrom() succeeds. + test("GLUTEN-12013: DataFrame.stat.bloomFilter() produces Spark-readable bytes") { + if (BackendsApiManager.getSettings.requireBloomFilterAggMightContainJointFallback()) { + val table = "bloom_filter_stat_test" + withTempView(table) { + (1L to 1000L).toDF("col").createOrReplaceTempView(table) + // Must not throw: java.io.IOException: Unexpected Bloom filter version number + val bf = spark.table(table).stat.bloomFilter("col", 1000L, 0.01) + // Bloom filters have no false negatives: every inserted value must be present. + assert(bf.mightContainLong(500L), "Expected 500 to be in bloom filter") + } + } + } + + // GLUTEN-12013: native bloom filter disabled -- early-exit path of the optimizer rule. + // When spark.gluten.sql.native.bloomFilter=false the rule returns the plan unchanged. + // BloomFilterAggregate / BloomFilterMightContain remain as vanilla Spark expressions and + // produce/consume consistent Spark-format bytes. + test( + "GLUTEN-12013: native bloom filter disabled skips rewrite and produces correct results") { + if (BackendsApiManager.getSettings.requireBloomFilterAggMightContainJointFallback()) { + val table = "bloom_filter_test" + val numEstimatedItems = 5000000L + val sqlString = + s""" + |SELECT col positive_membership_test + |FROM $table + |WHERE might_contain( + | (SELECT bloom_filter_agg(col, + | cast($numEstimatedItems as long), + | cast($veloxBloomFilterMaxNumBits as long)) + | FROM $table), col) + |""".stripMargin + withTempView(table) { + (Seq(Long.MinValue, 0, Long.MaxValue) ++ (1L to 200000L)) + .toDF("col") + .createOrReplaceTempView(table) + withSQLConf( + GlutenConfig.COLUMNAR_NATIVE_BLOOMFILTER_ENABLED.key -> "false", + SQLConf.ANSI_ENABLED.key -> "false" + ) { + val df = spark.sql(sqlString) + assert(df.collect().length == 200003) + // Verify the rule early-exited: plan must NOT contain Velox variants. + assert( + !df.queryExecution.optimizedPlan.toString.contains("velox_might_contain"), + "Expected vanilla BloomFilterMightContain when native bloom filter is disabled" + ) + } + } + } + } + + // SPARK-54336 / GLUTEN-12013: a might_contain whose value argument is a literal (not a column), + // fed by a nested scalar subquery. This mirrors Spark's upstream + // `BloomFilterAggregateQuerySuite."SPARK-54336"`. For a non-column value the rule must leave + // BOTH the inner bloom_filter_agg and the outer might_contain vanilla so they stay on the same + // Spark-native (version=0) byte format. Previously only the outer side was rewritten to Velox + // (version=1), while the inner aggregate -- having no Substrait mapping -- fell back to JVM and + // emitted version=0 bytes, so velox_might_contain failed to deserialize them + // (kBloomFilterV1 == version, 1 vs. 0). + // + // Gated to Spark 4.0+: the query exercises the exact `MergeScalarSubqueries` path that Spark's + // own SPARK-54336 fixes, and that fix only exists in Spark 4.0.2+/4.1. On earlier Spark the + // analyzer/optimizer throws `UnresolvedException` (dataType on an unresolved ScalarSubquery) + // before Gluten's rule runs, so there is nothing for this test to verify there. + testWithMinSparkVersion( + "GLUTEN-12013: might_contain with a literal value keeps both sides vanilla (SPARK-54336)", + "4.0") { + if (BackendsApiManager.getSettings.requireBloomFilterAggMightContainJointFallback()) { + val table = "bloom_filter_lit_test" + withTempView(table) { + // Single non-null row [0]; the bloom filter therefore contains 0L. + Seq(0L).toDF("col").createOrReplaceTempView(table) + val sqlString = + s""" + |SELECT + | (SELECT + | first(might_contain( + | (SELECT bloom_filter_agg(col) FROM $table), + | 0L + | )) + | FROM $table) + |FROM $table + |""".stripMargin + // Codegen-off, matching the upstream BloomFilterAggregateQuerySuiteCGOff variant that + // originally surfaced this crash. + withSQLConf( + SQLConf.WHOLESTAGE_CODEGEN_ENABLED.key -> "false", + SQLConf.CODEGEN_FACTORY_MODE.key -> "NO_CODEGEN", + SQLConf.ANSI_ENABLED.key -> "false" + ) { + val df = spark.sql(sqlString) + // For a literal value, neither side is offloaded to Velox: both stay vanilla so the + // byte formats are consistent (version=0). + assert( + !df.queryExecution.optimizedPlan.toString.contains("velox_might_contain"), + "Expected the literal-valued might_contain to stay vanilla, not velox_might_contain" + ) + // Must not throw kBloomFilterV1 == version (1 vs. 0); 0L was inserted, so it is present. + checkAnswer(df, Row(true)) + } + } + } + } +} From 932ff73cf81297a2bfc65a2c99a22da73bf97823 Mon Sep 17 00:00:00 2001 From: brijrajk <22271048+brijrajk@users.noreply.github.com> Date: Sun, 28 Jun 2026 23:00:30 +0530 Subject: [PATCH 2/3] [GLUTEN-12013][VL] Regenerate TPC-DS plan-stability goldens for Spark 4.0/4.1 BloomFilterMightContainJointRewriteRule now runs as a logical optimizer rule and rewrites BloomFilterAggregate/BloomFilterMightContain to their Velox forms (velox_bloom_filter_agg / velox_might_contain) for the affected TPC-DS queries. Regenerate the spark40 and spark41 plan-stability golden files accordingly. Operator structure (simplified.txt) is unchanged for non-bloom queries. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../q10.sf100/explain.txt | 416 ++--- .../q10.sf100/simplified.txt | 45 +- .../q59.sf100/explain.txt | 496 +++-- .../q59.sf100/simplified.txt | 94 +- .../q10.sf100/explain.txt | 434 ++--- .../q10.sf100/simplified.txt | 45 +- .../q16.sf100/explain.txt | 526 +++--- .../q16.sf100/simplified.txt | 127 +- .../q2.sf100/explain.txt | 478 +++-- .../q2.sf100/simplified.txt | 96 +- .../q24a.sf100/explain.txt | 656 +++---- .../q24a.sf100/simplified.txt | 45 +- .../q24b.sf100/explain.txt | 656 +++---- .../q24b.sf100/simplified.txt | 45 +- .../q32.sf100/explain.txt | 292 +-- .../q32.sf100/simplified.txt | 57 +- .../q37.sf100/explain.txt | 208 +-- .../q37.sf100/simplified.txt | 45 +- .../q40.sf100/explain.txt | 308 ++-- .../q40.sf100/simplified.txt | 55 +- .../q59.sf100/explain.txt | 496 +++-- .../q59.sf100/simplified.txt | 94 +- .../q64.sf100/explain.txt | 1369 +++++++------- .../q64.sf100/simplified.txt | 79 +- .../q69.sf100/explain.txt | 406 +++-- .../q69.sf100/simplified.txt | 45 +- .../q80.sf100/explain.txt | 927 +++++----- .../q80.sf100/simplified.txt | 167 +- .../q82.sf100/explain.txt | 208 +-- .../q82.sf100/simplified.txt | 45 +- .../q85.sf100/explain.txt | 469 +++-- .../q85.sf100/simplified.txt | 95 +- .../q92.sf100/explain.txt | 292 +-- .../q92.sf100/simplified.txt | 57 +- .../q94.sf100/explain.txt | 526 +++--- .../q94.sf100/simplified.txt | 127 +- .../q95.sf100/explain.txt | 580 +++--- .../q95.sf100/simplified.txt | 127 +- .../q10a.sf100/explain.txt | 404 +++-- .../q10a.sf100/simplified.txt | 45 +- .../q64.sf100/explain.txt | 1369 +++++++------- .../q64.sf100/simplified.txt | 79 +- .../q80a.sf100/explain.txt | 1613 +++++++++-------- .../q80a.sf100/simplified.txt | 205 +-- .../q10.sf100/explain.txt | 416 ++--- .../q10.sf100/simplified.txt | 45 +- .../q59.sf100/explain.txt | 496 +++-- .../q59.sf100/simplified.txt | 94 +- .../q10.sf100/explain.txt | 434 ++--- .../q10.sf100/simplified.txt | 45 +- .../q16.sf100/explain.txt | 526 +++--- .../q16.sf100/simplified.txt | 127 +- .../q2.sf100/explain.txt | 478 +++-- .../q2.sf100/simplified.txt | 96 +- .../q24a.sf100/explain.txt | 656 +++---- .../q24a.sf100/simplified.txt | 45 +- .../q24b.sf100/explain.txt | 656 +++---- .../q24b.sf100/simplified.txt | 45 +- .../q32.sf100/explain.txt | 292 +-- .../q32.sf100/simplified.txt | 57 +- .../q37.sf100/explain.txt | 208 +-- .../q37.sf100/simplified.txt | 45 +- .../q40.sf100/explain.txt | 308 ++-- .../q40.sf100/simplified.txt | 55 +- .../q59.sf100/explain.txt | 496 +++-- .../q59.sf100/simplified.txt | 94 +- .../q64.sf100/explain.txt | 1369 +++++++------- .../q64.sf100/simplified.txt | 79 +- .../q69.sf100/explain.txt | 406 +++-- .../q69.sf100/simplified.txt | 45 +- .../q80.sf100/explain.txt | 927 +++++----- .../q80.sf100/simplified.txt | 167 +- .../q82.sf100/explain.txt | 208 +-- .../q82.sf100/simplified.txt | 45 +- .../q85.sf100/explain.txt | 469 +++-- .../q85.sf100/simplified.txt | 95 +- .../q92.sf100/explain.txt | 292 +-- .../q92.sf100/simplified.txt | 57 +- .../q94.sf100/explain.txt | 526 +++--- .../q94.sf100/simplified.txt | 127 +- .../q95.sf100/explain.txt | 580 +++--- .../q95.sf100/simplified.txt | 127 +- .../q10a.sf100/explain.txt | 404 +++-- .../q10a.sf100/simplified.txt | 45 +- .../q64.sf100/explain.txt | 1369 +++++++------- .../q64.sf100/simplified.txt | 79 +- .../q80a.sf100/explain.txt | 1613 +++++++++-------- .../q80a.sf100/simplified.txt | 205 +-- 88 files changed, 14654 insertions(+), 15242 deletions(-) diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/explain.txt index 71c967f7966..b142e8fd591 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/explain.txt @@ -1,62 +1,65 @@ == Physical Plan == -VeloxColumnarToRow (77) -+- TakeOrderedAndProjectExecTransformer (76) - +- ^ ProjectExecTransformer (74) - +- ^ RegularHashAggregateExecTransformer (73) - +- ^ InputIteratorTransformer (72) - +- ColumnarExchange (70) - +- VeloxResizeBatches (69) - +- ^ ProjectExecTransformer (67) - +- ^ FlushableHashAggregateExecTransformer (66) - +- ^ ProjectExecTransformer (65) - +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (64) - :- ^ InputIteratorTransformer (61) - : +- ColumnarBroadcastExchange (59) - : +- ^ ProjectExecTransformer (57) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (56) - : :- ^ ProjectExecTransformer (48) - : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (47) - : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (34) - : : : :- ^ InputIteratorTransformer (8) - : : : : +- ColumnarExchange (6) - : : : : +- VeloxResizeBatches (5) - : : : : +- ^ ProjectExecTransformer (3) - : : : : +- ^ FilterExecTransformer (2) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) - : : : +- ^ InputIteratorTransformer (33) - : : : +- ColumnarExchange (31) - : : : +- VeloxResizeBatches (30) - : : : +- ^ ProjectExecTransformer (28) - : : : +- ^ InputIteratorTransformer (27) - : : : +- ColumnarUnion (25) - : : : :- ^ ProjectExecTransformer (15) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (14) - : : : : :- ^ FilterExecTransformer (10) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (9) - : : : : +- ^ InputIteratorTransformer (13) - : : : : +- ReusedExchange (11) - : : : +- ^ ProjectExecTransformer (23) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (22) - : : : :- ^ FilterExecTransformer (18) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (17) - : : : +- ^ InputIteratorTransformer (21) - : : : +- ReusedExchange (19) - : : +- ^ InputIteratorTransformer (46) - : : +- ColumnarExchange (44) - : : +- VeloxResizeBatches (43) - : : +- ^ ProjectExecTransformer (41) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (40) - : : :- ^ FilterExecTransformer (36) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (35) - : : +- ^ InputIteratorTransformer (39) - : : +- ReusedExchange (37) - : +- ^ InputIteratorTransformer (55) - : +- ColumnarBroadcastExchange (53) - : +- ^ ProjectExecTransformer (51) - : +- ^ FilterExecTransformer (50) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (49) - +- ^ FilterExecTransformer (63) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (62) +VeloxColumnarToRow (82) ++- TakeOrderedAndProjectExecTransformer (81) + +- ^ ProjectExecTransformer (79) + +- ^ RegularHashAggregateExecTransformer (78) + +- ^ InputIteratorTransformer (77) + +- ColumnarExchange (75) + +- VeloxResizeBatches (74) + +- ^ ProjectExecTransformer (72) + +- ^ FlushableHashAggregateExecTransformer (71) + +- ^ ProjectExecTransformer (70) + +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (69) + :- ^ InputIteratorTransformer (66) + : +- ColumnarBroadcastExchange (64) + : +- ^ ProjectExecTransformer (62) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (61) + : :- ^ ProjectExecTransformer (53) + : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (52) + : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (39) + : : : :- ^ InputIteratorTransformer (13) + : : : : +- ColumnarExchange (11) + : : : : +- VeloxResizeBatches (10) + : : : : +- ^ ProjectExecTransformer (8) + : : : : +- ^ InputIteratorTransformer (7) + : : : : +- RowToVeloxColumnar (5) + : : : : +- * Filter (4) + : : : : +- VeloxColumnarToRow (3) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) + : : : +- ^ InputIteratorTransformer (38) + : : : +- ColumnarExchange (36) + : : : +- VeloxResizeBatches (35) + : : : +- ^ ProjectExecTransformer (33) + : : : +- ^ InputIteratorTransformer (32) + : : : +- ColumnarUnion (30) + : : : :- ^ ProjectExecTransformer (20) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (19) + : : : : :- ^ FilterExecTransformer (15) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (14) + : : : : +- ^ InputIteratorTransformer (18) + : : : : +- ReusedExchange (16) + : : : +- ^ ProjectExecTransformer (28) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (27) + : : : :- ^ FilterExecTransformer (23) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (22) + : : : +- ^ InputIteratorTransformer (26) + : : : +- ReusedExchange (24) + : : +- ^ InputIteratorTransformer (51) + : : +- ColumnarExchange (49) + : : +- VeloxResizeBatches (48) + : : +- ^ ProjectExecTransformer (46) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (45) + : : :- ^ FilterExecTransformer (41) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (40) + : : +- ^ InputIteratorTransformer (44) + : : +- ReusedExchange (42) + : +- ^ InputIteratorTransformer (60) + : +- ColumnarBroadcastExchange (58) + : +- ^ ProjectExecTransformer (56) + : +- ^ FilterExecTransformer (55) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (54) + +- ^ FilterExecTransformer (68) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (67) (1) FileSourceScanExecTransformer parquet spark_catalog.default.customer @@ -66,33 +69,49 @@ Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (2) +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Arguments: false + +(3) VeloxColumnarToRow +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(4) Filter [codegen id : 1] +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Condition : (((isnotnull(c_customer_sk#1) AND isnotnull(c_current_addr_sk#3)) AND isnotnull(c_current_cdemo_sk#2)) AND might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) + +(5) RowToVeloxColumnar +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(6) InputAdapter +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(7) InputIteratorTransformer Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -Arguments: (((isnotnull(c_customer_sk#1) AND isnotnull(c_current_addr_sk#3)) AND isnotnull(c_current_cdemo_sk#2)) AND velox_might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) -(3) ProjectExecTransformer +(8) ProjectExecTransformer Output [4]: [hash(c_customer_sk#1, 42) AS hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(4) WholeStageCodegenTransformer (3) +(9) WholeStageCodegenTransformer (3) Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: hashpartitioning(c_customer_sk#1, 1), ENSURE_REQUIREMENTS, [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [2]: [ws_bill_customer_sk#6, ws_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] @@ -100,34 +119,34 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#7), dynamicpruningexpression(ws_sol PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [2]: [ws_bill_customer_sk#6, ws_sold_date_sk#7] Arguments: isnotnull(ws_bill_customer_sk#6) -(11) ReusedExchange [Reuses operator id: 94] +(16) ReusedExchange [Reuses operator id: 98] Output [1]: [d_date_sk#9] -(12) InputAdapter +(17) InputAdapter Input [1]: [d_date_sk#9] -(13) InputIteratorTransformer +(18) InputIteratorTransformer Input [1]: [d_date_sk#9] -(14) BroadcastHashJoinExecTransformer +(19) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#7] Right keys [1]: [d_date_sk#9] Join type: Inner Join condition: None -(15) ProjectExecTransformer +(20) ProjectExecTransformer Output [1]: [ws_bill_customer_sk#6 AS customer_sk#10] Input [3]: [ws_bill_customer_sk#6, ws_sold_date_sk#7, d_date_sk#9] -(16) WholeStageCodegenTransformer (6) +(21) WholeStageCodegenTransformer (6) Input [1]: [customer_sk#10] Arguments: false -(17) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(22) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [2]: [cs_ship_customer_sk#11, cs_sold_date_sk#12] Batched: true Location: InMemoryFileIndex [] @@ -135,71 +154,71 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#12), dynamicpruningexpression(cs_so PushedFilters: [IsNotNull(cs_ship_customer_sk)] ReadSchema: struct -(18) FilterExecTransformer +(23) FilterExecTransformer Input [2]: [cs_ship_customer_sk#11, cs_sold_date_sk#12] Arguments: isnotnull(cs_ship_customer_sk#11) -(19) ReusedExchange [Reuses operator id: 94] +(24) ReusedExchange [Reuses operator id: 98] Output [1]: [d_date_sk#13] -(20) InputAdapter +(25) InputAdapter Input [1]: [d_date_sk#13] -(21) InputIteratorTransformer +(26) InputIteratorTransformer Input [1]: [d_date_sk#13] -(22) BroadcastHashJoinExecTransformer +(27) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#12] Right keys [1]: [d_date_sk#13] Join type: Inner Join condition: None -(23) ProjectExecTransformer +(28) ProjectExecTransformer Output [1]: [cs_ship_customer_sk#11 AS customer_sk#14] Input [3]: [cs_ship_customer_sk#11, cs_sold_date_sk#12, d_date_sk#13] -(24) WholeStageCodegenTransformer (9) +(29) WholeStageCodegenTransformer (9) Input [1]: [customer_sk#14] Arguments: false -(25) ColumnarUnion +(30) ColumnarUnion Arguments: UnknownPartitioning(0) -(26) InputAdapter +(31) InputAdapter Input [1]: [customer_sk#10] -(27) InputIteratorTransformer +(32) InputIteratorTransformer Input [1]: [customer_sk#10] -(28) ProjectExecTransformer +(33) ProjectExecTransformer Output [2]: [hash(customer_sk#10, 42) AS hash_partition_key#15, customer_sk#10] Input [1]: [customer_sk#10] -(29) WholeStageCodegenTransformer (10) +(34) WholeStageCodegenTransformer (10) Input [2]: [hash_partition_key#15, customer_sk#10] Arguments: false -(30) VeloxResizeBatches +(35) VeloxResizeBatches Input [2]: [hash_partition_key#15, customer_sk#10] Arguments: 1024, 2147483647, 10485760 -(31) ColumnarExchange +(36) ColumnarExchange Input [2]: [hash_partition_key#15, customer_sk#10] Arguments: hashpartitioning(customer_sk#10, 1), ENSURE_REQUIREMENTS, [customer_sk#10], [plan_id=3], [shuffle_writer_type=hash] -(32) InputAdapter +(37) InputAdapter Input [1]: [customer_sk#10] -(33) InputIteratorTransformer +(38) InputIteratorTransformer Input [1]: [customer_sk#10] -(34) ShuffledHashJoinExecTransformer +(39) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [customer_sk#10] Join type: LeftSemi Join condition: None -(35) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(40) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [2]: [ss_customer_sk#16, ss_sold_date_sk#17] Batched: true Location: InMemoryFileIndex [] @@ -207,294 +226,279 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#17), dynamicpruningexpression(ss_so PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct -(36) FilterExecTransformer +(41) FilterExecTransformer Input [2]: [ss_customer_sk#16, ss_sold_date_sk#17] Arguments: isnotnull(ss_customer_sk#16) -(37) ReusedExchange [Reuses operator id: 94] +(42) ReusedExchange [Reuses operator id: 98] Output [1]: [d_date_sk#18] -(38) InputAdapter +(43) InputAdapter Input [1]: [d_date_sk#18] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [1]: [d_date_sk#18] -(40) BroadcastHashJoinExecTransformer +(45) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#17] Right keys [1]: [d_date_sk#18] Join type: Inner Join condition: None -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [2]: [hash(ss_customer_sk#16, 42) AS hash_partition_key#19, ss_customer_sk#16 AS customer_sk#20] Input [3]: [ss_customer_sk#16, ss_sold_date_sk#17, d_date_sk#18] -(42) WholeStageCodegenTransformer (13) +(47) WholeStageCodegenTransformer (13) Input [2]: [hash_partition_key#19, customer_sk#20] Arguments: false -(43) VeloxResizeBatches +(48) VeloxResizeBatches Input [2]: [hash_partition_key#19, customer_sk#20] Arguments: 1024, 2147483647, 10485760 -(44) ColumnarExchange +(49) ColumnarExchange Input [2]: [hash_partition_key#19, customer_sk#20] Arguments: hashpartitioning(customer_sk#20, 1), ENSURE_REQUIREMENTS, [customer_sk#20], [plan_id=4], [shuffle_writer_type=hash] -(45) InputAdapter +(50) InputAdapter Input [1]: [customer_sk#20] -(46) InputIteratorTransformer +(51) InputIteratorTransformer Input [1]: [customer_sk#20] -(47) ShuffledHashJoinExecTransformer +(52) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [customer_sk#20] Join type: LeftSemi Join condition: None -(48) ProjectExecTransformer +(53) ProjectExecTransformer Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(49) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(54) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#21, ca_county#22] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [2]: [ca_address_sk#21, ca_county#22] Arguments: (ca_county#22 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#21)) -(51) ProjectExecTransformer +(56) ProjectExecTransformer Output [1]: [ca_address_sk#21] Input [2]: [ca_address_sk#21, ca_county#22] -(52) WholeStageCodegenTransformer (14) +(57) WholeStageCodegenTransformer (14) Input [1]: [ca_address_sk#21] Arguments: false -(53) ColumnarBroadcastExchange +(58) ColumnarBroadcastExchange Input [1]: [ca_address_sk#21] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(54) InputAdapter +(59) InputAdapter Input [1]: [ca_address_sk#21] -(55) InputIteratorTransformer +(60) InputIteratorTransformer Input [1]: [ca_address_sk#21] -(56) BroadcastHashJoinExecTransformer +(61) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#3] Right keys [1]: [ca_address_sk#21] Join type: Inner Join condition: None -(57) ProjectExecTransformer +(62) ProjectExecTransformer Output [1]: [c_current_cdemo_sk#2] Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#21] -(58) WholeStageCodegenTransformer (15) +(63) WholeStageCodegenTransformer (15) Input [1]: [c_current_cdemo_sk#2] Arguments: false -(59) ColumnarBroadcastExchange +(64) ColumnarBroadcastExchange Input [1]: [c_current_cdemo_sk#2] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(60) InputAdapter +(65) InputAdapter Input [1]: [c_current_cdemo_sk#2] -(61) InputIteratorTransformer +(66) InputIteratorTransformer Input [1]: [c_current_cdemo_sk#2] -(62) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(67) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [9]: [cd_demo_sk#23, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct -(63) FilterExecTransformer +(68) FilterExecTransformer Input [9]: [cd_demo_sk#23, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Arguments: isnotnull(cd_demo_sk#23) -(64) BroadcastHashJoinExecTransformer +(69) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#2] Right keys [1]: [cd_demo_sk#23] Join type: Inner Join condition: None -(65) ProjectExecTransformer +(70) ProjectExecTransformer Output [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#23, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] -(66) FlushableHashAggregateExecTransformer +(71) FlushableHashAggregateExecTransformer Input [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Keys [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Functions [1]: [partial_count(1)] Aggregate Attributes [1]: [count#32] Results [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] -(67) ProjectExecTransformer +(72) ProjectExecTransformer Output [10]: [hash(cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, 42) AS hash_partition_key#34, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] -(68) WholeStageCodegenTransformer (16) +(73) WholeStageCodegenTransformer (16) Input [10]: [hash_partition_key#34, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] Arguments: false -(69) VeloxResizeBatches +(74) VeloxResizeBatches Input [10]: [hash_partition_key#34, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] Arguments: 1024, 2147483647, 10485760 -(70) ColumnarExchange +(75) ColumnarExchange Input [10]: [hash_partition_key#34, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] Arguments: hashpartitioning(cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, 1), ENSURE_REQUIREMENTS, [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33], [plan_id=7], [shuffle_writer_type=hash] -(71) InputAdapter +(76) InputAdapter Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] -(72) InputIteratorTransformer +(77) InputIteratorTransformer Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] -(73) RegularHashAggregateExecTransformer +(78) RegularHashAggregateExecTransformer Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] Keys [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Functions [1]: [count(1)] Aggregate Attributes [1]: [count(1)#35] Results [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count(1)#35] -(74) ProjectExecTransformer +(79) ProjectExecTransformer Output [14]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, count(1)#35 AS cnt1#36, cd_purchase_estimate#27, count(1)#35 AS cnt2#37, cd_credit_rating#28, count(1)#35 AS cnt3#38, cd_dep_count#29, count(1)#35 AS cnt4#39, cd_dep_employed_count#30, count(1)#35 AS cnt5#40, cd_dep_college_count#31, count(1)#35 AS cnt6#41] Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count(1)#35] -(75) WholeStageCodegenTransformer (17) +(80) WholeStageCodegenTransformer (17) Input [14]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cnt1#36, cd_purchase_estimate#27, cnt2#37, cd_credit_rating#28, cnt3#38, cd_dep_count#29, cnt4#39, cd_dep_employed_count#30, cnt5#40, cd_dep_college_count#31, cnt6#41] Arguments: false -(76) TakeOrderedAndProjectExecTransformer +(81) TakeOrderedAndProjectExecTransformer Input [14]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cnt1#36, cd_purchase_estimate#27, cnt2#37, cd_credit_rating#28, cnt3#38, cd_dep_count#29, cnt4#39, cd_dep_employed_count#30, cnt5#40, cd_dep_college_count#31, cnt6#41] Arguments: 100, [cd_gender#24 ASC NULLS FIRST, cd_marital_status#25 ASC NULLS FIRST, cd_education_status#26 ASC NULLS FIRST, cd_purchase_estimate#27 ASC NULLS FIRST, cd_credit_rating#28 ASC NULLS FIRST, cd_dep_count#29 ASC NULLS FIRST, cd_dep_employed_count#30 ASC NULLS FIRST, cd_dep_college_count#31 ASC NULLS FIRST], [cd_gender#24, cd_marital_status#25, cd_education_status#26, cnt1#36, cd_purchase_estimate#27, cnt2#37, cd_credit_rating#28, cnt3#38, cd_dep_count#29, cnt4#39, cd_dep_employed_count#30, cnt5#40, cd_dep_college_count#31, cnt6#41], 0 -(77) VeloxColumnarToRow +(82) VeloxColumnarToRow Input [14]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cnt1#36, cd_purchase_estimate#27, cnt2#37, cd_credit_rating#28, cnt3#38, cd_dep_count#29, cnt4#39, cd_dep_employed_count#30, cnt5#40, cd_dep_college_count#31, cnt6#41] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (89) -+- ^ RegularHashAggregateExecTransformer (87) - +- ^ InputIteratorTransformer (86) - +- ColumnarExchange (84) - +- VeloxResizeBatches (83) - +- ^ FlushableHashAggregateExecTransformer (81) - +- ^ ProjectExecTransformer (80) - +- ^ FilterExecTransformer (79) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (78) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#4, [id=#1] +ObjectHashAggregate (93) ++- VeloxColumnarToRow (92) + +- ColumnarExchange (91) + +- VeloxResizeBatches (90) + +- RowToVeloxColumnar (89) + +- ObjectHashAggregate (88) + +- VeloxColumnarToRow (87) + +- ^ ProjectExecTransformer (85) + +- ^ FilterExecTransformer (84) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (83) -(78) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(83) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#21, ca_county#22] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(79) FilterExecTransformer +(84) FilterExecTransformer Input [2]: [ca_address_sk#21, ca_county#22] Arguments: (ca_county#22 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#21)) -(80) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#21, 42) AS _pre_1#42] +(85) ProjectExecTransformer +Output [1]: [ca_address_sk#21] Input [2]: [ca_address_sk#21, ca_county#22] -(81) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#42] +(86) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#21] +Arguments: false + +(87) VeloxColumnarToRow +Input [1]: [ca_address_sk#21] + +(88) ObjectHashAggregate +Input [1]: [ca_address_sk#21] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#42, 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [buf#43] -Results [1]: [buf#44] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [buf#42] +Results [1]: [buf#43] -(82) WholeStageCodegenTransformer (1) -Input [1]: [buf#44] -Arguments: false +(89) RowToVeloxColumnar +Input [1]: [buf#43] -(83) VeloxResizeBatches -Input [1]: [buf#44] +(90) VeloxResizeBatches +Input [1]: [buf#43] Arguments: 1024, 2147483647, 10485760 -(84) ColumnarExchange -Input [1]: [buf#44] +(91) ColumnarExchange +Input [1]: [buf#43] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8], [shuffle_writer_type=hash] -(85) InputAdapter -Input [1]: [buf#44] - -(86) InputIteratorTransformer -Input [1]: [buf#44] +(92) VeloxColumnarToRow +Input [1]: [buf#43] -(87) RegularHashAggregateExecTransformer -Input [1]: [buf#44] +(93) ObjectHashAggregate +Input [1]: [buf#43] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#45] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#45 AS bloomFilter#46] - -(88) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#46] -Arguments: false - -(89) VeloxColumnarToRow -Input [1]: [bloomFilter#46] - -Subquery:2 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (89) -+- ^ RegularHashAggregateExecTransformer (87) - +- ^ InputIteratorTransformer (86) - +- ColumnarExchange (84) - +- VeloxResizeBatches (83) - +- ^ FlushableHashAggregateExecTransformer (81) - +- ^ ProjectExecTransformer (80) - +- ^ FilterExecTransformer (79) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (78) - +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#44] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#44 AS bloomFilter#45] -Subquery:3 Hosting operator id = 9 Hosting Expression = ws_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (94) -+- ^ ProjectExecTransformer (92) - +- ^ FilterExecTransformer (91) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (90) +Subquery:2 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#7 IN dynamicpruning#8 +ColumnarBroadcastExchange (98) ++- ^ ProjectExecTransformer (96) + +- ^ FilterExecTransformer (95) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (94) -(90) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [3]: [d_date_sk#9, d_year#47, d_moy#48] +(94) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [3]: [d_date_sk#9, d_year#46, d_moy#47] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,7), IsNotNull(d_date_sk)] ReadSchema: struct -(91) FilterExecTransformer -Input [3]: [d_date_sk#9, d_year#47, d_moy#48] -Arguments: (((((isnotnull(d_year#47) AND isnotnull(d_moy#48)) AND (d_year#47 = 2002)) AND (d_moy#48 >= 4)) AND (d_moy#48 <= 7)) AND isnotnull(d_date_sk#9)) +(95) FilterExecTransformer +Input [3]: [d_date_sk#9, d_year#46, d_moy#47] +Arguments: (((((isnotnull(d_year#46) AND isnotnull(d_moy#47)) AND (d_year#46 = 2002)) AND (d_moy#47 >= 4)) AND (d_moy#47 <= 7)) AND isnotnull(d_date_sk#9)) -(92) ProjectExecTransformer +(96) ProjectExecTransformer Output [1]: [d_date_sk#9] -Input [3]: [d_date_sk#9, d_year#47, d_moy#48] +Input [3]: [d_date_sk#9, d_year#46, d_moy#47] -(93) WholeStageCodegenTransformer (4) +(97) WholeStageCodegenTransformer (4) Input [1]: [d_date_sk#9] Arguments: false -(94) ColumnarBroadcastExchange +(98) ColumnarBroadcastExchange Input [1]: [d_date_sk#9] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:4 Hosting operator id = 17 Hosting Expression = cs_sold_date_sk#12 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#12 IN dynamicpruning#8 -Subquery:5 Hosting operator id = 35 Hosting Expression = ss_sold_date_sk#17 IN dynamicpruning#8 +Subquery:4 Hosting operator id = 40 Hosting Expression = ss_sold_date_sk#17 IN dynamicpruning#8 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/simplified.txt index 3b21b6e242a..ab9985e1fa0 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/simplified.txt @@ -27,34 +27,27 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (3) ProjectExecTransformer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - FilterExecTransformer [c_customer_sk,c_current_addr_sk,c_current_cdemo_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] - FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [c_customer_sk,c_current_addr_sk,c_current_cdemo_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_county,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] InputIteratorTransformer InputAdapter ColumnarExchange [customer_sk] #5 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/explain.txt index 186fa676711..306fb9e48e1 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/explain.txt @@ -1,66 +1,70 @@ == Physical Plan == -VeloxColumnarToRow (81) -+- TakeOrderedAndProjectExecTransformer (80) - +- ^ ProjectExecTransformer (78) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (77) - :- ^ ProjectExecTransformer (36) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (35) - : :- ^ ProjectExecTransformer (27) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (26) - : : :- ^ ProjectExecTransformer (19) - : : : +- ^ RegularHashAggregateExecTransformer (18) - : : : +- ^ InputIteratorTransformer (17) - : : : +- ColumnarExchange (15) - : : : +- VeloxResizeBatches (14) - : : : +- ^ ProjectExecTransformer (12) - : : : +- ^ FlushableHashAggregateExecTransformer (11) - : : : +- ^ ProjectExecTransformer (10) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (9) +VeloxColumnarToRow (85) ++- TakeOrderedAndProjectExecTransformer (84) + +- ^ ProjectExecTransformer (82) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (81) + :- ^ ProjectExecTransformer (38) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) + : :- ^ ProjectExecTransformer (29) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (28) + : : :- ^ ProjectExecTransformer (21) + : : : +- ^ RegularHashAggregateExecTransformer (20) + : : : +- ^ InputIteratorTransformer (19) + : : : +- ColumnarExchange (17) + : : : +- VeloxResizeBatches (16) + : : : +- ^ ProjectExecTransformer (14) + : : : +- ^ FlushableHashAggregateExecTransformer (13) + : : : +- ^ ProjectExecTransformer (12) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (11) : : : :- ^ FilterExecTransformer (2) : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : +- ^ InputIteratorTransformer (8) - : : : +- ColumnarBroadcastExchange (6) - : : : +- ^ FilterExecTransformer (4) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (3) - : : +- ^ InputIteratorTransformer (25) - : : +- ColumnarBroadcastExchange (23) - : : +- ^ FilterExecTransformer (21) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (20) - : +- ^ InputIteratorTransformer (34) - : +- ColumnarBroadcastExchange (32) - : +- ^ ProjectExecTransformer (30) - : +- ^ FilterExecTransformer (29) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (28) - +- ^ InputIteratorTransformer (76) - +- ColumnarBroadcastExchange (74) - +- ^ ProjectExecTransformer (72) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (71) - :- ^ ProjectExecTransformer (63) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) - : :- ^ ProjectExecTransformer (55) - : : +- ^ RegularHashAggregateExecTransformer (54) - : : +- ^ InputIteratorTransformer (53) - : : +- ColumnarExchange (51) - : : +- VeloxResizeBatches (50) - : : +- ^ ProjectExecTransformer (48) - : : +- ^ FlushableHashAggregateExecTransformer (47) - : : +- ^ ProjectExecTransformer (46) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (45) - : : :- ^ FilterExecTransformer (38) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (37) - : : +- ^ InputIteratorTransformer (44) - : : +- ColumnarBroadcastExchange (42) - : : +- ^ FilterExecTransformer (40) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (39) - : +- ^ InputIteratorTransformer (61) - : +- ColumnarBroadcastExchange (59) - : +- ^ FilterExecTransformer (57) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (56) - +- ^ InputIteratorTransformer (70) - +- ColumnarBroadcastExchange (68) - +- ^ ProjectExecTransformer (66) - +- ^ FilterExecTransformer (65) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (64) + : : : +- ^ InputIteratorTransformer (10) + : : : +- ColumnarBroadcastExchange (8) + : : : +- RowToVeloxColumnar (7) + : : : +- * Filter (6) + : : : +- VeloxColumnarToRow (5) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (3) + : : +- ^ InputIteratorTransformer (27) + : : +- ColumnarBroadcastExchange (25) + : : +- ^ FilterExecTransformer (23) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (22) + : +- ^ InputIteratorTransformer (36) + : +- ColumnarBroadcastExchange (34) + : +- ^ ProjectExecTransformer (32) + : +- ^ FilterExecTransformer (31) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (30) + +- ^ InputIteratorTransformer (80) + +- ColumnarBroadcastExchange (78) + +- ^ ProjectExecTransformer (76) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (75) + :- ^ ProjectExecTransformer (67) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (66) + : :- ^ ProjectExecTransformer (59) + : : +- ^ RegularHashAggregateExecTransformer (58) + : : +- ^ InputIteratorTransformer (57) + : : +- ColumnarExchange (55) + : : +- VeloxResizeBatches (54) + : : +- ^ ProjectExecTransformer (52) + : : +- ^ FlushableHashAggregateExecTransformer (51) + : : +- ^ ProjectExecTransformer (50) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (49) + : : :- ^ FilterExecTransformer (40) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (39) + : : +- ^ InputIteratorTransformer (48) + : : +- ColumnarBroadcastExchange (46) + : : +- RowToVeloxColumnar (45) + : : +- * Filter (44) + : : +- VeloxColumnarToRow (43) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (41) + : +- ^ InputIteratorTransformer (65) + : +- ColumnarBroadcastExchange (63) + : +- ^ FilterExecTransformer (61) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (60) + +- ^ InputIteratorTransformer (74) + +- ColumnarBroadcastExchange (72) + +- ^ ProjectExecTransformer (70) + +- ^ FilterExecTransformer (69) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (68) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -82,149 +86,155 @@ Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(4) FilterExecTransformer +(4) WholeStageCodegenTransformer (2) Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND velox_might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(d_week_seq#5, 42))) +Arguments: false -(5) WholeStageCodegenTransformer (3) +(5) VeloxColumnarToRow +Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] + +(6) Filter [codegen id : 1] +Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] +Condition : ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(d_week_seq#5, 42))) + +(7) RowToVeloxColumnar Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: false -(6) ColumnarBroadcastExchange +(8) ColumnarBroadcastExchange Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] -(7) InputAdapter +(9) InputAdapter Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -(8) InputIteratorTransformer +(10) InputIteratorTransformer Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -(9) BroadcastHashJoinExecTransformer +(11) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#3] Right keys [1]: [d_date_sk#4] Join type: Inner Join condition: None -(10) ProjectExecTransformer +(12) ProjectExecTransformer Output [9]: [ss_store_sk#1, d_week_seq#5, UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END) AS _pre_1#8, UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END) AS _pre_2#9, UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END) AS _pre_3#10, UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END) AS _pre_4#11, UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END) AS _pre_5#12, UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END) AS _pre_6#13, UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END) AS _pre_7#14] Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_week_seq#5, d_day_name#6] -(11) FlushableHashAggregateExecTransformer +(13) FlushableHashAggregateExecTransformer Input [9]: [ss_store_sk#1, d_week_seq#5, _pre_1#8, _pre_2#9, _pre_3#10, _pre_4#11, _pre_5#12, _pre_6#13, _pre_7#14] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [partial_sum(_pre_1#8), partial_sum(_pre_2#9), partial_sum(_pre_3#10), partial_sum(_pre_4#11), partial_sum(_pre_5#12), partial_sum(_pre_6#13), partial_sum(_pre_7#14)] Aggregate Attributes [7]: [sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21] Results [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(12) ProjectExecTransformer +(14) ProjectExecTransformer Output [10]: [hash(d_week_seq#5, ss_store_sk#1, 42) AS hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(13) WholeStageCodegenTransformer (4) +(15) WholeStageCodegenTransformer (3) Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: false -(14) VeloxResizeBatches +(16) VeloxResizeBatches Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: 1024, 2147483647, 10485760 -(15) ColumnarExchange +(17) ColumnarExchange Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 1), ENSURE_REQUIREMENTS, [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28], [plan_id=3], [shuffle_writer_type=hash] -(16) InputAdapter +(18) InputAdapter Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(17) InputIteratorTransformer +(19) InputIteratorTransformer Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(18) RegularHashAggregateExecTransformer +(20) RegularHashAggregateExecTransformer Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] Results [9]: [d_week_seq#5, ss_store_sk#1, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] -(19) ProjectExecTransformer +(21) ProjectExecTransformer Output [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30,17,2) AS sun_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31,17,2) AS mon_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32,17,2) AS tue_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33,17,2) AS wed_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34,17,2) AS thu_sales#41, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35,17,2) AS fri_sales#42, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36,17,2) AS sat_sales#43] Input [9]: [d_week_seq#5, ss_store_sk#1, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] -(20) FileSourceScanExecTransformer parquet spark_catalog.default.store +(22) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct -(21) FilterExecTransformer +(23) FilterExecTransformer Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: (isnotnull(s_store_sk#44) AND isnotnull(s_store_id#45)) -(22) WholeStageCodegenTransformer (5) +(24) WholeStageCodegenTransformer (4) Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: false -(23) ColumnarBroadcastExchange +(25) ColumnarBroadcastExchange Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] -(24) InputAdapter +(26) InputAdapter Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] -(25) InputIteratorTransformer +(27) InputIteratorTransformer Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] -(26) BroadcastHashJoinExecTransformer +(28) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#1] Right keys [1]: [s_store_sk#44] Join type: Inner Join condition: None -(27) ProjectExecTransformer +(29) ProjectExecTransformer Output [10]: [d_week_seq#5, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_id#45, s_store_name#46] Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_sk#44, s_store_id#45, s_store_name#46] -(28) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(30) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#47, d_week_seq#48] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1185), LessThanOrEqual(d_month_seq,1196), IsNotNull(d_week_seq)] ReadSchema: struct -(29) FilterExecTransformer +(31) FilterExecTransformer Input [2]: [d_month_seq#47, d_week_seq#48] Arguments: (((isnotnull(d_month_seq#47) AND (d_month_seq#47 >= 1185)) AND (d_month_seq#47 <= 1196)) AND isnotnull(d_week_seq#48)) -(30) ProjectExecTransformer +(32) ProjectExecTransformer Output [1]: [d_week_seq#48] Input [2]: [d_month_seq#47, d_week_seq#48] -(31) WholeStageCodegenTransformer (6) +(33) WholeStageCodegenTransformer (5) Input [1]: [d_week_seq#48] Arguments: false -(32) ColumnarBroadcastExchange +(34) ColumnarBroadcastExchange Input [1]: [d_week_seq#48] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(33) InputAdapter +(35) InputAdapter Input [1]: [d_week_seq#48] -(34) InputIteratorTransformer +(36) InputIteratorTransformer Input [1]: [d_week_seq#48] -(35) BroadcastHashJoinExecTransformer +(37) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#5] Right keys [1]: [d_week_seq#48] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(38) ProjectExecTransformer Output [10]: [s_store_name#46 AS s_store_name1#49, d_week_seq#5 AS d_week_seq1#50, s_store_id#45 AS s_store_id1#51, sun_sales#37 AS sun_sales1#52, mon_sales#38 AS mon_sales1#53, tue_sales#39 AS tue_sales1#54, wed_sales#40 AS wed_sales1#55, thu_sales#41 AS thu_sales1#56, fri_sales#42 AS fri_sales1#57, sat_sales#43 AS sat_sales1#58] Input [11]: [d_week_seq#5, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_id#45, s_store_name#46, d_week_seq#48] -(37) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(39) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [3]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61] Batched: true Location: InMemoryFileIndex [] @@ -232,350 +242,326 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#61)] PushedFilters: [IsNotNull(ss_store_sk)] ReadSchema: struct -(38) FilterExecTransformer +(40) FilterExecTransformer Input [3]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61] Arguments: isnotnull(ss_store_sk#59) -(39) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(41) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(40) FilterExecTransformer +(42) WholeStageCodegenTransformer (7) Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -Arguments: ((isnotnull(d_date_sk#62) AND isnotnull(d_week_seq#63)) AND velox_might_contain(Subquery scalar-subquery#65, [id=#6], xxhash64(d_week_seq#63, 42))) +Arguments: false -(41) WholeStageCodegenTransformer (9) +(43) VeloxColumnarToRow +Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] + +(44) Filter [codegen id : 2] +Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] +Condition : ((isnotnull(d_date_sk#62) AND isnotnull(d_week_seq#63)) AND might_contain(Subquery scalar-subquery#65, [id=#6], xxhash64(d_week_seq#63, 42))) + +(45) RowToVeloxColumnar Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -Arguments: false -(42) ColumnarBroadcastExchange +(46) ColumnarBroadcastExchange Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] -(43) InputAdapter +(47) InputAdapter Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -(44) InputIteratorTransformer +(48) InputIteratorTransformer Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -(45) BroadcastHashJoinExecTransformer +(49) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#61] Right keys [1]: [d_date_sk#62] Join type: Inner Join condition: None -(46) ProjectExecTransformer +(50) ProjectExecTransformer Output [8]: [ss_store_sk#59, d_week_seq#63, UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END) AS _pre_8#66, UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END) AS _pre_9#67, UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END) AS _pre_10#68, UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END) AS _pre_11#69, UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END) AS _pre_12#70, UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END) AS _pre_13#71] Input [6]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61, d_date_sk#62, d_week_seq#63, d_day_name#64] -(47) FlushableHashAggregateExecTransformer +(51) FlushableHashAggregateExecTransformer Input [8]: [ss_store_sk#59, d_week_seq#63, _pre_8#66, _pre_9#67, _pre_10#68, _pre_11#69, _pre_12#70, _pre_13#71] Keys [2]: [d_week_seq#63, ss_store_sk#59] Functions [6]: [partial_sum(_pre_8#66), partial_sum(_pre_9#67), partial_sum(_pre_10#68), partial_sum(_pre_11#69), partial_sum(_pre_12#70), partial_sum(_pre_13#71)] Aggregate Attributes [6]: [sum#72, sum#73, sum#74, sum#75, sum#76, sum#77] Results [8]: [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] -(48) ProjectExecTransformer +(52) ProjectExecTransformer Output [9]: [hash(d_week_seq#63, ss_store_sk#59, 42) AS hash_partition_key#84, d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] Input [8]: [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] -(49) WholeStageCodegenTransformer (10) +(53) WholeStageCodegenTransformer (8) Input [9]: [hash_partition_key#84, d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] Arguments: false -(50) VeloxResizeBatches +(54) VeloxResizeBatches Input [9]: [hash_partition_key#84, d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] Arguments: 1024, 2147483647, 10485760 -(51) ColumnarExchange +(55) ColumnarExchange Input [9]: [hash_partition_key#84, d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] Arguments: hashpartitioning(d_week_seq#63, ss_store_sk#59, 1), ENSURE_REQUIREMENTS, [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83], [plan_id=8], [shuffle_writer_type=hash] -(52) InputAdapter +(56) InputAdapter Input [8]: [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] -(53) InputIteratorTransformer +(57) InputIteratorTransformer Input [8]: [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] -(54) RegularHashAggregateExecTransformer +(58) RegularHashAggregateExecTransformer Input [8]: [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] Keys [2]: [d_week_seq#63, ss_store_sk#59] Functions [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))] Aggregate Attributes [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] Results [8]: [d_week_seq#63, ss_store_sk#59, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] -(55) ProjectExecTransformer +(59) ProjectExecTransformer Output [8]: [d_week_seq#63, ss_store_sk#59, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30,17,2) AS sun_sales#85, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31,17,2) AS mon_sales#86, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33,17,2) AS wed_sales#87, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34,17,2) AS thu_sales#88, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35,17,2) AS fri_sales#89, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36,17,2) AS sat_sales#90] Input [8]: [d_week_seq#63, ss_store_sk#59, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] -(56) FileSourceScanExecTransformer parquet spark_catalog.default.store +(60) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [2]: [s_store_sk#91, s_store_id#92] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct -(57) FilterExecTransformer +(61) FilterExecTransformer Input [2]: [s_store_sk#91, s_store_id#92] Arguments: (isnotnull(s_store_sk#91) AND isnotnull(s_store_id#92)) -(58) WholeStageCodegenTransformer (11) +(62) WholeStageCodegenTransformer (9) Input [2]: [s_store_sk#91, s_store_id#92] Arguments: false -(59) ColumnarBroadcastExchange +(63) ColumnarBroadcastExchange Input [2]: [s_store_sk#91, s_store_id#92] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] -(60) InputAdapter +(64) InputAdapter Input [2]: [s_store_sk#91, s_store_id#92] -(61) InputIteratorTransformer +(65) InputIteratorTransformer Input [2]: [s_store_sk#91, s_store_id#92] -(62) BroadcastHashJoinExecTransformer +(66) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#59] Right keys [1]: [s_store_sk#91] Join type: Inner Join condition: None -(63) ProjectExecTransformer +(67) ProjectExecTransformer Output [8]: [d_week_seq#63, sun_sales#85, mon_sales#86, wed_sales#87, thu_sales#88, fri_sales#89, sat_sales#90, s_store_id#92] Input [10]: [d_week_seq#63, ss_store_sk#59, sun_sales#85, mon_sales#86, wed_sales#87, thu_sales#88, fri_sales#89, sat_sales#90, s_store_sk#91, s_store_id#92] -(64) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(68) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#93, d_week_seq#94] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1197), LessThanOrEqual(d_month_seq,1208), IsNotNull(d_week_seq)] ReadSchema: struct -(65) FilterExecTransformer +(69) FilterExecTransformer Input [2]: [d_month_seq#93, d_week_seq#94] Arguments: (((isnotnull(d_month_seq#93) AND (d_month_seq#93 >= 1197)) AND (d_month_seq#93 <= 1208)) AND isnotnull(d_week_seq#94)) -(66) ProjectExecTransformer +(70) ProjectExecTransformer Output [1]: [d_week_seq#94] Input [2]: [d_month_seq#93, d_week_seq#94] -(67) WholeStageCodegenTransformer (12) +(71) WholeStageCodegenTransformer (10) Input [1]: [d_week_seq#94] Arguments: false -(68) ColumnarBroadcastExchange +(72) ColumnarBroadcastExchange Input [1]: [d_week_seq#94] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -(69) InputAdapter +(73) InputAdapter Input [1]: [d_week_seq#94] -(70) InputIteratorTransformer +(74) InputIteratorTransformer Input [1]: [d_week_seq#94] -(71) BroadcastHashJoinExecTransformer +(75) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#63] Right keys [1]: [d_week_seq#94] Join type: Inner Join condition: None -(72) ProjectExecTransformer +(76) ProjectExecTransformer Output [8]: [d_week_seq#63 AS d_week_seq2#95, s_store_id#92 AS s_store_id2#96, sun_sales#85 AS sun_sales2#97, mon_sales#86 AS mon_sales2#98, wed_sales#87 AS wed_sales2#99, thu_sales#88 AS thu_sales2#100, fri_sales#89 AS fri_sales2#101, sat_sales#90 AS sat_sales2#102] Input [9]: [d_week_seq#63, sun_sales#85, mon_sales#86, wed_sales#87, thu_sales#88, fri_sales#89, sat_sales#90, s_store_id#92, d_week_seq#94] -(73) WholeStageCodegenTransformer (13) +(77) WholeStageCodegenTransformer (11) Input [8]: [d_week_seq2#95, s_store_id2#96, sun_sales2#97, mon_sales2#98, wed_sales2#99, thu_sales2#100, fri_sales2#101, sat_sales2#102] Arguments: false -(74) ColumnarBroadcastExchange +(78) ColumnarBroadcastExchange Input [8]: [d_week_seq2#95, s_store_id2#96, sun_sales2#97, mon_sales2#98, wed_sales2#99, thu_sales2#100, fri_sales2#101, sat_sales2#102] Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [plan_id=11] -(75) InputAdapter +(79) InputAdapter Input [8]: [d_week_seq2#95, s_store_id2#96, sun_sales2#97, mon_sales2#98, wed_sales2#99, thu_sales2#100, fri_sales2#101, sat_sales2#102] -(76) InputIteratorTransformer +(80) InputIteratorTransformer Input [8]: [d_week_seq2#95, s_store_id2#96, sun_sales2#97, mon_sales2#98, wed_sales2#99, thu_sales2#100, fri_sales2#101, sat_sales2#102] -(77) BroadcastHashJoinExecTransformer +(81) BroadcastHashJoinExecTransformer Left keys [2]: [s_store_id1#51, d_week_seq1#50] Right keys [2]: [s_store_id2#96, (d_week_seq2#95 - 52)] Join type: Inner Join condition: None -(78) ProjectExecTransformer +(82) ProjectExecTransformer Output [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1#52 / sun_sales2#97) AS (sun_sales1 / sun_sales2)#103, (mon_sales1#53 / mon_sales2#98) AS (mon_sales1 / mon_sales2)#104, (tue_sales1#54 / tue_sales1#54) AS (tue_sales1 / tue_sales1)#105, (wed_sales1#55 / wed_sales2#99) AS (wed_sales1 / wed_sales2)#106, (thu_sales1#56 / thu_sales2#100) AS (thu_sales1 / thu_sales2)#107, (fri_sales1#57 / fri_sales2#101) AS (fri_sales1 / fri_sales2)#108, (sat_sales1#58 / sat_sales2#102) AS (sat_sales1 / sat_sales2)#109] Input [18]: [s_store_name1#49, d_week_seq1#50, s_store_id1#51, sun_sales1#52, mon_sales1#53, tue_sales1#54, wed_sales1#55, thu_sales1#56, fri_sales1#57, sat_sales1#58, d_week_seq2#95, s_store_id2#96, sun_sales2#97, mon_sales2#98, wed_sales2#99, thu_sales2#100, fri_sales2#101, sat_sales2#102] -(79) WholeStageCodegenTransformer (14) +(83) WholeStageCodegenTransformer (12) Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#103, (mon_sales1 / mon_sales2)#104, (tue_sales1 / tue_sales1)#105, (wed_sales1 / wed_sales2)#106, (thu_sales1 / thu_sales2)#107, (fri_sales1 / fri_sales2)#108, (sat_sales1 / sat_sales2)#109] Arguments: false -(80) TakeOrderedAndProjectExecTransformer +(84) TakeOrderedAndProjectExecTransformer Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#103, (mon_sales1 / mon_sales2)#104, (tue_sales1 / tue_sales1)#105, (wed_sales1 / wed_sales2)#106, (thu_sales1 / thu_sales2)#107, (fri_sales1 / fri_sales2)#108, (sat_sales1 / sat_sales2)#109] Arguments: 100, [s_store_name1#49 ASC NULLS FIRST, s_store_id1#51 ASC NULLS FIRST, d_week_seq1#50 ASC NULLS FIRST], [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#103, (mon_sales1 / mon_sales2)#104, (tue_sales1 / tue_sales1)#105, (wed_sales1 / wed_sales2)#106, (thu_sales1 / thu_sales2)#107, (fri_sales1 / fri_sales2)#108, (sat_sales1 / sat_sales2)#109], 0 -(81) VeloxColumnarToRow +(85) VeloxColumnarToRow Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#103, (mon_sales1 / mon_sales2)#104, (tue_sales1 / tue_sales1)#105, (wed_sales1 / wed_sales2)#106, (thu_sales1 / thu_sales2)#107, (fri_sales1 / fri_sales2)#108, (sat_sales1 / sat_sales2)#109] ===== Subqueries ===== -Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (93) -+- ^ RegularHashAggregateExecTransformer (91) - +- ^ InputIteratorTransformer (90) - +- ColumnarExchange (88) - +- VeloxResizeBatches (87) - +- ^ FlushableHashAggregateExecTransformer (85) - +- ^ ProjectExecTransformer (84) - +- ^ FilterExecTransformer (83) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) +Subquery:1 Hosting operator id = 6 Hosting Expression = Subquery scalar-subquery#7, [id=#1] +ObjectHashAggregate (96) ++- VeloxColumnarToRow (95) + +- ColumnarExchange (94) + +- VeloxResizeBatches (93) + +- RowToVeloxColumnar (92) + +- ObjectHashAggregate (91) + +- VeloxColumnarToRow (90) + +- ^ ProjectExecTransformer (88) + +- ^ FilterExecTransformer (87) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (86) -(82) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(86) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#47, d_week_seq#48] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1185), LessThanOrEqual(d_month_seq,1196), IsNotNull(d_week_seq)] ReadSchema: struct -(83) FilterExecTransformer +(87) FilterExecTransformer Input [2]: [d_month_seq#47, d_week_seq#48] Arguments: (((isnotnull(d_month_seq#47) AND (d_month_seq#47 >= 1185)) AND (d_month_seq#47 <= 1196)) AND isnotnull(d_week_seq#48)) -(84) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#48, 42) AS _pre_14#110] +(88) ProjectExecTransformer +Output [1]: [d_week_seq#48] Input [2]: [d_month_seq#47, d_week_seq#48] -(85) FlushableHashAggregateExecTransformer -Input [1]: [_pre_14#110] +(89) WholeStageCodegenTransformer (1) +Input [1]: [d_week_seq#48] +Arguments: false + +(90) VeloxColumnarToRow +Input [1]: [d_week_seq#48] + +(91) ObjectHashAggregate +Input [1]: [d_week_seq#48] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_14#110, 335, 8990, 0, 0)] -Aggregate Attributes [1]: [buf#111] -Results [1]: [buf#112] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [buf#110] +Results [1]: [buf#111] -(86) WholeStageCodegenTransformer (1) -Input [1]: [buf#112] -Arguments: false +(92) RowToVeloxColumnar +Input [1]: [buf#111] -(87) VeloxResizeBatches -Input [1]: [buf#112] +(93) VeloxResizeBatches +Input [1]: [buf#111] Arguments: 1024, 2147483647, 10485760 -(88) ColumnarExchange -Input [1]: [buf#112] +(94) ColumnarExchange +Input [1]: [buf#111] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(89) InputAdapter -Input [1]: [buf#112] +(95) VeloxColumnarToRow +Input [1]: [buf#111] -(90) InputIteratorTransformer -Input [1]: [buf#112] - -(91) RegularHashAggregateExecTransformer -Input [1]: [buf#112] +(96) ObjectHashAggregate +Input [1]: [buf#111] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#113] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#113 AS bloomFilter#114] - -(92) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#114] -Arguments: false - -(93) VeloxColumnarToRow -Input [1]: [bloomFilter#114] - -Subquery:2 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (93) -+- ^ RegularHashAggregateExecTransformer (91) - +- ^ InputIteratorTransformer (90) - +- ColumnarExchange (88) - +- VeloxResizeBatches (87) - +- ^ FlushableHashAggregateExecTransformer (85) - +- ^ ProjectExecTransformer (84) - +- ^ FilterExecTransformer (83) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) - - -Subquery:3 Hosting operator id = 40 Hosting Expression = Subquery scalar-subquery#65, [id=#6] -VeloxColumnarToRow (105) -+- ^ RegularHashAggregateExecTransformer (103) - +- ^ InputIteratorTransformer (102) - +- ColumnarExchange (100) - +- VeloxResizeBatches (99) - +- ^ FlushableHashAggregateExecTransformer (97) - +- ^ ProjectExecTransformer (96) - +- ^ FilterExecTransformer (95) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (94) - - -(94) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#112] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#112 AS bloomFilter#113] + +Subquery:2 Hosting operator id = 44 Hosting Expression = Subquery scalar-subquery#65, [id=#6] +ObjectHashAggregate (107) ++- VeloxColumnarToRow (106) + +- ColumnarExchange (105) + +- VeloxResizeBatches (104) + +- RowToVeloxColumnar (103) + +- ObjectHashAggregate (102) + +- VeloxColumnarToRow (101) + +- ^ ProjectExecTransformer (99) + +- ^ FilterExecTransformer (98) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (97) + + +(97) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#93, d_week_seq#94] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1197), LessThanOrEqual(d_month_seq,1208), IsNotNull(d_week_seq)] ReadSchema: struct -(95) FilterExecTransformer +(98) FilterExecTransformer Input [2]: [d_month_seq#93, d_week_seq#94] Arguments: (((isnotnull(d_month_seq#93) AND (d_month_seq#93 >= 1197)) AND (d_month_seq#93 <= 1208)) AND isnotnull(d_week_seq#94)) -(96) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#94, 42) AS _pre_15#115] +(99) ProjectExecTransformer +Output [1]: [d_week_seq#94] Input [2]: [d_month_seq#93, d_week_seq#94] -(97) FlushableHashAggregateExecTransformer -Input [1]: [_pre_15#115] +(100) WholeStageCodegenTransformer (6) +Input [1]: [d_week_seq#94] +Arguments: false + +(101) VeloxColumnarToRow +Input [1]: [d_week_seq#94] + +(102) ObjectHashAggregate +Input [1]: [d_week_seq#94] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_15#115, 335, 8990, 0, 0)] -Aggregate Attributes [1]: [buf#116] -Results [1]: [buf#117] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [buf#114] +Results [1]: [buf#115] -(98) WholeStageCodegenTransformer (7) -Input [1]: [buf#117] -Arguments: false +(103) RowToVeloxColumnar +Input [1]: [buf#115] -(99) VeloxResizeBatches -Input [1]: [buf#117] +(104) VeloxResizeBatches +Input [1]: [buf#115] Arguments: 1024, 2147483647, 10485760 -(100) ColumnarExchange -Input [1]: [buf#117] +(105) ColumnarExchange +Input [1]: [buf#115] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13], [shuffle_writer_type=hash] -(101) InputAdapter -Input [1]: [buf#117] - -(102) InputIteratorTransformer -Input [1]: [buf#117] +(106) VeloxColumnarToRow +Input [1]: [buf#115] -(103) RegularHashAggregateExecTransformer -Input [1]: [buf#117] +(107) ObjectHashAggregate +Input [1]: [buf#115] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)#118] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)#118 AS bloomFilter#119] - -(104) WholeStageCodegenTransformer (8) -Input [1]: [bloomFilter#119] -Arguments: false - -(105) VeloxColumnarToRow -Input [1]: [bloomFilter#119] - -Subquery:4 Hosting operator id = 39 Hosting Expression = Subquery scalar-subquery#65, [id=#6] -VeloxColumnarToRow (105) -+- ^ RegularHashAggregateExecTransformer (103) - +- ^ InputIteratorTransformer (102) - +- ColumnarExchange (100) - +- VeloxResizeBatches (99) - +- ^ FlushableHashAggregateExecTransformer (97) - +- ^ ProjectExecTransformer (96) - +- ^ FilterExecTransformer (95) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (94) - +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)#116] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)#116 AS bloomFilter#117] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/simplified.txt index 75ebadb2c9e..f4a180f7d6f 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/simplified.txt @@ -1,6 +1,6 @@ VeloxColumnarToRow TakeOrderedAndProjectExecTransformer [s_store_name1,s_store_id1,d_week_seq1,(sun_sales1 / sun_sales2),(mon_sales1 / mon_sales2),(tue_sales1 / tue_sales1),(wed_sales1 / wed_sales2),(thu_sales1 / thu_sales2),(fri_sales1 / fri_sales2),(sat_sales1 / sat_sales2)] - WholeStageCodegenTransformer (14) + WholeStageCodegenTransformer (12) ProjectExecTransformer [s_store_name1,s_store_id1,d_week_seq1,sun_sales1,sun_sales2,mon_sales1,mon_sales2,tue_sales1,wed_sales1,wed_sales2,thu_sales1,thu_sales2,fri_sales1,fri_sales2,sat_sales1,sat_sales2] BroadcastHashJoinExecTransformer [s_store_id1,d_week_seq1,s_store_id2,d_week_seq2] ProjectExecTransformer [s_store_name,d_week_seq,s_store_id,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales] @@ -13,7 +13,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] #1 VeloxResizeBatches - WholeStageCodegenTransformer (4) + WholeStageCodegenTransformer (3) ProjectExecTransformer [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,ss_store_sk,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [ss_store_sk,d_week_seq,d_day_name,ss_sales_price] @@ -23,52 +23,42 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #2 - WholeStageCodegenTransformer (3) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [d_date_sk,d_week_seq] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #3 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #1 + InputAdapter VeloxColumnarToRow WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #4 - WholeStageCodegenTransformer (5) + WholeStageCodegenTransformer (4) FilterExecTransformer [s_store_sk,s_store_id] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id,s_store_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (6) + WholeStageCodegenTransformer (5) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #6 - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [d_week_seq,s_store_id,sun_sales,mon_sales,wed_sales,thu_sales,fri_sales,sat_sales] BroadcastHashJoinExecTransformer [d_week_seq,d_week_seq] ProjectExecTransformer [d_week_seq,sun_sales,mon_sales,wed_sales,thu_sales,fri_sales,sat_sales,s_store_id] @@ -79,7 +69,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum] #7 VeloxResizeBatches - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (8) ProjectExecTransformer [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,ss_store_sk,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [ss_store_sk,d_week_seq,d_day_name,ss_sales_price] @@ -89,45 +79,35 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (9) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (8) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (7) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [d_date_sk,d_week_seq] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #9 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (6) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #2 + InputAdapter VeloxColumnarToRow - WholeStageCodegenTransformer (8) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (7) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] + WholeStageCodegenTransformer (7) + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (9) FilterExecTransformer [s_store_sk,s_store_id] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #11 - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (10) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/explain.txt index a2f7bb3df10..123475d9101 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/explain.txt @@ -1,66 +1,69 @@ == Physical Plan == -VeloxColumnarToRow (82) -+- TakeOrderedAndProjectExecTransformer (81) - +- ^ ProjectExecTransformer (79) - +- ^ RegularHashAggregateExecTransformer (78) - +- ^ InputIteratorTransformer (77) - +- ColumnarExchange (75) - +- VeloxResizeBatches (74) - +- ^ ProjectExecTransformer (72) - +- ^ FlushableHashAggregateExecTransformer (71) - +- ^ ProjectExecTransformer (70) - +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (69) - :- ^ InputIteratorTransformer (60) - : +- ColumnarExchange (58) - : +- VeloxResizeBatches (57) - : +- ^ ProjectExecTransformer (55) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (54) - : :- ^ ProjectExecTransformer (46) - : : +- ^ FilterExecTransformer (45) - : : +- ^ ShuffledHashJoinExecTransformer ExistenceJoin(exists#1) BuildRight (44) - : : :- ^ ShuffledHashJoinExecTransformer ExistenceJoin(exists#2) BuildRight (32) - : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (20) - : : : : :- ^ InputIteratorTransformer (8) - : : : : : +- ColumnarExchange (6) - : : : : : +- VeloxResizeBatches (5) - : : : : : +- ^ ProjectExecTransformer (3) - : : : : : +- ^ FilterExecTransformer (2) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) - : : : : +- ^ InputIteratorTransformer (19) - : : : : +- ColumnarExchange (17) - : : : : +- VeloxResizeBatches (16) - : : : : +- ^ ProjectExecTransformer (14) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13) - : : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (9) - : : : : +- ^ InputIteratorTransformer (12) - : : : : +- ReusedExchange (10) - : : : +- ^ InputIteratorTransformer (31) - : : : +- ColumnarExchange (29) - : : : +- VeloxResizeBatches (28) - : : : +- ^ ProjectExecTransformer (26) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (25) - : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (21) - : : : +- ^ InputIteratorTransformer (24) - : : : +- ReusedExchange (22) - : : +- ^ InputIteratorTransformer (43) - : : +- ColumnarExchange (41) - : : +- VeloxResizeBatches (40) - : : +- ^ ProjectExecTransformer (38) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) - : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (33) - : : +- ^ InputIteratorTransformer (36) - : : +- ReusedExchange (34) - : +- ^ InputIteratorTransformer (53) - : +- ColumnarBroadcastExchange (51) - : +- ^ ProjectExecTransformer (49) - : +- ^ FilterExecTransformer (48) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (47) - +- ^ InputIteratorTransformer (68) - +- ColumnarExchange (66) - +- VeloxResizeBatches (65) - +- ^ ProjectExecTransformer (63) - +- ^ FilterExecTransformer (62) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (61) +VeloxColumnarToRow (87) ++- TakeOrderedAndProjectExecTransformer (86) + +- ^ ProjectExecTransformer (84) + +- ^ RegularHashAggregateExecTransformer (83) + +- ^ InputIteratorTransformer (82) + +- ColumnarExchange (80) + +- VeloxResizeBatches (79) + +- ^ ProjectExecTransformer (77) + +- ^ FlushableHashAggregateExecTransformer (76) + +- ^ ProjectExecTransformer (75) + +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (74) + :- ^ InputIteratorTransformer (65) + : +- ColumnarExchange (63) + : +- VeloxResizeBatches (62) + : +- ^ ProjectExecTransformer (60) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (59) + : :- ^ ProjectExecTransformer (51) + : : +- ^ FilterExecTransformer (50) + : : +- ^ ShuffledHashJoinExecTransformer ExistenceJoin(exists#1) BuildRight (49) + : : :- ^ ShuffledHashJoinExecTransformer ExistenceJoin(exists#2) BuildRight (37) + : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (25) + : : : : :- ^ InputIteratorTransformer (13) + : : : : : +- ColumnarExchange (11) + : : : : : +- VeloxResizeBatches (10) + : : : : : +- ^ ProjectExecTransformer (8) + : : : : : +- ^ InputIteratorTransformer (7) + : : : : : +- RowToVeloxColumnar (5) + : : : : : +- * Filter (4) + : : : : : +- VeloxColumnarToRow (3) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) + : : : : +- ^ InputIteratorTransformer (24) + : : : : +- ColumnarExchange (22) + : : : : +- VeloxResizeBatches (21) + : : : : +- ^ ProjectExecTransformer (19) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) + : : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (14) + : : : : +- ^ InputIteratorTransformer (17) + : : : : +- ReusedExchange (15) + : : : +- ^ InputIteratorTransformer (36) + : : : +- ColumnarExchange (34) + : : : +- VeloxResizeBatches (33) + : : : +- ^ ProjectExecTransformer (31) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (30) + : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (26) + : : : +- ^ InputIteratorTransformer (29) + : : : +- ReusedExchange (27) + : : +- ^ InputIteratorTransformer (48) + : : +- ColumnarExchange (46) + : : +- VeloxResizeBatches (45) + : : +- ^ ProjectExecTransformer (43) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (42) + : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (38) + : : +- ^ InputIteratorTransformer (41) + : : +- ReusedExchange (39) + : +- ^ InputIteratorTransformer (58) + : +- ColumnarBroadcastExchange (56) + : +- ^ ProjectExecTransformer (54) + : +- ^ FilterExecTransformer (53) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (52) + +- ^ InputIteratorTransformer (73) + +- ColumnarExchange (71) + +- VeloxResizeBatches (70) + +- ^ ProjectExecTransformer (68) + +- ^ FilterExecTransformer (67) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (66) (1) FileSourceScanExecTransformer parquet spark_catalog.default.customer @@ -70,453 +73,454 @@ Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (2) +Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] +Arguments: false + +(3) VeloxColumnarToRow +Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] + +(4) Filter [codegen id : 1] +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)) AND might_contain(Subquery scalar-subquery#6, [id=#1], xxhash64(c_current_addr_sk#5, 42))) + +(5) RowToVeloxColumnar +Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] + +(6) InputAdapter Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] -Arguments: ((isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4)) AND velox_might_contain(Subquery scalar-subquery#6, [id=#1], xxhash64(c_current_addr_sk#5, 42))) -(3) ProjectExecTransformer +(7) InputIteratorTransformer +Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] + +(8) ProjectExecTransformer Output [4]: [hash(c_customer_sk#3, 42) AS hash_partition_key#7, c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] -(4) WholeStageCodegenTransformer (3) +(9) WholeStageCodegenTransformer (3) Input [4]: [hash_partition_key#7, c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [4]: [hash_partition_key#7, c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [4]: [hash_partition_key#7, c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Arguments: hashpartitioning(c_customer_sk#3, 1), ENSURE_REQUIREMENTS, [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [2]: [ss_customer_sk#8, ss_sold_date_sk#9] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ss_sold_date_sk#9), dynamicpruningexpression(ss_sold_date_sk#9 IN dynamicpruning#10)] ReadSchema: struct -(10) ReusedExchange [Reuses operator id: 99] +(15) ReusedExchange [Reuses operator id: 103] Output [1]: [d_date_sk#11] -(11) InputAdapter +(16) InputAdapter Input [1]: [d_date_sk#11] -(12) InputIteratorTransformer +(17) InputIteratorTransformer Input [1]: [d_date_sk#11] -(13) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#9] Right keys [1]: [d_date_sk#11] Join type: Inner Join condition: None -(14) ProjectExecTransformer +(19) ProjectExecTransformer Output [2]: [hash(ss_customer_sk#8, 42) AS hash_partition_key#12, ss_customer_sk#8] Input [3]: [ss_customer_sk#8, ss_sold_date_sk#9, d_date_sk#11] -(15) WholeStageCodegenTransformer (6) +(20) WholeStageCodegenTransformer (6) Input [2]: [hash_partition_key#12, ss_customer_sk#8] Arguments: false -(16) VeloxResizeBatches +(21) VeloxResizeBatches Input [2]: [hash_partition_key#12, ss_customer_sk#8] Arguments: 1024, 2147483647, 10485760 -(17) ColumnarExchange +(22) ColumnarExchange Input [2]: [hash_partition_key#12, ss_customer_sk#8] Arguments: hashpartitioning(ss_customer_sk#8, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#8], [plan_id=3], [shuffle_writer_type=hash] -(18) InputAdapter +(23) InputAdapter Input [1]: [ss_customer_sk#8] -(19) InputIteratorTransformer +(24) InputIteratorTransformer Input [1]: [ss_customer_sk#8] -(20) ShuffledHashJoinExecTransformer +(25) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#3] Right keys [1]: [ss_customer_sk#8] Join type: LeftSemi Join condition: None -(21) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(26) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [2]: [ws_bill_customer_sk#13, ws_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ws_sold_date_sk#14), dynamicpruningexpression(ws_sold_date_sk#14 IN dynamicpruning#10)] ReadSchema: struct -(22) ReusedExchange [Reuses operator id: 99] +(27) ReusedExchange [Reuses operator id: 103] Output [1]: [d_date_sk#15] -(23) InputAdapter +(28) InputAdapter Input [1]: [d_date_sk#15] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [1]: [d_date_sk#15] -(25) BroadcastHashJoinExecTransformer +(30) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#14] Right keys [1]: [d_date_sk#15] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [2]: [hash(ws_bill_customer_sk#13, 42) AS hash_partition_key#16, ws_bill_customer_sk#13] Input [3]: [ws_bill_customer_sk#13, ws_sold_date_sk#14, d_date_sk#15] -(27) WholeStageCodegenTransformer (9) +(32) WholeStageCodegenTransformer (9) Input [2]: [hash_partition_key#16, ws_bill_customer_sk#13] Arguments: false -(28) VeloxResizeBatches +(33) VeloxResizeBatches Input [2]: [hash_partition_key#16, ws_bill_customer_sk#13] Arguments: 1024, 2147483647, 10485760 -(29) ColumnarExchange +(34) ColumnarExchange Input [2]: [hash_partition_key#16, ws_bill_customer_sk#13] Arguments: hashpartitioning(ws_bill_customer_sk#13, 1), ENSURE_REQUIREMENTS, [ws_bill_customer_sk#13], [plan_id=4], [shuffle_writer_type=hash] -(30) InputAdapter +(35) InputAdapter Input [1]: [ws_bill_customer_sk#13] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [1]: [ws_bill_customer_sk#13] -(32) ShuffledHashJoinExecTransformer +(37) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#3] Right keys [1]: [ws_bill_customer_sk#13] Join type: ExistenceJoin(exists#2) Join condition: None -(33) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(38) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [2]: [cs_ship_customer_sk#17, cs_sold_date_sk#18] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(cs_sold_date_sk#18), dynamicpruningexpression(cs_sold_date_sk#18 IN dynamicpruning#10)] ReadSchema: struct -(34) ReusedExchange [Reuses operator id: 99] +(39) ReusedExchange [Reuses operator id: 103] Output [1]: [d_date_sk#19] -(35) InputAdapter +(40) InputAdapter Input [1]: [d_date_sk#19] -(36) InputIteratorTransformer +(41) InputIteratorTransformer Input [1]: [d_date_sk#19] -(37) BroadcastHashJoinExecTransformer +(42) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#18] Right keys [1]: [d_date_sk#19] Join type: Inner Join condition: None -(38) ProjectExecTransformer +(43) ProjectExecTransformer Output [2]: [hash(cs_ship_customer_sk#17, 42) AS hash_partition_key#20, cs_ship_customer_sk#17] Input [3]: [cs_ship_customer_sk#17, cs_sold_date_sk#18, d_date_sk#19] -(39) WholeStageCodegenTransformer (12) +(44) WholeStageCodegenTransformer (12) Input [2]: [hash_partition_key#20, cs_ship_customer_sk#17] Arguments: false -(40) VeloxResizeBatches +(45) VeloxResizeBatches Input [2]: [hash_partition_key#20, cs_ship_customer_sk#17] Arguments: 1024, 2147483647, 10485760 -(41) ColumnarExchange +(46) ColumnarExchange Input [2]: [hash_partition_key#20, cs_ship_customer_sk#17] Arguments: hashpartitioning(cs_ship_customer_sk#17, 1), ENSURE_REQUIREMENTS, [cs_ship_customer_sk#17], [plan_id=5], [shuffle_writer_type=hash] -(42) InputAdapter +(47) InputAdapter Input [1]: [cs_ship_customer_sk#17] -(43) InputIteratorTransformer +(48) InputIteratorTransformer Input [1]: [cs_ship_customer_sk#17] -(44) ShuffledHashJoinExecTransformer +(49) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#3] Right keys [1]: [cs_ship_customer_sk#17] Join type: ExistenceJoin(exists#1) Join condition: None -(45) FilterExecTransformer +(50) FilterExecTransformer Input [5]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5, exists#2, exists#1] Arguments: (exists#2 OR exists#1) -(46) ProjectExecTransformer +(51) ProjectExecTransformer 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] -(47) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(52) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#21, ca_county#22] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Jefferson County,La Porte County,Rush County,Toole County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(48) FilterExecTransformer +(53) FilterExecTransformer Input [2]: [ca_address_sk#21, ca_county#22] Arguments: (ca_county#22 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#21)) -(49) ProjectExecTransformer +(54) ProjectExecTransformer Output [1]: [ca_address_sk#21] Input [2]: [ca_address_sk#21, ca_county#22] -(50) WholeStageCodegenTransformer (13) +(55) WholeStageCodegenTransformer (13) Input [1]: [ca_address_sk#21] Arguments: false -(51) ColumnarBroadcastExchange +(56) ColumnarBroadcastExchange Input [1]: [ca_address_sk#21] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(52) InputAdapter +(57) InputAdapter Input [1]: [ca_address_sk#21] -(53) InputIteratorTransformer +(58) InputIteratorTransformer Input [1]: [ca_address_sk#21] -(54) BroadcastHashJoinExecTransformer +(59) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#5] Right keys [1]: [ca_address_sk#21] Join type: Inner Join condition: None -(55) ProjectExecTransformer +(60) ProjectExecTransformer Output [2]: [hash(c_current_cdemo_sk#4, 42) AS hash_partition_key#23, c_current_cdemo_sk#4] Input [3]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#21] -(56) WholeStageCodegenTransformer (14) +(61) WholeStageCodegenTransformer (14) Input [2]: [hash_partition_key#23, c_current_cdemo_sk#4] Arguments: false -(57) VeloxResizeBatches +(62) VeloxResizeBatches Input [2]: [hash_partition_key#23, c_current_cdemo_sk#4] Arguments: 1024, 2147483647, 10485760 -(58) ColumnarExchange +(63) ColumnarExchange Input [2]: [hash_partition_key#23, c_current_cdemo_sk#4] Arguments: hashpartitioning(c_current_cdemo_sk#4, 1), ENSURE_REQUIREMENTS, [c_current_cdemo_sk#4], [plan_id=7], [shuffle_writer_type=hash] -(59) InputAdapter +(64) InputAdapter Input [1]: [c_current_cdemo_sk#4] -(60) InputIteratorTransformer +(65) InputIteratorTransformer Input [1]: [c_current_cdemo_sk#4] -(61) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(66) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct -(62) FilterExecTransformer +(67) FilterExecTransformer Input [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Arguments: isnotnull(cd_demo_sk#24) -(63) ProjectExecTransformer +(68) ProjectExecTransformer Output [10]: [hash(cd_demo_sk#24, 42) AS hash_partition_key#33, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Input [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] -(64) WholeStageCodegenTransformer (15) +(69) WholeStageCodegenTransformer (15) Input [10]: [hash_partition_key#33, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Arguments: false -(65) VeloxResizeBatches +(70) VeloxResizeBatches Input [10]: [hash_partition_key#33, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Arguments: 1024, 2147483647, 10485760 -(66) ColumnarExchange +(71) ColumnarExchange Input [10]: [hash_partition_key#33, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Arguments: hashpartitioning(cd_demo_sk#24, 1), ENSURE_REQUIREMENTS, [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32], [plan_id=8], [shuffle_writer_type=hash] -(67) InputAdapter +(72) InputAdapter Input [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] -(68) InputIteratorTransformer +(73) InputIteratorTransformer Input [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] -(69) ShuffledHashJoinExecTransformer +(74) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#4] Right keys [1]: [cd_demo_sk#24] Join type: Inner Join condition: None -(70) ProjectExecTransformer +(75) ProjectExecTransformer Output [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Input [10]: [c_current_cdemo_sk#4, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] -(71) FlushableHashAggregateExecTransformer +(76) FlushableHashAggregateExecTransformer Input [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Keys [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Functions [1]: [partial_count(1)] Aggregate Attributes [1]: [count#34] Results [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] -(72) ProjectExecTransformer +(77) ProjectExecTransformer Output [10]: [hash(cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, 42) AS hash_partition_key#36, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] -(73) WholeStageCodegenTransformer (16) +(78) WholeStageCodegenTransformer (16) Input [10]: [hash_partition_key#36, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] Arguments: false -(74) VeloxResizeBatches +(79) VeloxResizeBatches Input [10]: [hash_partition_key#36, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] Arguments: 1024, 2147483647, 10485760 -(75) ColumnarExchange +(80) ColumnarExchange Input [10]: [hash_partition_key#36, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] Arguments: hashpartitioning(cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, 1), ENSURE_REQUIREMENTS, [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35], [plan_id=9], [shuffle_writer_type=hash] -(76) InputAdapter +(81) InputAdapter Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] -(77) InputIteratorTransformer +(82) InputIteratorTransformer Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] -(78) RegularHashAggregateExecTransformer +(83) RegularHashAggregateExecTransformer Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] Keys [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Functions [1]: [count(1)] Aggregate Attributes [1]: [count(1)#37] Results [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count(1)#37] -(79) ProjectExecTransformer +(84) ProjectExecTransformer Output [14]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, count(1)#37 AS cnt1#38, cd_purchase_estimate#28, count(1)#37 AS cnt2#39, cd_credit_rating#29, count(1)#37 AS cnt3#40, cd_dep_count#30, count(1)#37 AS cnt4#41, cd_dep_employed_count#31, count(1)#37 AS cnt5#42, cd_dep_college_count#32, count(1)#37 AS cnt6#43] Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count(1)#37] -(80) WholeStageCodegenTransformer (17) +(85) WholeStageCodegenTransformer (17) Input [14]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#38, cd_purchase_estimate#28, cnt2#39, cd_credit_rating#29, cnt3#40, cd_dep_count#30, cnt4#41, cd_dep_employed_count#31, cnt5#42, cd_dep_college_count#32, cnt6#43] Arguments: false -(81) TakeOrderedAndProjectExecTransformer +(86) TakeOrderedAndProjectExecTransformer Input [14]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#38, cd_purchase_estimate#28, cnt2#39, cd_credit_rating#29, cnt3#40, cd_dep_count#30, cnt4#41, cd_dep_employed_count#31, cnt5#42, cd_dep_college_count#32, cnt6#43] Arguments: 100, [cd_gender#25 ASC NULLS FIRST, cd_marital_status#26 ASC NULLS FIRST, cd_education_status#27 ASC NULLS FIRST, cd_purchase_estimate#28 ASC NULLS FIRST, cd_credit_rating#29 ASC NULLS FIRST, cd_dep_count#30 ASC NULLS FIRST, cd_dep_employed_count#31 ASC NULLS FIRST, cd_dep_college_count#32 ASC NULLS FIRST], [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#38, cd_purchase_estimate#28, cnt2#39, cd_credit_rating#29, cnt3#40, cd_dep_count#30, cnt4#41, cd_dep_employed_count#31, cnt5#42, cd_dep_college_count#32, cnt6#43], 0 -(82) VeloxColumnarToRow +(87) VeloxColumnarToRow Input [14]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#38, cd_purchase_estimate#28, cnt2#39, cd_credit_rating#29, cnt3#40, cd_dep_count#30, cnt4#41, cd_dep_employed_count#31, cnt5#42, cd_dep_college_count#32, cnt6#43] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#6, [id=#1] -VeloxColumnarToRow (94) -+- ^ RegularHashAggregateExecTransformer (92) - +- ^ InputIteratorTransformer (91) - +- ColumnarExchange (89) - +- VeloxResizeBatches (88) - +- ^ FlushableHashAggregateExecTransformer (86) - +- ^ ProjectExecTransformer (85) - +- ^ FilterExecTransformer (84) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (83) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#6, [id=#1] +ObjectHashAggregate (98) ++- VeloxColumnarToRow (97) + +- ColumnarExchange (96) + +- VeloxResizeBatches (95) + +- RowToVeloxColumnar (94) + +- ObjectHashAggregate (93) + +- VeloxColumnarToRow (92) + +- ^ ProjectExecTransformer (90) + +- ^ FilterExecTransformer (89) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (88) -(83) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(88) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#21, ca_county#22] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Jefferson County,La Porte County,Rush County,Toole County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(84) FilterExecTransformer +(89) FilterExecTransformer Input [2]: [ca_address_sk#21, ca_county#22] Arguments: (ca_county#22 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#21)) -(85) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#21, 42) AS _pre_1#44] +(90) ProjectExecTransformer +Output [1]: [ca_address_sk#21] Input [2]: [ca_address_sk#21, ca_county#22] -(86) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#44] +(91) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#21] +Arguments: false + +(92) VeloxColumnarToRow +Input [1]: [ca_address_sk#21] + +(93) ObjectHashAggregate +Input [1]: [ca_address_sk#21] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#44, 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [buf#45] -Results [1]: [buf#46] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [buf#44] +Results [1]: [buf#45] -(87) WholeStageCodegenTransformer (1) -Input [1]: [buf#46] -Arguments: false +(94) RowToVeloxColumnar +Input [1]: [buf#45] -(88) VeloxResizeBatches -Input [1]: [buf#46] +(95) VeloxResizeBatches +Input [1]: [buf#45] Arguments: 1024, 2147483647, 10485760 -(89) ColumnarExchange -Input [1]: [buf#46] +(96) ColumnarExchange +Input [1]: [buf#45] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] -(90) InputAdapter -Input [1]: [buf#46] +(97) VeloxColumnarToRow +Input [1]: [buf#45] -(91) InputIteratorTransformer -Input [1]: [buf#46] - -(92) RegularHashAggregateExecTransformer -Input [1]: [buf#46] +(98) ObjectHashAggregate +Input [1]: [buf#45] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#47] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#47 AS bloomFilter#48] - -(93) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#48] -Arguments: false - -(94) VeloxColumnarToRow -Input [1]: [bloomFilter#48] - -Subquery:2 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#6, [id=#1] -VeloxColumnarToRow (94) -+- ^ RegularHashAggregateExecTransformer (92) - +- ^ InputIteratorTransformer (91) - +- ColumnarExchange (89) - +- VeloxResizeBatches (88) - +- ^ FlushableHashAggregateExecTransformer (86) - +- ^ ProjectExecTransformer (85) - +- ^ FilterExecTransformer (84) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (83) - +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#46] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#46 AS bloomFilter#47] -Subquery:3 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10 -ColumnarBroadcastExchange (99) -+- ^ ProjectExecTransformer (97) - +- ^ FilterExecTransformer (96) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (95) +Subquery:2 Hosting operator id = 14 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10 +ColumnarBroadcastExchange (103) ++- ^ ProjectExecTransformer (101) + +- ^ FilterExecTransformer (100) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (99) -(95) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [3]: [d_date_sk#11, d_year#49, d_moy#50] +(99) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [3]: [d_date_sk#11, d_year#48, d_moy#49] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] 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 -(96) FilterExecTransformer -Input [3]: [d_date_sk#11, d_year#49, d_moy#50] -Arguments: (((((isnotnull(d_year#49) AND isnotnull(d_moy#50)) AND (d_year#49 = 2002)) AND (d_moy#50 >= 1)) AND (d_moy#50 <= 4)) AND isnotnull(d_date_sk#11)) +(100) FilterExecTransformer +Input [3]: [d_date_sk#11, d_year#48, d_moy#49] +Arguments: (((((isnotnull(d_year#48) AND isnotnull(d_moy#49)) AND (d_year#48 = 2002)) AND (d_moy#49 >= 1)) AND (d_moy#49 <= 4)) AND isnotnull(d_date_sk#11)) -(97) ProjectExecTransformer +(101) ProjectExecTransformer Output [1]: [d_date_sk#11] -Input [3]: [d_date_sk#11, d_year#49, d_moy#50] +Input [3]: [d_date_sk#11, d_year#48, d_moy#49] -(98) WholeStageCodegenTransformer (4) +(102) WholeStageCodegenTransformer (4) Input [1]: [d_date_sk#11] Arguments: false -(99) ColumnarBroadcastExchange +(103) ColumnarBroadcastExchange Input [1]: [d_date_sk#11] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] -Subquery:4 Hosting operator id = 21 Hosting Expression = ws_sold_date_sk#14 IN dynamicpruning#10 +Subquery:3 Hosting operator id = 26 Hosting Expression = ws_sold_date_sk#14 IN dynamicpruning#10 -Subquery:5 Hosting operator id = 33 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#10 +Subquery:4 Hosting operator id = 38 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#10 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/simplified.txt index b8d0a6721b1..8c5820692f3 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/simplified.txt @@ -30,34 +30,27 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (3) ProjectExecTransformer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - FilterExecTransformer [c_current_addr_sk,c_current_cdemo_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] - FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [c_current_addr_sk,c_current_cdemo_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_county,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] InputIteratorTransformer InputAdapter ColumnarExchange [ss_customer_sk] #5 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt index c451d901705..b52fbe4e626 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt @@ -1,50 +1,53 @@ == Physical Plan == -VeloxColumnarToRow (59) -+- ^ ProjectExecTransformer (57) - +- ^ RegularHashAggregateExecTransformer (56) - +- ^ RegularHashAggregateExecTransformer (55) - +- ^ RegularHashAggregateExecTransformer (54) - +- ^ RegularHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51) - :- ^ ProjectExecTransformer (43) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (42) - : :- ^ ProjectExecTransformer (34) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (33) - : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (25) - : : : :- ^ ProjectExecTransformer (17) - : : : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (16) - : : : : :- ^ InputIteratorTransformer (8) - : : : : : +- ColumnarExchange (6) - : : : : : +- VeloxResizeBatches (5) - : : : : : +- ^ ProjectExecTransformer (3) - : : : : : +- ^ FilterExecTransformer (2) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (1) - : : : : +- ^ InputIteratorTransformer (15) - : : : : +- ColumnarExchange (13) - : : : : +- VeloxResizeBatches (12) - : : : : +- ^ ProjectExecTransformer (10) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (9) - : : : +- ^ InputIteratorTransformer (24) - : : : +- ColumnarExchange (22) - : : : +- VeloxResizeBatches (21) - : : : +- ^ ProjectExecTransformer (19) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (18) - : : +- ^ InputIteratorTransformer (32) - : : +- ColumnarBroadcastExchange (30) - : : +- ^ ProjectExecTransformer (28) - : : +- ^ FilterExecTransformer (27) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (26) - : +- ^ InputIteratorTransformer (41) - : +- ColumnarBroadcastExchange (39) - : +- ^ ProjectExecTransformer (37) - : +- ^ FilterExecTransformer (36) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.call_center (35) - +- ^ InputIteratorTransformer (50) - +- ColumnarBroadcastExchange (48) - +- ^ ProjectExecTransformer (46) - +- ^ FilterExecTransformer (45) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (44) +VeloxColumnarToRow (64) ++- ^ ProjectExecTransformer (62) + +- ^ RegularHashAggregateExecTransformer (61) + +- ^ RegularHashAggregateExecTransformer (60) + +- ^ RegularHashAggregateExecTransformer (59) + +- ^ RegularHashAggregateExecTransformer (58) + +- ^ ProjectExecTransformer (57) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (56) + :- ^ ProjectExecTransformer (48) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (47) + : :- ^ ProjectExecTransformer (39) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (38) + : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (30) + : : : :- ^ ProjectExecTransformer (22) + : : : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (21) + : : : : :- ^ InputIteratorTransformer (13) + : : : : : +- ColumnarExchange (11) + : : : : : +- VeloxResizeBatches (10) + : : : : : +- ^ ProjectExecTransformer (8) + : : : : : +- ^ InputIteratorTransformer (7) + : : : : : +- RowToVeloxColumnar (5) + : : : : : +- * Filter (4) + : : : : : +- VeloxColumnarToRow (3) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (1) + : : : : +- ^ InputIteratorTransformer (20) + : : : : +- ColumnarExchange (18) + : : : : +- VeloxResizeBatches (17) + : : : : +- ^ ProjectExecTransformer (15) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (14) + : : : +- ^ InputIteratorTransformer (29) + : : : +- ColumnarExchange (27) + : : : +- VeloxResizeBatches (26) + : : : +- ^ ProjectExecTransformer (24) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (23) + : : +- ^ InputIteratorTransformer (37) + : : +- ColumnarBroadcastExchange (35) + : : +- ^ ProjectExecTransformer (33) + : : +- ^ FilterExecTransformer (32) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (31) + : +- ^ InputIteratorTransformer (46) + : +- ColumnarBroadcastExchange (44) + : +- ^ ProjectExecTransformer (42) + : +- ^ FilterExecTransformer (41) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.call_center (40) + +- ^ InputIteratorTransformer (55) + +- ColumnarBroadcastExchange (53) + +- ^ ProjectExecTransformer (51) + +- ^ FilterExecTransformer (50) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (49) (1) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales @@ -54,494 +57,465 @@ Location: CatalogFileIndex [{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_ship_date_sk), IsNotNull(cs_ship_addr_sk), IsNotNull(cs_call_center_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (4) +Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] +Arguments: false + +(3) VeloxColumnarToRow +Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] + +(4) Filter [codegen id : 1] +Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] +Condition : (((((isnotnull(cs_ship_date_sk#1) AND isnotnull(cs_ship_addr_sk#2)) AND isnotnull(cs_call_center_sk#3)) AND might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(cs_ship_addr_sk#2, 42))) AND might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(cs_call_center_sk#3, 42))) AND might_contain(Subquery scalar-subquery#11, [id=#3], xxhash64(cs_ship_date_sk#1, 42))) + +(5) RowToVeloxColumnar Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] -Arguments: (((((isnotnull(cs_ship_date_sk#1) AND isnotnull(cs_ship_addr_sk#2)) AND isnotnull(cs_call_center_sk#3)) AND velox_might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(cs_ship_addr_sk#2, 42))) AND velox_might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(cs_call_center_sk#3, 42))) AND velox_might_contain(Subquery scalar-subquery#11, [id=#3], xxhash64(cs_ship_date_sk#1, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] + +(7) InputIteratorTransformer +Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] + +(8) ProjectExecTransformer Output [8]: [hash(cs_order_number#5, 42) AS hash_partition_key#12, cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] -(4) WholeStageCodegenTransformer (7) +(9) WholeStageCodegenTransformer (5) Input [8]: [hash_partition_key#12, cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [8]: [hash_partition_key#12, cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [8]: [hash_partition_key#12, cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Arguments: hashpartitioning(cs_order_number#5, 1), ENSURE_REQUIREMENTS, [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7], [plan_id=4], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [3]: [cs_warehouse_sk#13, cs_order_number#14, cs_sold_date_sk#15] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_sales] ReadSchema: struct -(10) ProjectExecTransformer +(15) ProjectExecTransformer Output [3]: [hash(cs_order_number#14, 42) AS hash_partition_key#16, cs_warehouse_sk#13, cs_order_number#14] Input [3]: [cs_warehouse_sk#13, cs_order_number#14, cs_sold_date_sk#15] -(11) WholeStageCodegenTransformer (8) +(16) WholeStageCodegenTransformer (6) Input [3]: [hash_partition_key#16, cs_warehouse_sk#13, cs_order_number#14] Arguments: false -(12) VeloxResizeBatches +(17) VeloxResizeBatches Input [3]: [hash_partition_key#16, cs_warehouse_sk#13, cs_order_number#14] Arguments: 1024, 2147483647, 10485760 -(13) ColumnarExchange +(18) ColumnarExchange Input [3]: [hash_partition_key#16, cs_warehouse_sk#13, cs_order_number#14] Arguments: hashpartitioning(cs_order_number#14, 1), ENSURE_REQUIREMENTS, [cs_warehouse_sk#13, cs_order_number#14], [plan_id=5], [shuffle_writer_type=hash] -(14) InputAdapter +(19) InputAdapter Input [2]: [cs_warehouse_sk#13, cs_order_number#14] -(15) InputIteratorTransformer +(20) InputIteratorTransformer Input [2]: [cs_warehouse_sk#13, cs_order_number#14] -(16) ShuffledHashJoinExecTransformer +(21) ShuffledHashJoinExecTransformer Left keys [1]: [cs_order_number#5] Right keys [1]: [cs_order_number#14] Join type: LeftSemi Join condition: NOT (cs_warehouse_sk#4 = cs_warehouse_sk#13) -(17) ProjectExecTransformer +(22) ProjectExecTransformer Output [6]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -(18) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(23) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [2]: [cr_order_number#17, cr_returned_date_sk#18] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] ReadSchema: struct -(19) ProjectExecTransformer +(24) ProjectExecTransformer Output [2]: [hash(cr_order_number#17, 42) AS hash_partition_key#19, cr_order_number#17] Input [2]: [cr_order_number#17, cr_returned_date_sk#18] -(20) WholeStageCodegenTransformer (9) +(25) WholeStageCodegenTransformer (7) Input [2]: [hash_partition_key#19, cr_order_number#17] Arguments: false -(21) VeloxResizeBatches +(26) VeloxResizeBatches Input [2]: [hash_partition_key#19, cr_order_number#17] Arguments: 1024, 2147483647, 10485760 -(22) ColumnarExchange +(27) ColumnarExchange Input [2]: [hash_partition_key#19, cr_order_number#17] Arguments: hashpartitioning(cr_order_number#17, 1), ENSURE_REQUIREMENTS, [cr_order_number#17], [plan_id=6], [shuffle_writer_type=hash] -(23) InputAdapter +(28) InputAdapter Input [1]: [cr_order_number#17] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [1]: [cr_order_number#17] -(25) ShuffledHashJoinExecTransformer +(30) ShuffledHashJoinExecTransformer Left keys [1]: [cs_order_number#5] Right keys [1]: [cr_order_number#17] Join type: LeftAnti Join condition: None -(26) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(31) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,GA), IsNotNull(ca_address_sk)] ReadSchema: struct -(27) FilterExecTransformer +(32) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_state#21] Arguments: ((isnotnull(ca_state#21) AND (ca_state#21 = GA)) AND isnotnull(ca_address_sk#20)) -(28) ProjectExecTransformer +(33) ProjectExecTransformer Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_state#21] -(29) WholeStageCodegenTransformer (10) +(34) WholeStageCodegenTransformer (8) Input [1]: [ca_address_sk#20] Arguments: false -(30) ColumnarBroadcastExchange +(35) ColumnarBroadcastExchange Input [1]: [ca_address_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(31) InputAdapter +(36) InputAdapter Input [1]: [ca_address_sk#20] -(32) InputIteratorTransformer +(37) InputIteratorTransformer Input [1]: [ca_address_sk#20] -(33) BroadcastHashJoinExecTransformer +(38) BroadcastHashJoinExecTransformer Left keys [1]: [cs_ship_addr_sk#2] Right keys [1]: [ca_address_sk#20] Join type: Inner Join condition: None -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [5]: [cs_ship_date_sk#1, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, ca_address_sk#20] -(35) FileSourceScanExecTransformer parquet spark_catalog.default.call_center +(40) FileSourceScanExecTransformer parquet spark_catalog.default.call_center Output [2]: [cc_call_center_sk#22, cc_county#23] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_county), EqualTo(cc_county,Williamson County), IsNotNull(cc_call_center_sk)] ReadSchema: struct -(36) FilterExecTransformer +(41) FilterExecTransformer Input [2]: [cc_call_center_sk#22, cc_county#23] Arguments: ((isnotnull(cc_county#23) AND (cc_county#23 = Williamson County)) AND isnotnull(cc_call_center_sk#22)) -(37) ProjectExecTransformer +(42) ProjectExecTransformer Output [1]: [cc_call_center_sk#22] Input [2]: [cc_call_center_sk#22, cc_county#23] -(38) WholeStageCodegenTransformer (11) +(43) WholeStageCodegenTransformer (9) Input [1]: [cc_call_center_sk#22] Arguments: false -(39) ColumnarBroadcastExchange +(44) ColumnarBroadcastExchange Input [1]: [cc_call_center_sk#22] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -(40) InputAdapter +(45) InputAdapter Input [1]: [cc_call_center_sk#22] -(41) InputIteratorTransformer +(46) InputIteratorTransformer Input [1]: [cc_call_center_sk#22] -(42) BroadcastHashJoinExecTransformer +(47) BroadcastHashJoinExecTransformer Left keys [1]: [cs_call_center_sk#3] Right keys [1]: [cc_call_center_sk#22] Join type: Inner Join condition: None -(43) ProjectExecTransformer +(48) ProjectExecTransformer Output [4]: [cs_ship_date_sk#1, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [6]: [cs_ship_date_sk#1, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cc_call_center_sk#22] -(44) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(49) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#24, d_date#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2002-02-01), LessThanOrEqual(d_date,2002-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(45) FilterExecTransformer +(50) FilterExecTransformer Input [2]: [d_date_sk#24, d_date#25] Arguments: (((isnotnull(d_date#25) AND (d_date#25 >= 2002-02-01)) AND (d_date#25 <= 2002-04-02)) AND isnotnull(d_date_sk#24)) -(46) ProjectExecTransformer +(51) ProjectExecTransformer Output [1]: [d_date_sk#24] Input [2]: [d_date_sk#24, d_date#25] -(47) WholeStageCodegenTransformer (12) +(52) WholeStageCodegenTransformer (10) Input [1]: [d_date_sk#24] Arguments: false -(48) ColumnarBroadcastExchange +(53) ColumnarBroadcastExchange Input [1]: [d_date_sk#24] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -(49) InputAdapter +(54) InputAdapter Input [1]: [d_date_sk#24] -(50) InputIteratorTransformer +(55) InputIteratorTransformer Input [1]: [d_date_sk#24] -(51) BroadcastHashJoinExecTransformer +(56) BroadcastHashJoinExecTransformer Left keys [1]: [cs_ship_date_sk#1] Right keys [1]: [d_date_sk#24] Join type: Inner Join condition: None -(52) ProjectExecTransformer +(57) ProjectExecTransformer Output [3]: [cs_order_number#5, UnscaledValue(cs_ext_ship_cost#6) AS _pre_1#26, UnscaledValue(cs_net_profit#7) AS _pre_2#27] Input [5]: [cs_ship_date_sk#1, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, d_date_sk#24] -(53) RegularHashAggregateExecTransformer +(58) RegularHashAggregateExecTransformer Input [3]: [cs_order_number#5, _pre_1#26, _pre_2#27] Keys [1]: [cs_order_number#5] Functions [2]: [partial_sum(_pre_1#26), partial_sum(_pre_2#27)] Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29] Results [3]: [cs_order_number#5, sum#30, sum#31] -(54) RegularHashAggregateExecTransformer +(59) RegularHashAggregateExecTransformer Input [3]: [cs_order_number#5, sum#30, sum#31] Keys [1]: [cs_order_number#5] Functions [2]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(UnscaledValue(cs_net_profit#7))] Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29] Results [3]: [cs_order_number#5, sum#30, sum#31] -(55) RegularHashAggregateExecTransformer +(60) RegularHashAggregateExecTransformer Input [3]: [cs_order_number#5, sum#30, sum#31] Keys: [] Functions [3]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(UnscaledValue(cs_net_profit#7)), partial_count(distinct cs_order_number#5)] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29, count(cs_order_number#5)#32] Results [3]: [sum#30, sum#31, count#33] -(56) RegularHashAggregateExecTransformer +(61) RegularHashAggregateExecTransformer Input [3]: [sum#30, sum#31, count#33] Keys: [] Functions [3]: [sum(UnscaledValue(cs_ext_ship_cost#6)), sum(UnscaledValue(cs_net_profit#7)), count(distinct cs_order_number#5)] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29, count(cs_order_number#5)#32] Results [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29, count(cs_order_number#5)#32] -(57) ProjectExecTransformer +(62) ProjectExecTransformer Output [3]: [count(cs_order_number#5)#32 AS order count #34, MakeDecimal(sum(UnscaledValue(cs_ext_ship_cost#6))#28,17,2) AS total shipping cost #35, MakeDecimal(sum(UnscaledValue(cs_net_profit#7))#29,17,2) AS total net profit #36] Input [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29, count(cs_order_number#5)#32] -(58) WholeStageCodegenTransformer (13) +(63) WholeStageCodegenTransformer (11) Input [3]: [order count #34, total shipping cost #35, total net profit #36] Arguments: false -(59) VeloxColumnarToRow +(64) VeloxColumnarToRow Input [3]: [order count #34, total shipping cost #35, total net profit #36] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (71) -+- ^ RegularHashAggregateExecTransformer (69) - +- ^ InputIteratorTransformer (68) - +- ColumnarExchange (66) - +- VeloxResizeBatches (65) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ FilterExecTransformer (61) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (60) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#9, [id=#1] +ObjectHashAggregate (75) ++- VeloxColumnarToRow (74) + +- ColumnarExchange (73) + +- VeloxResizeBatches (72) + +- RowToVeloxColumnar (71) + +- ObjectHashAggregate (70) + +- VeloxColumnarToRow (69) + +- ^ ProjectExecTransformer (67) + +- ^ FilterExecTransformer (66) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (65) -(60) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(65) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,GA), IsNotNull(ca_address_sk)] ReadSchema: struct -(61) FilterExecTransformer +(66) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_state#21] Arguments: ((isnotnull(ca_state#21) AND (ca_state#21 = GA)) AND isnotnull(ca_address_sk#20)) -(62) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#20, 42) AS _pre_3#37] +(67) ProjectExecTransformer +Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_state#21] -(63) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#37] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#37, 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [buf#38] -Results [1]: [buf#39] - -(64) WholeStageCodegenTransformer (1) -Input [1]: [buf#39] +(68) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#20] Arguments: false -(65) VeloxResizeBatches -Input [1]: [buf#39] -Arguments: 1024, 2147483647, 10485760 - -(66) ColumnarExchange -Input [1]: [buf#39] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] - -(67) InputAdapter -Input [1]: [buf#39] - -(68) InputIteratorTransformer -Input [1]: [buf#39] +(69) VeloxColumnarToRow +Input [1]: [ca_address_sk#20] -(69) RegularHashAggregateExecTransformer -Input [1]: [buf#39] +(70) ObjectHashAggregate +Input [1]: [ca_address_sk#20] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#40] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#40 AS bloomFilter#41] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [buf#37] +Results [1]: [buf#38] -(70) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#41] -Arguments: false +(71) RowToVeloxColumnar +Input [1]: [buf#38] -(71) VeloxColumnarToRow -Input [1]: [bloomFilter#41] +(72) VeloxResizeBatches +Input [1]: [buf#38] +Arguments: 1024, 2147483647, 10485760 -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (83) -+- ^ RegularHashAggregateExecTransformer (81) - +- ^ InputIteratorTransformer (80) - +- ColumnarExchange (78) - +- VeloxResizeBatches (77) - +- ^ FlushableHashAggregateExecTransformer (75) - +- ^ ProjectExecTransformer (74) - +- ^ FilterExecTransformer (73) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.call_center (72) +(73) ColumnarExchange +Input [1]: [buf#38] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] +(74) VeloxColumnarToRow +Input [1]: [buf#38] -(72) FileSourceScanExecTransformer parquet spark_catalog.default.call_center +(75) ObjectHashAggregate +Input [1]: [buf#38] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#39] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#39 AS bloomFilter#40] + +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#10, [id=#2] +ObjectHashAggregate (86) ++- VeloxColumnarToRow (85) + +- ColumnarExchange (84) + +- VeloxResizeBatches (83) + +- RowToVeloxColumnar (82) + +- ObjectHashAggregate (81) + +- VeloxColumnarToRow (80) + +- ^ ProjectExecTransformer (78) + +- ^ FilterExecTransformer (77) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.call_center (76) + + +(76) FileSourceScanExecTransformer parquet spark_catalog.default.call_center Output [2]: [cc_call_center_sk#22, cc_county#23] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_county), EqualTo(cc_county,Williamson County), IsNotNull(cc_call_center_sk)] ReadSchema: struct -(73) FilterExecTransformer +(77) FilterExecTransformer Input [2]: [cc_call_center_sk#22, cc_county#23] Arguments: ((isnotnull(cc_county#23) AND (cc_county#23 = Williamson County)) AND isnotnull(cc_call_center_sk#22)) -(74) ProjectExecTransformer -Output [1]: [xxhash64(cc_call_center_sk#22, 42) AS _pre_4#42] +(78) ProjectExecTransformer +Output [1]: [cc_call_center_sk#22] Input [2]: [cc_call_center_sk#22, cc_county#23] -(75) FlushableHashAggregateExecTransformer -Input [1]: [_pre_4#42] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_4#42, 4, 144, 0, 0)] -Aggregate Attributes [1]: [buf#43] -Results [1]: [buf#44] - -(76) WholeStageCodegenTransformer (3) -Input [1]: [buf#44] +(79) WholeStageCodegenTransformer (2) +Input [1]: [cc_call_center_sk#22] Arguments: false -(77) VeloxResizeBatches -Input [1]: [buf#44] -Arguments: 1024, 2147483647, 10485760 - -(78) ColumnarExchange -Input [1]: [buf#44] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] - -(79) InputAdapter -Input [1]: [buf#44] - -(80) InputIteratorTransformer -Input [1]: [buf#44] +(80) VeloxColumnarToRow +Input [1]: [cc_call_center_sk#22] -(81) RegularHashAggregateExecTransformer -Input [1]: [buf#44] +(81) ObjectHashAggregate +Input [1]: [cc_call_center_sk#22] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)#45] -Results [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)#45 AS bloomFilter#46] +Functions [1]: [partial_bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [buf#41] +Results [1]: [buf#42] -(82) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#46] -Arguments: false +(82) RowToVeloxColumnar +Input [1]: [buf#42] -(83) VeloxColumnarToRow -Input [1]: [bloomFilter#46] +(83) VeloxResizeBatches +Input [1]: [buf#42] +Arguments: 1024, 2147483647, 10485760 -Subquery:3 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#11, [id=#3] -VeloxColumnarToRow (95) -+- ^ RegularHashAggregateExecTransformer (93) - +- ^ InputIteratorTransformer (92) - +- ColumnarExchange (90) - +- VeloxResizeBatches (89) - +- ^ FlushableHashAggregateExecTransformer (87) - +- ^ ProjectExecTransformer (86) - +- ^ FilterExecTransformer (85) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (84) +(84) ColumnarExchange +Input [1]: [buf#42] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] +(85) VeloxColumnarToRow +Input [1]: [buf#42] -(84) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(86) ObjectHashAggregate +Input [1]: [buf#42] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)#43] +Results [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)#43 AS bloomFilter#44] + +Subquery:3 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#11, [id=#3] +ObjectHashAggregate (97) ++- VeloxColumnarToRow (96) + +- ColumnarExchange (95) + +- VeloxResizeBatches (94) + +- RowToVeloxColumnar (93) + +- ObjectHashAggregate (92) + +- VeloxColumnarToRow (91) + +- ^ ProjectExecTransformer (89) + +- ^ FilterExecTransformer (88) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) + + +(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#24, d_date#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2002-02-01), LessThanOrEqual(d_date,2002-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(85) FilterExecTransformer +(88) FilterExecTransformer Input [2]: [d_date_sk#24, d_date#25] Arguments: (((isnotnull(d_date#25) AND (d_date#25 >= 2002-02-01)) AND (d_date#25 <= 2002-04-02)) AND isnotnull(d_date_sk#24)) -(86) ProjectExecTransformer -Output [1]: [xxhash64(d_date_sk#24, 42) AS _pre_5#47] +(89) ProjectExecTransformer +Output [1]: [d_date_sk#24] Input [2]: [d_date_sk#24, d_date#25] -(87) FlushableHashAggregateExecTransformer -Input [1]: [_pre_5#47] +(90) WholeStageCodegenTransformer (3) +Input [1]: [d_date_sk#24] +Arguments: false + +(91) VeloxColumnarToRow +Input [1]: [d_date_sk#24] + +(92) ObjectHashAggregate +Input [1]: [d_date_sk#24] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_5#47, 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [buf#48] -Results [1]: [buf#49] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [buf#45] +Results [1]: [buf#46] -(88) WholeStageCodegenTransformer (5) -Input [1]: [buf#49] -Arguments: false +(93) RowToVeloxColumnar +Input [1]: [buf#46] -(89) VeloxResizeBatches -Input [1]: [buf#49] +(94) VeloxResizeBatches +Input [1]: [buf#46] Arguments: 1024, 2147483647, 10485760 -(90) ColumnarExchange -Input [1]: [buf#49] +(95) ColumnarExchange +Input [1]: [buf#46] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(91) InputAdapter -Input [1]: [buf#49] +(96) VeloxColumnarToRow +Input [1]: [buf#46] -(92) InputIteratorTransformer -Input [1]: [buf#49] - -(93) RegularHashAggregateExecTransformer -Input [1]: [buf#49] +(97) ObjectHashAggregate +Input [1]: [buf#46] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#50] -Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#50 AS bloomFilter#51] - -(94) WholeStageCodegenTransformer (6) -Input [1]: [bloomFilter#51] -Arguments: false - -(95) VeloxColumnarToRow -Input [1]: [bloomFilter#51] - -Subquery:4 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (71) -+- ^ RegularHashAggregateExecTransformer (69) - +- ^ InputIteratorTransformer (68) - +- ColumnarExchange (66) - +- VeloxResizeBatches (65) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ FilterExecTransformer (61) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (60) - - -Subquery:5 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (83) -+- ^ RegularHashAggregateExecTransformer (81) - +- ^ InputIteratorTransformer (80) - +- ColumnarExchange (78) - +- VeloxResizeBatches (77) - +- ^ FlushableHashAggregateExecTransformer (75) - +- ^ ProjectExecTransformer (74) - +- ^ FilterExecTransformer (73) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.call_center (72) - - -Subquery:6 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#11, [id=#3] -VeloxColumnarToRow (95) -+- ^ RegularHashAggregateExecTransformer (93) - +- ^ InputIteratorTransformer (92) - +- ColumnarExchange (90) - +- VeloxResizeBatches (89) - +- ^ FlushableHashAggregateExecTransformer (87) - +- ^ ProjectExecTransformer (86) - +- ^ FilterExecTransformer (85) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (84) - +Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#47] +Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#47 AS bloomFilter#48] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt index b74f007b5fe..bdbea03e494 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt @@ -1,5 +1,5 @@ VeloxColumnarToRow - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [count(cs_order_number),sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit))] RegularHashAggregateExecTransformer [sum,sum,count] [sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count] RegularHashAggregateExecTransformer [cs_order_number] [sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count,sum,sum,count] @@ -18,120 +18,85 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [cs_order_number,cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk,cs_warehouse_sk,cs_ext_ship_cost,cs_net_profit] #1 VeloxResizeBatches - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (5) ProjectExecTransformer [cs_order_number,cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk,cs_warehouse_sk,cs_ext_ship_cost,cs_net_profit] - FilterExecTransformer [cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #2 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(cc_call_center_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [cc_call_center_sk] - FilterExecTransformer [cc_county,cc_call_center_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.call_center [cc_call_center_sk,cc_county] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk,cs_warehouse_sk,cs_order_number,cs_ext_ship_cost,cs_net_profit,cs_sold_date_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #2 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(cc_call_center_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_state,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(cc_call_center_sk, 42), 4, 144, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #3 VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [cc_call_center_sk] - FilterExecTransformer [cc_county,cc_call_center_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.call_center [cc_call_center_sk,cc_county] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [cc_call_center_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [cc_call_center_sk] + FilterExecTransformer [cc_county,cc_call_center_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.call_center [cc_call_center_sk,cc_county] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + RowToVeloxColumnar + ObjectHashAggregate [d_date_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk,cs_warehouse_sk,cs_order_number,cs_ext_ship_cost,cs_net_profit,cs_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarExchange [cs_order_number,cs_warehouse_sk] #5 VeloxResizeBatches - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (6) ProjectExecTransformer [cs_order_number,cs_warehouse_sk] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_warehouse_sk,cs_order_number,cs_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarExchange [cr_order_number] #6 VeloxResizeBatches - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (7) ProjectExecTransformer [cr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns [cr_order_number,cr_returned_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #7 - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (8) ProjectExecTransformer [ca_address_sk] FilterExecTransformer [ca_state,ca_address_sk] FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (9) ProjectExecTransformer [cc_call_center_sk] FilterExecTransformer [cc_county,cc_call_center_sk] FileSourceScanExecTransformer parquet spark_catalog.default.call_center [cc_call_center_sk,cc_county] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (10) ProjectExecTransformer [d_date_sk] FilterExecTransformer [d_date,d_date_sk] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/explain.txt index 8d95cd4ac26..6aa02631720 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/explain.txt @@ -1,65 +1,69 @@ == Physical Plan == -VeloxColumnarToRow (84) -+- ^ SortExecTransformer (82) - +- ^ InputIteratorTransformer (81) - +- ColumnarExchange (79) - +- VeloxResizeBatches (78) - +- ^ ProjectExecTransformer (76) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (75) - :- ^ ProjectExecTransformer (35) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (34) - : :- ^ ProjectExecTransformer (26) - : : +- ^ RegularHashAggregateExecTransformer (25) - : : +- ^ InputIteratorTransformer (24) - : : +- ColumnarExchange (22) - : : +- VeloxResizeBatches (21) - : : +- ^ ProjectExecTransformer (19) - : : +- ^ FlushableHashAggregateExecTransformer (18) - : : +- ^ ProjectExecTransformer (17) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (16) +VeloxColumnarToRow (88) ++- ^ SortExecTransformer (86) + +- ^ InputIteratorTransformer (85) + +- ColumnarExchange (83) + +- VeloxResizeBatches (82) + +- ^ ProjectExecTransformer (80) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (79) + :- ^ ProjectExecTransformer (37) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (36) + : :- ^ ProjectExecTransformer (28) + : : +- ^ RegularHashAggregateExecTransformer (27) + : : +- ^ InputIteratorTransformer (26) + : : +- ColumnarExchange (24) + : : +- VeloxResizeBatches (23) + : : +- ^ ProjectExecTransformer (21) + : : +- ^ FlushableHashAggregateExecTransformer (20) + : : +- ^ ProjectExecTransformer (19) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) : : :- ^ InputIteratorTransformer (9) : : : +- ColumnarUnion (7) : : : :- ^ ProjectExecTransformer (2) : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (1) : : : +- ^ ProjectExecTransformer (5) : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (4) - : : +- ^ InputIteratorTransformer (15) - : : +- ColumnarBroadcastExchange (13) - : : +- ^ FilterExecTransformer (11) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (10) - : +- ^ InputIteratorTransformer (33) - : +- ColumnarBroadcastExchange (31) - : +- ^ ProjectExecTransformer (29) - : +- ^ FilterExecTransformer (28) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (27) - +- ^ InputIteratorTransformer (74) - +- ColumnarBroadcastExchange (72) - +- ^ ProjectExecTransformer (70) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (69) - :- ^ ProjectExecTransformer (61) - : +- ^ RegularHashAggregateExecTransformer (60) - : +- ^ InputIteratorTransformer (59) - : +- ColumnarExchange (57) - : +- VeloxResizeBatches (56) - : +- ^ ProjectExecTransformer (54) - : +- ^ FlushableHashAggregateExecTransformer (53) - : +- ^ ProjectExecTransformer (52) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51) - : :- ^ InputIteratorTransformer (44) - : : +- ColumnarUnion (42) - : : :- ^ ProjectExecTransformer (37) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (36) - : : +- ^ ProjectExecTransformer (40) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (39) - : +- ^ InputIteratorTransformer (50) - : +- ColumnarBroadcastExchange (48) - : +- ^ FilterExecTransformer (46) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (45) - +- ^ InputIteratorTransformer (68) - +- ColumnarBroadcastExchange (66) - +- ^ ProjectExecTransformer (64) - +- ^ FilterExecTransformer (63) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (62) + : : +- ^ InputIteratorTransformer (17) + : : +- ColumnarBroadcastExchange (15) + : : +- RowToVeloxColumnar (14) + : : +- * Filter (13) + : : +- VeloxColumnarToRow (12) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (10) + : +- ^ InputIteratorTransformer (35) + : +- ColumnarBroadcastExchange (33) + : +- ^ ProjectExecTransformer (31) + : +- ^ FilterExecTransformer (30) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (29) + +- ^ InputIteratorTransformer (78) + +- ColumnarBroadcastExchange (76) + +- ^ ProjectExecTransformer (74) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (73) + :- ^ ProjectExecTransformer (65) + : +- ^ RegularHashAggregateExecTransformer (64) + : +- ^ InputIteratorTransformer (63) + : +- ColumnarExchange (61) + : +- VeloxResizeBatches (60) + : +- ^ ProjectExecTransformer (58) + : +- ^ FlushableHashAggregateExecTransformer (57) + : +- ^ ProjectExecTransformer (56) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (55) + : :- ^ InputIteratorTransformer (46) + : : +- ColumnarUnion (44) + : : :- ^ ProjectExecTransformer (39) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (38) + : : +- ^ ProjectExecTransformer (42) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (41) + : +- ^ InputIteratorTransformer (54) + : +- ColumnarBroadcastExchange (52) + : +- RowToVeloxColumnar (51) + : +- * Filter (50) + : +- VeloxColumnarToRow (49) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (47) + +- ^ InputIteratorTransformer (72) + +- ColumnarBroadcastExchange (70) + +- ^ ProjectExecTransformer (68) + +- ^ FilterExecTransformer (67) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (66) (1) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales @@ -108,475 +112,457 @@ Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(11) FilterExecTransformer +(11) WholeStageCodegenTransformer (4) Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -Arguments: ((isnotnull(d_date_sk#9) AND isnotnull(d_week_seq#10)) AND velox_might_contain(Subquery scalar-subquery#12, [id=#1], xxhash64(d_week_seq#10, 42))) +Arguments: false -(12) WholeStageCodegenTransformer (5) +(12) VeloxColumnarToRow +Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] + +(13) Filter [codegen id : 1] +Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] +Condition : ((isnotnull(d_date_sk#9) AND isnotnull(d_week_seq#10)) AND might_contain(Subquery scalar-subquery#12, [id=#1], xxhash64(d_week_seq#10, 42))) + +(14) RowToVeloxColumnar Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -Arguments: false -(13) ColumnarBroadcastExchange +(15) ColumnarBroadcastExchange Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] -(14) InputAdapter +(16) InputAdapter Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -(15) InputIteratorTransformer +(17) InputIteratorTransformer Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -(16) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [sold_date_sk#3] Right keys [1]: [d_date_sk#9] Join type: Inner Join condition: None -(17) ProjectExecTransformer +(19) ProjectExecTransformer Output [8]: [d_week_seq#10, UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END) AS _pre_1#13, UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END) AS _pre_2#14, UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END) AS _pre_3#15, UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END) AS _pre_4#16, UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END) AS _pre_5#17, UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END) AS _pre_6#18, UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END) AS _pre_7#19] Input [5]: [sold_date_sk#3, sales_price#4, d_date_sk#9, d_week_seq#10, d_day_name#11] -(18) FlushableHashAggregateExecTransformer +(20) FlushableHashAggregateExecTransformer Input [8]: [d_week_seq#10, _pre_1#13, _pre_2#14, _pre_3#15, _pre_4#16, _pre_5#17, _pre_6#18, _pre_7#19] Keys [1]: [d_week_seq#10] Functions [7]: [partial_sum(_pre_1#13), partial_sum(_pre_2#14), partial_sum(_pre_3#15), partial_sum(_pre_4#16), partial_sum(_pre_5#17), partial_sum(_pre_6#18), partial_sum(_pre_7#19)] Aggregate Attributes [7]: [sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26] Results [8]: [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] -(19) ProjectExecTransformer +(21) ProjectExecTransformer Output [9]: [hash(d_week_seq#10, 42) AS hash_partition_key#34, d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] Input [8]: [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] -(20) WholeStageCodegenTransformer (6) +(22) WholeStageCodegenTransformer (5) Input [9]: [hash_partition_key#34, d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] Arguments: false -(21) VeloxResizeBatches +(23) VeloxResizeBatches Input [9]: [hash_partition_key#34, d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] Arguments: 1024, 2147483647, 10485760 -(22) ColumnarExchange +(24) ColumnarExchange Input [9]: [hash_partition_key#34, d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] Arguments: hashpartitioning(d_week_seq#10, 1), ENSURE_REQUIREMENTS, [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33], [plan_id=3], [shuffle_writer_type=hash] -(23) InputAdapter +(25) InputAdapter Input [8]: [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] -(24) InputIteratorTransformer +(26) InputIteratorTransformer Input [8]: [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] -(25) RegularHashAggregateExecTransformer +(27) RegularHashAggregateExecTransformer Input [8]: [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] Keys [1]: [d_week_seq#10] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))] Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#41] Results [8]: [d_week_seq#10, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#41] -(26) ProjectExecTransformer +(28) ProjectExecTransformer Output [8]: [d_week_seq#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#35,17,2) AS sun_sales#42, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#36,17,2) AS mon_sales#43, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#37,17,2) AS tue_sales#44, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#38,17,2) AS wed_sales#45, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#39,17,2) AS thu_sales#46, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#40,17,2) AS fri_sales#47, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#41,17,2) AS sat_sales#48] Input [8]: [d_week_seq#10, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#41] -(27) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(29) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_week_seq#49, d_year#50] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_week_seq)] ReadSchema: struct -(28) FilterExecTransformer +(30) FilterExecTransformer Input [2]: [d_week_seq#49, d_year#50] Arguments: ((isnotnull(d_year#50) AND (d_year#50 = 2001)) AND isnotnull(d_week_seq#49)) -(29) ProjectExecTransformer +(31) ProjectExecTransformer Output [1]: [d_week_seq#49] Input [2]: [d_week_seq#49, d_year#50] -(30) WholeStageCodegenTransformer (7) +(32) WholeStageCodegenTransformer (6) Input [1]: [d_week_seq#49] Arguments: false -(31) ColumnarBroadcastExchange +(33) ColumnarBroadcastExchange Input [1]: [d_week_seq#49] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] -(32) InputAdapter +(34) InputAdapter Input [1]: [d_week_seq#49] -(33) InputIteratorTransformer +(35) InputIteratorTransformer Input [1]: [d_week_seq#49] -(34) BroadcastHashJoinExecTransformer +(36) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#10] Right keys [1]: [d_week_seq#49] Join type: Inner Join condition: None -(35) ProjectExecTransformer +(37) ProjectExecTransformer Output [8]: [d_week_seq#10 AS d_week_seq1#51, sun_sales#42 AS sun_sales1#52, mon_sales#43 AS mon_sales1#53, tue_sales#44 AS tue_sales1#54, wed_sales#45 AS wed_sales1#55, thu_sales#46 AS thu_sales1#56, fri_sales#47 AS fri_sales1#57, sat_sales#48 AS sat_sales1#58] Input [9]: [d_week_seq#10, sun_sales#42, mon_sales#43, tue_sales#44, wed_sales#45, thu_sales#46, fri_sales#47, sat_sales#48, d_week_seq#49] -(36) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(38) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [2]: [ws_ext_sales_price#59, ws_sold_date_sk#60] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ws_sold_date_sk#60)] ReadSchema: struct -(37) ProjectExecTransformer +(39) ProjectExecTransformer Output [2]: [ws_sold_date_sk#60 AS sold_date_sk#61, ws_ext_sales_price#59 AS sales_price#62] Input [2]: [ws_ext_sales_price#59, ws_sold_date_sk#60] -(38) WholeStageCodegenTransformer (8) +(40) WholeStageCodegenTransformer (7) Input [2]: [sold_date_sk#61, sales_price#62] Arguments: false -(39) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(41) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [2]: [cs_ext_sales_price#63, cs_sold_date_sk#64] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(cs_sold_date_sk#64)] ReadSchema: struct -(40) ProjectExecTransformer +(42) ProjectExecTransformer Output [2]: [cs_sold_date_sk#64 AS sold_date_sk#65, cs_ext_sales_price#63 AS sales_price#66] Input [2]: [cs_ext_sales_price#63, cs_sold_date_sk#64] -(41) WholeStageCodegenTransformer (9) +(43) WholeStageCodegenTransformer (8) Input [2]: [sold_date_sk#65, sales_price#66] Arguments: false -(42) ColumnarUnion +(44) ColumnarUnion Arguments: UnknownPartitioning(0) -(43) InputAdapter +(45) InputAdapter Input [2]: [sold_date_sk#61, sales_price#62] -(44) InputIteratorTransformer +(46) InputIteratorTransformer Input [2]: [sold_date_sk#61, sales_price#62] -(45) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(47) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(46) FilterExecTransformer +(48) WholeStageCodegenTransformer (10) Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] -Arguments: ((isnotnull(d_date_sk#67) AND isnotnull(d_week_seq#68)) AND velox_might_contain(Subquery scalar-subquery#70, [id=#5], xxhash64(d_week_seq#68, 42))) +Arguments: false -(47) WholeStageCodegenTransformer (12) +(49) VeloxColumnarToRow +Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] + +(50) Filter [codegen id : 2] +Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] +Condition : ((isnotnull(d_date_sk#67) AND isnotnull(d_week_seq#68)) AND might_contain(Subquery scalar-subquery#70, [id=#5], xxhash64(d_week_seq#68, 42))) + +(51) RowToVeloxColumnar Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] -Arguments: false -(48) ColumnarBroadcastExchange +(52) ColumnarBroadcastExchange Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] -(49) InputAdapter +(53) InputAdapter Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] -(50) InputIteratorTransformer +(54) InputIteratorTransformer Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] -(51) BroadcastHashJoinExecTransformer +(55) BroadcastHashJoinExecTransformer Left keys [1]: [sold_date_sk#61] Right keys [1]: [d_date_sk#67] Join type: Inner Join condition: None -(52) ProjectExecTransformer +(56) ProjectExecTransformer Output [8]: [d_week_seq#68, UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END) AS _pre_8#71, UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END) AS _pre_9#72, UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END) AS _pre_10#73, UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END) AS _pre_11#74, UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END) AS _pre_12#75, UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END) AS _pre_13#76, UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END) AS _pre_14#77] Input [5]: [sold_date_sk#61, sales_price#62, d_date_sk#67, d_week_seq#68, d_day_name#69] -(53) FlushableHashAggregateExecTransformer +(57) FlushableHashAggregateExecTransformer Input [8]: [d_week_seq#68, _pre_8#71, _pre_9#72, _pre_10#73, _pre_11#74, _pre_12#75, _pre_13#76, _pre_14#77] Keys [1]: [d_week_seq#68] Functions [7]: [partial_sum(_pre_8#71), partial_sum(_pre_9#72), partial_sum(_pre_10#73), partial_sum(_pre_11#74), partial_sum(_pre_12#75), partial_sum(_pre_13#76), partial_sum(_pre_14#77)] Aggregate Attributes [7]: [sum#78, sum#79, sum#80, sum#81, sum#82, sum#83, sum#84] Results [8]: [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] -(54) ProjectExecTransformer +(58) ProjectExecTransformer Output [9]: [hash(d_week_seq#68, 42) AS hash_partition_key#92, d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] Input [8]: [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] -(55) WholeStageCodegenTransformer (13) +(59) WholeStageCodegenTransformer (11) Input [9]: [hash_partition_key#92, d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] Arguments: false -(56) VeloxResizeBatches +(60) VeloxResizeBatches Input [9]: [hash_partition_key#92, d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] Arguments: 1024, 2147483647, 10485760 -(57) ColumnarExchange +(61) ColumnarExchange Input [9]: [hash_partition_key#92, d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] Arguments: hashpartitioning(d_week_seq#68, 1), ENSURE_REQUIREMENTS, [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91], [plan_id=7], [shuffle_writer_type=hash] -(58) InputAdapter +(62) InputAdapter Input [8]: [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] -(59) InputIteratorTransformer +(63) InputIteratorTransformer Input [8]: [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] -(60) RegularHashAggregateExecTransformer +(64) RegularHashAggregateExecTransformer Input [8]: [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] Keys [1]: [d_week_seq#68] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END))] Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END))#41] Results [8]: [d_week_seq#68, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END))#41] -(61) ProjectExecTransformer +(65) ProjectExecTransformer Output [8]: [d_week_seq#68, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END))#35,17,2) AS sun_sales#93, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END))#36,17,2) AS mon_sales#94, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END))#37,17,2) AS tue_sales#95, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END))#38,17,2) AS wed_sales#96, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END))#39,17,2) AS thu_sales#97, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END))#40,17,2) AS fri_sales#98, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END))#41,17,2) AS sat_sales#99] Input [8]: [d_week_seq#68, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END))#41] -(62) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(66) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_week_seq#100, d_year#101] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_week_seq)] ReadSchema: struct -(63) FilterExecTransformer +(67) FilterExecTransformer Input [2]: [d_week_seq#100, d_year#101] Arguments: ((isnotnull(d_year#101) AND (d_year#101 = 2002)) AND isnotnull(d_week_seq#100)) -(64) ProjectExecTransformer +(68) ProjectExecTransformer Output [1]: [d_week_seq#100] Input [2]: [d_week_seq#100, d_year#101] -(65) WholeStageCodegenTransformer (14) +(69) WholeStageCodegenTransformer (12) Input [1]: [d_week_seq#100] Arguments: false -(66) ColumnarBroadcastExchange +(70) ColumnarBroadcastExchange Input [1]: [d_week_seq#100] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -(67) InputAdapter +(71) InputAdapter Input [1]: [d_week_seq#100] -(68) InputIteratorTransformer +(72) InputIteratorTransformer Input [1]: [d_week_seq#100] -(69) BroadcastHashJoinExecTransformer +(73) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#68] Right keys [1]: [d_week_seq#100] Join type: Inner Join condition: None -(70) ProjectExecTransformer +(74) ProjectExecTransformer Output [8]: [d_week_seq#68 AS d_week_seq2#102, sun_sales#93 AS sun_sales2#103, mon_sales#94 AS mon_sales2#104, tue_sales#95 AS tue_sales2#105, wed_sales#96 AS wed_sales2#106, thu_sales#97 AS thu_sales2#107, fri_sales#98 AS fri_sales2#108, sat_sales#99 AS sat_sales2#109] Input [9]: [d_week_seq#68, sun_sales#93, mon_sales#94, tue_sales#95, wed_sales#96, thu_sales#97, fri_sales#98, sat_sales#99, d_week_seq#100] -(71) WholeStageCodegenTransformer (15) +(75) WholeStageCodegenTransformer (13) Input [8]: [d_week_seq2#102, sun_sales2#103, mon_sales2#104, tue_sales2#105, wed_sales2#106, thu_sales2#107, fri_sales2#108, sat_sales2#109] Arguments: false -(72) ColumnarBroadcastExchange +(76) ColumnarBroadcastExchange Input [8]: [d_week_seq2#102, sun_sales2#103, mon_sales2#104, tue_sales2#105, wed_sales2#106, thu_sales2#107, fri_sales2#108, sat_sales2#109] Arguments: HashedRelationBroadcastMode(List(cast((input[0, int, true] - 53) as bigint)),false), [plan_id=9] -(73) InputAdapter +(77) InputAdapter Input [8]: [d_week_seq2#102, sun_sales2#103, mon_sales2#104, tue_sales2#105, wed_sales2#106, thu_sales2#107, fri_sales2#108, sat_sales2#109] -(74) InputIteratorTransformer +(78) InputIteratorTransformer Input [8]: [d_week_seq2#102, sun_sales2#103, mon_sales2#104, tue_sales2#105, wed_sales2#106, thu_sales2#107, fri_sales2#108, sat_sales2#109] -(75) BroadcastHashJoinExecTransformer +(79) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq1#51] Right keys [1]: [(d_week_seq2#102 - 53)] Join type: Inner Join condition: None -(76) ProjectExecTransformer +(80) ProjectExecTransformer Output [8]: [d_week_seq1#51, round((sun_sales1#52 / sun_sales2#103), 2) AS round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1#53 / mon_sales2#104), 2) AS round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1#54 / tue_sales2#105), 2) AS round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1#55 / wed_sales2#106), 2) AS round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1#56 / thu_sales2#107), 2) AS round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1#57 / fri_sales2#108), 2) AS round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1#58 / sat_sales2#109), 2) AS round((sat_sales1 / sat_sales2), 2)#116] Input [16]: [d_week_seq1#51, sun_sales1#52, mon_sales1#53, tue_sales1#54, wed_sales1#55, thu_sales1#56, fri_sales1#57, sat_sales1#58, d_week_seq2#102, sun_sales2#103, mon_sales2#104, tue_sales2#105, wed_sales2#106, thu_sales2#107, fri_sales2#108, sat_sales2#109] -(77) WholeStageCodegenTransformer (16) +(81) WholeStageCodegenTransformer (14) Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] Arguments: false -(78) VeloxResizeBatches +(82) VeloxResizeBatches Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] Arguments: 1024, 2147483647, 10485760 -(79) ColumnarExchange +(83) ColumnarExchange Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] Arguments: rangepartitioning(d_week_seq1#51 ASC NULLS FIRST, 1), ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] -(80) InputAdapter +(84) InputAdapter Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] -(81) InputIteratorTransformer +(85) InputIteratorTransformer Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] -(82) SortExecTransformer +(86) SortExecTransformer Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] Arguments: [d_week_seq1#51 ASC NULLS FIRST], true, 0 -(83) WholeStageCodegenTransformer (17) +(87) WholeStageCodegenTransformer (15) Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] Arguments: false -(84) VeloxColumnarToRow +(88) VeloxColumnarToRow Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] ===== Subqueries ===== -Subquery:1 Hosting operator id = 11 Hosting Expression = Subquery scalar-subquery#12, [id=#1] -VeloxColumnarToRow (96) -+- ^ RegularHashAggregateExecTransformer (94) - +- ^ InputIteratorTransformer (93) - +- ColumnarExchange (91) - +- VeloxResizeBatches (90) - +- ^ FlushableHashAggregateExecTransformer (88) - +- ^ ProjectExecTransformer (87) - +- ^ FilterExecTransformer (86) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (85) +Subquery:1 Hosting operator id = 13 Hosting Expression = Subquery scalar-subquery#12, [id=#1] +ObjectHashAggregate (99) ++- VeloxColumnarToRow (98) + +- ColumnarExchange (97) + +- VeloxResizeBatches (96) + +- RowToVeloxColumnar (95) + +- ObjectHashAggregate (94) + +- VeloxColumnarToRow (93) + +- ^ ProjectExecTransformer (91) + +- ^ FilterExecTransformer (90) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (89) -(85) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(89) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_week_seq#49, d_year#50] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_week_seq)] ReadSchema: struct -(86) FilterExecTransformer +(90) FilterExecTransformer Input [2]: [d_week_seq#49, d_year#50] Arguments: ((isnotnull(d_year#50) AND (d_year#50 = 2001)) AND isnotnull(d_week_seq#49)) -(87) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#49, 42) AS _pre_15#117] +(91) ProjectExecTransformer +Output [1]: [d_week_seq#49] Input [2]: [d_week_seq#49, d_year#50] -(88) FlushableHashAggregateExecTransformer -Input [1]: [_pre_15#117] +(92) WholeStageCodegenTransformer (3) +Input [1]: [d_week_seq#49] +Arguments: false + +(93) VeloxColumnarToRow +Input [1]: [d_week_seq#49] + +(94) ObjectHashAggregate +Input [1]: [d_week_seq#49] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_15#117, 362, 9656, 0, 0)] -Aggregate Attributes [1]: [buf#118] -Results [1]: [buf#119] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)] +Aggregate Attributes [1]: [buf#117] +Results [1]: [buf#118] -(89) WholeStageCodegenTransformer (3) -Input [1]: [buf#119] -Arguments: false +(95) RowToVeloxColumnar +Input [1]: [buf#118] -(90) VeloxResizeBatches -Input [1]: [buf#119] +(96) VeloxResizeBatches +Input [1]: [buf#118] Arguments: 1024, 2147483647, 10485760 -(91) ColumnarExchange -Input [1]: [buf#119] +(97) ColumnarExchange +Input [1]: [buf#118] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] -(92) InputAdapter -Input [1]: [buf#119] +(98) VeloxColumnarToRow +Input [1]: [buf#118] -(93) InputIteratorTransformer -Input [1]: [buf#119] - -(94) RegularHashAggregateExecTransformer -Input [1]: [buf#119] +(99) ObjectHashAggregate +Input [1]: [buf#118] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)#120] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)#120 AS bloomFilter#121] - -(95) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#121] -Arguments: false - -(96) VeloxColumnarToRow -Input [1]: [bloomFilter#121] - -Subquery:2 Hosting operator id = 10 Hosting Expression = Subquery scalar-subquery#12, [id=#1] -VeloxColumnarToRow (96) -+- ^ RegularHashAggregateExecTransformer (94) - +- ^ InputIteratorTransformer (93) - +- ColumnarExchange (91) - +- VeloxResizeBatches (90) - +- ^ FlushableHashAggregateExecTransformer (88) - +- ^ ProjectExecTransformer (87) - +- ^ FilterExecTransformer (86) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (85) - - -Subquery:3 Hosting operator id = 46 Hosting Expression = Subquery scalar-subquery#70, [id=#5] -VeloxColumnarToRow (108) -+- ^ RegularHashAggregateExecTransformer (106) - +- ^ InputIteratorTransformer (105) - +- ColumnarExchange (103) - +- VeloxResizeBatches (102) - +- ^ FlushableHashAggregateExecTransformer (100) - +- ^ ProjectExecTransformer (99) - +- ^ FilterExecTransformer (98) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (97) - - -(97) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)#119] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)#119 AS bloomFilter#120] + +Subquery:2 Hosting operator id = 50 Hosting Expression = Subquery scalar-subquery#70, [id=#5] +ObjectHashAggregate (110) ++- VeloxColumnarToRow (109) + +- ColumnarExchange (108) + +- VeloxResizeBatches (107) + +- RowToVeloxColumnar (106) + +- ObjectHashAggregate (105) + +- VeloxColumnarToRow (104) + +- ^ ProjectExecTransformer (102) + +- ^ FilterExecTransformer (101) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (100) + + +(100) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_week_seq#100, d_year#101] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_week_seq)] ReadSchema: struct -(98) FilterExecTransformer +(101) FilterExecTransformer Input [2]: [d_week_seq#100, d_year#101] Arguments: ((isnotnull(d_year#101) AND (d_year#101 = 2002)) AND isnotnull(d_week_seq#100)) -(99) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#100, 42) AS _pre_16#122] +(102) ProjectExecTransformer +Output [1]: [d_week_seq#100] Input [2]: [d_week_seq#100, d_year#101] -(100) FlushableHashAggregateExecTransformer -Input [1]: [_pre_16#122] +(103) WholeStageCodegenTransformer (9) +Input [1]: [d_week_seq#100] +Arguments: false + +(104) VeloxColumnarToRow +Input [1]: [d_week_seq#100] + +(105) ObjectHashAggregate +Input [1]: [d_week_seq#100] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_16#122, 362, 9656, 0, 0)] -Aggregate Attributes [1]: [buf#123] -Results [1]: [buf#124] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)] +Aggregate Attributes [1]: [buf#121] +Results [1]: [buf#122] -(101) WholeStageCodegenTransformer (10) -Input [1]: [buf#124] -Arguments: false +(106) RowToVeloxColumnar +Input [1]: [buf#122] -(102) VeloxResizeBatches -Input [1]: [buf#124] +(107) VeloxResizeBatches +Input [1]: [buf#122] Arguments: 1024, 2147483647, 10485760 -(103) ColumnarExchange -Input [1]: [buf#124] +(108) ColumnarExchange +Input [1]: [buf#122] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(104) InputAdapter -Input [1]: [buf#124] - -(105) InputIteratorTransformer -Input [1]: [buf#124] +(109) VeloxColumnarToRow +Input [1]: [buf#122] -(106) RegularHashAggregateExecTransformer -Input [1]: [buf#124] +(110) ObjectHashAggregate +Input [1]: [buf#122] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)#125] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)#125 AS bloomFilter#126] - -(107) WholeStageCodegenTransformer (11) -Input [1]: [bloomFilter#126] -Arguments: false - -(108) VeloxColumnarToRow -Input [1]: [bloomFilter#126] - -Subquery:4 Hosting operator id = 45 Hosting Expression = Subquery scalar-subquery#70, [id=#5] -VeloxColumnarToRow (108) -+- ^ RegularHashAggregateExecTransformer (106) - +- ^ InputIteratorTransformer (105) - +- ColumnarExchange (103) - +- VeloxResizeBatches (102) - +- ^ FlushableHashAggregateExecTransformer (100) - +- ^ ProjectExecTransformer (99) - +- ^ FilterExecTransformer (98) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (97) - +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)#123] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)#123 AS bloomFilter#124] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/simplified.txt index bd236bab90c..b63f67e1ffe 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/simplified.txt @@ -1,11 +1,11 @@ VeloxColumnarToRow - WholeStageCodegenTransformer (17) + WholeStageCodegenTransformer (15) SortExecTransformer [d_week_seq1] InputIteratorTransformer InputAdapter ColumnarExchange [d_week_seq1] #1 VeloxResizeBatches - WholeStageCodegenTransformer (16) + WholeStageCodegenTransformer (14) ProjectExecTransformer [d_week_seq1,sun_sales1,sun_sales2,mon_sales1,mon_sales2,tue_sales1,tue_sales2,wed_sales1,wed_sales2,thu_sales1,thu_sales2,fri_sales1,fri_sales2,sat_sales1,sat_sales2] BroadcastHashJoinExecTransformer [d_week_seq1,d_week_seq2] ProjectExecTransformer [d_week_seq,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales] @@ -16,7 +16,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,sum,sum,sum,sum,sum,sum,sum] #2 VeloxResizeBatches - WholeStageCodegenTransformer (6) + WholeStageCodegenTransformer (5) ProjectExecTransformer [d_week_seq,sum,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [d_week_seq,d_day_name,sales_price] @@ -33,46 +33,36 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #3 - WholeStageCodegenTransformer (5) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [d_date_sk,d_week_seq] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #4 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (3) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_year,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #1 + InputAdapter VeloxColumnarToRow WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_year,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (6) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_year,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #6 - WholeStageCodegenTransformer (15) + WholeStageCodegenTransformer (13) ProjectExecTransformer [d_week_seq,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales] BroadcastHashJoinExecTransformer [d_week_seq,d_week_seq] ProjectExecTransformer [d_week_seq,sum(UnscaledValue(CASE WHEN (d_day_name = Sunday ) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Monday ) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Tuesday ) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Wednesday) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Thursday ) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Friday ) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Saturday ) THEN sales_price END))] @@ -81,7 +71,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,sum,sum,sum,sum,sum,sum,sum] #7 VeloxResizeBatches - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [d_week_seq,sum,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [d_week_seq,d_day_name,sales_price] @@ -89,48 +79,38 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (7) ProjectExecTransformer [ws_sold_date_sk,ws_ext_sales_price] FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_ext_sales_price,ws_sold_date_sk] - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (8) ProjectExecTransformer [cs_sold_date_sk,cs_ext_sales_price] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_ext_sales_price,cs_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (12) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (11) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (10) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [d_date_sk,d_week_seq] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #9 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (9) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_year,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #2 + InputAdapter VeloxColumnarToRow - WholeStageCodegenTransformer (11) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (10) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_year,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] + WholeStageCodegenTransformer (10) + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (14) + WholeStageCodegenTransformer (12) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_year,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/explain.txt index ea9dc22011d..d08bd77eb0c 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/explain.txt @@ -1,63 +1,66 @@ == Physical Plan == -VeloxColumnarToRow (78) -+- ^ FilterExecTransformer (76) - +- ^ RegularHashAggregateExecTransformer (75) - +- ^ InputIteratorTransformer (74) - +- ColumnarExchange (72) - +- VeloxResizeBatches (71) - +- ^ ProjectExecTransformer (69) - +- ^ FlushableHashAggregateExecTransformer (68) - +- ^ ProjectExecTransformer (67) - +- ^ RegularHashAggregateExecTransformer (66) - +- ^ InputIteratorTransformer (65) - +- ColumnarExchange (63) - +- VeloxResizeBatches (62) - +- ^ ProjectExecTransformer (60) - +- ^ FlushableHashAggregateExecTransformer (59) - +- ^ ProjectExecTransformer (58) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) - :- ^ ProjectExecTransformer (41) - : +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (40) - : :- ^ InputIteratorTransformer (31) - : : +- ColumnarExchange (29) - : : +- VeloxResizeBatches (28) - : : +- ^ ProjectExecTransformer (26) - : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (25) - : : :- ^ InputIteratorTransformer (16) - : : : +- ColumnarExchange (14) - : : : +- VeloxResizeBatches (13) - : : : +- ^ ProjectExecTransformer (11) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (10) - : : : :- ^ ProjectExecTransformer (3) - : : : : +- ^ FilterExecTransformer (2) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : +- ^ InputIteratorTransformer (9) - : : : +- ColumnarBroadcastExchange (7) - : : : +- ^ FilterExecTransformer (5) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (4) - : : +- ^ InputIteratorTransformer (24) - : : +- ColumnarExchange (22) - : : +- VeloxResizeBatches (21) - : : +- ^ ProjectExecTransformer (19) - : : +- ^ FilterExecTransformer (18) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (17) - : +- ^ InputIteratorTransformer (39) - : +- ColumnarExchange (37) - : +- VeloxResizeBatches (36) - : +- ^ ProjectExecTransformer (34) - : +- ^ FilterExecTransformer (33) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (32) - +- ^ InputIteratorTransformer (56) - +- ColumnarBroadcastExchange (54) - +- ^ ProjectExecTransformer (52) - +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (51) - :- ^ InputIteratorTransformer (48) - : +- ColumnarBroadcastExchange (46) - : +- ^ ProjectExecTransformer (44) - : +- ^ FilterExecTransformer (43) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (42) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (49) +VeloxColumnarToRow (83) ++- ^ FilterExecTransformer (81) + +- ^ RegularHashAggregateExecTransformer (80) + +- ^ InputIteratorTransformer (79) + +- ColumnarExchange (77) + +- VeloxResizeBatches (76) + +- ^ ProjectExecTransformer (74) + +- ^ FlushableHashAggregateExecTransformer (73) + +- ^ ProjectExecTransformer (72) + +- ^ RegularHashAggregateExecTransformer (71) + +- ^ InputIteratorTransformer (70) + +- ColumnarExchange (68) + +- VeloxResizeBatches (67) + +- ^ ProjectExecTransformer (65) + +- ^ FlushableHashAggregateExecTransformer (64) + +- ^ ProjectExecTransformer (63) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) + :- ^ ProjectExecTransformer (46) + : +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (45) + : :- ^ InputIteratorTransformer (36) + : : +- ColumnarExchange (34) + : : +- VeloxResizeBatches (33) + : : +- ^ ProjectExecTransformer (31) + : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (30) + : : :- ^ InputIteratorTransformer (21) + : : : +- ColumnarExchange (19) + : : : +- VeloxResizeBatches (18) + : : : +- ^ ProjectExecTransformer (16) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (15) + : : : :- ^ ProjectExecTransformer (8) + : : : : +- ^ InputIteratorTransformer (7) + : : : : +- RowToVeloxColumnar (5) + : : : : +- * Filter (4) + : : : : +- VeloxColumnarToRow (3) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : +- ^ InputIteratorTransformer (14) + : : : +- ColumnarBroadcastExchange (12) + : : : +- ^ FilterExecTransformer (10) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (9) + : : +- ^ InputIteratorTransformer (29) + : : +- ColumnarExchange (27) + : : +- VeloxResizeBatches (26) + : : +- ^ ProjectExecTransformer (24) + : : +- ^ FilterExecTransformer (23) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (22) + : +- ^ InputIteratorTransformer (44) + : +- ColumnarExchange (42) + : +- VeloxResizeBatches (41) + : +- ^ ProjectExecTransformer (39) + : +- ^ FilterExecTransformer (38) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (37) + +- ^ InputIteratorTransformer (61) + +- ColumnarBroadcastExchange (59) + +- ^ ProjectExecTransformer (57) + +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (56) + :- ^ InputIteratorTransformer (53) + : +- ColumnarBroadcastExchange (51) + : +- ^ ProjectExecTransformer (49) + : +- ^ FilterExecTransformer (48) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (47) + +- ^ FilterExecTransformer (55) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (54) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -67,777 +70,778 @@ Location: CatalogFileIndex [{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (13) +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] +Arguments: false + +(3) VeloxColumnarToRow +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(4) Filter [codegen id : 1] +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] +Condition : ((((isnotnull(ss_ticket_number#4) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_customer_sk#2)) AND might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(ss_store_sk#3, 42))) + +(5) RowToVeloxColumnar +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(6) InputAdapter Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] -Arguments: ((((isnotnull(ss_ticket_number#4) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_customer_sk#2)) AND velox_might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(ss_store_sk#3, 42))) -(3) ProjectExecTransformer +(7) InputIteratorTransformer +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(8) ProjectExecTransformer Output [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5] Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] -(4) FileSourceScanExecTransformer parquet spark_catalog.default.item +(9) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_color), EqualTo(i_color,pale ), IsNotNull(i_item_sk)] ReadSchema: struct -(5) FilterExecTransformer +(10) FilterExecTransformer Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: ((isnotnull(i_color#11) AND (i_color#11 = pale )) AND isnotnull(i_item_sk#8)) -(6) WholeStageCodegenTransformer (14) +(11) WholeStageCodegenTransformer (14) Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: false -(7) ColumnarBroadcastExchange +(12) ColumnarBroadcastExchange Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] -(8) InputAdapter +(13) InputAdapter Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(9) InputIteratorTransformer +(14) InputIteratorTransformer Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(10) BroadcastHashJoinExecTransformer +(15) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#8] Join type: Inner Join condition: None -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [11]: [hash(ss_customer_sk#2, 42) AS hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(12) WholeStageCodegenTransformer (15) +(17) WholeStageCodegenTransformer (15) Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: hashpartitioning(ss_customer_sk#2, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13], [plan_id=3], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(17) FileSourceScanExecTransformer parquet spark_catalog.default.customer +(22) FileSourceScanExecTransformer parquet spark_catalog.default.customer Output [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_birth_country)] ReadSchema: struct -(18) FilterExecTransformer +(23) FilterExecTransformer Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: (isnotnull(c_customer_sk#15) AND isnotnull(c_birth_country#18)) -(19) ProjectExecTransformer +(24) ProjectExecTransformer Output [5]: [hash(c_customer_sk#15, 42) AS hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(20) WholeStageCodegenTransformer (16) +(25) WholeStageCodegenTransformer (16) Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: false -(21) VeloxResizeBatches +(26) VeloxResizeBatches Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: 1024, 2147483647, 10485760 -(22) ColumnarExchange +(27) ColumnarExchange Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: hashpartitioning(c_customer_sk#15, 1), ENSURE_REQUIREMENTS, [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18], [plan_id=4], [shuffle_writer_type=hash] -(23) InputAdapter +(28) InputAdapter Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(25) ShuffledHashJoinExecTransformer +(30) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#2] Right keys [1]: [c_customer_sk#15] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [13]: [hash(ss_ticket_number#4, ss_item_sk#1, 42) AS hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(27) WholeStageCodegenTransformer (17) +(32) WholeStageCodegenTransformer (17) Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: false -(28) VeloxResizeBatches +(33) VeloxResizeBatches Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: 1024, 2147483647, 10485760 -(29) ColumnarExchange +(34) ColumnarExchange Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18], [plan_id=5], [shuffle_writer_type=hash] -(30) InputAdapter +(35) InputAdapter Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] -(32) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(37) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct -(33) FilterExecTransformer +(38) FilterExecTransformer Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] Arguments: (isnotnull(sr_ticket_number#22) AND isnotnull(sr_item_sk#21)) -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [3]: [hash(sr_ticket_number#22, sr_item_sk#21, 42) AS hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] -(35) WholeStageCodegenTransformer (18) +(40) WholeStageCodegenTransformer (18) Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: false -(36) VeloxResizeBatches +(41) VeloxResizeBatches Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: 1024, 2147483647, 10485760 -(37) ColumnarExchange +(42) ColumnarExchange Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: hashpartitioning(sr_ticket_number#22, sr_item_sk#21, 1), ENSURE_REQUIREMENTS, [sr_item_sk#21, sr_ticket_number#22], [plan_id=6], [shuffle_writer_type=hash] -(38) InputAdapter +(43) InputAdapter Input [2]: [sr_item_sk#21, sr_ticket_number#22] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [2]: [sr_item_sk#21, sr_ticket_number#22] -(40) ShuffledHashJoinExecTransformer +(45) ShuffledHashJoinExecTransformer Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] Right keys [2]: [sr_ticket_number#22, sr_item_sk#21] Join type: Inner Join condition: None -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [10]: [ss_store_sk#3, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Input [14]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18, sr_item_sk#21, sr_ticket_number#22] -(42) FileSourceScanExecTransformer parquet spark_catalog.default.store +(47) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(43) FilterExecTransformer +(48) FilterExecTransformer Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] Arguments: (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) -(44) ProjectExecTransformer +(49) ProjectExecTransformer Output [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] -(45) WholeStageCodegenTransformer (19) +(50) WholeStageCodegenTransformer (19) Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Arguments: false -(46) ColumnarBroadcastExchange +(51) ColumnarBroadcastExchange Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Arguments: HashedRelationBroadcastMode(List(input[3, string, true]),false), [plan_id=7] -(47) InputAdapter +(52) InputAdapter Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -(48) InputIteratorTransformer +(53) InputIteratorTransformer Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -(49) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(54) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_state#30, ca_zip#31, ca_country#32] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [3]: [ca_state#30, ca_zip#31, ca_country#32] Arguments: (isnotnull(ca_country#32) AND isnotnull(ca_zip#31)) -(51) BroadcastHashJoinExecTransformer +(56) BroadcastHashJoinExecTransformer Left keys [1]: [s_zip#29] Right keys [1]: [ca_zip#31] Join type: Inner Join condition: None -(52) ProjectExecTransformer +(57) ProjectExecTransformer Output [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Input [7]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29, ca_state#30, ca_zip#31, ca_country#32] -(53) WholeStageCodegenTransformer (20) +(58) WholeStageCodegenTransformer (20) Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Arguments: false -(54) ColumnarBroadcastExchange +(59) ColumnarBroadcastExchange Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Arguments: HashedRelationBroadcastMode(List(input[0, int, true], upper(input[4, string, true])),false), [plan_id=8] -(55) InputAdapter +(60) InputAdapter Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(57) BroadcastHashJoinExecTransformer +(62) BroadcastHashJoinExecTransformer Left keys [2]: [ss_store_sk#3, c_birth_country#18] Right keys [2]: [s_store_sk#25, upper(ca_country#32)] Join type: Inner Join condition: None -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [11]: [s_store_name#26, s_state#28, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, ca_state#30, UnscaledValue(ss_net_paid#5) AS _pre_1#33] Input [15]: [ss_store_sk#3, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18, s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(59) FlushableHashAggregateExecTransformer +(64) FlushableHashAggregateExecTransformer Input [11]: [s_store_name#26, s_state#28, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, ca_state#30, _pre_1#33] Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10] Functions [1]: [partial_sum(_pre_1#33)] Aggregate Attributes [1]: [sum#34] Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(60) ProjectExecTransformer +(65) ProjectExecTransformer Output [12]: [hash(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, 42) AS hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(61) WholeStageCodegenTransformer (21) +(66) WholeStageCodegenTransformer (21) Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: false -(62) VeloxResizeBatches +(67) VeloxResizeBatches Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: 1024, 2147483647, 10485760 -(63) ColumnarExchange +(68) ColumnarExchange Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, 1), ENSURE_REQUIREMENTS, [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35], [plan_id=9], [shuffle_writer_type=hash] -(64) InputAdapter +(69) InputAdapter Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(65) InputIteratorTransformer +(70) InputIteratorTransformer Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(66) RegularHashAggregateExecTransformer +(71) RegularHashAggregateExecTransformer Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#37] Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum(UnscaledValue(ss_net_paid#5))#37] -(67) ProjectExecTransformer +(72) ProjectExecTransformer Output [4]: [c_last_name#17, c_first_name#16, s_store_name#26, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#37,17,2) AS netpaid#38] Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum(UnscaledValue(ss_net_paid#5))#37] -(68) FlushableHashAggregateExecTransformer +(73) FlushableHashAggregateExecTransformer Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, netpaid#38] Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] Functions [1]: [partial_sum(netpaid#38)] Aggregate Attributes [2]: [sum#39, isEmpty#40] Results [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(69) ProjectExecTransformer +(74) ProjectExecTransformer Output [6]: [hash(c_last_name#17, c_first_name#16, s_store_name#26, 42) AS hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(70) WholeStageCodegenTransformer (22) +(75) WholeStageCodegenTransformer (22) Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: false -(71) VeloxResizeBatches +(76) VeloxResizeBatches Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: 1024, 2147483647, 10485760 -(72) ColumnarExchange +(77) ColumnarExchange Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, 1), ENSURE_REQUIREMENTS, [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42], [plan_id=10], [shuffle_writer_type=hash] -(73) InputAdapter +(78) InputAdapter Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(74) InputIteratorTransformer +(79) InputIteratorTransformer Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(75) RegularHashAggregateExecTransformer +(80) RegularHashAggregateExecTransformer Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] Functions [1]: [sum(netpaid#38)] Aggregate Attributes [1]: [sum(netpaid#38)#44] Results [4]: [c_last_name#17, c_first_name#16, s_store_name#26, sum(netpaid#38)#44 AS paid#45] -(76) FilterExecTransformer +(81) FilterExecTransformer Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] Arguments: (isnotnull(paid#45) AND (cast(paid#45 as decimal(33,8)) > cast(Subquery scalar-subquery#46, [id=#11] as decimal(33,8)))) -(77) WholeStageCodegenTransformer (23) +(82) WholeStageCodegenTransformer (23) Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] Arguments: false -(78) VeloxColumnarToRow +(83) VeloxColumnarToRow Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] ===== Subqueries ===== -Subquery:1 Hosting operator id = 76 Hosting Expression = Subquery scalar-subquery#46, [id=#11] -VeloxColumnarToRow (153) -+- ^ ProjectExecTransformer (151) - +- ^ RegularHashAggregateExecTransformer (150) - +- ^ ProjectExecTransformer (149) - +- ^ RegularHashAggregateExecTransformer (148) - +- ^ InputIteratorTransformer (147) - +- ColumnarExchange (145) - +- VeloxResizeBatches (144) - +- ^ ProjectExecTransformer (142) - +- ^ FlushableHashAggregateExecTransformer (141) - +- ^ ProjectExecTransformer (140) - +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (139) - :- ^ InputIteratorTransformer (130) - : +- ColumnarExchange (128) - : +- VeloxResizeBatches (127) - : +- ^ ProjectExecTransformer (125) - : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (124) - : :- ^ InputIteratorTransformer (120) - : : +- ColumnarExchange (118) - : : +- VeloxResizeBatches (117) - : : +- ^ ProjectExecTransformer (115) - : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (114) - : : :- ^ InputIteratorTransformer (110) - : : : +- ColumnarExchange (108) - : : : +- VeloxResizeBatches (107) - : : : +- ^ ProjectExecTransformer (105) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (104) - : : : :- ^ InputIteratorTransformer (95) - : : : : +- ColumnarExchange (93) - : : : : +- VeloxResizeBatches (92) - : : : : +- ^ ProjectExecTransformer (90) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (89) - : : : : :- ^ ProjectExecTransformer (81) - : : : : : +- ^ FilterExecTransformer (80) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (79) - : : : : +- ^ InputIteratorTransformer (88) - : : : : +- ColumnarBroadcastExchange (86) - : : : : +- ^ ProjectExecTransformer (84) - : : : : +- ^ FilterExecTransformer (83) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (82) - : : : +- ^ InputIteratorTransformer (103) - : : : +- ColumnarExchange (101) - : : : +- VeloxResizeBatches (100) - : : : +- ^ ProjectExecTransformer (98) - : : : +- ^ FilterExecTransformer (97) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (96) - : : +- ^ InputIteratorTransformer (113) - : : +- ReusedExchange (111) - : +- ^ InputIteratorTransformer (123) - : +- ReusedExchange (121) - +- ^ InputIteratorTransformer (138) - +- ColumnarExchange (136) - +- VeloxResizeBatches (135) - +- ^ ProjectExecTransformer (133) - +- ^ FilterExecTransformer (132) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (131) - - -(79) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +Subquery:1 Hosting operator id = 81 Hosting Expression = Subquery scalar-subquery#46, [id=#11] +VeloxColumnarToRow (158) ++- ^ ProjectExecTransformer (156) + +- ^ RegularHashAggregateExecTransformer (155) + +- ^ ProjectExecTransformer (154) + +- ^ RegularHashAggregateExecTransformer (153) + +- ^ InputIteratorTransformer (152) + +- ColumnarExchange (150) + +- VeloxResizeBatches (149) + +- ^ ProjectExecTransformer (147) + +- ^ FlushableHashAggregateExecTransformer (146) + +- ^ ProjectExecTransformer (145) + +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (144) + :- ^ InputIteratorTransformer (135) + : +- ColumnarExchange (133) + : +- VeloxResizeBatches (132) + : +- ^ ProjectExecTransformer (130) + : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (129) + : :- ^ InputIteratorTransformer (125) + : : +- ColumnarExchange (123) + : : +- VeloxResizeBatches (122) + : : +- ^ ProjectExecTransformer (120) + : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (119) + : : :- ^ InputIteratorTransformer (115) + : : : +- ColumnarExchange (113) + : : : +- VeloxResizeBatches (112) + : : : +- ^ ProjectExecTransformer (110) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (109) + : : : :- ^ InputIteratorTransformer (100) + : : : : +- ColumnarExchange (98) + : : : : +- VeloxResizeBatches (97) + : : : : +- ^ ProjectExecTransformer (95) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (94) + : : : : :- ^ ProjectExecTransformer (86) + : : : : : +- ^ FilterExecTransformer (85) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (84) + : : : : +- ^ InputIteratorTransformer (93) + : : : : +- ColumnarBroadcastExchange (91) + : : : : +- ^ ProjectExecTransformer (89) + : : : : +- ^ FilterExecTransformer (88) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (87) + : : : +- ^ InputIteratorTransformer (108) + : : : +- ColumnarExchange (106) + : : : +- VeloxResizeBatches (105) + : : : +- ^ ProjectExecTransformer (103) + : : : +- ^ FilterExecTransformer (102) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (101) + : : +- ^ InputIteratorTransformer (118) + : : +- ReusedExchange (116) + : +- ^ InputIteratorTransformer (128) + : +- ReusedExchange (126) + +- ^ InputIteratorTransformer (143) + +- ColumnarExchange (141) + +- VeloxResizeBatches (140) + +- ^ ProjectExecTransformer (138) + +- ^ FilterExecTransformer (137) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (136) + + +(84) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct -(80) FilterExecTransformer +(85) FilterExecTransformer Input [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] Arguments: (((isnotnull(ss_ticket_number#50) AND isnotnull(ss_item_sk#47)) AND isnotnull(ss_store_sk#49)) AND isnotnull(ss_customer_sk#48)) -(81) ProjectExecTransformer +(86) ProjectExecTransformer Output [5]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51] Input [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] -(82) FileSourceScanExecTransformer parquet spark_catalog.default.store +(87) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(83) FilterExecTransformer +(88) FilterExecTransformer Input [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] Arguments: (((isnotnull(s_market_id#55) AND (s_market_id#55 = 8)) AND isnotnull(s_store_sk#53)) AND isnotnull(s_zip#57)) -(84) ProjectExecTransformer +(89) ProjectExecTransformer Output [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Input [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] -(85) WholeStageCodegenTransformer (1) +(90) WholeStageCodegenTransformer (1) Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Arguments: false -(86) ColumnarBroadcastExchange +(91) ColumnarBroadcastExchange Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] -(87) InputAdapter +(92) InputAdapter Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(88) InputIteratorTransformer +(93) InputIteratorTransformer Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(89) BroadcastHashJoinExecTransformer +(94) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#49] Right keys [1]: [s_store_sk#53] Join type: Inner Join condition: None -(90) ProjectExecTransformer +(95) ProjectExecTransformer Output [8]: [hash(ss_item_sk#47, 42) AS hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Input [9]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(91) WholeStageCodegenTransformer (2) +(96) WholeStageCodegenTransformer (2) Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: false -(92) VeloxResizeBatches +(97) VeloxResizeBatches Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: 1024, 2147483647, 10485760 -(93) ColumnarExchange +(98) ColumnarExchange Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: hashpartitioning(ss_item_sk#47, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57], [plan_id=13], [shuffle_writer_type=hash] -(94) InputAdapter +(99) InputAdapter Input [7]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] -(95) InputIteratorTransformer +(100) InputIteratorTransformer Input [7]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] -(96) FileSourceScanExecTransformer parquet spark_catalog.default.item +(101) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct -(97) FilterExecTransformer +(102) FilterExecTransformer Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: isnotnull(i_item_sk#59) -(98) ProjectExecTransformer +(103) ProjectExecTransformer Output [7]: [hash(i_item_sk#59, 42) AS hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(99) WholeStageCodegenTransformer (3) +(104) WholeStageCodegenTransformer (3) Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: false -(100) VeloxResizeBatches +(105) VeloxResizeBatches Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: 1024, 2147483647, 10485760 -(101) ColumnarExchange +(106) ColumnarExchange Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: hashpartitioning(i_item_sk#59, 1), ENSURE_REQUIREMENTS, [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64], [plan_id=14], [shuffle_writer_type=hash] -(102) InputAdapter +(107) InputAdapter Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(103) InputIteratorTransformer +(108) InputIteratorTransformer Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(104) ShuffledHashJoinExecTransformer +(109) ShuffledHashJoinExecTransformer Left keys [1]: [ss_item_sk#47] Right keys [1]: [i_item_sk#59] Join type: Inner Join condition: None -(105) ProjectExecTransformer +(110) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#48, 42) AS hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Input [13]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(106) WholeStageCodegenTransformer (4) +(111) WholeStageCodegenTransformer (4) Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: false -(107) VeloxResizeBatches +(112) VeloxResizeBatches Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: 1024, 2147483647, 10485760 -(108) ColumnarExchange +(113) ColumnarExchange Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: hashpartitioning(ss_customer_sk#48, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64], [plan_id=15], [shuffle_writer_type=hash] -(109) InputAdapter +(114) InputAdapter Input [12]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(110) InputIteratorTransformer +(115) InputIteratorTransformer Input [12]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(111) ReusedExchange [Reuses operator id: 22] +(116) ReusedExchange [Reuses operator id: 27] Output [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(112) InputAdapter +(117) InputAdapter Input [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(113) InputIteratorTransformer +(118) InputIteratorTransformer Input [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(114) ShuffledHashJoinExecTransformer +(119) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#48] Right keys [1]: [c_customer_sk#67] Join type: Inner Join condition: None -(115) ProjectExecTransformer +(120) ProjectExecTransformer Output [15]: [hash(ss_ticket_number#50, ss_item_sk#47, 42) AS hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Input [16]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(116) WholeStageCodegenTransformer (6) +(121) WholeStageCodegenTransformer (6) Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: false -(117) VeloxResizeBatches +(122) VeloxResizeBatches Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: 1024, 2147483647, 10485760 -(118) ColumnarExchange +(123) ColumnarExchange Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: hashpartitioning(ss_ticket_number#50, ss_item_sk#47, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70], [plan_id=16], [shuffle_writer_type=hash] -(119) InputAdapter +(124) InputAdapter Input [14]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(120) InputIteratorTransformer +(125) InputIteratorTransformer Input [14]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(121) ReusedExchange [Reuses operator id: 37] +(126) ReusedExchange [Reuses operator id: 42] Output [2]: [sr_item_sk#72, sr_ticket_number#73] -(122) InputAdapter +(127) InputAdapter Input [2]: [sr_item_sk#72, sr_ticket_number#73] -(123) InputIteratorTransformer +(128) InputIteratorTransformer Input [2]: [sr_item_sk#72, sr_ticket_number#73] -(124) ShuffledHashJoinExecTransformer +(129) ShuffledHashJoinExecTransformer Left keys [2]: [ss_ticket_number#50, ss_item_sk#47] Right keys [2]: [sr_ticket_number#73, sr_item_sk#72] Join type: Inner Join condition: None -(125) ProjectExecTransformer +(130) ProjectExecTransformer Output [13]: [hash(c_birth_country#70, s_zip#57, 42) AS hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Input [16]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70, sr_item_sk#72, sr_ticket_number#73] -(126) WholeStageCodegenTransformer (8) +(131) WholeStageCodegenTransformer (8) Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: false -(127) VeloxResizeBatches +(132) VeloxResizeBatches Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: 1024, 2147483647, 10485760 -(128) ColumnarExchange +(133) ColumnarExchange Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: hashpartitioning(c_birth_country#70, s_zip#57, 1), ENSURE_REQUIREMENTS, [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70], [plan_id=17], [shuffle_writer_type=hash] -(129) InputAdapter +(134) InputAdapter Input [12]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(130) InputIteratorTransformer +(135) InputIteratorTransformer Input [12]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(131) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(136) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_state#75, ca_zip#76, ca_country#77] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct -(132) FilterExecTransformer +(137) FilterExecTransformer Input [3]: [ca_state#75, ca_zip#76, ca_country#77] Arguments: (isnotnull(ca_country#77) AND isnotnull(ca_zip#76)) -(133) ProjectExecTransformer +(138) ProjectExecTransformer Output [4]: [hash(upper(ca_country#77), ca_zip#76, 42) AS hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(134) WholeStageCodegenTransformer (9) +(139) WholeStageCodegenTransformer (9) Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: false -(135) VeloxResizeBatches +(140) VeloxResizeBatches Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: 1024, 2147483647, 10485760 -(136) ColumnarExchange +(141) ColumnarExchange Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: hashpartitioning(upper(ca_country#77), ca_zip#76, 1), ENSURE_REQUIREMENTS, [ca_state#75, ca_zip#76, ca_country#77], [plan_id=18], [shuffle_writer_type=hash] -(137) InputAdapter +(142) InputAdapter Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(138) InputIteratorTransformer +(143) InputIteratorTransformer Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(139) ShuffledHashJoinExecTransformer +(144) ShuffledHashJoinExecTransformer Left keys [2]: [c_birth_country#70, s_zip#57] Right keys [2]: [upper(ca_country#77), ca_zip#76] Join type: Inner Join condition: None -(140) ProjectExecTransformer +(145) ProjectExecTransformer Output [11]: [s_store_name#54, s_state#56, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, ca_state#75, UnscaledValue(ss_net_paid#51) AS _pre_2#79] Input [15]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70, ca_state#75, ca_zip#76, ca_country#77] -(141) FlushableHashAggregateExecTransformer +(146) FlushableHashAggregateExecTransformer Input [11]: [s_store_name#54, s_state#56, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, ca_state#75, _pre_2#79] Keys [10]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61] Functions [1]: [partial_sum(_pre_2#79)] Aggregate Attributes [1]: [sum#80] Results [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(142) ProjectExecTransformer +(147) ProjectExecTransformer Output [12]: [hash(c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, 42) AS hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(143) WholeStageCodegenTransformer (10) +(148) WholeStageCodegenTransformer (10) Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: false -(144) VeloxResizeBatches +(149) VeloxResizeBatches Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: 1024, 2147483647, 10485760 -(145) ColumnarExchange +(150) ColumnarExchange Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: hashpartitioning(c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, 1), ENSURE_REQUIREMENTS, [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81], [plan_id=19], [shuffle_writer_type=hash] -(146) InputAdapter +(151) InputAdapter Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(147) InputIteratorTransformer +(152) InputIteratorTransformer Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(148) RegularHashAggregateExecTransformer +(153) RegularHashAggregateExecTransformer Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Keys [10]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61] Functions [1]: [sum(UnscaledValue(ss_net_paid#51))] Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#51))#37] Results [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum(UnscaledValue(ss_net_paid#51))#37] -(149) ProjectExecTransformer +(154) ProjectExecTransformer Output [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#51))#37,17,2) AS netpaid#83] Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum(UnscaledValue(ss_net_paid#51))#37] -(150) RegularHashAggregateExecTransformer +(155) RegularHashAggregateExecTransformer Input [1]: [netpaid#83] Keys: [] Functions [1]: [avg(netpaid#83)] Aggregate Attributes [1]: [avg(netpaid#83)#84] Results [1]: [avg(netpaid#83)#84] -(151) ProjectExecTransformer +(156) ProjectExecTransformer Output [1]: [(0.05 * avg(netpaid#83)#84) AS (0.05 * avg(netpaid))#85] Input [1]: [avg(netpaid#83)#84] -(152) WholeStageCodegenTransformer (11) +(157) WholeStageCodegenTransformer (11) Input [1]: [(0.05 * avg(netpaid))#85] Arguments: false -(153) VeloxColumnarToRow +(158) VeloxColumnarToRow Input [1]: [(0.05 * avg(netpaid))#85] -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (165) -+- ^ RegularHashAggregateExecTransformer (163) - +- ^ InputIteratorTransformer (162) - +- ColumnarExchange (160) - +- VeloxResizeBatches (159) - +- ^ FlushableHashAggregateExecTransformer (157) - +- ^ ProjectExecTransformer (156) - +- ^ FilterExecTransformer (155) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (154) +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#7, [id=#1] +ObjectHashAggregate (169) ++- VeloxColumnarToRow (168) + +- ColumnarExchange (167) + +- VeloxResizeBatches (166) + +- RowToVeloxColumnar (165) + +- ObjectHashAggregate (164) + +- VeloxColumnarToRow (163) + +- ^ ProjectExecTransformer (161) + +- ^ FilterExecTransformer (160) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (159) -(154) FileSourceScanExecTransformer parquet spark_catalog.default.store +(159) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#25, s_market_id#27, s_zip#29] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(155) FilterExecTransformer +(160) FilterExecTransformer Input [3]: [s_store_sk#25, s_market_id#27, s_zip#29] Arguments: (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) -(156) ProjectExecTransformer -Output [1]: [xxhash64(s_store_sk#25, 42) AS _pre_3#86] +(161) ProjectExecTransformer +Output [1]: [s_store_sk#25] Input [3]: [s_store_sk#25, s_market_id#27, s_zip#29] -(157) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#86] +(162) WholeStageCodegenTransformer (12) +Input [1]: [s_store_sk#25] +Arguments: false + +(163) VeloxColumnarToRow +Input [1]: [s_store_sk#25] + +(164) ObjectHashAggregate +Input [1]: [s_store_sk#25] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#86, 40, 1250, 0, 0)] -Aggregate Attributes [1]: [buf#87] -Results [1]: [buf#88] +Functions [1]: [partial_bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] +Aggregate Attributes [1]: [buf#86] +Results [1]: [buf#87] -(158) WholeStageCodegenTransformer (12) -Input [1]: [buf#88] -Arguments: false +(165) RowToVeloxColumnar +Input [1]: [buf#87] -(159) VeloxResizeBatches -Input [1]: [buf#88] +(166) VeloxResizeBatches +Input [1]: [buf#87] Arguments: 1024, 2147483647, 10485760 -(160) ColumnarExchange -Input [1]: [buf#88] +(167) ColumnarExchange +Input [1]: [buf#87] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=20], [shuffle_writer_type=hash] -(161) InputAdapter -Input [1]: [buf#88] - -(162) InputIteratorTransformer -Input [1]: [buf#88] +(168) VeloxColumnarToRow +Input [1]: [buf#87] -(163) RegularHashAggregateExecTransformer -Input [1]: [buf#88] +(169) ObjectHashAggregate +Input [1]: [buf#87] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#89] -Results [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#89 AS bloomFilter#90] - -(164) WholeStageCodegenTransformer (13) -Input [1]: [bloomFilter#90] -Arguments: false - -(165) VeloxColumnarToRow -Input [1]: [bloomFilter#90] - -Subquery:3 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (165) -+- ^ RegularHashAggregateExecTransformer (163) - +- ^ InputIteratorTransformer (162) - +- ColumnarExchange (160) - +- VeloxResizeBatches (159) - +- ^ FlushableHashAggregateExecTransformer (157) - +- ^ ProjectExecTransformer (156) - +- ^ FilterExecTransformer (155) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (154) - +Functions [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#88] +Results [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#88 AS bloomFilter#89] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/simplified.txt index 36186a035b0..0b8a38c8ebc 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/simplified.txt @@ -113,34 +113,27 @@ VeloxColumnarToRow ProjectExecTransformer [ss_customer_sk,ss_item_sk,ss_store_sk,ss_ticket_number,ss_net_paid,i_current_price,i_size,i_color,i_units,i_manager_id] BroadcastHashJoinExecTransformer [ss_item_sk,i_item_sk] ProjectExecTransformer [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid] - FilterExecTransformer [ss_ticket_number,ss_item_sk,ss_store_sk,ss_customer_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (13) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #5 - VeloxResizeBatches - WholeStageCodegenTransformer (12) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [s_store_sk] - FilterExecTransformer [s_market_id,s_store_sk,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid,ss_sold_date_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (13) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_ticket_number,ss_item_sk,ss_store_sk,ss_customer_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #5 VeloxResizeBatches - WholeStageCodegenTransformer (12) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [s_store_sk] - FilterExecTransformer [s_market_id,s_store_sk,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] + RowToVeloxColumnar + ObjectHashAggregate [s_store_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (12) + ProjectExecTransformer [s_store_sk] + FilterExecTransformer [s_market_id,s_store_sk,s_zip] + FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (13) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid,ss_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #6 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/explain.txt index fd3d6998ba1..ff1604266ef 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/explain.txt @@ -1,63 +1,66 @@ == Physical Plan == -VeloxColumnarToRow (78) -+- ^ FilterExecTransformer (76) - +- ^ RegularHashAggregateExecTransformer (75) - +- ^ InputIteratorTransformer (74) - +- ColumnarExchange (72) - +- VeloxResizeBatches (71) - +- ^ ProjectExecTransformer (69) - +- ^ FlushableHashAggregateExecTransformer (68) - +- ^ ProjectExecTransformer (67) - +- ^ RegularHashAggregateExecTransformer (66) - +- ^ InputIteratorTransformer (65) - +- ColumnarExchange (63) - +- VeloxResizeBatches (62) - +- ^ ProjectExecTransformer (60) - +- ^ FlushableHashAggregateExecTransformer (59) - +- ^ ProjectExecTransformer (58) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) - :- ^ ProjectExecTransformer (41) - : +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (40) - : :- ^ InputIteratorTransformer (31) - : : +- ColumnarExchange (29) - : : +- VeloxResizeBatches (28) - : : +- ^ ProjectExecTransformer (26) - : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (25) - : : :- ^ InputIteratorTransformer (16) - : : : +- ColumnarExchange (14) - : : : +- VeloxResizeBatches (13) - : : : +- ^ ProjectExecTransformer (11) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (10) - : : : :- ^ ProjectExecTransformer (3) - : : : : +- ^ FilterExecTransformer (2) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : +- ^ InputIteratorTransformer (9) - : : : +- ColumnarBroadcastExchange (7) - : : : +- ^ FilterExecTransformer (5) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (4) - : : +- ^ InputIteratorTransformer (24) - : : +- ColumnarExchange (22) - : : +- VeloxResizeBatches (21) - : : +- ^ ProjectExecTransformer (19) - : : +- ^ FilterExecTransformer (18) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (17) - : +- ^ InputIteratorTransformer (39) - : +- ColumnarExchange (37) - : +- VeloxResizeBatches (36) - : +- ^ ProjectExecTransformer (34) - : +- ^ FilterExecTransformer (33) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (32) - +- ^ InputIteratorTransformer (56) - +- ColumnarBroadcastExchange (54) - +- ^ ProjectExecTransformer (52) - +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (51) - :- ^ InputIteratorTransformer (48) - : +- ColumnarBroadcastExchange (46) - : +- ^ ProjectExecTransformer (44) - : +- ^ FilterExecTransformer (43) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (42) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (49) +VeloxColumnarToRow (83) ++- ^ FilterExecTransformer (81) + +- ^ RegularHashAggregateExecTransformer (80) + +- ^ InputIteratorTransformer (79) + +- ColumnarExchange (77) + +- VeloxResizeBatches (76) + +- ^ ProjectExecTransformer (74) + +- ^ FlushableHashAggregateExecTransformer (73) + +- ^ ProjectExecTransformer (72) + +- ^ RegularHashAggregateExecTransformer (71) + +- ^ InputIteratorTransformer (70) + +- ColumnarExchange (68) + +- VeloxResizeBatches (67) + +- ^ ProjectExecTransformer (65) + +- ^ FlushableHashAggregateExecTransformer (64) + +- ^ ProjectExecTransformer (63) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) + :- ^ ProjectExecTransformer (46) + : +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (45) + : :- ^ InputIteratorTransformer (36) + : : +- ColumnarExchange (34) + : : +- VeloxResizeBatches (33) + : : +- ^ ProjectExecTransformer (31) + : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (30) + : : :- ^ InputIteratorTransformer (21) + : : : +- ColumnarExchange (19) + : : : +- VeloxResizeBatches (18) + : : : +- ^ ProjectExecTransformer (16) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (15) + : : : :- ^ ProjectExecTransformer (8) + : : : : +- ^ InputIteratorTransformer (7) + : : : : +- RowToVeloxColumnar (5) + : : : : +- * Filter (4) + : : : : +- VeloxColumnarToRow (3) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : +- ^ InputIteratorTransformer (14) + : : : +- ColumnarBroadcastExchange (12) + : : : +- ^ FilterExecTransformer (10) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (9) + : : +- ^ InputIteratorTransformer (29) + : : +- ColumnarExchange (27) + : : +- VeloxResizeBatches (26) + : : +- ^ ProjectExecTransformer (24) + : : +- ^ FilterExecTransformer (23) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (22) + : +- ^ InputIteratorTransformer (44) + : +- ColumnarExchange (42) + : +- VeloxResizeBatches (41) + : +- ^ ProjectExecTransformer (39) + : +- ^ FilterExecTransformer (38) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (37) + +- ^ InputIteratorTransformer (61) + +- ColumnarBroadcastExchange (59) + +- ^ ProjectExecTransformer (57) + +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (56) + :- ^ InputIteratorTransformer (53) + : +- ColumnarBroadcastExchange (51) + : +- ^ ProjectExecTransformer (49) + : +- ^ FilterExecTransformer (48) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (47) + +- ^ FilterExecTransformer (55) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (54) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -67,777 +70,778 @@ Location: CatalogFileIndex [{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (13) +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] +Arguments: false + +(3) VeloxColumnarToRow +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(4) Filter [codegen id : 1] +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] +Condition : ((((isnotnull(ss_ticket_number#4) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_customer_sk#2)) AND might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(ss_store_sk#3, 42))) + +(5) RowToVeloxColumnar +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(6) InputAdapter Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] -Arguments: ((((isnotnull(ss_ticket_number#4) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_customer_sk#2)) AND velox_might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(ss_store_sk#3, 42))) -(3) ProjectExecTransformer +(7) InputIteratorTransformer +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(8) ProjectExecTransformer Output [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5] Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] -(4) FileSourceScanExecTransformer parquet spark_catalog.default.item +(9) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_color), EqualTo(i_color,chiffon ), IsNotNull(i_item_sk)] ReadSchema: struct -(5) FilterExecTransformer +(10) FilterExecTransformer Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: ((isnotnull(i_color#11) AND (i_color#11 = chiffon )) AND isnotnull(i_item_sk#8)) -(6) WholeStageCodegenTransformer (14) +(11) WholeStageCodegenTransformer (14) Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: false -(7) ColumnarBroadcastExchange +(12) ColumnarBroadcastExchange Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] -(8) InputAdapter +(13) InputAdapter Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(9) InputIteratorTransformer +(14) InputIteratorTransformer Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(10) BroadcastHashJoinExecTransformer +(15) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#8] Join type: Inner Join condition: None -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [11]: [hash(ss_customer_sk#2, 42) AS hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(12) WholeStageCodegenTransformer (15) +(17) WholeStageCodegenTransformer (15) Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: hashpartitioning(ss_customer_sk#2, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13], [plan_id=3], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(17) FileSourceScanExecTransformer parquet spark_catalog.default.customer +(22) FileSourceScanExecTransformer parquet spark_catalog.default.customer Output [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_birth_country)] ReadSchema: struct -(18) FilterExecTransformer +(23) FilterExecTransformer Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: (isnotnull(c_customer_sk#15) AND isnotnull(c_birth_country#18)) -(19) ProjectExecTransformer +(24) ProjectExecTransformer Output [5]: [hash(c_customer_sk#15, 42) AS hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(20) WholeStageCodegenTransformer (16) +(25) WholeStageCodegenTransformer (16) Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: false -(21) VeloxResizeBatches +(26) VeloxResizeBatches Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: 1024, 2147483647, 10485760 -(22) ColumnarExchange +(27) ColumnarExchange Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: hashpartitioning(c_customer_sk#15, 1), ENSURE_REQUIREMENTS, [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18], [plan_id=4], [shuffle_writer_type=hash] -(23) InputAdapter +(28) InputAdapter Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(25) ShuffledHashJoinExecTransformer +(30) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#2] Right keys [1]: [c_customer_sk#15] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [13]: [hash(ss_ticket_number#4, ss_item_sk#1, 42) AS hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(27) WholeStageCodegenTransformer (17) +(32) WholeStageCodegenTransformer (17) Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: false -(28) VeloxResizeBatches +(33) VeloxResizeBatches Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: 1024, 2147483647, 10485760 -(29) ColumnarExchange +(34) ColumnarExchange Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18], [plan_id=5], [shuffle_writer_type=hash] -(30) InputAdapter +(35) InputAdapter Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] -(32) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(37) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct -(33) FilterExecTransformer +(38) FilterExecTransformer Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] Arguments: (isnotnull(sr_ticket_number#22) AND isnotnull(sr_item_sk#21)) -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [3]: [hash(sr_ticket_number#22, sr_item_sk#21, 42) AS hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] -(35) WholeStageCodegenTransformer (18) +(40) WholeStageCodegenTransformer (18) Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: false -(36) VeloxResizeBatches +(41) VeloxResizeBatches Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: 1024, 2147483647, 10485760 -(37) ColumnarExchange +(42) ColumnarExchange Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: hashpartitioning(sr_ticket_number#22, sr_item_sk#21, 1), ENSURE_REQUIREMENTS, [sr_item_sk#21, sr_ticket_number#22], [plan_id=6], [shuffle_writer_type=hash] -(38) InputAdapter +(43) InputAdapter Input [2]: [sr_item_sk#21, sr_ticket_number#22] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [2]: [sr_item_sk#21, sr_ticket_number#22] -(40) ShuffledHashJoinExecTransformer +(45) ShuffledHashJoinExecTransformer Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] Right keys [2]: [sr_ticket_number#22, sr_item_sk#21] Join type: Inner Join condition: None -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [10]: [ss_store_sk#3, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Input [14]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18, sr_item_sk#21, sr_ticket_number#22] -(42) FileSourceScanExecTransformer parquet spark_catalog.default.store +(47) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(43) FilterExecTransformer +(48) FilterExecTransformer Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] Arguments: (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) -(44) ProjectExecTransformer +(49) ProjectExecTransformer Output [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] -(45) WholeStageCodegenTransformer (19) +(50) WholeStageCodegenTransformer (19) Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Arguments: false -(46) ColumnarBroadcastExchange +(51) ColumnarBroadcastExchange Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Arguments: HashedRelationBroadcastMode(List(input[3, string, true]),false), [plan_id=7] -(47) InputAdapter +(52) InputAdapter Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -(48) InputIteratorTransformer +(53) InputIteratorTransformer Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -(49) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(54) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_state#30, ca_zip#31, ca_country#32] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [3]: [ca_state#30, ca_zip#31, ca_country#32] Arguments: (isnotnull(ca_country#32) AND isnotnull(ca_zip#31)) -(51) BroadcastHashJoinExecTransformer +(56) BroadcastHashJoinExecTransformer Left keys [1]: [s_zip#29] Right keys [1]: [ca_zip#31] Join type: Inner Join condition: None -(52) ProjectExecTransformer +(57) ProjectExecTransformer Output [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Input [7]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29, ca_state#30, ca_zip#31, ca_country#32] -(53) WholeStageCodegenTransformer (20) +(58) WholeStageCodegenTransformer (20) Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Arguments: false -(54) ColumnarBroadcastExchange +(59) ColumnarBroadcastExchange Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Arguments: HashedRelationBroadcastMode(List(input[0, int, true], upper(input[4, string, true])),false), [plan_id=8] -(55) InputAdapter +(60) InputAdapter Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(57) BroadcastHashJoinExecTransformer +(62) BroadcastHashJoinExecTransformer Left keys [2]: [ss_store_sk#3, c_birth_country#18] Right keys [2]: [s_store_sk#25, upper(ca_country#32)] Join type: Inner Join condition: None -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [11]: [s_store_name#26, s_state#28, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, ca_state#30, UnscaledValue(ss_net_paid#5) AS _pre_1#33] Input [15]: [ss_store_sk#3, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18, s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(59) FlushableHashAggregateExecTransformer +(64) FlushableHashAggregateExecTransformer Input [11]: [s_store_name#26, s_state#28, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, ca_state#30, _pre_1#33] Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10] Functions [1]: [partial_sum(_pre_1#33)] Aggregate Attributes [1]: [sum#34] Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(60) ProjectExecTransformer +(65) ProjectExecTransformer Output [12]: [hash(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, 42) AS hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(61) WholeStageCodegenTransformer (21) +(66) WholeStageCodegenTransformer (21) Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: false -(62) VeloxResizeBatches +(67) VeloxResizeBatches Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: 1024, 2147483647, 10485760 -(63) ColumnarExchange +(68) ColumnarExchange Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, 1), ENSURE_REQUIREMENTS, [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35], [plan_id=9], [shuffle_writer_type=hash] -(64) InputAdapter +(69) InputAdapter Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(65) InputIteratorTransformer +(70) InputIteratorTransformer Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(66) RegularHashAggregateExecTransformer +(71) RegularHashAggregateExecTransformer Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#37] Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum(UnscaledValue(ss_net_paid#5))#37] -(67) ProjectExecTransformer +(72) ProjectExecTransformer Output [4]: [c_last_name#17, c_first_name#16, s_store_name#26, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#37,17,2) AS netpaid#38] Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum(UnscaledValue(ss_net_paid#5))#37] -(68) FlushableHashAggregateExecTransformer +(73) FlushableHashAggregateExecTransformer Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, netpaid#38] Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] Functions [1]: [partial_sum(netpaid#38)] Aggregate Attributes [2]: [sum#39, isEmpty#40] Results [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(69) ProjectExecTransformer +(74) ProjectExecTransformer Output [6]: [hash(c_last_name#17, c_first_name#16, s_store_name#26, 42) AS hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(70) WholeStageCodegenTransformer (22) +(75) WholeStageCodegenTransformer (22) Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: false -(71) VeloxResizeBatches +(76) VeloxResizeBatches Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: 1024, 2147483647, 10485760 -(72) ColumnarExchange +(77) ColumnarExchange Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, 1), ENSURE_REQUIREMENTS, [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42], [plan_id=10], [shuffle_writer_type=hash] -(73) InputAdapter +(78) InputAdapter Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(74) InputIteratorTransformer +(79) InputIteratorTransformer Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(75) RegularHashAggregateExecTransformer +(80) RegularHashAggregateExecTransformer Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] Functions [1]: [sum(netpaid#38)] Aggregate Attributes [1]: [sum(netpaid#38)#44] Results [4]: [c_last_name#17, c_first_name#16, s_store_name#26, sum(netpaid#38)#44 AS paid#45] -(76) FilterExecTransformer +(81) FilterExecTransformer Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] Arguments: (isnotnull(paid#45) AND (cast(paid#45 as decimal(33,8)) > cast(Subquery scalar-subquery#46, [id=#11] as decimal(33,8)))) -(77) WholeStageCodegenTransformer (23) +(82) WholeStageCodegenTransformer (23) Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] Arguments: false -(78) VeloxColumnarToRow +(83) VeloxColumnarToRow Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] ===== Subqueries ===== -Subquery:1 Hosting operator id = 76 Hosting Expression = Subquery scalar-subquery#46, [id=#11] -VeloxColumnarToRow (153) -+- ^ ProjectExecTransformer (151) - +- ^ RegularHashAggregateExecTransformer (150) - +- ^ ProjectExecTransformer (149) - +- ^ RegularHashAggregateExecTransformer (148) - +- ^ InputIteratorTransformer (147) - +- ColumnarExchange (145) - +- VeloxResizeBatches (144) - +- ^ ProjectExecTransformer (142) - +- ^ FlushableHashAggregateExecTransformer (141) - +- ^ ProjectExecTransformer (140) - +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (139) - :- ^ InputIteratorTransformer (130) - : +- ColumnarExchange (128) - : +- VeloxResizeBatches (127) - : +- ^ ProjectExecTransformer (125) - : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (124) - : :- ^ InputIteratorTransformer (120) - : : +- ColumnarExchange (118) - : : +- VeloxResizeBatches (117) - : : +- ^ ProjectExecTransformer (115) - : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (114) - : : :- ^ InputIteratorTransformer (110) - : : : +- ColumnarExchange (108) - : : : +- VeloxResizeBatches (107) - : : : +- ^ ProjectExecTransformer (105) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (104) - : : : :- ^ InputIteratorTransformer (95) - : : : : +- ColumnarExchange (93) - : : : : +- VeloxResizeBatches (92) - : : : : +- ^ ProjectExecTransformer (90) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (89) - : : : : :- ^ ProjectExecTransformer (81) - : : : : : +- ^ FilterExecTransformer (80) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (79) - : : : : +- ^ InputIteratorTransformer (88) - : : : : +- ColumnarBroadcastExchange (86) - : : : : +- ^ ProjectExecTransformer (84) - : : : : +- ^ FilterExecTransformer (83) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (82) - : : : +- ^ InputIteratorTransformer (103) - : : : +- ColumnarExchange (101) - : : : +- VeloxResizeBatches (100) - : : : +- ^ ProjectExecTransformer (98) - : : : +- ^ FilterExecTransformer (97) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (96) - : : +- ^ InputIteratorTransformer (113) - : : +- ReusedExchange (111) - : +- ^ InputIteratorTransformer (123) - : +- ReusedExchange (121) - +- ^ InputIteratorTransformer (138) - +- ColumnarExchange (136) - +- VeloxResizeBatches (135) - +- ^ ProjectExecTransformer (133) - +- ^ FilterExecTransformer (132) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (131) - - -(79) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +Subquery:1 Hosting operator id = 81 Hosting Expression = Subquery scalar-subquery#46, [id=#11] +VeloxColumnarToRow (158) ++- ^ ProjectExecTransformer (156) + +- ^ RegularHashAggregateExecTransformer (155) + +- ^ ProjectExecTransformer (154) + +- ^ RegularHashAggregateExecTransformer (153) + +- ^ InputIteratorTransformer (152) + +- ColumnarExchange (150) + +- VeloxResizeBatches (149) + +- ^ ProjectExecTransformer (147) + +- ^ FlushableHashAggregateExecTransformer (146) + +- ^ ProjectExecTransformer (145) + +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (144) + :- ^ InputIteratorTransformer (135) + : +- ColumnarExchange (133) + : +- VeloxResizeBatches (132) + : +- ^ ProjectExecTransformer (130) + : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (129) + : :- ^ InputIteratorTransformer (125) + : : +- ColumnarExchange (123) + : : +- VeloxResizeBatches (122) + : : +- ^ ProjectExecTransformer (120) + : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (119) + : : :- ^ InputIteratorTransformer (115) + : : : +- ColumnarExchange (113) + : : : +- VeloxResizeBatches (112) + : : : +- ^ ProjectExecTransformer (110) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (109) + : : : :- ^ InputIteratorTransformer (100) + : : : : +- ColumnarExchange (98) + : : : : +- VeloxResizeBatches (97) + : : : : +- ^ ProjectExecTransformer (95) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (94) + : : : : :- ^ ProjectExecTransformer (86) + : : : : : +- ^ FilterExecTransformer (85) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (84) + : : : : +- ^ InputIteratorTransformer (93) + : : : : +- ColumnarBroadcastExchange (91) + : : : : +- ^ ProjectExecTransformer (89) + : : : : +- ^ FilterExecTransformer (88) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (87) + : : : +- ^ InputIteratorTransformer (108) + : : : +- ColumnarExchange (106) + : : : +- VeloxResizeBatches (105) + : : : +- ^ ProjectExecTransformer (103) + : : : +- ^ FilterExecTransformer (102) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (101) + : : +- ^ InputIteratorTransformer (118) + : : +- ReusedExchange (116) + : +- ^ InputIteratorTransformer (128) + : +- ReusedExchange (126) + +- ^ InputIteratorTransformer (143) + +- ColumnarExchange (141) + +- VeloxResizeBatches (140) + +- ^ ProjectExecTransformer (138) + +- ^ FilterExecTransformer (137) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (136) + + +(84) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct -(80) FilterExecTransformer +(85) FilterExecTransformer Input [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] Arguments: (((isnotnull(ss_ticket_number#50) AND isnotnull(ss_item_sk#47)) AND isnotnull(ss_store_sk#49)) AND isnotnull(ss_customer_sk#48)) -(81) ProjectExecTransformer +(86) ProjectExecTransformer Output [5]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51] Input [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] -(82) FileSourceScanExecTransformer parquet spark_catalog.default.store +(87) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(83) FilterExecTransformer +(88) FilterExecTransformer Input [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] Arguments: (((isnotnull(s_market_id#55) AND (s_market_id#55 = 8)) AND isnotnull(s_store_sk#53)) AND isnotnull(s_zip#57)) -(84) ProjectExecTransformer +(89) ProjectExecTransformer Output [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Input [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] -(85) WholeStageCodegenTransformer (1) +(90) WholeStageCodegenTransformer (1) Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Arguments: false -(86) ColumnarBroadcastExchange +(91) ColumnarBroadcastExchange Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] -(87) InputAdapter +(92) InputAdapter Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(88) InputIteratorTransformer +(93) InputIteratorTransformer Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(89) BroadcastHashJoinExecTransformer +(94) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#49] Right keys [1]: [s_store_sk#53] Join type: Inner Join condition: None -(90) ProjectExecTransformer +(95) ProjectExecTransformer Output [8]: [hash(ss_item_sk#47, 42) AS hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Input [9]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(91) WholeStageCodegenTransformer (2) +(96) WholeStageCodegenTransformer (2) Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: false -(92) VeloxResizeBatches +(97) VeloxResizeBatches Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: 1024, 2147483647, 10485760 -(93) ColumnarExchange +(98) ColumnarExchange Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: hashpartitioning(ss_item_sk#47, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57], [plan_id=13], [shuffle_writer_type=hash] -(94) InputAdapter +(99) InputAdapter Input [7]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] -(95) InputIteratorTransformer +(100) InputIteratorTransformer Input [7]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] -(96) FileSourceScanExecTransformer parquet spark_catalog.default.item +(101) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct -(97) FilterExecTransformer +(102) FilterExecTransformer Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: isnotnull(i_item_sk#59) -(98) ProjectExecTransformer +(103) ProjectExecTransformer Output [7]: [hash(i_item_sk#59, 42) AS hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(99) WholeStageCodegenTransformer (3) +(104) WholeStageCodegenTransformer (3) Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: false -(100) VeloxResizeBatches +(105) VeloxResizeBatches Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: 1024, 2147483647, 10485760 -(101) ColumnarExchange +(106) ColumnarExchange Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: hashpartitioning(i_item_sk#59, 1), ENSURE_REQUIREMENTS, [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64], [plan_id=14], [shuffle_writer_type=hash] -(102) InputAdapter +(107) InputAdapter Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(103) InputIteratorTransformer +(108) InputIteratorTransformer Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(104) ShuffledHashJoinExecTransformer +(109) ShuffledHashJoinExecTransformer Left keys [1]: [ss_item_sk#47] Right keys [1]: [i_item_sk#59] Join type: Inner Join condition: None -(105) ProjectExecTransformer +(110) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#48, 42) AS hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Input [13]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(106) WholeStageCodegenTransformer (4) +(111) WholeStageCodegenTransformer (4) Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: false -(107) VeloxResizeBatches +(112) VeloxResizeBatches Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: 1024, 2147483647, 10485760 -(108) ColumnarExchange +(113) ColumnarExchange Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: hashpartitioning(ss_customer_sk#48, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64], [plan_id=15], [shuffle_writer_type=hash] -(109) InputAdapter +(114) InputAdapter Input [12]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(110) InputIteratorTransformer +(115) InputIteratorTransformer Input [12]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(111) ReusedExchange [Reuses operator id: 22] +(116) ReusedExchange [Reuses operator id: 27] Output [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(112) InputAdapter +(117) InputAdapter Input [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(113) InputIteratorTransformer +(118) InputIteratorTransformer Input [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(114) ShuffledHashJoinExecTransformer +(119) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#48] Right keys [1]: [c_customer_sk#67] Join type: Inner Join condition: None -(115) ProjectExecTransformer +(120) ProjectExecTransformer Output [15]: [hash(ss_ticket_number#50, ss_item_sk#47, 42) AS hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Input [16]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(116) WholeStageCodegenTransformer (6) +(121) WholeStageCodegenTransformer (6) Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: false -(117) VeloxResizeBatches +(122) VeloxResizeBatches Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: 1024, 2147483647, 10485760 -(118) ColumnarExchange +(123) ColumnarExchange Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: hashpartitioning(ss_ticket_number#50, ss_item_sk#47, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70], [plan_id=16], [shuffle_writer_type=hash] -(119) InputAdapter +(124) InputAdapter Input [14]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(120) InputIteratorTransformer +(125) InputIteratorTransformer Input [14]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(121) ReusedExchange [Reuses operator id: 37] +(126) ReusedExchange [Reuses operator id: 42] Output [2]: [sr_item_sk#72, sr_ticket_number#73] -(122) InputAdapter +(127) InputAdapter Input [2]: [sr_item_sk#72, sr_ticket_number#73] -(123) InputIteratorTransformer +(128) InputIteratorTransformer Input [2]: [sr_item_sk#72, sr_ticket_number#73] -(124) ShuffledHashJoinExecTransformer +(129) ShuffledHashJoinExecTransformer Left keys [2]: [ss_ticket_number#50, ss_item_sk#47] Right keys [2]: [sr_ticket_number#73, sr_item_sk#72] Join type: Inner Join condition: None -(125) ProjectExecTransformer +(130) ProjectExecTransformer Output [13]: [hash(c_birth_country#70, s_zip#57, 42) AS hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Input [16]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70, sr_item_sk#72, sr_ticket_number#73] -(126) WholeStageCodegenTransformer (8) +(131) WholeStageCodegenTransformer (8) Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: false -(127) VeloxResizeBatches +(132) VeloxResizeBatches Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: 1024, 2147483647, 10485760 -(128) ColumnarExchange +(133) ColumnarExchange Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: hashpartitioning(c_birth_country#70, s_zip#57, 1), ENSURE_REQUIREMENTS, [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70], [plan_id=17], [shuffle_writer_type=hash] -(129) InputAdapter +(134) InputAdapter Input [12]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(130) InputIteratorTransformer +(135) InputIteratorTransformer Input [12]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(131) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(136) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_state#75, ca_zip#76, ca_country#77] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct -(132) FilterExecTransformer +(137) FilterExecTransformer Input [3]: [ca_state#75, ca_zip#76, ca_country#77] Arguments: (isnotnull(ca_country#77) AND isnotnull(ca_zip#76)) -(133) ProjectExecTransformer +(138) ProjectExecTransformer Output [4]: [hash(upper(ca_country#77), ca_zip#76, 42) AS hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(134) WholeStageCodegenTransformer (9) +(139) WholeStageCodegenTransformer (9) Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: false -(135) VeloxResizeBatches +(140) VeloxResizeBatches Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: 1024, 2147483647, 10485760 -(136) ColumnarExchange +(141) ColumnarExchange Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: hashpartitioning(upper(ca_country#77), ca_zip#76, 1), ENSURE_REQUIREMENTS, [ca_state#75, ca_zip#76, ca_country#77], [plan_id=18], [shuffle_writer_type=hash] -(137) InputAdapter +(142) InputAdapter Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(138) InputIteratorTransformer +(143) InputIteratorTransformer Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(139) ShuffledHashJoinExecTransformer +(144) ShuffledHashJoinExecTransformer Left keys [2]: [c_birth_country#70, s_zip#57] Right keys [2]: [upper(ca_country#77), ca_zip#76] Join type: Inner Join condition: None -(140) ProjectExecTransformer +(145) ProjectExecTransformer Output [11]: [s_store_name#54, s_state#56, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, ca_state#75, UnscaledValue(ss_net_paid#51) AS _pre_2#79] Input [15]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70, ca_state#75, ca_zip#76, ca_country#77] -(141) FlushableHashAggregateExecTransformer +(146) FlushableHashAggregateExecTransformer Input [11]: [s_store_name#54, s_state#56, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, ca_state#75, _pre_2#79] Keys [10]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61] Functions [1]: [partial_sum(_pre_2#79)] Aggregate Attributes [1]: [sum#80] Results [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(142) ProjectExecTransformer +(147) ProjectExecTransformer Output [12]: [hash(c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, 42) AS hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(143) WholeStageCodegenTransformer (10) +(148) WholeStageCodegenTransformer (10) Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: false -(144) VeloxResizeBatches +(149) VeloxResizeBatches Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: 1024, 2147483647, 10485760 -(145) ColumnarExchange +(150) ColumnarExchange Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: hashpartitioning(c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, 1), ENSURE_REQUIREMENTS, [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81], [plan_id=19], [shuffle_writer_type=hash] -(146) InputAdapter +(151) InputAdapter Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(147) InputIteratorTransformer +(152) InputIteratorTransformer Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(148) RegularHashAggregateExecTransformer +(153) RegularHashAggregateExecTransformer Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Keys [10]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61] Functions [1]: [sum(UnscaledValue(ss_net_paid#51))] Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#51))#37] Results [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum(UnscaledValue(ss_net_paid#51))#37] -(149) ProjectExecTransformer +(154) ProjectExecTransformer Output [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#51))#37,17,2) AS netpaid#83] Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum(UnscaledValue(ss_net_paid#51))#37] -(150) RegularHashAggregateExecTransformer +(155) RegularHashAggregateExecTransformer Input [1]: [netpaid#83] Keys: [] Functions [1]: [avg(netpaid#83)] Aggregate Attributes [1]: [avg(netpaid#83)#84] Results [1]: [avg(netpaid#83)#84] -(151) ProjectExecTransformer +(156) ProjectExecTransformer Output [1]: [(0.05 * avg(netpaid#83)#84) AS (0.05 * avg(netpaid))#85] Input [1]: [avg(netpaid#83)#84] -(152) WholeStageCodegenTransformer (11) +(157) WholeStageCodegenTransformer (11) Input [1]: [(0.05 * avg(netpaid))#85] Arguments: false -(153) VeloxColumnarToRow +(158) VeloxColumnarToRow Input [1]: [(0.05 * avg(netpaid))#85] -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (165) -+- ^ RegularHashAggregateExecTransformer (163) - +- ^ InputIteratorTransformer (162) - +- ColumnarExchange (160) - +- VeloxResizeBatches (159) - +- ^ FlushableHashAggregateExecTransformer (157) - +- ^ ProjectExecTransformer (156) - +- ^ FilterExecTransformer (155) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (154) +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#7, [id=#1] +ObjectHashAggregate (169) ++- VeloxColumnarToRow (168) + +- ColumnarExchange (167) + +- VeloxResizeBatches (166) + +- RowToVeloxColumnar (165) + +- ObjectHashAggregate (164) + +- VeloxColumnarToRow (163) + +- ^ ProjectExecTransformer (161) + +- ^ FilterExecTransformer (160) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (159) -(154) FileSourceScanExecTransformer parquet spark_catalog.default.store +(159) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#25, s_market_id#27, s_zip#29] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(155) FilterExecTransformer +(160) FilterExecTransformer Input [3]: [s_store_sk#25, s_market_id#27, s_zip#29] Arguments: (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) -(156) ProjectExecTransformer -Output [1]: [xxhash64(s_store_sk#25, 42) AS _pre_3#86] +(161) ProjectExecTransformer +Output [1]: [s_store_sk#25] Input [3]: [s_store_sk#25, s_market_id#27, s_zip#29] -(157) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#86] +(162) WholeStageCodegenTransformer (12) +Input [1]: [s_store_sk#25] +Arguments: false + +(163) VeloxColumnarToRow +Input [1]: [s_store_sk#25] + +(164) ObjectHashAggregate +Input [1]: [s_store_sk#25] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#86, 40, 1250, 0, 0)] -Aggregate Attributes [1]: [buf#87] -Results [1]: [buf#88] +Functions [1]: [partial_bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] +Aggregate Attributes [1]: [buf#86] +Results [1]: [buf#87] -(158) WholeStageCodegenTransformer (12) -Input [1]: [buf#88] -Arguments: false +(165) RowToVeloxColumnar +Input [1]: [buf#87] -(159) VeloxResizeBatches -Input [1]: [buf#88] +(166) VeloxResizeBatches +Input [1]: [buf#87] Arguments: 1024, 2147483647, 10485760 -(160) ColumnarExchange -Input [1]: [buf#88] +(167) ColumnarExchange +Input [1]: [buf#87] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=20], [shuffle_writer_type=hash] -(161) InputAdapter -Input [1]: [buf#88] - -(162) InputIteratorTransformer -Input [1]: [buf#88] +(168) VeloxColumnarToRow +Input [1]: [buf#87] -(163) RegularHashAggregateExecTransformer -Input [1]: [buf#88] +(169) ObjectHashAggregate +Input [1]: [buf#87] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#89] -Results [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#89 AS bloomFilter#90] - -(164) WholeStageCodegenTransformer (13) -Input [1]: [bloomFilter#90] -Arguments: false - -(165) VeloxColumnarToRow -Input [1]: [bloomFilter#90] - -Subquery:3 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (165) -+- ^ RegularHashAggregateExecTransformer (163) - +- ^ InputIteratorTransformer (162) - +- ColumnarExchange (160) - +- VeloxResizeBatches (159) - +- ^ FlushableHashAggregateExecTransformer (157) - +- ^ ProjectExecTransformer (156) - +- ^ FilterExecTransformer (155) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (154) - +Functions [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#88] +Results [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#88 AS bloomFilter#89] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/simplified.txt index 36186a035b0..0b8a38c8ebc 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/simplified.txt @@ -113,34 +113,27 @@ VeloxColumnarToRow ProjectExecTransformer [ss_customer_sk,ss_item_sk,ss_store_sk,ss_ticket_number,ss_net_paid,i_current_price,i_size,i_color,i_units,i_manager_id] BroadcastHashJoinExecTransformer [ss_item_sk,i_item_sk] ProjectExecTransformer [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid] - FilterExecTransformer [ss_ticket_number,ss_item_sk,ss_store_sk,ss_customer_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (13) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #5 - VeloxResizeBatches - WholeStageCodegenTransformer (12) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [s_store_sk] - FilterExecTransformer [s_market_id,s_store_sk,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid,ss_sold_date_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (13) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_ticket_number,ss_item_sk,ss_store_sk,ss_customer_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #5 VeloxResizeBatches - WholeStageCodegenTransformer (12) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [s_store_sk] - FilterExecTransformer [s_market_id,s_store_sk,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] + RowToVeloxColumnar + ObjectHashAggregate [s_store_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (12) + ProjectExecTransformer [s_store_sk] + FilterExecTransformer [s_market_id,s_store_sk,s_zip] + FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (13) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid,ss_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #6 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/explain.txt index b8d87682078..85e6545c207 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/explain.txt @@ -1,42 +1,45 @@ == Physical Plan == -VeloxColumnarToRow (49) -+- ^ ProjectExecTransformer (47) - +- ^ RegularHashAggregateExecTransformer (46) - +- ^ InputIteratorTransformer (45) - +- ColumnarExchange (43) - +- VeloxResizeBatches (42) - +- ^ FlushableHashAggregateExecTransformer (40) - +- ^ ProjectExecTransformer (39) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (38) - :- ^ ProjectExecTransformer (34) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (33) - : :- ^ InputIteratorTransformer (30) - : : +- ColumnarBroadcastExchange (28) - : : +- ^ ProjectExecTransformer (26) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (25) +VeloxColumnarToRow (54) ++- ^ ProjectExecTransformer (52) + +- ^ RegularHashAggregateExecTransformer (51) + +- ^ InputIteratorTransformer (50) + +- ColumnarExchange (48) + +- VeloxResizeBatches (47) + +- ^ FlushableHashAggregateExecTransformer (45) + +- ^ ProjectExecTransformer (44) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (43) + :- ^ ProjectExecTransformer (39) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (38) + : :- ^ InputIteratorTransformer (35) + : : +- ColumnarBroadcastExchange (33) + : : +- ^ ProjectExecTransformer (31) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (30) : : :- ^ InputIteratorTransformer (7) : : : +- ColumnarBroadcastExchange (5) : : : +- ^ ProjectExecTransformer (3) : : : +- ^ FilterExecTransformer (2) : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (1) - : : +- ^ FilterExecTransformer (24) - : : +- ^ ProjectExecTransformer (23) - : : +- ^ RegularHashAggregateExecTransformer (22) - : : +- ^ InputIteratorTransformer (21) - : : +- ColumnarExchange (19) - : : +- VeloxResizeBatches (18) - : : +- ^ ProjectExecTransformer (16) - : : +- ^ FlushableHashAggregateExecTransformer (15) - : : +- ^ ProjectExecTransformer (14) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13) - : : :- ^ FilterExecTransformer (9) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (8) - : : +- ^ InputIteratorTransformer (12) - : : +- ReusedExchange (10) - : +- ^ FilterExecTransformer (32) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (31) - +- ^ InputIteratorTransformer (37) - +- ReusedExchange (35) + : : +- ^ FilterExecTransformer (29) + : : +- ^ ProjectExecTransformer (28) + : : +- ^ RegularHashAggregateExecTransformer (27) + : : +- ^ InputIteratorTransformer (26) + : : +- ColumnarExchange (24) + : : +- VeloxResizeBatches (23) + : : +- ^ ProjectExecTransformer (21) + : : +- ^ FlushableHashAggregateExecTransformer (20) + : : +- ^ ProjectExecTransformer (19) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) + : : :- ^ InputIteratorTransformer (14) + : : : +- RowToVeloxColumnar (12) + : : : +- * Filter (11) + : : : +- VeloxColumnarToRow (10) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (8) + : : +- ^ InputIteratorTransformer (17) + : : +- ReusedExchange (15) + : +- ^ FilterExecTransformer (37) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (36) + +- ^ InputIteratorTransformer (42) + +- ReusedExchange (40) (1) FileSourceScanExecTransformer parquet spark_catalog.default.item @@ -76,98 +79,114 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#5), dynamicpruningexpression(cs_sol PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct -(9) FilterExecTransformer +(9) WholeStageCodegenTransformer (4) +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] +Arguments: false + +(10) VeloxColumnarToRow +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] + +(11) Filter [codegen id : 1] +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] +Condition : (isnotnull(cs_item_sk#3) AND might_contain(Subquery scalar-subquery#7, [id=#2], xxhash64(cs_item_sk#3, 42))) + +(12) RowToVeloxColumnar +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] + +(13) InputAdapter +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] + +(14) InputIteratorTransformer Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] -Arguments: (isnotnull(cs_item_sk#3) AND velox_might_contain(Subquery scalar-subquery#7, [id=#2], xxhash64(cs_item_sk#3, 42))) -(10) ReusedExchange [Reuses operator id: 66] +(15) ReusedExchange [Reuses operator id: 70] Output [1]: [d_date_sk#8] -(11) InputAdapter +(16) InputAdapter Input [1]: [d_date_sk#8] -(12) InputIteratorTransformer +(17) InputIteratorTransformer Input [1]: [d_date_sk#8] -(13) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#5] Right keys [1]: [d_date_sk#8] Join type: Inner Join condition: None -(14) ProjectExecTransformer +(19) ProjectExecTransformer Output [2]: [cs_item_sk#3, UnscaledValue(cs_ext_discount_amt#4) AS _pre_1#9] Input [4]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5, d_date_sk#8] -(15) FlushableHashAggregateExecTransformer +(20) FlushableHashAggregateExecTransformer Input [2]: [cs_item_sk#3, _pre_1#9] Keys [1]: [cs_item_sk#3] Functions [1]: [partial_avg(_pre_1#9)] Aggregate Attributes [2]: [sum#10, count#11] Results [3]: [cs_item_sk#3, sum#12, count#13] -(16) ProjectExecTransformer +(21) ProjectExecTransformer Output [4]: [hash(cs_item_sk#3, 42) AS hash_partition_key#14, cs_item_sk#3, sum#12, count#13] Input [3]: [cs_item_sk#3, sum#12, count#13] -(17) WholeStageCodegenTransformer (6) +(22) WholeStageCodegenTransformer (6) Input [4]: [hash_partition_key#14, cs_item_sk#3, sum#12, count#13] Arguments: false -(18) VeloxResizeBatches +(23) VeloxResizeBatches Input [4]: [hash_partition_key#14, cs_item_sk#3, sum#12, count#13] Arguments: 1024, 2147483647, 10485760 -(19) ColumnarExchange +(24) ColumnarExchange Input [4]: [hash_partition_key#14, cs_item_sk#3, sum#12, count#13] Arguments: hashpartitioning(cs_item_sk#3, 1), ENSURE_REQUIREMENTS, [cs_item_sk#3, sum#12, count#13], [plan_id=3], [shuffle_writer_type=hash] -(20) InputAdapter +(25) InputAdapter Input [3]: [cs_item_sk#3, sum#12, count#13] -(21) InputIteratorTransformer +(26) InputIteratorTransformer Input [3]: [cs_item_sk#3, sum#12, count#13] -(22) RegularHashAggregateExecTransformer +(27) RegularHashAggregateExecTransformer Input [3]: [cs_item_sk#3, sum#12, count#13] Keys [1]: [cs_item_sk#3] Functions [1]: [avg(UnscaledValue(cs_ext_discount_amt#4))] Aggregate Attributes [1]: [avg(UnscaledValue(cs_ext_discount_amt#4))#15] Results [2]: [cs_item_sk#3, avg(UnscaledValue(cs_ext_discount_amt#4))#15] -(23) ProjectExecTransformer +(28) ProjectExecTransformer Output [2]: [(1.3 * cast((avg(UnscaledValue(cs_ext_discount_amt#4))#15 / 100.0) as decimal(11,6))) AS (1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#3] Input [2]: [cs_item_sk#3, avg(UnscaledValue(cs_ext_discount_amt#4))#15] -(24) FilterExecTransformer +(29) FilterExecTransformer Input [2]: [(1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#3] Arguments: isnotnull((1.3 * avg(cs_ext_discount_amt))#16) -(25) BroadcastHashJoinExecTransformer +(30) BroadcastHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [cs_item_sk#3] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16] Input [3]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#3] -(27) WholeStageCodegenTransformer (7) +(32) WholeStageCodegenTransformer (7) Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16] Arguments: false -(28) ColumnarBroadcastExchange +(33) ColumnarBroadcastExchange Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] -(29) InputAdapter +(34) InputAdapter Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16] -(31) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(36) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [3]: [cs_item_sk#17, cs_ext_discount_amt#18, cs_sold_date_sk#19] Batched: true Location: InMemoryFileIndex [] @@ -175,192 +194,177 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#19), dynamicpruningexpression(cs_so PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_ext_discount_amt)] ReadSchema: struct -(32) FilterExecTransformer +(37) FilterExecTransformer Input [3]: [cs_item_sk#17, cs_ext_discount_amt#18, cs_sold_date_sk#19] Arguments: (isnotnull(cs_item_sk#17) AND isnotnull(cs_ext_discount_amt#18)) -(33) BroadcastHashJoinExecTransformer +(38) BroadcastHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [cs_item_sk#17] Join type: Inner Join condition: (cast(cs_ext_discount_amt#18 as decimal(14,7)) > (1.3 * avg(cs_ext_discount_amt))#16) -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [2]: [cs_ext_discount_amt#18, cs_sold_date_sk#19] Input [5]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#17, cs_ext_discount_amt#18, cs_sold_date_sk#19] -(35) ReusedExchange [Reuses operator id: 66] +(40) ReusedExchange [Reuses operator id: 70] Output [1]: [d_date_sk#20] -(36) InputAdapter +(41) InputAdapter Input [1]: [d_date_sk#20] -(37) InputIteratorTransformer +(42) InputIteratorTransformer Input [1]: [d_date_sk#20] -(38) BroadcastHashJoinExecTransformer +(43) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#19] Right keys [1]: [d_date_sk#20] Join type: Inner Join condition: None -(39) ProjectExecTransformer +(44) ProjectExecTransformer Output [1]: [UnscaledValue(cs_ext_discount_amt#18) AS _pre_2#21] Input [3]: [cs_ext_discount_amt#18, cs_sold_date_sk#19, d_date_sk#20] -(40) FlushableHashAggregateExecTransformer +(45) FlushableHashAggregateExecTransformer Input [1]: [_pre_2#21] Keys: [] Functions [1]: [partial_sum(_pre_2#21)] Aggregate Attributes [1]: [sum#22] Results [1]: [sum#23] -(41) WholeStageCodegenTransformer (10) +(46) WholeStageCodegenTransformer (10) Input [1]: [sum#23] Arguments: false -(42) VeloxResizeBatches +(47) VeloxResizeBatches Input [1]: [sum#23] Arguments: 1024, 2147483647, 10485760 -(43) ColumnarExchange +(48) ColumnarExchange Input [1]: [sum#23] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5], [shuffle_writer_type=hash] -(44) InputAdapter +(49) InputAdapter Input [1]: [sum#23] -(45) InputIteratorTransformer +(50) InputIteratorTransformer Input [1]: [sum#23] -(46) RegularHashAggregateExecTransformer +(51) RegularHashAggregateExecTransformer Input [1]: [sum#23] Keys: [] Functions [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))] Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))#24] Results [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))#24] -(47) ProjectExecTransformer +(52) ProjectExecTransformer Output [1]: [MakeDecimal(sum(UnscaledValue(cs_ext_discount_amt#18))#24,17,2) AS excess discount amount#25] Input [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))#24] -(48) WholeStageCodegenTransformer (11) +(53) WholeStageCodegenTransformer (11) Input [1]: [excess discount amount#25] Arguments: false -(49) VeloxColumnarToRow +(54) VeloxColumnarToRow Input [1]: [excess discount amount#25] ===== Subqueries ===== -Subquery:1 Hosting operator id = 9 Hosting Expression = Subquery scalar-subquery#7, [id=#2] -VeloxColumnarToRow (61) -+- ^ RegularHashAggregateExecTransformer (59) - +- ^ InputIteratorTransformer (58) - +- ColumnarExchange (56) - +- VeloxResizeBatches (55) - +- ^ FlushableHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ FilterExecTransformer (51) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (50) +Subquery:1 Hosting operator id = 11 Hosting Expression = Subquery scalar-subquery#7, [id=#2] +ObjectHashAggregate (65) ++- VeloxColumnarToRow (64) + +- ColumnarExchange (63) + +- VeloxResizeBatches (62) + +- RowToVeloxColumnar (61) + +- ObjectHashAggregate (60) + +- VeloxColumnarToRow (59) + +- ^ ProjectExecTransformer (57) + +- ^ FilterExecTransformer (56) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (55) -(50) FileSourceScanExecTransformer parquet spark_catalog.default.item +(55) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#1, i_manufact_id#2] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manufact_id), EqualTo(i_manufact_id,977), IsNotNull(i_item_sk)] ReadSchema: struct -(51) FilterExecTransformer +(56) FilterExecTransformer Input [2]: [i_item_sk#1, i_manufact_id#2] Arguments: ((isnotnull(i_manufact_id#2) AND (i_manufact_id#2 = 977)) AND isnotnull(i_item_sk#1)) -(52) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#1, 42) AS _pre_3#26] +(57) ProjectExecTransformer +Output [1]: [i_item_sk#1] Input [2]: [i_item_sk#1, i_manufact_id#2] -(53) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#26] +(58) WholeStageCodegenTransformer (2) +Input [1]: [i_item_sk#1] +Arguments: false + +(59) VeloxColumnarToRow +Input [1]: [i_item_sk#1] + +(60) ObjectHashAggregate +Input [1]: [i_item_sk#1] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#26, 199, 5556, 0, 0)] -Aggregate Attributes [1]: [buf#27] -Results [1]: [buf#28] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] +Aggregate Attributes [1]: [buf#26] +Results [1]: [buf#27] -(54) WholeStageCodegenTransformer (2) -Input [1]: [buf#28] -Arguments: false +(61) RowToVeloxColumnar +Input [1]: [buf#27] -(55) VeloxResizeBatches -Input [1]: [buf#28] +(62) VeloxResizeBatches +Input [1]: [buf#27] Arguments: 1024, 2147483647, 10485760 -(56) ColumnarExchange -Input [1]: [buf#28] +(63) ColumnarExchange +Input [1]: [buf#27] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6], [shuffle_writer_type=hash] -(57) InputAdapter -Input [1]: [buf#28] - -(58) InputIteratorTransformer -Input [1]: [buf#28] +(64) VeloxColumnarToRow +Input [1]: [buf#27] -(59) RegularHashAggregateExecTransformer -Input [1]: [buf#28] +(65) ObjectHashAggregate +Input [1]: [buf#27] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#29] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#29 AS bloomFilter#30] - -(60) WholeStageCodegenTransformer (3) -Input [1]: [bloomFilter#30] -Arguments: false - -(61) VeloxColumnarToRow -Input [1]: [bloomFilter#30] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#28] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#28 AS bloomFilter#29] Subquery:2 Hosting operator id = 8 Hosting Expression = cs_sold_date_sk#5 IN dynamicpruning#6 -ColumnarBroadcastExchange (66) -+- ^ ProjectExecTransformer (64) - +- ^ FilterExecTransformer (63) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (62) +ColumnarBroadcastExchange (70) ++- ^ ProjectExecTransformer (68) + +- ^ FilterExecTransformer (67) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (66) -(62) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#8, d_date#31] +(66) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [2]: [d_date_sk#8, d_date#30] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-01-27), LessThanOrEqual(d_date,2000-04-26), IsNotNull(d_date_sk)] ReadSchema: struct -(63) FilterExecTransformer -Input [2]: [d_date_sk#8, d_date#31] -Arguments: (((isnotnull(d_date#31) AND (d_date#31 >= 2000-01-27)) AND (d_date#31 <= 2000-04-26)) AND isnotnull(d_date_sk#8)) +(67) FilterExecTransformer +Input [2]: [d_date_sk#8, d_date#30] +Arguments: (((isnotnull(d_date#30) AND (d_date#30 >= 2000-01-27)) AND (d_date#30 <= 2000-04-26)) AND isnotnull(d_date_sk#8)) -(64) ProjectExecTransformer +(68) ProjectExecTransformer Output [1]: [d_date_sk#8] -Input [2]: [d_date_sk#8, d_date#31] +Input [2]: [d_date_sk#8, d_date#30] -(65) WholeStageCodegenTransformer (4) +(69) WholeStageCodegenTransformer (3) Input [1]: [d_date_sk#8] Arguments: false -(66) ColumnarBroadcastExchange +(70) ColumnarBroadcastExchange Input [1]: [d_date_sk#8] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:3 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#7, [id=#2] -VeloxColumnarToRow (61) -+- ^ RegularHashAggregateExecTransformer (59) - +- ^ InputIteratorTransformer (58) - +- ColumnarExchange (56) - +- VeloxResizeBatches (55) - +- ^ FlushableHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ FilterExecTransformer (51) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (50) - - -Subquery:4 Hosting operator id = 31 Hosting Expression = cs_sold_date_sk#19 IN dynamicpruning#6 +Subquery:3 Hosting operator id = 36 Hosting Expression = cs_sold_date_sk#19 IN dynamicpruning#6 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/simplified.txt index 543c719fb48..6e47623f6ba 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/simplified.txt @@ -37,40 +37,33 @@ VeloxColumnarToRow FlushableHashAggregateExecTransformer [cs_item_sk,_pre_x] [sum,count,sum,count,sum,count] ProjectExecTransformer [cs_item_sk,cs_ext_discount_amt] BroadcastHashJoinExecTransformer [cs_sold_date_sk,d_date_sk] - FilterExecTransformer [cs_item_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (3) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (2) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_item_sk,cs_ext_discount_amt,cs_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (4) - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (3) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [cs_item_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (2) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_manufact_id,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_item_sk,cs_ext_discount_amt,cs_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #5 + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] InputIteratorTransformer InputAdapter ReusedExchange [d_date_sk] #5 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/explain.txt index 3677e28900b..0d997bad807 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/explain.txt @@ -1,14 +1,14 @@ == Physical Plan == -VeloxColumnarToRow (43) -+- TakeOrderedAndProjectExecTransformer (42) - +- ^ RegularHashAggregateExecTransformer (40) - +- ^ InputIteratorTransformer (39) - +- ColumnarExchange (37) - +- VeloxResizeBatches (36) - +- ^ ProjectExecTransformer (34) - +- ^ FlushableHashAggregateExecTransformer (33) - +- ^ ProjectExecTransformer (32) - +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (31) +VeloxColumnarToRow (48) ++- TakeOrderedAndProjectExecTransformer (47) + +- ^ RegularHashAggregateExecTransformer (45) + +- ^ InputIteratorTransformer (44) + +- ColumnarExchange (42) + +- VeloxResizeBatches (41) + +- ^ ProjectExecTransformer (39) + +- ^ FlushableHashAggregateExecTransformer (38) + +- ^ ProjectExecTransformer (37) + +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (36) :- ^ InputIteratorTransformer (22) : +- ColumnarExchange (20) : +- VeloxResizeBatches (19) @@ -26,12 +26,15 @@ VeloxColumnarToRow (43) : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.inventory (8) : +- ^ InputIteratorTransformer (15) : +- ReusedExchange (13) - +- ^ InputIteratorTransformer (30) - +- ColumnarExchange (28) - +- VeloxResizeBatches (27) - +- ^ ProjectExecTransformer (25) - +- ^ FilterExecTransformer (24) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (23) + +- ^ InputIteratorTransformer (35) + +- ColumnarExchange (33) + +- VeloxResizeBatches (32) + +- ^ ProjectExecTransformer (30) + +- ^ InputIteratorTransformer (29) + +- RowToVeloxColumnar (27) + +- * Filter (26) + +- VeloxColumnarToRow (25) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (23) (1) FileSourceScanExecTransformer parquet spark_catalog.default.item @@ -89,7 +92,7 @@ Join condition: None Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8] Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_item_sk#6, inv_date_sk#8] -(13) ReusedExchange [Reuses operator id: 48] +(13) ReusedExchange [Reuses operator id: 53] Output [1]: [d_date_sk#10] (14) InputAdapter @@ -133,197 +136,198 @@ Location: CatalogFileIndex [{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct -(24) FilterExecTransformer +(24) WholeStageCodegenTransformer (6) +Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] +Arguments: false + +(25) VeloxColumnarToRow +Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] + +(26) Filter [codegen id : 1] +Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] +Condition : (isnotnull(cs_item_sk#12) AND might_contain(Subquery scalar-subquery#14, [id=#3], xxhash64(cs_item_sk#12, 42))) + +(27) RowToVeloxColumnar Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] -Arguments: (isnotnull(cs_item_sk#12) AND velox_might_contain(Subquery scalar-subquery#14, [id=#3], xxhash64(cs_item_sk#12, 42))) -(25) ProjectExecTransformer +(28) InputAdapter +Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] + +(29) InputIteratorTransformer +Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] + +(30) ProjectExecTransformer Output [2]: [hash(cs_item_sk#12, 42) AS hash_partition_key#15, cs_item_sk#12] Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] -(26) WholeStageCodegenTransformer (7) +(31) WholeStageCodegenTransformer (7) Input [2]: [hash_partition_key#15, cs_item_sk#12] Arguments: false -(27) VeloxResizeBatches +(32) VeloxResizeBatches Input [2]: [hash_partition_key#15, cs_item_sk#12] Arguments: 1024, 2147483647, 10485760 -(28) ColumnarExchange +(33) ColumnarExchange Input [2]: [hash_partition_key#15, cs_item_sk#12] Arguments: hashpartitioning(cs_item_sk#12, 1), ENSURE_REQUIREMENTS, [cs_item_sk#12], [plan_id=4], [shuffle_writer_type=hash] -(29) InputAdapter +(34) InputAdapter Input [1]: [cs_item_sk#12] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [1]: [cs_item_sk#12] -(31) ShuffledHashJoinExecTransformer +(36) ShuffledHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [cs_item_sk#12] Join type: Inner Join condition: None -(32) ProjectExecTransformer +(37) ProjectExecTransformer Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, cs_item_sk#12] -(33) FlushableHashAggregateExecTransformer +(38) FlushableHashAggregateExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Functions: [] Aggregate Attributes: [] Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [4]: [hash(i_item_id#2, i_item_desc#3, i_current_price#4, 42) AS hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(35) WholeStageCodegenTransformer (8) +(40) WholeStageCodegenTransformer (8) Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: false -(36) VeloxResizeBatches +(41) VeloxResizeBatches Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: 1024, 2147483647, 10485760 -(37) ColumnarExchange +(42) ColumnarExchange Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 1), ENSURE_REQUIREMENTS, [i_item_id#2, i_item_desc#3, i_current_price#4], [plan_id=5], [shuffle_writer_type=hash] -(38) InputAdapter +(43) InputAdapter Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(40) RegularHashAggregateExecTransformer +(45) RegularHashAggregateExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Functions: [] Aggregate Attributes: [] Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(41) WholeStageCodegenTransformer (9) +(46) WholeStageCodegenTransformer (9) Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: false -(42) TakeOrderedAndProjectExecTransformer +(47) TakeOrderedAndProjectExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: 100, [i_item_id#2 ASC NULLS FIRST], [i_item_id#2, i_item_desc#3, i_current_price#4], 0 -(43) VeloxColumnarToRow +(48) VeloxColumnarToRow Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] ===== Subqueries ===== Subquery:1 Hosting operator id = 8 Hosting Expression = inv_date_sk#8 IN dynamicpruning#9 -ColumnarBroadcastExchange (48) -+- ^ ProjectExecTransformer (46) - +- ^ FilterExecTransformer (45) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (44) +ColumnarBroadcastExchange (53) ++- ^ ProjectExecTransformer (51) + +- ^ FilterExecTransformer (50) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (49) -(44) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(49) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#10, d_date#17] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-01), LessThanOrEqual(d_date,2000-04-01), IsNotNull(d_date_sk)] ReadSchema: struct -(45) FilterExecTransformer +(50) FilterExecTransformer Input [2]: [d_date_sk#10, d_date#17] Arguments: (((isnotnull(d_date#17) AND (d_date#17 >= 2000-02-01)) AND (d_date#17 <= 2000-04-01)) AND isnotnull(d_date_sk#10)) -(46) ProjectExecTransformer +(51) ProjectExecTransformer Output [1]: [d_date_sk#10] Input [2]: [d_date_sk#10, d_date#17] -(47) WholeStageCodegenTransformer (2) +(52) WholeStageCodegenTransformer (2) Input [1]: [d_date_sk#10] Arguments: false -(48) ColumnarBroadcastExchange +(53) ColumnarBroadcastExchange Input [1]: [d_date_sk#10] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -Subquery:2 Hosting operator id = 24 Hosting Expression = Subquery scalar-subquery#14, [id=#3] -VeloxColumnarToRow (60) -+- ^ RegularHashAggregateExecTransformer (58) - +- ^ InputIteratorTransformer (57) - +- ColumnarExchange (55) - +- VeloxResizeBatches (54) - +- ^ FlushableHashAggregateExecTransformer (52) - +- ^ ProjectExecTransformer (51) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (49) +Subquery:2 Hosting operator id = 26 Hosting Expression = Subquery scalar-subquery#14, [id=#3] +ObjectHashAggregate (64) ++- VeloxColumnarToRow (63) + +- ColumnarExchange (62) + +- VeloxResizeBatches (61) + +- RowToVeloxColumnar (60) + +- ObjectHashAggregate (59) + +- VeloxColumnarToRow (58) + +- ^ ProjectExecTransformer (56) + +- ^ FilterExecTransformer (55) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (54) -(49) FileSourceScanExecTransformer parquet spark_catalog.default.item +(54) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,68.00), LessThanOrEqual(i_current_price,98.00), In(i_manufact_id, [677,694,808,940]), IsNotNull(i_item_sk)] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] Arguments: ((((isnotnull(i_current_price#4) AND (i_current_price#4 >= 68.00)) AND (i_current_price#4 <= 98.00)) AND i_manufact_id#5 IN (677,940,694,808)) AND isnotnull(i_item_sk#1)) -(51) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#1, 42) AS _pre_1#18] +(56) ProjectExecTransformer +Output [1]: [i_item_sk#1] Input [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] -(52) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#18] +(57) WholeStageCodegenTransformer (5) +Input [1]: [i_item_sk#1] +Arguments: false + +(58) VeloxColumnarToRow +Input [1]: [i_item_sk#1] + +(59) ObjectHashAggregate +Input [1]: [i_item_sk#1] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#18, 239, 6582, 0, 0)] -Aggregate Attributes [1]: [buf#19] -Results [1]: [buf#20] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] +Aggregate Attributes [1]: [buf#18] +Results [1]: [buf#19] -(53) WholeStageCodegenTransformer (5) -Input [1]: [buf#20] -Arguments: false +(60) RowToVeloxColumnar +Input [1]: [buf#19] -(54) VeloxResizeBatches -Input [1]: [buf#20] +(61) VeloxResizeBatches +Input [1]: [buf#19] Arguments: 1024, 2147483647, 10485760 -(55) ColumnarExchange -Input [1]: [buf#20] +(62) ColumnarExchange +Input [1]: [buf#19] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7], [shuffle_writer_type=hash] -(56) InputAdapter -Input [1]: [buf#20] +(63) VeloxColumnarToRow +Input [1]: [buf#19] -(57) InputIteratorTransformer -Input [1]: [buf#20] - -(58) RegularHashAggregateExecTransformer -Input [1]: [buf#20] +(64) ObjectHashAggregate +Input [1]: [buf#19] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#21] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#21 AS bloomFilter#22] - -(59) WholeStageCodegenTransformer (6) -Input [1]: [bloomFilter#22] -Arguments: false - -(60) VeloxColumnarToRow -Input [1]: [bloomFilter#22] - -Subquery:3 Hosting operator id = 23 Hosting Expression = Subquery scalar-subquery#14, [id=#3] -VeloxColumnarToRow (60) -+- ^ RegularHashAggregateExecTransformer (58) - +- ^ InputIteratorTransformer (57) - +- ColumnarExchange (55) - +- VeloxResizeBatches (54) - +- ^ FlushableHashAggregateExecTransformer (52) - +- ^ ProjectExecTransformer (51) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (49) - +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#20] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#20 AS bloomFilter#21] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/simplified.txt index 9a875280509..e2e88ca02ff 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/simplified.txt @@ -45,31 +45,24 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (7) ProjectExecTransformer [cs_item_sk] - FilterExecTransformer [cs_item_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_item_sk,cs_sold_date_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [cs_item_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (5) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (6) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_item_sk,cs_sold_date_sk] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/explain.txt index 6496ea6b1e8..6fa102a99cf 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/explain.txt @@ -1,43 +1,46 @@ == Physical Plan == -VeloxColumnarToRow (51) -+- TakeOrderedAndProjectExecTransformer (50) - +- ^ RegularHashAggregateExecTransformer (48) - +- ^ InputIteratorTransformer (47) - +- ColumnarExchange (45) - +- VeloxResizeBatches (44) - +- ^ ProjectExecTransformer (42) - +- ^ FlushableHashAggregateExecTransformer (41) - +- ^ ProjectExecTransformer (40) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (39) - :- ^ ProjectExecTransformer (32) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (31) - : :- ^ ProjectExecTransformer (27) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (26) - : : :- ^ ProjectExecTransformer (18) - : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (17) - : : : :- ^ InputIteratorTransformer (8) - : : : : +- ColumnarExchange (6) - : : : : +- VeloxResizeBatches (5) - : : : : +- ^ ProjectExecTransformer (3) - : : : : +- ^ FilterExecTransformer (2) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (1) - : : : +- ^ InputIteratorTransformer (16) - : : : +- ColumnarExchange (14) - : : : +- VeloxResizeBatches (13) - : : : +- ^ ProjectExecTransformer (11) - : : : +- ^ FilterExecTransformer (10) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (9) - : : +- ^ InputIteratorTransformer (25) - : : +- ColumnarBroadcastExchange (23) - : : +- ^ ProjectExecTransformer (21) - : : +- ^ FilterExecTransformer (20) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (19) - : +- ^ InputIteratorTransformer (30) - : +- ReusedExchange (28) - +- ^ InputIteratorTransformer (38) - +- ColumnarBroadcastExchange (36) - +- ^ FilterExecTransformer (34) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.warehouse (33) +VeloxColumnarToRow (56) ++- TakeOrderedAndProjectExecTransformer (55) + +- ^ RegularHashAggregateExecTransformer (53) + +- ^ InputIteratorTransformer (52) + +- ColumnarExchange (50) + +- VeloxResizeBatches (49) + +- ^ ProjectExecTransformer (47) + +- ^ FlushableHashAggregateExecTransformer (46) + +- ^ ProjectExecTransformer (45) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (44) + :- ^ ProjectExecTransformer (37) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (36) + : :- ^ ProjectExecTransformer (32) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (31) + : : :- ^ ProjectExecTransformer (23) + : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (22) + : : : :- ^ InputIteratorTransformer (13) + : : : : +- ColumnarExchange (11) + : : : : +- VeloxResizeBatches (10) + : : : : +- ^ ProjectExecTransformer (8) + : : : : +- ^ InputIteratorTransformer (7) + : : : : +- RowToVeloxColumnar (5) + : : : : +- * Filter (4) + : : : : +- VeloxColumnarToRow (3) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (1) + : : : +- ^ InputIteratorTransformer (21) + : : : +- ColumnarExchange (19) + : : : +- VeloxResizeBatches (18) + : : : +- ^ ProjectExecTransformer (16) + : : : +- ^ FilterExecTransformer (15) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (14) + : : +- ^ InputIteratorTransformer (30) + : : +- ColumnarBroadcastExchange (28) + : : +- ^ ProjectExecTransformer (26) + : : +- ^ FilterExecTransformer (25) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (24) + : +- ^ InputIteratorTransformer (35) + : +- ReusedExchange (33) + +- ^ InputIteratorTransformer (43) + +- ColumnarBroadcastExchange (41) + +- ^ FilterExecTransformer (39) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.warehouse (38) (1) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales @@ -48,318 +51,319 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#5), dynamicpruningexpression(cs_sol PushedFilters: [IsNotNull(cs_warehouse_sk), IsNotNull(cs_item_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (3) +Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] +Arguments: false + +(3) VeloxColumnarToRow +Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] + +(4) Filter [codegen id : 1] +Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] +Condition : ((isnotnull(cs_warehouse_sk#1) AND isnotnull(cs_item_sk#2)) AND might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(cs_item_sk#2, 42))) + +(5) RowToVeloxColumnar Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] -Arguments: ((isnotnull(cs_warehouse_sk#1) AND isnotnull(cs_item_sk#2)) AND velox_might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(cs_item_sk#2, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] + +(7) InputIteratorTransformer +Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] + +(8) ProjectExecTransformer Output [6]: [hash(cs_order_number#3, cs_item_sk#2, 42) AS hash_partition_key#8, cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] -(4) WholeStageCodegenTransformer (4) +(9) WholeStageCodegenTransformer (4) Input [6]: [hash_partition_key#8, cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [6]: [hash_partition_key#8, cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [6]: [hash_partition_key#8, cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] Arguments: hashpartitioning(cs_order_number#3, cs_item_sk#2, 1), ENSURE_REQUIREMENTS, [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(14) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [4]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11, cr_returned_date_sk#12] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [4]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11, cr_returned_date_sk#12] Arguments: (isnotnull(cr_order_number#10) AND isnotnull(cr_item_sk#9)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [4]: [hash(cr_order_number#10, cr_item_sk#9, 42) AS hash_partition_key#13, cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] Input [4]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11, cr_returned_date_sk#12] -(12) WholeStageCodegenTransformer (5) +(17) WholeStageCodegenTransformer (5) Input [4]: [hash_partition_key#13, cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [4]: [hash_partition_key#13, cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [4]: [hash_partition_key#13, cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] Arguments: hashpartitioning(cr_order_number#10, cr_item_sk#9, 1), ENSURE_REQUIREMENTS, [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11], [plan_id=3], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [3]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [3]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] -(17) ShuffledHashJoinExecTransformer +(22) ShuffledHashJoinExecTransformer Left keys [2]: [cs_order_number#3, cs_item_sk#2] Right keys [2]: [cr_order_number#10, cr_item_sk#9] Join type: LeftOuter Join condition: None -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11] Input [8]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5, cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] -(19) FileSourceScanExecTransformer parquet spark_catalog.default.item +(24) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [3]: [i_item_sk#14, i_item_id#15, i_current_price#16] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,0.99), LessThanOrEqual(i_current_price,1.49), IsNotNull(i_item_sk)] ReadSchema: struct -(20) FilterExecTransformer +(25) FilterExecTransformer Input [3]: [i_item_sk#14, i_item_id#15, i_current_price#16] Arguments: (((isnotnull(i_current_price#16) AND (i_current_price#16 >= 0.99)) AND (i_current_price#16 <= 1.49)) AND isnotnull(i_item_sk#14)) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [2]: [i_item_sk#14, i_item_id#15] Input [3]: [i_item_sk#14, i_item_id#15, i_current_price#16] -(22) WholeStageCodegenTransformer (6) +(27) WholeStageCodegenTransformer (6) Input [2]: [i_item_sk#14, i_item_id#15] Arguments: false -(23) ColumnarBroadcastExchange +(28) ColumnarBroadcastExchange Input [2]: [i_item_sk#14, i_item_id#15] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] -(24) InputAdapter +(29) InputAdapter Input [2]: [i_item_sk#14, i_item_id#15] -(25) InputIteratorTransformer +(30) InputIteratorTransformer Input [2]: [i_item_sk#14, i_item_id#15] -(26) BroadcastHashJoinExecTransformer +(31) BroadcastHashJoinExecTransformer Left keys [1]: [cs_item_sk#2] Right keys [1]: [i_item_sk#14] Join type: Inner Join condition: None -(27) ProjectExecTransformer +(32) ProjectExecTransformer Output [5]: [cs_warehouse_sk#1, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11, i_item_id#15] Input [7]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11, i_item_sk#14, i_item_id#15] -(28) ReusedExchange [Reuses operator id: 67] +(33) ReusedExchange [Reuses operator id: 71] Output [2]: [d_date_sk#17, d_date#18] -(29) InputAdapter +(34) InputAdapter Input [2]: [d_date_sk#17, d_date#18] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [2]: [d_date_sk#17, d_date#18] -(31) BroadcastHashJoinExecTransformer +(36) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#5] Right keys [1]: [d_date_sk#17] Join type: Inner Join condition: None -(32) ProjectExecTransformer +(37) ProjectExecTransformer Output [5]: [cs_warehouse_sk#1, cs_sales_price#4, cr_refunded_cash#11, i_item_id#15, d_date#18] Input [7]: [cs_warehouse_sk#1, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11, i_item_id#15, d_date_sk#17, d_date#18] -(33) FileSourceScanExecTransformer parquet spark_catalog.default.warehouse +(38) FileSourceScanExecTransformer parquet spark_catalog.default.warehouse Output [2]: [w_warehouse_sk#19, w_state#20] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct -(34) FilterExecTransformer +(39) FilterExecTransformer Input [2]: [w_warehouse_sk#19, w_state#20] Arguments: isnotnull(w_warehouse_sk#19) -(35) WholeStageCodegenTransformer (8) +(40) WholeStageCodegenTransformer (8) Input [2]: [w_warehouse_sk#19, w_state#20] Arguments: false -(36) ColumnarBroadcastExchange +(41) ColumnarBroadcastExchange Input [2]: [w_warehouse_sk#19, w_state#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] -(37) InputAdapter +(42) InputAdapter Input [2]: [w_warehouse_sk#19, w_state#20] -(38) InputIteratorTransformer +(43) InputIteratorTransformer Input [2]: [w_warehouse_sk#19, w_state#20] -(39) BroadcastHashJoinExecTransformer +(44) BroadcastHashJoinExecTransformer Left keys [1]: [cs_warehouse_sk#1] Right keys [1]: [w_warehouse_sk#19] Join type: Inner Join condition: None -(40) ProjectExecTransformer +(45) ProjectExecTransformer Output [4]: [w_state#20, i_item_id#15, CASE WHEN (d_date#18 < 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END AS _pre_1#21, CASE WHEN (d_date#18 >= 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END AS _pre_2#22] Input [7]: [cs_warehouse_sk#1, cs_sales_price#4, cr_refunded_cash#11, i_item_id#15, d_date#18, w_warehouse_sk#19, w_state#20] -(41) FlushableHashAggregateExecTransformer +(46) FlushableHashAggregateExecTransformer Input [4]: [w_state#20, i_item_id#15, _pre_1#21, _pre_2#22] Keys [2]: [w_state#20, i_item_id#15] Functions [2]: [partial_sum(_pre_1#21), partial_sum(_pre_2#22)] Aggregate Attributes [4]: [sum#23, isEmpty#24, sum#25, isEmpty#26] Results [6]: [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] -(42) ProjectExecTransformer +(47) ProjectExecTransformer Output [7]: [hash(w_state#20, i_item_id#15, 42) AS hash_partition_key#31, w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] Input [6]: [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] -(43) WholeStageCodegenTransformer (9) +(48) WholeStageCodegenTransformer (9) Input [7]: [hash_partition_key#31, w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] Arguments: false -(44) VeloxResizeBatches +(49) VeloxResizeBatches Input [7]: [hash_partition_key#31, w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] Arguments: 1024, 2147483647, 10485760 -(45) ColumnarExchange +(50) ColumnarExchange Input [7]: [hash_partition_key#31, w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] Arguments: hashpartitioning(w_state#20, i_item_id#15, 1), ENSURE_REQUIREMENTS, [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30], [plan_id=6], [shuffle_writer_type=hash] -(46) InputAdapter +(51) InputAdapter Input [6]: [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] -(47) InputIteratorTransformer +(52) InputIteratorTransformer Input [6]: [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] -(48) RegularHashAggregateExecTransformer +(53) RegularHashAggregateExecTransformer Input [6]: [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] Keys [2]: [w_state#20, i_item_id#15] Functions [2]: [sum(CASE WHEN (d_date#18 < 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END), sum(CASE WHEN (d_date#18 >= 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END)] Aggregate Attributes [2]: [sum(CASE WHEN (d_date#18 < 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END)#32, sum(CASE WHEN (d_date#18 >= 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END)#33] Results [4]: [w_state#20, i_item_id#15, sum(CASE WHEN (d_date#18 < 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END)#32 AS sales_before#34, sum(CASE WHEN (d_date#18 >= 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END)#33 AS sales_after#35] -(49) WholeStageCodegenTransformer (10) +(54) WholeStageCodegenTransformer (10) Input [4]: [w_state#20, i_item_id#15, sales_before#34, sales_after#35] Arguments: false -(50) TakeOrderedAndProjectExecTransformer +(55) TakeOrderedAndProjectExecTransformer Input [4]: [w_state#20, i_item_id#15, sales_before#34, sales_after#35] Arguments: 100, [w_state#20 ASC NULLS FIRST, i_item_id#15 ASC NULLS FIRST], [w_state#20, i_item_id#15, sales_before#34, sales_after#35], 0 -(51) VeloxColumnarToRow +(56) VeloxColumnarToRow Input [4]: [w_state#20, i_item_id#15, sales_before#34, sales_after#35] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (63) -+- ^ RegularHashAggregateExecTransformer (61) - +- ^ InputIteratorTransformer (60) - +- ColumnarExchange (58) - +- VeloxResizeBatches (57) - +- ^ FlushableHashAggregateExecTransformer (55) - +- ^ ProjectExecTransformer (54) - +- ^ FilterExecTransformer (53) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (52) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#7, [id=#1] +ObjectHashAggregate (67) ++- VeloxColumnarToRow (66) + +- ColumnarExchange (65) + +- VeloxResizeBatches (64) + +- RowToVeloxColumnar (63) + +- ObjectHashAggregate (62) + +- VeloxColumnarToRow (61) + +- ^ ProjectExecTransformer (59) + +- ^ FilterExecTransformer (58) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (57) -(52) FileSourceScanExecTransformer parquet spark_catalog.default.item +(57) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#14, i_current_price#16] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,0.99), LessThanOrEqual(i_current_price,1.49), IsNotNull(i_item_sk)] ReadSchema: struct -(53) FilterExecTransformer +(58) FilterExecTransformer Input [2]: [i_item_sk#14, i_current_price#16] Arguments: (((isnotnull(i_current_price#16) AND (i_current_price#16 >= 0.99)) AND (i_current_price#16 <= 1.49)) AND isnotnull(i_item_sk#14)) -(54) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#14, 42) AS _pre_3#36] +(59) ProjectExecTransformer +Output [1]: [i_item_sk#14] Input [2]: [i_item_sk#14, i_current_price#16] -(55) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#36] +(60) WholeStageCodegenTransformer (1) +Input [1]: [i_item_sk#14] +Arguments: false + +(61) VeloxColumnarToRow +Input [1]: [i_item_sk#14] + +(62) ObjectHashAggregate +Input [1]: [i_item_sk#14] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#36, 1019, 24988, 0, 0)] -Aggregate Attributes [1]: [buf#37] -Results [1]: [buf#38] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)] +Aggregate Attributes [1]: [buf#36] +Results [1]: [buf#37] -(56) WholeStageCodegenTransformer (1) -Input [1]: [buf#38] -Arguments: false +(63) RowToVeloxColumnar +Input [1]: [buf#37] -(57) VeloxResizeBatches -Input [1]: [buf#38] +(64) VeloxResizeBatches +Input [1]: [buf#37] Arguments: 1024, 2147483647, 10485760 -(58) ColumnarExchange -Input [1]: [buf#38] +(65) ColumnarExchange +Input [1]: [buf#37] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7], [shuffle_writer_type=hash] -(59) InputAdapter -Input [1]: [buf#38] - -(60) InputIteratorTransformer -Input [1]: [buf#38] +(66) VeloxColumnarToRow +Input [1]: [buf#37] -(61) RegularHashAggregateExecTransformer -Input [1]: [buf#38] +(67) ObjectHashAggregate +Input [1]: [buf#37] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)#39] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)#39 AS bloomFilter#40] - -(62) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#40] -Arguments: false - -(63) VeloxColumnarToRow -Input [1]: [bloomFilter#40] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)#38] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)#38 AS bloomFilter#39] Subquery:2 Hosting operator id = 1 Hosting Expression = cs_sold_date_sk#5 IN dynamicpruning#6 -ColumnarBroadcastExchange (67) -+- ^ FilterExecTransformer (65) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (64) +ColumnarBroadcastExchange (71) ++- ^ FilterExecTransformer (69) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (68) -(64) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(68) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#17, d_date#18] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-10), LessThanOrEqual(d_date,2000-04-10), IsNotNull(d_date_sk)] ReadSchema: struct -(65) FilterExecTransformer +(69) FilterExecTransformer Input [2]: [d_date_sk#17, d_date#18] Arguments: (((isnotnull(d_date#18) AND (d_date#18 >= 2000-02-10)) AND (d_date#18 <= 2000-04-10)) AND isnotnull(d_date_sk#17)) -(66) WholeStageCodegenTransformer (3) +(70) WholeStageCodegenTransformer (2) Input [2]: [d_date_sk#17, d_date#18] Arguments: false -(67) ColumnarBroadcastExchange +(71) ColumnarBroadcastExchange Input [2]: [d_date_sk#17, d_date#18] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] -Subquery:3 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (63) -+- ^ RegularHashAggregateExecTransformer (61) - +- ^ InputIteratorTransformer (60) - +- ColumnarExchange (58) - +- VeloxResizeBatches (57) - +- ^ FlushableHashAggregateExecTransformer (55) - +- ^ ProjectExecTransformer (54) - +- ^ FilterExecTransformer (53) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (52) - - diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/simplified.txt index f74238d8977..ab89da706ce 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/simplified.txt @@ -23,39 +23,32 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (4) ProjectExecTransformer [cs_order_number,cs_item_sk,cs_warehouse_sk,cs_sales_price,cs_sold_date_sk] - FilterExecTransformer [cs_warehouse_sk,cs_item_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1019, 24988, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_warehouse_sk,cs_item_sk,cs_order_number,cs_sales_price,cs_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #3 - WholeStageCodegenTransformer (3) - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1019, 24988, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [cs_warehouse_sk,cs_item_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 1019, 24988, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_warehouse_sk,cs_item_sk,cs_order_number,cs_sales_price,cs_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #3 + WholeStageCodegenTransformer (2) + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] InputIteratorTransformer InputAdapter ColumnarExchange [cr_order_number,cr_item_sk,cr_refunded_cash] #5 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/explain.txt index ec9b7208a3b..848c64d4c25 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/explain.txt @@ -1,66 +1,70 @@ == Physical Plan == -VeloxColumnarToRow (81) -+- TakeOrderedAndProjectExecTransformer (80) - +- ^ ProjectExecTransformer (78) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (77) - :- ^ ProjectExecTransformer (36) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (35) - : :- ^ ProjectExecTransformer (27) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (26) - : : :- ^ ProjectExecTransformer (19) - : : : +- ^ RegularHashAggregateExecTransformer (18) - : : : +- ^ InputIteratorTransformer (17) - : : : +- ColumnarExchange (15) - : : : +- VeloxResizeBatches (14) - : : : +- ^ ProjectExecTransformer (12) - : : : +- ^ FlushableHashAggregateExecTransformer (11) - : : : +- ^ ProjectExecTransformer (10) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (9) +VeloxColumnarToRow (85) ++- TakeOrderedAndProjectExecTransformer (84) + +- ^ ProjectExecTransformer (82) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (81) + :- ^ ProjectExecTransformer (38) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) + : :- ^ ProjectExecTransformer (29) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (28) + : : :- ^ ProjectExecTransformer (21) + : : : +- ^ RegularHashAggregateExecTransformer (20) + : : : +- ^ InputIteratorTransformer (19) + : : : +- ColumnarExchange (17) + : : : +- VeloxResizeBatches (16) + : : : +- ^ ProjectExecTransformer (14) + : : : +- ^ FlushableHashAggregateExecTransformer (13) + : : : +- ^ ProjectExecTransformer (12) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (11) : : : :- ^ FilterExecTransformer (2) : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : +- ^ InputIteratorTransformer (8) - : : : +- ColumnarBroadcastExchange (6) - : : : +- ^ FilterExecTransformer (4) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (3) - : : +- ^ InputIteratorTransformer (25) - : : +- ColumnarBroadcastExchange (23) - : : +- ^ FilterExecTransformer (21) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (20) - : +- ^ InputIteratorTransformer (34) - : +- ColumnarBroadcastExchange (32) - : +- ^ ProjectExecTransformer (30) - : +- ^ FilterExecTransformer (29) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (28) - +- ^ InputIteratorTransformer (76) - +- ColumnarBroadcastExchange (74) - +- ^ ProjectExecTransformer (72) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (71) - :- ^ ProjectExecTransformer (63) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) - : :- ^ ProjectExecTransformer (55) - : : +- ^ RegularHashAggregateExecTransformer (54) - : : +- ^ InputIteratorTransformer (53) - : : +- ColumnarExchange (51) - : : +- VeloxResizeBatches (50) - : : +- ^ ProjectExecTransformer (48) - : : +- ^ FlushableHashAggregateExecTransformer (47) - : : +- ^ ProjectExecTransformer (46) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (45) - : : :- ^ FilterExecTransformer (38) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (37) - : : +- ^ InputIteratorTransformer (44) - : : +- ColumnarBroadcastExchange (42) - : : +- ^ FilterExecTransformer (40) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (39) - : +- ^ InputIteratorTransformer (61) - : +- ColumnarBroadcastExchange (59) - : +- ^ FilterExecTransformer (57) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (56) - +- ^ InputIteratorTransformer (70) - +- ColumnarBroadcastExchange (68) - +- ^ ProjectExecTransformer (66) - +- ^ FilterExecTransformer (65) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (64) + : : : +- ^ InputIteratorTransformer (10) + : : : +- ColumnarBroadcastExchange (8) + : : : +- RowToVeloxColumnar (7) + : : : +- * Filter (6) + : : : +- VeloxColumnarToRow (5) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (3) + : : +- ^ InputIteratorTransformer (27) + : : +- ColumnarBroadcastExchange (25) + : : +- ^ FilterExecTransformer (23) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (22) + : +- ^ InputIteratorTransformer (36) + : +- ColumnarBroadcastExchange (34) + : +- ^ ProjectExecTransformer (32) + : +- ^ FilterExecTransformer (31) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (30) + +- ^ InputIteratorTransformer (80) + +- ColumnarBroadcastExchange (78) + +- ^ ProjectExecTransformer (76) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (75) + :- ^ ProjectExecTransformer (67) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (66) + : :- ^ ProjectExecTransformer (59) + : : +- ^ RegularHashAggregateExecTransformer (58) + : : +- ^ InputIteratorTransformer (57) + : : +- ColumnarExchange (55) + : : +- VeloxResizeBatches (54) + : : +- ^ ProjectExecTransformer (52) + : : +- ^ FlushableHashAggregateExecTransformer (51) + : : +- ^ ProjectExecTransformer (50) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (49) + : : :- ^ FilterExecTransformer (40) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (39) + : : +- ^ InputIteratorTransformer (48) + : : +- ColumnarBroadcastExchange (46) + : : +- RowToVeloxColumnar (45) + : : +- * Filter (44) + : : +- VeloxColumnarToRow (43) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (41) + : +- ^ InputIteratorTransformer (65) + : +- ColumnarBroadcastExchange (63) + : +- ^ FilterExecTransformer (61) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (60) + +- ^ InputIteratorTransformer (74) + +- ColumnarBroadcastExchange (72) + +- ^ ProjectExecTransformer (70) + +- ^ FilterExecTransformer (69) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (68) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -82,149 +86,155 @@ Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(4) FilterExecTransformer +(4) WholeStageCodegenTransformer (2) Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND velox_might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(d_week_seq#5, 42))) +Arguments: false -(5) WholeStageCodegenTransformer (3) +(5) VeloxColumnarToRow +Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] + +(6) Filter [codegen id : 1] +Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] +Condition : ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(d_week_seq#5, 42))) + +(7) RowToVeloxColumnar Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: false -(6) ColumnarBroadcastExchange +(8) ColumnarBroadcastExchange Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] -(7) InputAdapter +(9) InputAdapter Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -(8) InputIteratorTransformer +(10) InputIteratorTransformer Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -(9) BroadcastHashJoinExecTransformer +(11) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#3] Right keys [1]: [d_date_sk#4] Join type: Inner Join condition: None -(10) ProjectExecTransformer +(12) ProjectExecTransformer Output [9]: [ss_store_sk#1, d_week_seq#5, UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END) AS _pre_1#8, UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END) AS _pre_2#9, UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END) AS _pre_3#10, UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END) AS _pre_4#11, UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END) AS _pre_5#12, UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END) AS _pre_6#13, UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END) AS _pre_7#14] Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_week_seq#5, d_day_name#6] -(11) FlushableHashAggregateExecTransformer +(13) FlushableHashAggregateExecTransformer Input [9]: [ss_store_sk#1, d_week_seq#5, _pre_1#8, _pre_2#9, _pre_3#10, _pre_4#11, _pre_5#12, _pre_6#13, _pre_7#14] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [partial_sum(_pre_1#8), partial_sum(_pre_2#9), partial_sum(_pre_3#10), partial_sum(_pre_4#11), partial_sum(_pre_5#12), partial_sum(_pre_6#13), partial_sum(_pre_7#14)] Aggregate Attributes [7]: [sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21] Results [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(12) ProjectExecTransformer +(14) ProjectExecTransformer Output [10]: [hash(d_week_seq#5, ss_store_sk#1, 42) AS hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(13) WholeStageCodegenTransformer (4) +(15) WholeStageCodegenTransformer (3) Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: false -(14) VeloxResizeBatches +(16) VeloxResizeBatches Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: 1024, 2147483647, 10485760 -(15) ColumnarExchange +(17) ColumnarExchange Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 1), ENSURE_REQUIREMENTS, [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28], [plan_id=3], [shuffle_writer_type=hash] -(16) InputAdapter +(18) InputAdapter Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(17) InputIteratorTransformer +(19) InputIteratorTransformer Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(18) RegularHashAggregateExecTransformer +(20) RegularHashAggregateExecTransformer Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] Results [9]: [d_week_seq#5, ss_store_sk#1, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] -(19) ProjectExecTransformer +(21) ProjectExecTransformer Output [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30,17,2) AS sun_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31,17,2) AS mon_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32,17,2) AS tue_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33,17,2) AS wed_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34,17,2) AS thu_sales#41, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35,17,2) AS fri_sales#42, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36,17,2) AS sat_sales#43] Input [9]: [d_week_seq#5, ss_store_sk#1, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] -(20) FileSourceScanExecTransformer parquet spark_catalog.default.store +(22) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct -(21) FilterExecTransformer +(23) FilterExecTransformer Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: (isnotnull(s_store_sk#44) AND isnotnull(s_store_id#45)) -(22) WholeStageCodegenTransformer (5) +(24) WholeStageCodegenTransformer (4) Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: false -(23) ColumnarBroadcastExchange +(25) ColumnarBroadcastExchange Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] -(24) InputAdapter +(26) InputAdapter Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] -(25) InputIteratorTransformer +(27) InputIteratorTransformer Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] -(26) BroadcastHashJoinExecTransformer +(28) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#1] Right keys [1]: [s_store_sk#44] Join type: Inner Join condition: None -(27) ProjectExecTransformer +(29) ProjectExecTransformer Output [10]: [d_week_seq#5, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_id#45, s_store_name#46] Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_sk#44, s_store_id#45, s_store_name#46] -(28) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(30) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#47, d_week_seq#48] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_week_seq)] ReadSchema: struct -(29) FilterExecTransformer +(31) FilterExecTransformer Input [2]: [d_month_seq#47, d_week_seq#48] Arguments: (((isnotnull(d_month_seq#47) AND (d_month_seq#47 >= 1212)) AND (d_month_seq#47 <= 1223)) AND isnotnull(d_week_seq#48)) -(30) ProjectExecTransformer +(32) ProjectExecTransformer Output [1]: [d_week_seq#48] Input [2]: [d_month_seq#47, d_week_seq#48] -(31) WholeStageCodegenTransformer (6) +(33) WholeStageCodegenTransformer (5) Input [1]: [d_week_seq#48] Arguments: false -(32) ColumnarBroadcastExchange +(34) ColumnarBroadcastExchange Input [1]: [d_week_seq#48] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(33) InputAdapter +(35) InputAdapter Input [1]: [d_week_seq#48] -(34) InputIteratorTransformer +(36) InputIteratorTransformer Input [1]: [d_week_seq#48] -(35) BroadcastHashJoinExecTransformer +(37) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#5] Right keys [1]: [d_week_seq#48] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(38) ProjectExecTransformer Output [10]: [s_store_name#46 AS s_store_name1#49, d_week_seq#5 AS d_week_seq1#50, s_store_id#45 AS s_store_id1#51, sun_sales#37 AS sun_sales1#52, mon_sales#38 AS mon_sales1#53, tue_sales#39 AS tue_sales1#54, wed_sales#40 AS wed_sales1#55, thu_sales#41 AS thu_sales1#56, fri_sales#42 AS fri_sales1#57, sat_sales#43 AS sat_sales1#58] Input [11]: [d_week_seq#5, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_id#45, s_store_name#46, d_week_seq#48] -(37) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(39) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [3]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61] Batched: true Location: InMemoryFileIndex [] @@ -232,350 +242,326 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#61)] PushedFilters: [IsNotNull(ss_store_sk)] ReadSchema: struct -(38) FilterExecTransformer +(40) FilterExecTransformer Input [3]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61] Arguments: isnotnull(ss_store_sk#59) -(39) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(41) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(40) FilterExecTransformer +(42) WholeStageCodegenTransformer (7) Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -Arguments: ((isnotnull(d_date_sk#62) AND isnotnull(d_week_seq#63)) AND velox_might_contain(Subquery scalar-subquery#65, [id=#6], xxhash64(d_week_seq#63, 42))) +Arguments: false -(41) WholeStageCodegenTransformer (9) +(43) VeloxColumnarToRow +Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] + +(44) Filter [codegen id : 2] +Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] +Condition : ((isnotnull(d_date_sk#62) AND isnotnull(d_week_seq#63)) AND might_contain(Subquery scalar-subquery#65, [id=#6], xxhash64(d_week_seq#63, 42))) + +(45) RowToVeloxColumnar Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -Arguments: false -(42) ColumnarBroadcastExchange +(46) ColumnarBroadcastExchange Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] -(43) InputAdapter +(47) InputAdapter Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -(44) InputIteratorTransformer +(48) InputIteratorTransformer Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -(45) BroadcastHashJoinExecTransformer +(49) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#61] Right keys [1]: [d_date_sk#62] Join type: Inner Join condition: None -(46) ProjectExecTransformer +(50) ProjectExecTransformer Output [9]: [ss_store_sk#59, d_week_seq#63, UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END) AS _pre_8#66, UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END) AS _pre_9#67, UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END) AS _pre_10#68, UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END) AS _pre_11#69, UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END) AS _pre_12#70, UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END) AS _pre_13#71, UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END) AS _pre_14#72] Input [6]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61, d_date_sk#62, d_week_seq#63, d_day_name#64] -(47) FlushableHashAggregateExecTransformer +(51) FlushableHashAggregateExecTransformer Input [9]: [ss_store_sk#59, d_week_seq#63, _pre_8#66, _pre_9#67, _pre_10#68, _pre_11#69, _pre_12#70, _pre_13#71, _pre_14#72] Keys [2]: [d_week_seq#63, ss_store_sk#59] Functions [7]: [partial_sum(_pre_8#66), partial_sum(_pre_9#67), partial_sum(_pre_10#68), partial_sum(_pre_11#69), partial_sum(_pre_12#70), partial_sum(_pre_13#71), partial_sum(_pre_14#72)] Aggregate Attributes [7]: [sum#73, sum#74, sum#75, sum#76, sum#77, sum#78, sum#79] Results [9]: [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] -(48) ProjectExecTransformer +(52) ProjectExecTransformer Output [10]: [hash(d_week_seq#63, ss_store_sk#59, 42) AS hash_partition_key#87, d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] Input [9]: [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] -(49) WholeStageCodegenTransformer (10) +(53) WholeStageCodegenTransformer (8) Input [10]: [hash_partition_key#87, d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] Arguments: false -(50) VeloxResizeBatches +(54) VeloxResizeBatches Input [10]: [hash_partition_key#87, d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] Arguments: 1024, 2147483647, 10485760 -(51) ColumnarExchange +(55) ColumnarExchange Input [10]: [hash_partition_key#87, d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] Arguments: hashpartitioning(d_week_seq#63, ss_store_sk#59, 1), ENSURE_REQUIREMENTS, [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86], [plan_id=8], [shuffle_writer_type=hash] -(52) InputAdapter +(56) InputAdapter Input [9]: [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] -(53) InputIteratorTransformer +(57) InputIteratorTransformer Input [9]: [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] -(54) RegularHashAggregateExecTransformer +(58) RegularHashAggregateExecTransformer Input [9]: [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] Keys [2]: [d_week_seq#63, ss_store_sk#59] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))] Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] Results [9]: [d_week_seq#63, ss_store_sk#59, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] -(55) ProjectExecTransformer +(59) ProjectExecTransformer Output [9]: [d_week_seq#63, ss_store_sk#59, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30,17,2) AS sun_sales#88, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31,17,2) AS mon_sales#89, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END))#32,17,2) AS tue_sales#90, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33,17,2) AS wed_sales#91, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34,17,2) AS thu_sales#92, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35,17,2) AS fri_sales#93, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36,17,2) AS sat_sales#94] Input [9]: [d_week_seq#63, ss_store_sk#59, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] -(56) FileSourceScanExecTransformer parquet spark_catalog.default.store +(60) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [2]: [s_store_sk#95, s_store_id#96] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct -(57) FilterExecTransformer +(61) FilterExecTransformer Input [2]: [s_store_sk#95, s_store_id#96] Arguments: (isnotnull(s_store_sk#95) AND isnotnull(s_store_id#96)) -(58) WholeStageCodegenTransformer (11) +(62) WholeStageCodegenTransformer (9) Input [2]: [s_store_sk#95, s_store_id#96] Arguments: false -(59) ColumnarBroadcastExchange +(63) ColumnarBroadcastExchange Input [2]: [s_store_sk#95, s_store_id#96] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] -(60) InputAdapter +(64) InputAdapter Input [2]: [s_store_sk#95, s_store_id#96] -(61) InputIteratorTransformer +(65) InputIteratorTransformer Input [2]: [s_store_sk#95, s_store_id#96] -(62) BroadcastHashJoinExecTransformer +(66) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#59] Right keys [1]: [s_store_sk#95] Join type: Inner Join condition: None -(63) ProjectExecTransformer +(67) ProjectExecTransformer Output [9]: [d_week_seq#63, sun_sales#88, mon_sales#89, tue_sales#90, wed_sales#91, thu_sales#92, fri_sales#93, sat_sales#94, s_store_id#96] Input [11]: [d_week_seq#63, ss_store_sk#59, sun_sales#88, mon_sales#89, tue_sales#90, wed_sales#91, thu_sales#92, fri_sales#93, sat_sales#94, s_store_sk#95, s_store_id#96] -(64) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(68) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#97, d_week_seq#98] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1224), LessThanOrEqual(d_month_seq,1235), IsNotNull(d_week_seq)] ReadSchema: struct -(65) FilterExecTransformer +(69) FilterExecTransformer Input [2]: [d_month_seq#97, d_week_seq#98] Arguments: (((isnotnull(d_month_seq#97) AND (d_month_seq#97 >= 1224)) AND (d_month_seq#97 <= 1235)) AND isnotnull(d_week_seq#98)) -(66) ProjectExecTransformer +(70) ProjectExecTransformer Output [1]: [d_week_seq#98] Input [2]: [d_month_seq#97, d_week_seq#98] -(67) WholeStageCodegenTransformer (12) +(71) WholeStageCodegenTransformer (10) Input [1]: [d_week_seq#98] Arguments: false -(68) ColumnarBroadcastExchange +(72) ColumnarBroadcastExchange Input [1]: [d_week_seq#98] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -(69) InputAdapter +(73) InputAdapter Input [1]: [d_week_seq#98] -(70) InputIteratorTransformer +(74) InputIteratorTransformer Input [1]: [d_week_seq#98] -(71) BroadcastHashJoinExecTransformer +(75) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#63] Right keys [1]: [d_week_seq#98] Join type: Inner Join condition: None -(72) ProjectExecTransformer +(76) ProjectExecTransformer Output [9]: [d_week_seq#63 AS d_week_seq2#99, s_store_id#96 AS s_store_id2#100, sun_sales#88 AS sun_sales2#101, mon_sales#89 AS mon_sales2#102, tue_sales#90 AS tue_sales2#103, wed_sales#91 AS wed_sales2#104, thu_sales#92 AS thu_sales2#105, fri_sales#93 AS fri_sales2#106, sat_sales#94 AS sat_sales2#107] Input [10]: [d_week_seq#63, sun_sales#88, mon_sales#89, tue_sales#90, wed_sales#91, thu_sales#92, fri_sales#93, sat_sales#94, s_store_id#96, d_week_seq#98] -(73) WholeStageCodegenTransformer (13) +(77) WholeStageCodegenTransformer (11) Input [9]: [d_week_seq2#99, s_store_id2#100, sun_sales2#101, mon_sales2#102, tue_sales2#103, wed_sales2#104, thu_sales2#105, fri_sales2#106, sat_sales2#107] Arguments: false -(74) ColumnarBroadcastExchange +(78) ColumnarBroadcastExchange Input [9]: [d_week_seq2#99, s_store_id2#100, sun_sales2#101, mon_sales2#102, tue_sales2#103, wed_sales2#104, thu_sales2#105, fri_sales2#106, sat_sales2#107] Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [plan_id=11] -(75) InputAdapter +(79) InputAdapter Input [9]: [d_week_seq2#99, s_store_id2#100, sun_sales2#101, mon_sales2#102, tue_sales2#103, wed_sales2#104, thu_sales2#105, fri_sales2#106, sat_sales2#107] -(76) InputIteratorTransformer +(80) InputIteratorTransformer Input [9]: [d_week_seq2#99, s_store_id2#100, sun_sales2#101, mon_sales2#102, tue_sales2#103, wed_sales2#104, thu_sales2#105, fri_sales2#106, sat_sales2#107] -(77) BroadcastHashJoinExecTransformer +(81) BroadcastHashJoinExecTransformer Left keys [2]: [s_store_id1#51, d_week_seq1#50] Right keys [2]: [s_store_id2#100, (d_week_seq2#99 - 52)] Join type: Inner Join condition: None -(78) ProjectExecTransformer +(82) ProjectExecTransformer Output [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1#52 / sun_sales2#101) AS (sun_sales1 / sun_sales2)#108, (mon_sales1#53 / mon_sales2#102) AS (mon_sales1 / mon_sales2)#109, (tue_sales1#54 / tue_sales2#103) AS (tue_sales1 / tue_sales2)#110, (wed_sales1#55 / wed_sales2#104) AS (wed_sales1 / wed_sales2)#111, (thu_sales1#56 / thu_sales2#105) AS (thu_sales1 / thu_sales2)#112, (fri_sales1#57 / fri_sales2#106) AS (fri_sales1 / fri_sales2)#113, (sat_sales1#58 / sat_sales2#107) AS (sat_sales1 / sat_sales2)#114] Input [19]: [s_store_name1#49, d_week_seq1#50, s_store_id1#51, sun_sales1#52, mon_sales1#53, tue_sales1#54, wed_sales1#55, thu_sales1#56, fri_sales1#57, sat_sales1#58, d_week_seq2#99, s_store_id2#100, sun_sales2#101, mon_sales2#102, tue_sales2#103, wed_sales2#104, thu_sales2#105, fri_sales2#106, sat_sales2#107] -(79) WholeStageCodegenTransformer (14) +(83) WholeStageCodegenTransformer (12) Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#108, (mon_sales1 / mon_sales2)#109, (tue_sales1 / tue_sales2)#110, (wed_sales1 / wed_sales2)#111, (thu_sales1 / thu_sales2)#112, (fri_sales1 / fri_sales2)#113, (sat_sales1 / sat_sales2)#114] Arguments: false -(80) TakeOrderedAndProjectExecTransformer +(84) TakeOrderedAndProjectExecTransformer Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#108, (mon_sales1 / mon_sales2)#109, (tue_sales1 / tue_sales2)#110, (wed_sales1 / wed_sales2)#111, (thu_sales1 / thu_sales2)#112, (fri_sales1 / fri_sales2)#113, (sat_sales1 / sat_sales2)#114] Arguments: 100, [s_store_name1#49 ASC NULLS FIRST, s_store_id1#51 ASC NULLS FIRST, d_week_seq1#50 ASC NULLS FIRST], [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#108, (mon_sales1 / mon_sales2)#109, (tue_sales1 / tue_sales2)#110, (wed_sales1 / wed_sales2)#111, (thu_sales1 / thu_sales2)#112, (fri_sales1 / fri_sales2)#113, (sat_sales1 / sat_sales2)#114], 0 -(81) VeloxColumnarToRow +(85) VeloxColumnarToRow Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#108, (mon_sales1 / mon_sales2)#109, (tue_sales1 / tue_sales2)#110, (wed_sales1 / wed_sales2)#111, (thu_sales1 / thu_sales2)#112, (fri_sales1 / fri_sales2)#113, (sat_sales1 / sat_sales2)#114] ===== Subqueries ===== -Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (93) -+- ^ RegularHashAggregateExecTransformer (91) - +- ^ InputIteratorTransformer (90) - +- ColumnarExchange (88) - +- VeloxResizeBatches (87) - +- ^ FlushableHashAggregateExecTransformer (85) - +- ^ ProjectExecTransformer (84) - +- ^ FilterExecTransformer (83) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) +Subquery:1 Hosting operator id = 6 Hosting Expression = Subquery scalar-subquery#7, [id=#1] +ObjectHashAggregate (96) ++- VeloxColumnarToRow (95) + +- ColumnarExchange (94) + +- VeloxResizeBatches (93) + +- RowToVeloxColumnar (92) + +- ObjectHashAggregate (91) + +- VeloxColumnarToRow (90) + +- ^ ProjectExecTransformer (88) + +- ^ FilterExecTransformer (87) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (86) -(82) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(86) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#47, d_week_seq#48] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_week_seq)] ReadSchema: struct -(83) FilterExecTransformer +(87) FilterExecTransformer Input [2]: [d_month_seq#47, d_week_seq#48] Arguments: (((isnotnull(d_month_seq#47) AND (d_month_seq#47 >= 1212)) AND (d_month_seq#47 <= 1223)) AND isnotnull(d_week_seq#48)) -(84) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#48, 42) AS _pre_15#115] +(88) ProjectExecTransformer +Output [1]: [d_week_seq#48] Input [2]: [d_month_seq#47, d_week_seq#48] -(85) FlushableHashAggregateExecTransformer -Input [1]: [_pre_15#115] +(89) WholeStageCodegenTransformer (1) +Input [1]: [d_week_seq#48] +Arguments: false + +(90) VeloxColumnarToRow +Input [1]: [d_week_seq#48] + +(91) ObjectHashAggregate +Input [1]: [d_week_seq#48] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_15#115, 335, 8990, 0, 0)] -Aggregate Attributes [1]: [buf#116] -Results [1]: [buf#117] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [buf#115] +Results [1]: [buf#116] -(86) WholeStageCodegenTransformer (1) -Input [1]: [buf#117] -Arguments: false +(92) RowToVeloxColumnar +Input [1]: [buf#116] -(87) VeloxResizeBatches -Input [1]: [buf#117] +(93) VeloxResizeBatches +Input [1]: [buf#116] Arguments: 1024, 2147483647, 10485760 -(88) ColumnarExchange -Input [1]: [buf#117] +(94) ColumnarExchange +Input [1]: [buf#116] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(89) InputAdapter -Input [1]: [buf#117] +(95) VeloxColumnarToRow +Input [1]: [buf#116] -(90) InputIteratorTransformer -Input [1]: [buf#117] - -(91) RegularHashAggregateExecTransformer -Input [1]: [buf#117] +(96) ObjectHashAggregate +Input [1]: [buf#116] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#118] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#118 AS bloomFilter#119] - -(92) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#119] -Arguments: false - -(93) VeloxColumnarToRow -Input [1]: [bloomFilter#119] - -Subquery:2 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (93) -+- ^ RegularHashAggregateExecTransformer (91) - +- ^ InputIteratorTransformer (90) - +- ColumnarExchange (88) - +- VeloxResizeBatches (87) - +- ^ FlushableHashAggregateExecTransformer (85) - +- ^ ProjectExecTransformer (84) - +- ^ FilterExecTransformer (83) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) - - -Subquery:3 Hosting operator id = 40 Hosting Expression = Subquery scalar-subquery#65, [id=#6] -VeloxColumnarToRow (105) -+- ^ RegularHashAggregateExecTransformer (103) - +- ^ InputIteratorTransformer (102) - +- ColumnarExchange (100) - +- VeloxResizeBatches (99) - +- ^ FlushableHashAggregateExecTransformer (97) - +- ^ ProjectExecTransformer (96) - +- ^ FilterExecTransformer (95) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (94) - - -(94) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#117] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#117 AS bloomFilter#118] + +Subquery:2 Hosting operator id = 44 Hosting Expression = Subquery scalar-subquery#65, [id=#6] +ObjectHashAggregate (107) ++- VeloxColumnarToRow (106) + +- ColumnarExchange (105) + +- VeloxResizeBatches (104) + +- RowToVeloxColumnar (103) + +- ObjectHashAggregate (102) + +- VeloxColumnarToRow (101) + +- ^ ProjectExecTransformer (99) + +- ^ FilterExecTransformer (98) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (97) + + +(97) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#97, d_week_seq#98] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1224), LessThanOrEqual(d_month_seq,1235), IsNotNull(d_week_seq)] ReadSchema: struct -(95) FilterExecTransformer +(98) FilterExecTransformer Input [2]: [d_month_seq#97, d_week_seq#98] Arguments: (((isnotnull(d_month_seq#97) AND (d_month_seq#97 >= 1224)) AND (d_month_seq#97 <= 1235)) AND isnotnull(d_week_seq#98)) -(96) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#98, 42) AS _pre_16#120] +(99) ProjectExecTransformer +Output [1]: [d_week_seq#98] Input [2]: [d_month_seq#97, d_week_seq#98] -(97) FlushableHashAggregateExecTransformer -Input [1]: [_pre_16#120] +(100) WholeStageCodegenTransformer (6) +Input [1]: [d_week_seq#98] +Arguments: false + +(101) VeloxColumnarToRow +Input [1]: [d_week_seq#98] + +(102) ObjectHashAggregate +Input [1]: [d_week_seq#98] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_16#120, 335, 8990, 0, 0)] -Aggregate Attributes [1]: [buf#121] -Results [1]: [buf#122] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [buf#119] +Results [1]: [buf#120] -(98) WholeStageCodegenTransformer (7) -Input [1]: [buf#122] -Arguments: false +(103) RowToVeloxColumnar +Input [1]: [buf#120] -(99) VeloxResizeBatches -Input [1]: [buf#122] +(104) VeloxResizeBatches +Input [1]: [buf#120] Arguments: 1024, 2147483647, 10485760 -(100) ColumnarExchange -Input [1]: [buf#122] +(105) ColumnarExchange +Input [1]: [buf#120] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13], [shuffle_writer_type=hash] -(101) InputAdapter -Input [1]: [buf#122] - -(102) InputIteratorTransformer -Input [1]: [buf#122] +(106) VeloxColumnarToRow +Input [1]: [buf#120] -(103) RegularHashAggregateExecTransformer -Input [1]: [buf#122] +(107) ObjectHashAggregate +Input [1]: [buf#120] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)#123] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)#123 AS bloomFilter#124] - -(104) WholeStageCodegenTransformer (8) -Input [1]: [bloomFilter#124] -Arguments: false - -(105) VeloxColumnarToRow -Input [1]: [bloomFilter#124] - -Subquery:4 Hosting operator id = 39 Hosting Expression = Subquery scalar-subquery#65, [id=#6] -VeloxColumnarToRow (105) -+- ^ RegularHashAggregateExecTransformer (103) - +- ^ InputIteratorTransformer (102) - +- ColumnarExchange (100) - +- VeloxResizeBatches (99) - +- ^ FlushableHashAggregateExecTransformer (97) - +- ^ ProjectExecTransformer (96) - +- ^ FilterExecTransformer (95) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (94) - +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)#121] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)#121 AS bloomFilter#122] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/simplified.txt index e4acf654b52..dc095537641 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/simplified.txt @@ -1,6 +1,6 @@ VeloxColumnarToRow TakeOrderedAndProjectExecTransformer [s_store_name1,s_store_id1,d_week_seq1,(sun_sales1 / sun_sales2),(mon_sales1 / mon_sales2),(tue_sales1 / tue_sales2),(wed_sales1 / wed_sales2),(thu_sales1 / thu_sales2),(fri_sales1 / fri_sales2),(sat_sales1 / sat_sales2)] - WholeStageCodegenTransformer (14) + WholeStageCodegenTransformer (12) ProjectExecTransformer [s_store_name1,s_store_id1,d_week_seq1,sun_sales1,sun_sales2,mon_sales1,mon_sales2,tue_sales1,tue_sales2,wed_sales1,wed_sales2,thu_sales1,thu_sales2,fri_sales1,fri_sales2,sat_sales1,sat_sales2] BroadcastHashJoinExecTransformer [s_store_id1,d_week_seq1,s_store_id2,d_week_seq2] ProjectExecTransformer [s_store_name,d_week_seq,s_store_id,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales] @@ -13,7 +13,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] #1 VeloxResizeBatches - WholeStageCodegenTransformer (4) + WholeStageCodegenTransformer (3) ProjectExecTransformer [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,ss_store_sk,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [ss_store_sk,d_week_seq,d_day_name,ss_sales_price] @@ -23,52 +23,42 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #2 - WholeStageCodegenTransformer (3) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [d_date_sk,d_week_seq] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #3 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #1 + InputAdapter VeloxColumnarToRow WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #4 - WholeStageCodegenTransformer (5) + WholeStageCodegenTransformer (4) FilterExecTransformer [s_store_sk,s_store_id] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id,s_store_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (6) + WholeStageCodegenTransformer (5) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #6 - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [d_week_seq,s_store_id,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales] BroadcastHashJoinExecTransformer [d_week_seq,d_week_seq] ProjectExecTransformer [d_week_seq,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales,s_store_id] @@ -79,7 +69,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] #7 VeloxResizeBatches - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (8) ProjectExecTransformer [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,ss_store_sk,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [ss_store_sk,d_week_seq,d_day_name,ss_sales_price] @@ -89,45 +79,35 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (9) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (8) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (7) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [d_date_sk,d_week_seq] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #9 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (6) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #2 + InputAdapter VeloxColumnarToRow - WholeStageCodegenTransformer (8) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (7) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] + WholeStageCodegenTransformer (7) + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (9) FilterExecTransformer [s_store_sk,s_store_id] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #11 - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (10) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/explain.txt index 3f394fa8ad4..87bec61d589 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/explain.txt @@ -1,261 +1,267 @@ == Physical Plan == -VeloxColumnarToRow (343) -+- ^ SortExecTransformer (341) - +- ^ InputIteratorTransformer (340) - +- ColumnarExchange (338) - +- VeloxResizeBatches (337) - +- ^ ProjectExecTransformer (335) - +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (334) - :- ^ InputIteratorTransformer (201) - : +- ColumnarExchange (199) - : +- VeloxResizeBatches (198) - : +- ^ ProjectExecTransformer (196) - : +- ^ RegularHashAggregateExecTransformer (195) - : +- ^ InputIteratorTransformer (194) - : +- ColumnarExchange (192) - : +- VeloxResizeBatches (191) - : +- ^ ProjectExecTransformer (189) - : +- ^ FlushableHashAggregateExecTransformer (188) - : +- ^ ProjectExecTransformer (187) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (186) - : :- ^ ProjectExecTransformer (178) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (177) - : : :- ^ ProjectExecTransformer (173) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (172) - : : : :- ^ ProjectExecTransformer (165) - : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (164) - : : : : :- ^ InputIteratorTransformer (160) - : : : : : +- ColumnarExchange (158) - : : : : : +- VeloxResizeBatches (157) - : : : : : +- ^ ProjectExecTransformer (155) - : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (154) - : : : : : :- ^ InputIteratorTransformer (145) - : : : : : : +- ColumnarExchange (143) - : : : : : : +- VeloxResizeBatches (142) - : : : : : : +- ^ ProjectExecTransformer (140) - : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (139) - : : : : : : :- ^ ProjectExecTransformer (135) - : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (134) - : : : : : : : :- ^ ProjectExecTransformer (127) - : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (126) - : : : : : : : : :- ^ ProjectExecTransformer (119) - : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (118) - : : : : : : : : : :- ^ InputIteratorTransformer (114) - : : : : : : : : : : +- ColumnarExchange (112) - : : : : : : : : : : +- VeloxResizeBatches (111) - : : : : : : : : : : +- ^ ProjectExecTransformer (109) - : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (108) - : : : : : : : : : : :- ^ InputIteratorTransformer (99) - : : : : : : : : : : : +- ColumnarExchange (97) - : : : : : : : : : : : +- VeloxResizeBatches (96) - : : : : : : : : : : : +- ^ ProjectExecTransformer (94) - : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (93) - : : : : : : : : : : : :- ^ ProjectExecTransformer (89) - : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (88) - : : : : : : : : : : : : :- ^ ProjectExecTransformer (81) - : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (80) - : : : : : : : : : : : : : :- ^ InputIteratorTransformer (71) - : : : : : : : : : : : : : : +- ColumnarExchange (69) - : : : : : : : : : : : : : : +- VeloxResizeBatches (68) - : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (66) - : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (65) - : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (58) - : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) - : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (53) - : : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (52) - : : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (18) - : : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (17) - : : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (8) - : : : : : : : : : : : : : : : : : : +- ColumnarExchange (6) - : : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (5) - : : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (3) - : : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (2) - : : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (16) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (14) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (13) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (11) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (10) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (9) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (51) - : : : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (49) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (47) - : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (46) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (45) - : : : : : : : : : : : : : : : : +- ^ RegularHashAggregateExecTransformer (44) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (43) - : : : : : : : : : : : : : : : : +- ColumnarExchange (41) - : : : : : : : : : : : : : : : : +- VeloxResizeBatches (40) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (38) - : : : : : : : : : : : : : : : : +- ^ FlushableHashAggregateExecTransformer (37) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (36) - : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (35) - : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (26) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (24) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (23) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (21) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (20) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (19) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (34) - : : : : : : : : : : : : : : : : +- ColumnarExchange (32) - : : : : : : : : : : : : : : : : +- VeloxResizeBatches (31) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (29) - : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (28) - : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (27) - : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (56) - : : : : : : : : : : : : : : : +- ReusedExchange (54) - : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (64) - : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (62) - : : : : : : : : : : : : : : +- ^ FilterExecTransformer (60) - : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (59) - : : : : : : : : : : : : : +- ^ InputIteratorTransformer (79) - : : : : : : : : : : : : : +- ColumnarExchange (77) - : : : : : : : : : : : : : +- VeloxResizeBatches (76) - : : : : : : : : : : : : : +- ^ ProjectExecTransformer (74) - : : : : : : : : : : : : : +- ^ FilterExecTransformer (73) - : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (72) - : : : : : : : : : : : : +- ^ InputIteratorTransformer (87) - : : : : : : : : : : : : +- ColumnarBroadcastExchange (85) - : : : : : : : : : : : : +- ^ FilterExecTransformer (83) - : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) - : : : : : : : : : : : +- ^ InputIteratorTransformer (92) - : : : : : : : : : : : +- ReusedExchange (90) - : : : : : : : : : : +- ^ InputIteratorTransformer (107) - : : : : : : : : : : +- ColumnarExchange (105) - : : : : : : : : : : +- VeloxResizeBatches (104) - : : : : : : : : : : +- ^ ProjectExecTransformer (102) - : : : : : : : : : : +- ^ FilterExecTransformer (101) - : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (100) - : : : : : : : : : +- ^ InputIteratorTransformer (117) - : : : : : : : : : +- ReusedExchange (115) - : : : : : : : : +- ^ InputIteratorTransformer (125) - : : : : : : : : +- ColumnarBroadcastExchange (123) - : : : : : : : : +- ^ FilterExecTransformer (121) - : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (120) - : : : : : : : +- ^ InputIteratorTransformer (133) - : : : : : : : +- ColumnarBroadcastExchange (131) - : : : : : : : +- ^ FilterExecTransformer (129) - : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics (128) - : : : : : : +- ^ InputIteratorTransformer (138) - : : : : : : +- ReusedExchange (136) - : : : : : +- ^ InputIteratorTransformer (153) - : : : : : +- ColumnarExchange (151) - : : : : : +- VeloxResizeBatches (150) - : : : : : +- ^ ProjectExecTransformer (148) - : : : : : +- ^ FilterExecTransformer (147) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (146) - : : : : +- ^ InputIteratorTransformer (163) - : : : : +- ReusedExchange (161) - : : : +- ^ InputIteratorTransformer (171) - : : : +- ColumnarBroadcastExchange (169) - : : : +- ^ FilterExecTransformer (167) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.income_band (166) - : : +- ^ InputIteratorTransformer (176) - : : +- ReusedExchange (174) - : +- ^ InputIteratorTransformer (185) - : +- ColumnarBroadcastExchange (183) - : +- ^ ProjectExecTransformer (181) - : +- ^ FilterExecTransformer (180) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (179) - +- ^ InputIteratorTransformer (333) - +- ColumnarExchange (331) - +- VeloxResizeBatches (330) - +- ^ ProjectExecTransformer (328) - +- ^ RegularHashAggregateExecTransformer (327) - +- ^ InputIteratorTransformer (326) - +- ColumnarExchange (324) - +- VeloxResizeBatches (323) - +- ^ ProjectExecTransformer (321) - +- ^ FlushableHashAggregateExecTransformer (320) - +- ^ ProjectExecTransformer (319) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (318) - :- ^ ProjectExecTransformer (314) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (313) - : :- ^ ProjectExecTransformer (309) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (308) - : : :- ^ ProjectExecTransformer (304) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (303) - : : : :- ^ InputIteratorTransformer (299) - : : : : +- ColumnarExchange (297) - : : : : +- VeloxResizeBatches (296) - : : : : +- ^ ProjectExecTransformer (294) - : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (293) - : : : : :- ^ InputIteratorTransformer (289) - : : : : : +- ColumnarExchange (287) - : : : : : +- VeloxResizeBatches (286) - : : : : : +- ^ ProjectExecTransformer (284) - : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) - : : : : : :- ^ ProjectExecTransformer (279) - : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (278) - : : : : : : :- ^ ProjectExecTransformer (274) - : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (273) - : : : : : : : :- ^ ProjectExecTransformer (269) - : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (268) - : : : : : : : : :- ^ InputIteratorTransformer (264) - : : : : : : : : : +- ColumnarExchange (262) - : : : : : : : : : +- VeloxResizeBatches (261) - : : : : : : : : : +- ^ ProjectExecTransformer (259) - : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (258) - : : : : : : : : : :- ^ InputIteratorTransformer (254) - : : : : : : : : : : +- ColumnarExchange (252) - : : : : : : : : : : +- VeloxResizeBatches (251) - : : : : : : : : : : +- ^ ProjectExecTransformer (249) - : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (248) - : : : : : : : : : : :- ^ ProjectExecTransformer (244) - : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (243) - : : : : : : : : : : : :- ^ ProjectExecTransformer (239) - : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (238) - : : : : : : : : : : : : :- ^ InputIteratorTransformer (234) - : : : : : : : : : : : : : +- ColumnarExchange (232) - : : : : : : : : : : : : : +- VeloxResizeBatches (231) - : : : : : : : : : : : : : +- ^ ProjectExecTransformer (229) - : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (228) - : : : : : : : : : : : : : :- ^ ProjectExecTransformer (224) - : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (223) - : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (219) - : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (218) - : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (214) - : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (213) - : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (209) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (207) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (206) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (204) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (203) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (202) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (212) - : : : : : : : : : : : : : : : : +- ReusedExchange (210) - : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (217) - : : : : : : : : : : : : : : : +- ReusedExchange (215) - : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (222) - : : : : : : : : : : : : : : +- ReusedExchange (220) - : : : : : : : : : : : : : +- ^ InputIteratorTransformer (227) - : : : : : : : : : : : : : +- ReusedExchange (225) - : : : : : : : : : : : : +- ^ InputIteratorTransformer (237) - : : : : : : : : : : : : +- ReusedExchange (235) - : : : : : : : : : : : +- ^ InputIteratorTransformer (242) - : : : : : : : : : : : +- ReusedExchange (240) - : : : : : : : : : : +- ^ InputIteratorTransformer (247) - : : : : : : : : : : +- ReusedExchange (245) - : : : : : : : : : +- ^ InputIteratorTransformer (257) - : : : : : : : : : +- ReusedExchange (255) - : : : : : : : : +- ^ InputIteratorTransformer (267) - : : : : : : : : +- ReusedExchange (265) - : : : : : : : +- ^ InputIteratorTransformer (272) - : : : : : : : +- ReusedExchange (270) - : : : : : : +- ^ InputIteratorTransformer (277) - : : : : : : +- ReusedExchange (275) - : : : : : +- ^ InputIteratorTransformer (282) - : : : : : +- ReusedExchange (280) - : : : : +- ^ InputIteratorTransformer (292) - : : : : +- ReusedExchange (290) - : : : +- ^ InputIteratorTransformer (302) - : : : +- ReusedExchange (300) - : : +- ^ InputIteratorTransformer (307) - : : +- ReusedExchange (305) - : +- ^ InputIteratorTransformer (312) - : +- ReusedExchange (310) - +- ^ InputIteratorTransformer (317) - +- ReusedExchange (315) +VeloxColumnarToRow (353) ++- ^ SortExecTransformer (351) + +- ^ InputIteratorTransformer (350) + +- ColumnarExchange (348) + +- VeloxResizeBatches (347) + +- ^ ProjectExecTransformer (345) + +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (344) + :- ^ InputIteratorTransformer (206) + : +- ColumnarExchange (204) + : +- VeloxResizeBatches (203) + : +- ^ ProjectExecTransformer (201) + : +- ^ RegularHashAggregateExecTransformer (200) + : +- ^ InputIteratorTransformer (199) + : +- ColumnarExchange (197) + : +- VeloxResizeBatches (196) + : +- ^ ProjectExecTransformer (194) + : +- ^ FlushableHashAggregateExecTransformer (193) + : +- ^ ProjectExecTransformer (192) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (191) + : :- ^ ProjectExecTransformer (183) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (182) + : : :- ^ ProjectExecTransformer (178) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (177) + : : : :- ^ ProjectExecTransformer (170) + : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (169) + : : : : :- ^ InputIteratorTransformer (165) + : : : : : +- ColumnarExchange (163) + : : : : : +- VeloxResizeBatches (162) + : : : : : +- ^ ProjectExecTransformer (160) + : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (159) + : : : : : :- ^ InputIteratorTransformer (150) + : : : : : : +- ColumnarExchange (148) + : : : : : : +- VeloxResizeBatches (147) + : : : : : : +- ^ ProjectExecTransformer (145) + : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (144) + : : : : : : :- ^ ProjectExecTransformer (140) + : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (139) + : : : : : : : :- ^ ProjectExecTransformer (132) + : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (131) + : : : : : : : : :- ^ ProjectExecTransformer (124) + : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (123) + : : : : : : : : : :- ^ InputIteratorTransformer (119) + : : : : : : : : : : +- ColumnarExchange (117) + : : : : : : : : : : +- VeloxResizeBatches (116) + : : : : : : : : : : +- ^ ProjectExecTransformer (114) + : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (113) + : : : : : : : : : : :- ^ InputIteratorTransformer (104) + : : : : : : : : : : : +- ColumnarExchange (102) + : : : : : : : : : : : +- VeloxResizeBatches (101) + : : : : : : : : : : : +- ^ ProjectExecTransformer (99) + : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (98) + : : : : : : : : : : : :- ^ ProjectExecTransformer (94) + : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (93) + : : : : : : : : : : : : :- ^ ProjectExecTransformer (86) + : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (85) + : : : : : : : : : : : : : :- ^ InputIteratorTransformer (76) + : : : : : : : : : : : : : : +- ColumnarExchange (74) + : : : : : : : : : : : : : : +- VeloxResizeBatches (73) + : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (71) + : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (70) + : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (63) + : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) + : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (58) + : : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) + : : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (23) + : : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (22) + : : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (13) + : : : : : : : : : : : : : : : : : : +- ColumnarExchange (11) + : : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (10) + : : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (8) + : : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (7) + : : : : : : : : : : : : : : : : : : +- RowToVeloxColumnar (5) + : : : : : : : : : : : : : : : : : : +- * Filter (4) + : : : : : : : : : : : : : : : : : : +- VeloxColumnarToRow (3) + : : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (21) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (19) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (18) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (16) + : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (15) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (14) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (56) + : : : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (54) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (52) + : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (51) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (50) + : : : : : : : : : : : : : : : : +- ^ RegularHashAggregateExecTransformer (49) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (48) + : : : : : : : : : : : : : : : : +- ColumnarExchange (46) + : : : : : : : : : : : : : : : : +- VeloxResizeBatches (45) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (43) + : : : : : : : : : : : : : : : : +- ^ FlushableHashAggregateExecTransformer (42) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (41) + : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (40) + : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (31) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (29) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (28) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (26) + : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (25) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (24) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (39) + : : : : : : : : : : : : : : : : +- ColumnarExchange (37) + : : : : : : : : : : : : : : : : +- VeloxResizeBatches (36) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (34) + : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (33) + : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (32) + : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (61) + : : : : : : : : : : : : : : : +- ReusedExchange (59) + : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (69) + : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (67) + : : : : : : : : : : : : : : +- ^ FilterExecTransformer (65) + : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (64) + : : : : : : : : : : : : : +- ^ InputIteratorTransformer (84) + : : : : : : : : : : : : : +- ColumnarExchange (82) + : : : : : : : : : : : : : +- VeloxResizeBatches (81) + : : : : : : : : : : : : : +- ^ ProjectExecTransformer (79) + : : : : : : : : : : : : : +- ^ FilterExecTransformer (78) + : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (77) + : : : : : : : : : : : : +- ^ InputIteratorTransformer (92) + : : : : : : : : : : : : +- ColumnarBroadcastExchange (90) + : : : : : : : : : : : : +- ^ FilterExecTransformer (88) + : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) + : : : : : : : : : : : +- ^ InputIteratorTransformer (97) + : : : : : : : : : : : +- ReusedExchange (95) + : : : : : : : : : : +- ^ InputIteratorTransformer (112) + : : : : : : : : : : +- ColumnarExchange (110) + : : : : : : : : : : +- VeloxResizeBatches (109) + : : : : : : : : : : +- ^ ProjectExecTransformer (107) + : : : : : : : : : : +- ^ FilterExecTransformer (106) + : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (105) + : : : : : : : : : +- ^ InputIteratorTransformer (122) + : : : : : : : : : +- ReusedExchange (120) + : : : : : : : : +- ^ InputIteratorTransformer (130) + : : : : : : : : +- ColumnarBroadcastExchange (128) + : : : : : : : : +- ^ FilterExecTransformer (126) + : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (125) + : : : : : : : +- ^ InputIteratorTransformer (138) + : : : : : : : +- ColumnarBroadcastExchange (136) + : : : : : : : +- ^ FilterExecTransformer (134) + : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics (133) + : : : : : : +- ^ InputIteratorTransformer (143) + : : : : : : +- ReusedExchange (141) + : : : : : +- ^ InputIteratorTransformer (158) + : : : : : +- ColumnarExchange (156) + : : : : : +- VeloxResizeBatches (155) + : : : : : +- ^ ProjectExecTransformer (153) + : : : : : +- ^ FilterExecTransformer (152) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (151) + : : : : +- ^ InputIteratorTransformer (168) + : : : : +- ReusedExchange (166) + : : : +- ^ InputIteratorTransformer (176) + : : : +- ColumnarBroadcastExchange (174) + : : : +- ^ FilterExecTransformer (172) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.income_band (171) + : : +- ^ InputIteratorTransformer (181) + : : +- ReusedExchange (179) + : +- ^ InputIteratorTransformer (190) + : +- ColumnarBroadcastExchange (188) + : +- ^ ProjectExecTransformer (186) + : +- ^ FilterExecTransformer (185) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (184) + +- ^ InputIteratorTransformer (343) + +- ColumnarExchange (341) + +- VeloxResizeBatches (340) + +- ^ ProjectExecTransformer (338) + +- ^ RegularHashAggregateExecTransformer (337) + +- ^ InputIteratorTransformer (336) + +- ColumnarExchange (334) + +- VeloxResizeBatches (333) + +- ^ ProjectExecTransformer (331) + +- ^ FlushableHashAggregateExecTransformer (330) + +- ^ ProjectExecTransformer (329) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (328) + :- ^ ProjectExecTransformer (324) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (323) + : :- ^ ProjectExecTransformer (319) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (318) + : : :- ^ ProjectExecTransformer (314) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (313) + : : : :- ^ InputIteratorTransformer (309) + : : : : +- ColumnarExchange (307) + : : : : +- VeloxResizeBatches (306) + : : : : +- ^ ProjectExecTransformer (304) + : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (303) + : : : : :- ^ InputIteratorTransformer (299) + : : : : : +- ColumnarExchange (297) + : : : : : +- VeloxResizeBatches (296) + : : : : : +- ^ ProjectExecTransformer (294) + : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (293) + : : : : : :- ^ ProjectExecTransformer (289) + : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (288) + : : : : : : :- ^ ProjectExecTransformer (284) + : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) + : : : : : : : :- ^ ProjectExecTransformer (279) + : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (278) + : : : : : : : : :- ^ InputIteratorTransformer (274) + : : : : : : : : : +- ColumnarExchange (272) + : : : : : : : : : +- VeloxResizeBatches (271) + : : : : : : : : : +- ^ ProjectExecTransformer (269) + : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (268) + : : : : : : : : : :- ^ InputIteratorTransformer (264) + : : : : : : : : : : +- ColumnarExchange (262) + : : : : : : : : : : +- VeloxResizeBatches (261) + : : : : : : : : : : +- ^ ProjectExecTransformer (259) + : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (258) + : : : : : : : : : : :- ^ ProjectExecTransformer (254) + : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (253) + : : : : : : : : : : : :- ^ ProjectExecTransformer (249) + : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (248) + : : : : : : : : : : : : :- ^ InputIteratorTransformer (244) + : : : : : : : : : : : : : +- ColumnarExchange (242) + : : : : : : : : : : : : : +- VeloxResizeBatches (241) + : : : : : : : : : : : : : +- ^ ProjectExecTransformer (239) + : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (238) + : : : : : : : : : : : : : :- ^ ProjectExecTransformer (234) + : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (233) + : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (229) + : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (228) + : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (224) + : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (223) + : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (219) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (217) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (216) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (214) + : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (213) + : : : : : : : : : : : : : : : : : +- RowToVeloxColumnar (211) + : : : : : : : : : : : : : : : : : +- * Filter (210) + : : : : : : : : : : : : : : : : : +- VeloxColumnarToRow (209) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (207) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (222) + : : : : : : : : : : : : : : : : +- ReusedExchange (220) + : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (227) + : : : : : : : : : : : : : : : +- ReusedExchange (225) + : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (232) + : : : : : : : : : : : : : : +- ReusedExchange (230) + : : : : : : : : : : : : : +- ^ InputIteratorTransformer (237) + : : : : : : : : : : : : : +- ReusedExchange (235) + : : : : : : : : : : : : +- ^ InputIteratorTransformer (247) + : : : : : : : : : : : : +- ReusedExchange (245) + : : : : : : : : : : : +- ^ InputIteratorTransformer (252) + : : : : : : : : : : : +- ReusedExchange (250) + : : : : : : : : : : +- ^ InputIteratorTransformer (257) + : : : : : : : : : : +- ReusedExchange (255) + : : : : : : : : : +- ^ InputIteratorTransformer (267) + : : : : : : : : : +- ReusedExchange (265) + : : : : : : : : +- ^ InputIteratorTransformer (277) + : : : : : : : : +- ReusedExchange (275) + : : : : : : : +- ^ InputIteratorTransformer (282) + : : : : : : : +- ReusedExchange (280) + : : : : : : +- ^ InputIteratorTransformer (287) + : : : : : : +- ReusedExchange (285) + : : : : : +- ^ InputIteratorTransformer (292) + : : : : : +- ReusedExchange (290) + : : : : +- ^ InputIteratorTransformer (302) + : : : : +- ReusedExchange (300) + : : : +- ^ InputIteratorTransformer (312) + : : : +- ReusedExchange (310) + : : +- ^ InputIteratorTransformer (317) + : : +- ReusedExchange (315) + : +- ^ InputIteratorTransformer (322) + : +- ReusedExchange (320) + +- ^ InputIteratorTransformer (327) + +- ReusedExchange (325) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -266,829 +272,845 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#12), dynamicpruningexpression(ss_so PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (3) +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] +Arguments: false + +(3) VeloxColumnarToRow +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(4) Filter [codegen id : 1] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] +Condition : ((((((((isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#8)) AND isnotnull(ss_store_sk#6)) AND isnotnull(ss_customer_sk#2)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_promo_sk#7)) AND isnotnull(ss_hdemo_sk#4)) AND isnotnull(ss_addr_sk#5)) AND might_contain(Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#1, 42))) + +(5) RowToVeloxColumnar +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(6) InputAdapter +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(7) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -Arguments: ((((((((isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#8)) AND isnotnull(ss_store_sk#6)) AND isnotnull(ss_customer_sk#2)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_promo_sk#7)) AND isnotnull(ss_hdemo_sk#4)) AND isnotnull(ss_addr_sk#5)) AND velox_might_contain(Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#1, 42))) -(3) ProjectExecTransformer +(8) ProjectExecTransformer Output [13]: [hash(ss_item_sk#1, ss_ticket_number#8, 42) AS hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(4) WholeStageCodegenTransformer (4) +(9) WholeStageCodegenTransformer (4) Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#8, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] Arguments: (isnotnull(sr_item_sk#16) AND isnotnull(sr_ticket_number#17)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [3]: [hash(sr_item_sk#16, sr_ticket_number#17, 42) AS hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Input [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] -(12) WholeStageCodegenTransformer (5) +(17) WholeStageCodegenTransformer (5) Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: hashpartitioning(sr_item_sk#16, sr_ticket_number#17, 1), ENSURE_REQUIREMENTS, [sr_item_sk#16, sr_ticket_number#17], [plan_id=3], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [2]: [sr_item_sk#16, sr_ticket_number#17] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [2]: [sr_item_sk#16, sr_ticket_number#17] -(17) ShuffledHashJoinExecTransformer +(22) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#1, ss_ticket_number#8] Right keys [2]: [sr_item_sk#16, sr_ticket_number#17] Join type: Inner Join condition: None -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, sr_item_sk#16, sr_ticket_number#17] -(19) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(24) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_order_number)] ReadSchema: struct -(20) FilterExecTransformer +(25) FilterExecTransformer Input [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] Arguments: (isnotnull(cs_item_sk#20) AND isnotnull(cs_order_number#21)) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [4]: [hash(cs_item_sk#20, cs_order_number#21, 42) AS hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Input [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] -(22) WholeStageCodegenTransformer (6) +(27) WholeStageCodegenTransformer (6) Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: false -(23) VeloxResizeBatches +(28) VeloxResizeBatches Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: 1024, 2147483647, 10485760 -(24) ColumnarExchange +(29) ColumnarExchange Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: hashpartitioning(cs_item_sk#20, cs_order_number#21, 1), ENSURE_REQUIREMENTS, [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22], [plan_id=4], [shuffle_writer_type=hash] -(25) InputAdapter +(30) InputAdapter Input [3]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] -(26) InputIteratorTransformer +(31) InputIteratorTransformer Input [3]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] -(27) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(32) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct -(28) FilterExecTransformer +(33) FilterExecTransformer Input [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] Arguments: (isnotnull(cr_item_sk#25) AND isnotnull(cr_order_number#26)) -(29) ProjectExecTransformer +(34) ProjectExecTransformer Output [6]: [hash(cr_item_sk#25, cr_order_number#26, 42) AS hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Input [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] -(30) WholeStageCodegenTransformer (7) +(35) WholeStageCodegenTransformer (7) Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: false -(31) VeloxResizeBatches +(36) VeloxResizeBatches Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: 1024, 2147483647, 10485760 -(32) ColumnarExchange +(37) ColumnarExchange Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: hashpartitioning(cr_item_sk#25, cr_order_number#26, 1), ENSURE_REQUIREMENTS, [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29], [plan_id=5], [shuffle_writer_type=hash] -(33) InputAdapter +(38) InputAdapter Input [5]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(34) InputIteratorTransformer +(39) InputIteratorTransformer Input [5]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(35) ShuffledHashJoinExecTransformer +(40) ShuffledHashJoinExecTransformer Left keys [2]: [cs_item_sk#20, cs_order_number#21] Right keys [2]: [cr_item_sk#25, cr_order_number#26] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(41) ProjectExecTransformer Output [3]: [cs_item_sk#20, UnscaledValue(cs_ext_list_price#22) AS _pre_1#32, ((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29) AS _pre_2#33] Input [8]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(37) FlushableHashAggregateExecTransformer +(42) FlushableHashAggregateExecTransformer Input [3]: [cs_item_sk#20, _pre_1#32, _pre_2#33] Keys [1]: [cs_item_sk#20] Functions [2]: [partial_sum(_pre_1#32), partial_sum(_pre_2#33)] Aggregate Attributes [3]: [sum#34, sum#35, isEmpty#36] Results [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(38) ProjectExecTransformer +(43) ProjectExecTransformer Output [5]: [hash(cs_item_sk#20, 42) AS hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(39) WholeStageCodegenTransformer (8) +(44) WholeStageCodegenTransformer (8) Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: false -(40) VeloxResizeBatches +(45) VeloxResizeBatches Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: 1024, 2147483647, 10485760 -(41) ColumnarExchange +(46) ColumnarExchange Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: hashpartitioning(cs_item_sk#20, 1), ENSURE_REQUIREMENTS, [cs_item_sk#20, sum#37, sum#38, isEmpty#39], [plan_id=6], [shuffle_writer_type=hash] -(42) InputAdapter +(47) InputAdapter Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(43) InputIteratorTransformer +(48) InputIteratorTransformer Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(44) RegularHashAggregateExecTransformer +(49) RegularHashAggregateExecTransformer Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] Keys [1]: [cs_item_sk#20] Functions [2]: [sum(UnscaledValue(cs_ext_list_price#22)), sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))] Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] Results [3]: [cs_item_sk#20, sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] -(45) ProjectExecTransformer +(50) ProjectExecTransformer Output [3]: [cs_item_sk#20, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#22))#41,17,2) AS sale#43, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42 AS refund#44] Input [3]: [cs_item_sk#20, sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] -(46) FilterExecTransformer +(51) FilterExecTransformer Input [3]: [cs_item_sk#20, sale#43, refund#44] Arguments: ((isnotnull(sale#43) AND isnotnull(refund#44)) AND (cast(sale#43 as decimal(21,2)) > (2 * refund#44))) -(47) ProjectExecTransformer +(52) ProjectExecTransformer Output [1]: [cs_item_sk#20] Input [3]: [cs_item_sk#20, sale#43, refund#44] -(48) WholeStageCodegenTransformer (9) +(53) WholeStageCodegenTransformer (9) Input [1]: [cs_item_sk#20] Arguments: false -(49) ColumnarBroadcastExchange +(54) ColumnarBroadcastExchange Input [1]: [cs_item_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(50) InputAdapter +(55) InputAdapter Input [1]: [cs_item_sk#20] -(51) InputIteratorTransformer +(56) InputIteratorTransformer Input [1]: [cs_item_sk#20] -(52) BroadcastHashJoinExecTransformer +(57) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [cs_item_sk#20] Join type: Inner Join condition: None -(53) ProjectExecTransformer +(58) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, cs_item_sk#20] -(54) ReusedExchange [Reuses operator id: 359] +(59) ReusedExchange [Reuses operator id: 368] Output [2]: [d_date_sk#45, d_year#46] -(55) InputAdapter +(60) InputAdapter Input [2]: [d_date_sk#45, d_year#46] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [2]: [d_date_sk#45, d_year#46] -(57) BroadcastHashJoinExecTransformer +(62) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#12] Right keys [1]: [d_date_sk#45] Join type: Inner Join condition: None -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46] Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, d_date_sk#45, d_year#46] -(59) FileSourceScanExecTransformer parquet spark_catalog.default.store +(64) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_name), IsNotNull(s_zip)] ReadSchema: struct -(60) FilterExecTransformer +(65) FilterExecTransformer Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: ((isnotnull(s_store_sk#47) AND isnotnull(s_store_name#48)) AND isnotnull(s_zip#49)) -(61) WholeStageCodegenTransformer (11) +(66) WholeStageCodegenTransformer (11) Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: false -(62) ColumnarBroadcastExchange +(67) ColumnarBroadcastExchange Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] -(63) InputAdapter +(68) InputAdapter Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] -(64) InputIteratorTransformer +(69) InputIteratorTransformer Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] -(65) BroadcastHashJoinExecTransformer +(70) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#6] Right keys [1]: [s_store_sk#47] Join type: Inner Join condition: None -(66) ProjectExecTransformer +(71) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#2, 42) AS hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_sk#47, s_store_name#48, s_zip#49] -(67) WholeStageCodegenTransformer (12) +(72) WholeStageCodegenTransformer (12) Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: false -(68) VeloxResizeBatches +(73) VeloxResizeBatches Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: 1024, 2147483647, 10485760 -(69) ColumnarExchange +(74) ColumnarExchange Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: hashpartitioning(ss_customer_sk#2, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49], [plan_id=9], [shuffle_writer_type=hash] -(70) InputAdapter +(75) InputAdapter Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] -(71) InputIteratorTransformer +(76) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] -(72) FileSourceScanExecTransformer parquet spark_catalog.default.customer +(77) FileSourceScanExecTransformer parquet spark_catalog.default.customer Output [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_first_sales_date_sk), IsNotNull(c_first_shipto_date_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_hdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct -(73) FilterExecTransformer +(78) FilterExecTransformer Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: (((((isnotnull(c_customer_sk#51) AND isnotnull(c_first_sales_date_sk#56)) AND isnotnull(c_first_shipto_date_sk#55)) AND isnotnull(c_current_cdemo_sk#52)) AND isnotnull(c_current_hdemo_sk#53)) AND isnotnull(c_current_addr_sk#54)) -(74) ProjectExecTransformer +(79) ProjectExecTransformer Output [7]: [hash(c_customer_sk#51, 42) AS hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(75) WholeStageCodegenTransformer (13) +(80) WholeStageCodegenTransformer (13) Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: false -(76) VeloxResizeBatches +(81) VeloxResizeBatches Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: 1024, 2147483647, 10485760 -(77) ColumnarExchange +(82) ColumnarExchange Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: hashpartitioning(c_customer_sk#51, 1), ENSURE_REQUIREMENTS, [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56], [plan_id=10], [shuffle_writer_type=hash] -(78) InputAdapter +(83) InputAdapter Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(79) InputIteratorTransformer +(84) InputIteratorTransformer Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(80) ShuffledHashJoinExecTransformer +(85) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#2] Right keys [1]: [c_customer_sk#51] Join type: Inner Join condition: None -(81) ProjectExecTransformer +(86) ProjectExecTransformer Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Input [18]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(82) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#58, d_year#59] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct -(83) FilterExecTransformer +(88) FilterExecTransformer Input [2]: [d_date_sk#58, d_year#59] Arguments: isnotnull(d_date_sk#58) -(84) WholeStageCodegenTransformer (14) +(89) WholeStageCodegenTransformer (14) Input [2]: [d_date_sk#58, d_year#59] Arguments: false -(85) ColumnarBroadcastExchange +(90) ColumnarBroadcastExchange Input [2]: [d_date_sk#58, d_year#59] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=11] -(86) InputAdapter +(91) InputAdapter Input [2]: [d_date_sk#58, d_year#59] -(87) InputIteratorTransformer +(92) InputIteratorTransformer Input [2]: [d_date_sk#58, d_year#59] -(88) BroadcastHashJoinExecTransformer +(93) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_sales_date_sk#56] Right keys [1]: [d_date_sk#58] Join type: Inner Join condition: None -(89) ProjectExecTransformer +(94) ProjectExecTransformer Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, d_year#59] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56, d_date_sk#58, d_year#59] -(90) ReusedExchange [Reuses operator id: 85] +(95) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#60, d_year#61] -(91) InputAdapter +(96) InputAdapter Input [2]: [d_date_sk#60, d_year#61] -(92) InputIteratorTransformer +(97) InputIteratorTransformer Input [2]: [d_date_sk#60, d_year#61] -(93) BroadcastHashJoinExecTransformer +(98) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_shipto_date_sk#55] Right keys [1]: [d_date_sk#60] Join type: Inner Join condition: None -(94) ProjectExecTransformer +(99) ProjectExecTransformer Output [17]: [hash(ss_cdemo_sk#3, 42) AS hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, d_year#59, d_date_sk#60, d_year#61] -(95) WholeStageCodegenTransformer (16) +(100) WholeStageCodegenTransformer (16) Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: false -(96) VeloxResizeBatches +(101) VeloxResizeBatches Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: 1024, 2147483647, 10485760 -(97) ColumnarExchange +(102) ColumnarExchange Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: hashpartitioning(ss_cdemo_sk#3, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61], [plan_id=12], [shuffle_writer_type=hash] -(98) InputAdapter +(103) InputAdapter Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] -(99) InputIteratorTransformer +(104) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] -(100) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(105) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [2]: [cd_demo_sk#63, cd_marital_status#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status)] ReadSchema: struct -(101) FilterExecTransformer +(106) FilterExecTransformer Input [2]: [cd_demo_sk#63, cd_marital_status#64] Arguments: (isnotnull(cd_demo_sk#63) AND isnotnull(cd_marital_status#64)) -(102) ProjectExecTransformer +(107) ProjectExecTransformer Output [3]: [hash(cd_demo_sk#63, 42) AS hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(103) WholeStageCodegenTransformer (17) +(108) WholeStageCodegenTransformer (17) Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: false -(104) VeloxResizeBatches +(109) VeloxResizeBatches Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: 1024, 2147483647, 10485760 -(105) ColumnarExchange +(110) ColumnarExchange Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: hashpartitioning(cd_demo_sk#63, 1), ENSURE_REQUIREMENTS, [cd_demo_sk#63, cd_marital_status#64], [plan_id=13], [shuffle_writer_type=hash] -(106) InputAdapter +(111) InputAdapter Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(107) InputIteratorTransformer +(112) InputIteratorTransformer Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(108) ShuffledHashJoinExecTransformer +(113) ShuffledHashJoinExecTransformer Left keys [1]: [ss_cdemo_sk#3] Right keys [1]: [cd_demo_sk#63] Join type: Inner Join condition: None -(109) ProjectExecTransformer +(114) ProjectExecTransformer Output [17]: [hash(c_current_cdemo_sk#52, 42) AS hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_demo_sk#63, cd_marital_status#64] -(110) WholeStageCodegenTransformer (18) +(115) WholeStageCodegenTransformer (18) Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: false -(111) VeloxResizeBatches +(116) VeloxResizeBatches Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: 1024, 2147483647, 10485760 -(112) ColumnarExchange +(117) ColumnarExchange Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: hashpartitioning(c_current_cdemo_sk#52, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64], [plan_id=14], [shuffle_writer_type=hash] -(113) InputAdapter +(118) InputAdapter Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] -(114) InputIteratorTransformer +(119) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] -(115) ReusedExchange [Reuses operator id: 105] +(120) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#67, cd_marital_status#68] -(116) InputAdapter +(121) InputAdapter Input [2]: [cd_demo_sk#67, cd_marital_status#68] -(117) InputIteratorTransformer +(122) InputIteratorTransformer Input [2]: [cd_demo_sk#67, cd_marital_status#68] -(118) ShuffledHashJoinExecTransformer +(123) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#52] Right keys [1]: [cd_demo_sk#67] Join type: Inner Join condition: NOT (cd_marital_status#64 = cd_marital_status#68) -(119) ProjectExecTransformer +(124) ProjectExecTransformer Output [14]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [18]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64, cd_demo_sk#67, cd_marital_status#68] -(120) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(125) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [1]: [p_promo_sk#69] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_promo_sk)] ReadSchema: struct -(121) FilterExecTransformer +(126) FilterExecTransformer Input [1]: [p_promo_sk#69] Arguments: isnotnull(p_promo_sk#69) -(122) WholeStageCodegenTransformer (20) +(127) WholeStageCodegenTransformer (20) Input [1]: [p_promo_sk#69] Arguments: false -(123) ColumnarBroadcastExchange +(128) ColumnarBroadcastExchange Input [1]: [p_promo_sk#69] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -(124) InputAdapter +(129) InputAdapter Input [1]: [p_promo_sk#69] -(125) InputIteratorTransformer +(130) InputIteratorTransformer Input [1]: [p_promo_sk#69] -(126) BroadcastHashJoinExecTransformer +(131) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#7] Right keys [1]: [p_promo_sk#69] Join type: Inner Join condition: None -(127) ProjectExecTransformer +(132) ProjectExecTransformer Output [13]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, p_promo_sk#69] -(128) FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics +(133) FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics Output [2]: [hd_demo_sk#70, hd_income_band_sk#71] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_demo_sk), IsNotNull(hd_income_band_sk)] ReadSchema: struct -(129) FilterExecTransformer +(134) FilterExecTransformer Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: (isnotnull(hd_demo_sk#70) AND isnotnull(hd_income_band_sk#71)) -(130) WholeStageCodegenTransformer (21) +(135) WholeStageCodegenTransformer (21) Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: false -(131) ColumnarBroadcastExchange +(136) ColumnarBroadcastExchange Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=16] -(132) InputAdapter +(137) InputAdapter Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] -(133) InputIteratorTransformer +(138) InputIteratorTransformer Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] -(134) BroadcastHashJoinExecTransformer +(139) BroadcastHashJoinExecTransformer Left keys [1]: [ss_hdemo_sk#4] Right keys [1]: [hd_demo_sk#70] Join type: Inner Join condition: None -(135) ProjectExecTransformer +(140) ProjectExecTransformer Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71] Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_demo_sk#70, hd_income_band_sk#71] -(136) ReusedExchange [Reuses operator id: 131] +(141) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(137) InputAdapter +(142) InputAdapter Input [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(138) InputIteratorTransformer +(143) InputIteratorTransformer Input [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(139) BroadcastHashJoinExecTransformer +(144) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_hdemo_sk#53] Right keys [1]: [hd_demo_sk#72] Join type: Inner Join condition: None -(140) ProjectExecTransformer +(145) ProjectExecTransformer Output [14]: [hash(ss_addr_sk#5, 42) AS hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Input [15]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_demo_sk#72, hd_income_band_sk#73] -(141) WholeStageCodegenTransformer (23) +(146) WholeStageCodegenTransformer (23) Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: false -(142) VeloxResizeBatches +(147) VeloxResizeBatches Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: 1024, 2147483647, 10485760 -(143) ColumnarExchange +(148) ColumnarExchange Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: hashpartitioning(ss_addr_sk#5, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73], [plan_id=17], [shuffle_writer_type=hash] -(144) InputAdapter +(149) InputAdapter Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] -(145) InputIteratorTransformer +(150) InputIteratorTransformer Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] -(146) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(151) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct -(147) FilterExecTransformer +(152) FilterExecTransformer Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: isnotnull(ca_address_sk#75) -(148) ProjectExecTransformer +(153) ProjectExecTransformer Output [6]: [hash(ca_address_sk#75, 42) AS hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(149) WholeStageCodegenTransformer (24) +(154) WholeStageCodegenTransformer (24) Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: false -(150) VeloxResizeBatches +(155) VeloxResizeBatches Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: 1024, 2147483647, 10485760 -(151) ColumnarExchange +(156) ColumnarExchange Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: hashpartitioning(ca_address_sk#75, 1), ENSURE_REQUIREMENTS, [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79], [plan_id=18], [shuffle_writer_type=hash] -(152) InputAdapter +(157) InputAdapter Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(153) InputIteratorTransformer +(158) InputIteratorTransformer Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(154) ShuffledHashJoinExecTransformer +(159) ShuffledHashJoinExecTransformer Left keys [1]: [ss_addr_sk#5] Right keys [1]: [ca_address_sk#75] Join type: Inner Join condition: None -(155) ProjectExecTransformer +(160) ProjectExecTransformer Output [17]: [hash(c_current_addr_sk#54, 42) AS hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Input [18]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(156) WholeStageCodegenTransformer (25) +(161) WholeStageCodegenTransformer (25) Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: false -(157) VeloxResizeBatches +(162) VeloxResizeBatches Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: 1024, 2147483647, 10485760 -(158) ColumnarExchange +(163) ColumnarExchange Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: hashpartitioning(c_current_addr_sk#54, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79], [plan_id=19], [shuffle_writer_type=hash] -(159) InputAdapter +(164) InputAdapter Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(160) InputIteratorTransformer +(165) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(161) ReusedExchange [Reuses operator id: 151] +(166) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(162) InputAdapter +(167) InputAdapter Input [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(163) InputIteratorTransformer +(168) InputIteratorTransformer Input [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(164) ShuffledHashJoinExecTransformer +(169) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#54] Right keys [1]: [ca_address_sk#82] Join type: Inner Join condition: None -(165) ProjectExecTransformer +(170) ProjectExecTransformer Output [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(166) FileSourceScanExecTransformer parquet spark_catalog.default.income_band +(171) FileSourceScanExecTransformer parquet spark_catalog.default.income_band Output [1]: [ib_income_band_sk#87] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/income_band] PushedFilters: [IsNotNull(ib_income_band_sk)] ReadSchema: struct -(167) FilterExecTransformer +(172) FilterExecTransformer Input [1]: [ib_income_band_sk#87] Arguments: isnotnull(ib_income_band_sk#87) -(168) WholeStageCodegenTransformer (27) +(173) WholeStageCodegenTransformer (27) Input [1]: [ib_income_band_sk#87] Arguments: false -(169) ColumnarBroadcastExchange +(174) ColumnarBroadcastExchange Input [1]: [ib_income_band_sk#87] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=20] -(170) InputAdapter +(175) InputAdapter Input [1]: [ib_income_band_sk#87] -(171) InputIteratorTransformer +(176) InputIteratorTransformer Input [1]: [ib_income_band_sk#87] -(172) BroadcastHashJoinExecTransformer +(177) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#71] Right keys [1]: [ib_income_band_sk#87] Join type: Inner Join condition: None -(173) ProjectExecTransformer +(178) ProjectExecTransformer Output [18]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, ib_income_band_sk#87] -(174) ReusedExchange [Reuses operator id: 169] +(179) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#88] -(175) InputAdapter +(180) InputAdapter Input [1]: [ib_income_band_sk#88] -(176) InputIteratorTransformer +(181) InputIteratorTransformer Input [1]: [ib_income_band_sk#88] -(177) BroadcastHashJoinExecTransformer +(182) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#73] Right keys [1]: [ib_income_band_sk#88] Join type: Inner Join condition: None -(178) ProjectExecTransformer +(183) ProjectExecTransformer Output [17]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, ib_income_band_sk#88] -(179) FileSourceScanExecTransformer parquet spark_catalog.default.item +(184) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood ,floral ,indian ,medium ,purple ,spring ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)] ReadSchema: struct -(180) FilterExecTransformer +(185) FilterExecTransformer Input [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] Arguments: ((((((isnotnull(i_current_price#90) AND i_color#91 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#90 >= 64.00)) AND (i_current_price#90 <= 74.00)) AND (i_current_price#90 >= 65.00)) AND (i_current_price#90 <= 79.00)) AND isnotnull(i_item_sk#89)) -(181) ProjectExecTransformer +(186) ProjectExecTransformer Output [2]: [i_item_sk#89, i_product_name#92] Input [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] -(182) WholeStageCodegenTransformer (29) +(187) WholeStageCodegenTransformer (29) Input [2]: [i_item_sk#89, i_product_name#92] Arguments: false -(183) ColumnarBroadcastExchange +(188) ColumnarBroadcastExchange Input [2]: [i_item_sk#89, i_product_name#92] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=21] -(184) InputAdapter +(189) InputAdapter Input [2]: [i_item_sk#89, i_product_name#92] -(185) InputIteratorTransformer +(190) InputIteratorTransformer Input [2]: [i_item_sk#89, i_product_name#92] -(186) BroadcastHashJoinExecTransformer +(191) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#89] Join type: Inner Join condition: None -(187) ProjectExecTransformer +(192) ProjectExecTransformer Output [18]: [d_year#46, d_year#59, d_year#61, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92, UnscaledValue(ss_wholesale_cost#9) AS _pre_3#93, UnscaledValue(ss_list_price#10) AS _pre_4#94, UnscaledValue(ss_coupon_amt#11) AS _pre_5#95] Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92] -(188) FlushableHashAggregateExecTransformer +(193) FlushableHashAggregateExecTransformer Input [18]: [d_year#46, d_year#59, d_year#61, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92, _pre_3#93, _pre_4#94, _pre_5#95] Keys [15]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61] Functions [4]: [partial_count(1), partial_sum(_pre_3#93), partial_sum(_pre_4#94), partial_sum(_pre_5#95)] Aggregate Attributes [4]: [count#96, sum#97, sum#98, sum#99] Results [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(189) ProjectExecTransformer +(194) ProjectExecTransformer Output [20]: [hash(i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, 42) AS hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(190) WholeStageCodegenTransformer (30) +(195) WholeStageCodegenTransformer (30) Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: false -(191) VeloxResizeBatches +(196) VeloxResizeBatches Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: 1024, 2147483647, 10485760 -(192) ColumnarExchange +(197) ColumnarExchange Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: hashpartitioning(i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, 1), ENSURE_REQUIREMENTS, [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103], [plan_id=22], [shuffle_writer_type=hash] -(193) InputAdapter +(198) InputAdapter Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(194) InputIteratorTransformer +(199) InputIteratorTransformer Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(195) RegularHashAggregateExecTransformer +(200) RegularHashAggregateExecTransformer Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Keys [15]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61] Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#9)), sum(UnscaledValue(ss_list_price#10)), sum(UnscaledValue(ss_coupon_amt#11))] Aggregate Attributes [4]: [count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] Results [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] -(196) ProjectExecTransformer +(201) ProjectExecTransformer Output [18]: [hash(i_item_sk#89, s_store_name#48, s_zip#49, 42) AS hash_partition_key#109, i_product_name#92 AS product_name#110, i_item_sk#89 AS item_sk#111, s_store_name#48 AS store_name#112, s_zip#49 AS store_zip#113, ca_street_number#76 AS b_street_number#114, ca_street_name#77 AS b_streen_name#115, ca_city#78 AS b_city#116, ca_zip#79 AS b_zip#117, ca_street_number#83 AS c_street_number#118, ca_street_name#84 AS c_street_name#119, ca_city#85 AS c_city#120, ca_zip#86 AS c_zip#121, d_year#46 AS syear#122, count(1)#105 AS cnt#123, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#9))#106,17,2) AS s1#124, MakeDecimal(sum(UnscaledValue(ss_list_price#10))#107,17,2) AS s2#125, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#11))#108,17,2) AS s3#126] Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] -(197) WholeStageCodegenTransformer (31) +(202) WholeStageCodegenTransformer (31) Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: false -(198) VeloxResizeBatches +(203) VeloxResizeBatches Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: 1024, 2147483647, 10485760 -(199) ColumnarExchange +(204) ColumnarExchange Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: hashpartitioning(item_sk#111, store_name#112, store_zip#113, 1), ENSURE_REQUIREMENTS, [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126], [plan_id=23], [shuffle_writer_type=hash] -(200) InputAdapter +(205) InputAdapter Input [17]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] -(201) InputIteratorTransformer +(206) InputIteratorTransformer Input [17]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] -(202) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(207) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Batched: true Location: InMemoryFileIndex [] @@ -1096,674 +1118,673 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#138), dynamicpruningexpression(ss_s PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)] ReadSchema: struct -(203) FilterExecTransformer +(208) WholeStageCodegenTransformer (34) +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] +Arguments: false + +(209) VeloxColumnarToRow +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(210) Filter [codegen id : 2] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -Arguments: ((((((((isnotnull(ss_item_sk#127) AND isnotnull(ss_ticket_number#134)) AND isnotnull(ss_store_sk#132)) AND isnotnull(ss_customer_sk#128)) AND isnotnull(ss_cdemo_sk#129)) AND isnotnull(ss_promo_sk#133)) AND isnotnull(ss_hdemo_sk#130)) AND isnotnull(ss_addr_sk#131)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#127, 42))) +Condition : ((((((((isnotnull(ss_item_sk#127) AND isnotnull(ss_ticket_number#134)) AND isnotnull(ss_store_sk#132)) AND isnotnull(ss_customer_sk#128)) AND isnotnull(ss_cdemo_sk#129)) AND isnotnull(ss_promo_sk#133)) AND isnotnull(ss_hdemo_sk#130)) AND isnotnull(ss_addr_sk#131)) AND might_contain(ReusedSubquery Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#127, 42))) -(204) ProjectExecTransformer +(211) RowToVeloxColumnar +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(212) InputAdapter +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(213) InputIteratorTransformer +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(214) ProjectExecTransformer Output [13]: [hash(ss_item_sk#127, ss_ticket_number#134, 42) AS hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(205) WholeStageCodegenTransformer (35) +(215) WholeStageCodegenTransformer (35) Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: false -(206) VeloxResizeBatches +(216) VeloxResizeBatches Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: 1024, 2147483647, 10485760 -(207) ColumnarExchange +(217) ColumnarExchange Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: hashpartitioning(ss_item_sk#127, ss_ticket_number#134, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138], [plan_id=24], [shuffle_writer_type=hash] -(208) InputAdapter +(218) InputAdapter Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(209) InputIteratorTransformer +(219) InputIteratorTransformer Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(210) ReusedExchange [Reuses operator id: 14] +(220) ReusedExchange [Reuses operator id: 19] Output [2]: [sr_item_sk#141, sr_ticket_number#142] -(211) InputAdapter +(221) InputAdapter Input [2]: [sr_item_sk#141, sr_ticket_number#142] -(212) InputIteratorTransformer +(222) InputIteratorTransformer Input [2]: [sr_item_sk#141, sr_ticket_number#142] -(213) ShuffledHashJoinExecTransformer +(223) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#127, ss_ticket_number#134] Right keys [2]: [sr_item_sk#141, sr_ticket_number#142] Join type: Inner Join condition: None -(214) ProjectExecTransformer +(224) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [14]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, sr_item_sk#141, sr_ticket_number#142] -(215) ReusedExchange [Reuses operator id: 49] +(225) ReusedExchange [Reuses operator id: 54] Output [1]: [cs_item_sk#143] -(216) InputAdapter +(226) InputAdapter Input [1]: [cs_item_sk#143] -(217) InputIteratorTransformer +(227) InputIteratorTransformer Input [1]: [cs_item_sk#143] -(218) BroadcastHashJoinExecTransformer +(228) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#127] Right keys [1]: [cs_item_sk#143] Join type: Inner Join condition: None -(219) ProjectExecTransformer +(229) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, cs_item_sk#143] -(220) ReusedExchange [Reuses operator id: 363] +(230) ReusedExchange [Reuses operator id: 372] Output [2]: [d_date_sk#144, d_year#145] -(221) InputAdapter +(231) InputAdapter Input [2]: [d_date_sk#144, d_year#145] -(222) InputIteratorTransformer +(232) InputIteratorTransformer Input [2]: [d_date_sk#144, d_year#145] -(223) BroadcastHashJoinExecTransformer +(233) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#138] Right keys [1]: [d_date_sk#144] Join type: Inner Join condition: None -(224) ProjectExecTransformer +(234) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145] Input [13]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, d_date_sk#144, d_year#145] -(225) ReusedExchange [Reuses operator id: 62] +(235) ReusedExchange [Reuses operator id: 67] Output [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(226) InputAdapter +(236) InputAdapter Input [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(227) InputIteratorTransformer +(237) InputIteratorTransformer Input [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(228) BroadcastHashJoinExecTransformer +(238) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#132] Right keys [1]: [s_store_sk#146] Join type: Inner Join condition: None -(229) ProjectExecTransformer +(239) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#128, 42) AS hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Input [14]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_sk#146, s_store_name#147, s_zip#148] -(230) WholeStageCodegenTransformer (43) +(240) WholeStageCodegenTransformer (43) Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: false -(231) VeloxResizeBatches +(241) VeloxResizeBatches Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: 1024, 2147483647, 10485760 -(232) ColumnarExchange +(242) ColumnarExchange Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: hashpartitioning(ss_customer_sk#128, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148], [plan_id=25], [shuffle_writer_type=hash] -(233) InputAdapter +(243) InputAdapter Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] -(234) InputIteratorTransformer +(244) InputIteratorTransformer Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] -(235) ReusedExchange [Reuses operator id: 77] +(245) ReusedExchange [Reuses operator id: 82] Output [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(236) InputAdapter +(246) InputAdapter Input [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(237) InputIteratorTransformer +(247) InputIteratorTransformer Input [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(238) ShuffledHashJoinExecTransformer +(248) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#128] Right keys [1]: [c_customer_sk#150] Join type: Inner Join condition: None -(239) ProjectExecTransformer +(249) ProjectExecTransformer Output [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] Input [18]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(240) ReusedExchange [Reuses operator id: 85] +(250) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#156, d_year#157] -(241) InputAdapter +(251) InputAdapter Input [2]: [d_date_sk#156, d_year#157] -(242) InputIteratorTransformer +(252) InputIteratorTransformer Input [2]: [d_date_sk#156, d_year#157] -(243) BroadcastHashJoinExecTransformer +(253) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_sales_date_sk#155] Right keys [1]: [d_date_sk#156] Join type: Inner Join condition: None -(244) ProjectExecTransformer +(254) ProjectExecTransformer Output [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, d_year#157] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155, d_date_sk#156, d_year#157] -(245) ReusedExchange [Reuses operator id: 85] +(255) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#158, d_year#159] -(246) InputAdapter +(256) InputAdapter Input [2]: [d_date_sk#158, d_year#159] -(247) InputIteratorTransformer +(257) InputIteratorTransformer Input [2]: [d_date_sk#158, d_year#159] -(248) BroadcastHashJoinExecTransformer +(258) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_shipto_date_sk#154] Right keys [1]: [d_date_sk#158] Join type: Inner Join condition: None -(249) ProjectExecTransformer +(259) ProjectExecTransformer Output [17]: [hash(ss_cdemo_sk#129, 42) AS hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, d_year#157, d_date_sk#158, d_year#159] -(250) WholeStageCodegenTransformer (47) +(260) WholeStageCodegenTransformer (47) Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: false -(251) VeloxResizeBatches +(261) VeloxResizeBatches Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: 1024, 2147483647, 10485760 -(252) ColumnarExchange +(262) ColumnarExchange Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: hashpartitioning(ss_cdemo_sk#129, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159], [plan_id=26], [shuffle_writer_type=hash] -(253) InputAdapter +(263) InputAdapter Input [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] -(254) InputIteratorTransformer +(264) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] -(255) ReusedExchange [Reuses operator id: 105] +(265) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#161, cd_marital_status#162] -(256) InputAdapter +(266) InputAdapter Input [2]: [cd_demo_sk#161, cd_marital_status#162] -(257) InputIteratorTransformer +(267) InputIteratorTransformer Input [2]: [cd_demo_sk#161, cd_marital_status#162] -(258) ShuffledHashJoinExecTransformer +(268) ShuffledHashJoinExecTransformer Left keys [1]: [ss_cdemo_sk#129] Right keys [1]: [cd_demo_sk#161] Join type: Inner Join condition: None -(259) ProjectExecTransformer +(269) ProjectExecTransformer Output [17]: [hash(c_current_cdemo_sk#151, 42) AS hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_demo_sk#161, cd_marital_status#162] -(260) WholeStageCodegenTransformer (49) +(270) WholeStageCodegenTransformer (49) Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: false -(261) VeloxResizeBatches +(271) VeloxResizeBatches Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: 1024, 2147483647, 10485760 -(262) ColumnarExchange +(272) ColumnarExchange Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: hashpartitioning(c_current_cdemo_sk#151, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162], [plan_id=27], [shuffle_writer_type=hash] -(263) InputAdapter +(273) InputAdapter Input [16]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] -(264) InputIteratorTransformer +(274) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] -(265) ReusedExchange [Reuses operator id: 105] +(275) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#164, cd_marital_status#165] -(266) InputAdapter +(276) InputAdapter Input [2]: [cd_demo_sk#164, cd_marital_status#165] -(267) InputIteratorTransformer +(277) InputIteratorTransformer Input [2]: [cd_demo_sk#164, cd_marital_status#165] -(268) ShuffledHashJoinExecTransformer +(278) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#151] Right keys [1]: [cd_demo_sk#164] Join type: Inner Join condition: NOT (cd_marital_status#162 = cd_marital_status#165) -(269) ProjectExecTransformer +(279) ProjectExecTransformer Output [14]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [18]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162, cd_demo_sk#164, cd_marital_status#165] -(270) ReusedExchange [Reuses operator id: 123] +(280) ReusedExchange [Reuses operator id: 128] Output [1]: [p_promo_sk#166] -(271) InputAdapter +(281) InputAdapter Input [1]: [p_promo_sk#166] -(272) InputIteratorTransformer +(282) InputIteratorTransformer Input [1]: [p_promo_sk#166] -(273) BroadcastHashJoinExecTransformer +(283) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#133] Right keys [1]: [p_promo_sk#166] Join type: Inner Join condition: None -(274) ProjectExecTransformer +(284) ProjectExecTransformer Output [13]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [15]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, p_promo_sk#166] -(275) ReusedExchange [Reuses operator id: 131] +(285) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(276) InputAdapter +(286) InputAdapter Input [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(277) InputIteratorTransformer +(287) InputIteratorTransformer Input [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(278) BroadcastHashJoinExecTransformer +(288) BroadcastHashJoinExecTransformer Left keys [1]: [ss_hdemo_sk#130] Right keys [1]: [hd_demo_sk#167] Join type: Inner Join condition: None -(279) ProjectExecTransformer +(289) ProjectExecTransformer Output [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168] Input [15]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_demo_sk#167, hd_income_band_sk#168] -(280) ReusedExchange [Reuses operator id: 131] +(290) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(281) InputAdapter +(291) InputAdapter Input [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(282) InputIteratorTransformer +(292) InputIteratorTransformer Input [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(283) BroadcastHashJoinExecTransformer +(293) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_hdemo_sk#152] Right keys [1]: [hd_demo_sk#169] Join type: Inner Join condition: None -(284) ProjectExecTransformer +(294) ProjectExecTransformer Output [14]: [hash(ss_addr_sk#131, 42) AS hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Input [15]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_demo_sk#169, hd_income_band_sk#170] -(285) WholeStageCodegenTransformer (54) +(295) WholeStageCodegenTransformer (54) Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: false -(286) VeloxResizeBatches +(296) VeloxResizeBatches Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: 1024, 2147483647, 10485760 -(287) ColumnarExchange +(297) ColumnarExchange Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: hashpartitioning(ss_addr_sk#131, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170], [plan_id=28], [shuffle_writer_type=hash] -(288) InputAdapter +(298) InputAdapter Input [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] -(289) InputIteratorTransformer +(299) InputIteratorTransformer Input [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] -(290) ReusedExchange [Reuses operator id: 151] +(300) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(291) InputAdapter +(301) InputAdapter Input [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(292) InputIteratorTransformer +(302) InputIteratorTransformer Input [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(293) ShuffledHashJoinExecTransformer +(303) ShuffledHashJoinExecTransformer Left keys [1]: [ss_addr_sk#131] Right keys [1]: [ca_address_sk#172] Join type: Inner Join condition: None -(294) ProjectExecTransformer +(304) ProjectExecTransformer Output [17]: [hash(c_current_addr_sk#153, 42) AS hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Input [18]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(295) WholeStageCodegenTransformer (56) +(305) WholeStageCodegenTransformer (56) Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: false -(296) VeloxResizeBatches +(306) VeloxResizeBatches Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: 1024, 2147483647, 10485760 -(297) ColumnarExchange +(307) ColumnarExchange Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: hashpartitioning(c_current_addr_sk#153, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176], [plan_id=29], [shuffle_writer_type=hash] -(298) InputAdapter +(308) InputAdapter Input [16]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(299) InputIteratorTransformer +(309) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(300) ReusedExchange [Reuses operator id: 151] +(310) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(301) InputAdapter +(311) InputAdapter Input [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(302) InputIteratorTransformer +(312) InputIteratorTransformer Input [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(303) ShuffledHashJoinExecTransformer +(313) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#153] Right keys [1]: [ca_address_sk#178] Join type: Inner Join condition: None -(304) ProjectExecTransformer +(314) ProjectExecTransformer Output [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [21]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(305) ReusedExchange [Reuses operator id: 169] +(315) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#183] -(306) InputAdapter +(316) InputAdapter Input [1]: [ib_income_band_sk#183] -(307) InputIteratorTransformer +(317) InputIteratorTransformer Input [1]: [ib_income_band_sk#183] -(308) BroadcastHashJoinExecTransformer +(318) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#168] Right keys [1]: [ib_income_band_sk#183] Join type: Inner Join condition: None -(309) ProjectExecTransformer +(319) ProjectExecTransformer Output [18]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [20]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, ib_income_band_sk#183] -(310) ReusedExchange [Reuses operator id: 169] +(320) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#184] -(311) InputAdapter +(321) InputAdapter Input [1]: [ib_income_band_sk#184] -(312) InputIteratorTransformer +(322) InputIteratorTransformer Input [1]: [ib_income_band_sk#184] -(313) BroadcastHashJoinExecTransformer +(323) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#170] Right keys [1]: [ib_income_band_sk#184] Join type: Inner Join condition: None -(314) ProjectExecTransformer +(324) ProjectExecTransformer Output [17]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, ib_income_band_sk#184] -(315) ReusedExchange [Reuses operator id: 183] +(325) ReusedExchange [Reuses operator id: 188] Output [2]: [i_item_sk#185, i_product_name#186] -(316) InputAdapter +(326) InputAdapter Input [2]: [i_item_sk#185, i_product_name#186] -(317) InputIteratorTransformer +(327) InputIteratorTransformer Input [2]: [i_item_sk#185, i_product_name#186] -(318) BroadcastHashJoinExecTransformer +(328) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#127] Right keys [1]: [i_item_sk#185] Join type: Inner Join condition: None -(319) ProjectExecTransformer +(329) ProjectExecTransformer Output [18]: [d_year#145, d_year#157, d_year#159, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186, UnscaledValue(ss_wholesale_cost#135) AS _pre_6#187, UnscaledValue(ss_list_price#136) AS _pre_7#188, UnscaledValue(ss_coupon_amt#137) AS _pre_8#189] Input [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186] -(320) FlushableHashAggregateExecTransformer +(330) FlushableHashAggregateExecTransformer Input [18]: [d_year#145, d_year#157, d_year#159, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186, _pre_6#187, _pre_7#188, _pre_8#189] Keys [15]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159] Functions [4]: [partial_count(1), partial_sum(_pre_6#187), partial_sum(_pre_7#188), partial_sum(_pre_8#189)] Aggregate Attributes [4]: [count#96, sum#190, sum#191, sum#192] Results [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(321) ProjectExecTransformer +(331) ProjectExecTransformer Output [20]: [hash(i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, 42) AS hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(322) WholeStageCodegenTransformer (61) +(332) WholeStageCodegenTransformer (61) Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: false -(323) VeloxResizeBatches +(333) VeloxResizeBatches Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: 1024, 2147483647, 10485760 -(324) ColumnarExchange +(334) ColumnarExchange Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: hashpartitioning(i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, 1), ENSURE_REQUIREMENTS, [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195], [plan_id=30], [shuffle_writer_type=hash] -(325) InputAdapter +(335) InputAdapter Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(326) InputIteratorTransformer +(336) InputIteratorTransformer Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(327) RegularHashAggregateExecTransformer +(337) RegularHashAggregateExecTransformer Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Keys [15]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159] Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#135)), sum(UnscaledValue(ss_list_price#136)), sum(UnscaledValue(ss_coupon_amt#137))] Aggregate Attributes [4]: [count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] Results [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] -(328) ProjectExecTransformer +(338) ProjectExecTransformer Output [9]: [hash(i_item_sk#185, s_store_name#147, s_zip#148, 42) AS hash_partition_key#197, i_item_sk#185 AS item_sk#198, s_store_name#147 AS store_name#199, s_zip#148 AS store_zip#200, d_year#145 AS syear#201, count(1)#105 AS cnt#202, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#135))#106,17,2) AS s1#203, MakeDecimal(sum(UnscaledValue(ss_list_price#136))#107,17,2) AS s2#204, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#137))#108,17,2) AS s3#205] Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] -(329) WholeStageCodegenTransformer (62) +(339) WholeStageCodegenTransformer (62) Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: false -(330) VeloxResizeBatches +(340) VeloxResizeBatches Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: 1024, 2147483647, 10485760 -(331) ColumnarExchange +(341) ColumnarExchange Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: hashpartitioning(item_sk#198, store_name#199, store_zip#200, 1), ENSURE_REQUIREMENTS, [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205], [plan_id=31], [shuffle_writer_type=hash] -(332) InputAdapter +(342) InputAdapter Input [8]: [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(333) InputIteratorTransformer +(343) InputIteratorTransformer Input [8]: [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(334) ShuffledHashJoinExecTransformer +(344) ShuffledHashJoinExecTransformer Left keys [3]: [item_sk#111, store_name#112, store_zip#113] Right keys [3]: [item_sk#198, store_name#199, store_zip#200] Join type: Inner Join condition: (cnt#202 <= cnt#123) -(335) ProjectExecTransformer +(345) ProjectExecTransformer Output [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Input [25]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(336) WholeStageCodegenTransformer (63) +(346) WholeStageCodegenTransformer (63) Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: false -(337) VeloxResizeBatches +(347) VeloxResizeBatches Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: 1024, 2147483647, 10485760 -(338) ColumnarExchange +(348) ColumnarExchange Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: rangepartitioning(product_name#110 ASC NULLS FIRST, store_name#112 ASC NULLS FIRST, cnt#202 ASC NULLS FIRST, 1), ENSURE_REQUIREMENTS, [plan_id=32], [shuffle_writer_type=hash] -(339) InputAdapter +(349) InputAdapter Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] -(340) InputIteratorTransformer +(350) InputIteratorTransformer Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] -(341) SortExecTransformer +(351) SortExecTransformer Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: [product_name#110 ASC NULLS FIRST, store_name#112 ASC NULLS FIRST, cnt#202 ASC NULLS FIRST], true, 0 -(342) WholeStageCodegenTransformer (64) +(352) WholeStageCodegenTransformer (64) Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: false -(343) VeloxColumnarToRow +(353) VeloxColumnarToRow Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#14, [id=#1] -VeloxColumnarToRow (355) -+- ^ RegularHashAggregateExecTransformer (353) - +- ^ InputIteratorTransformer (352) - +- ColumnarExchange (350) - +- VeloxResizeBatches (349) - +- ^ FlushableHashAggregateExecTransformer (347) - +- ^ ProjectExecTransformer (346) - +- ^ FilterExecTransformer (345) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (344) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#14, [id=#1] +ObjectHashAggregate (364) ++- VeloxColumnarToRow (363) + +- ColumnarExchange (362) + +- VeloxResizeBatches (361) + +- RowToVeloxColumnar (360) + +- ObjectHashAggregate (359) + +- VeloxColumnarToRow (358) + +- ^ ProjectExecTransformer (356) + +- ^ FilterExecTransformer (355) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (354) -(344) FileSourceScanExecTransformer parquet spark_catalog.default.item +(354) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [3]: [i_item_sk#89, i_current_price#90, i_color#91] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood ,floral ,indian ,medium ,purple ,spring ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)] ReadSchema: struct -(345) FilterExecTransformer +(355) FilterExecTransformer Input [3]: [i_item_sk#89, i_current_price#90, i_color#91] Arguments: ((((((isnotnull(i_current_price#90) AND i_color#91 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#90 >= 64.00)) AND (i_current_price#90 <= 74.00)) AND (i_current_price#90 >= 65.00)) AND (i_current_price#90 <= 79.00)) AND isnotnull(i_item_sk#89)) -(346) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#89, 42) AS _pre_9#206] +(356) ProjectExecTransformer +Output [1]: [i_item_sk#89] Input [3]: [i_item_sk#89, i_current_price#90, i_color#91] -(347) FlushableHashAggregateExecTransformer -Input [1]: [_pre_9#206] +(357) WholeStageCodegenTransformer (1) +Input [1]: [i_item_sk#89] +Arguments: false + +(358) VeloxColumnarToRow +Input [1]: [i_item_sk#89] + +(359) ObjectHashAggregate +Input [1]: [i_item_sk#89] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_9#206, 1250, 30121, 0, 0)] -Aggregate Attributes [1]: [buf#207] -Results [1]: [buf#208] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] +Aggregate Attributes [1]: [buf#206] +Results [1]: [buf#207] -(348) WholeStageCodegenTransformer (1) -Input [1]: [buf#208] -Arguments: false +(360) RowToVeloxColumnar +Input [1]: [buf#207] -(349) VeloxResizeBatches -Input [1]: [buf#208] +(361) VeloxResizeBatches +Input [1]: [buf#207] Arguments: 1024, 2147483647, 10485760 -(350) ColumnarExchange -Input [1]: [buf#208] +(362) ColumnarExchange +Input [1]: [buf#207] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=33], [shuffle_writer_type=hash] -(351) InputAdapter -Input [1]: [buf#208] +(363) VeloxColumnarToRow +Input [1]: [buf#207] -(352) InputIteratorTransformer -Input [1]: [buf#208] - -(353) RegularHashAggregateExecTransformer -Input [1]: [buf#208] +(364) ObjectHashAggregate +Input [1]: [buf#207] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#209] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#209 AS bloomFilter#210] - -(354) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#210] -Arguments: false - -(355) VeloxColumnarToRow -Input [1]: [bloomFilter#210] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#208] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#208 AS bloomFilter#209] Subquery:2 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13 -ColumnarBroadcastExchange (359) -+- ^ FilterExecTransformer (357) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (356) +ColumnarBroadcastExchange (368) ++- ^ FilterExecTransformer (366) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (365) -(356) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(365) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#45, d_year#46] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct -(357) FilterExecTransformer +(366) FilterExecTransformer Input [2]: [d_date_sk#45, d_year#46] Arguments: ((isnotnull(d_year#46) AND (d_year#46 = 1999)) AND isnotnull(d_date_sk#45)) -(358) WholeStageCodegenTransformer (3) +(367) WholeStageCodegenTransformer (2) Input [2]: [d_date_sk#45, d_year#46] Arguments: false -(359) ColumnarBroadcastExchange +(368) ColumnarBroadcastExchange Input [2]: [d_date_sk#45, d_year#46] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=34] -Subquery:3 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#14, [id=#1] -VeloxColumnarToRow (355) -+- ^ RegularHashAggregateExecTransformer (353) - +- ^ InputIteratorTransformer (352) - +- ColumnarExchange (350) - +- VeloxResizeBatches (349) - +- ^ FlushableHashAggregateExecTransformer (347) - +- ^ ProjectExecTransformer (346) - +- ^ FilterExecTransformer (345) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (344) - +Subquery:3 Hosting operator id = 210 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] -Subquery:4 Hosting operator id = 203 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] +Subquery:4 Hosting operator id = 207 Hosting Expression = ss_sold_date_sk#138 IN dynamicpruning#139 +ColumnarBroadcastExchange (372) ++- ^ FilterExecTransformer (370) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (369) -Subquery:5 Hosting operator id = 202 Hosting Expression = ss_sold_date_sk#138 IN dynamicpruning#139 -ColumnarBroadcastExchange (363) -+- ^ FilterExecTransformer (361) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (360) - -(360) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(369) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#144, d_year#145] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct -(361) FilterExecTransformer +(370) FilterExecTransformer Input [2]: [d_date_sk#144, d_year#145] Arguments: ((isnotnull(d_year#145) AND (d_year#145 = 2000)) AND isnotnull(d_date_sk#144)) -(362) WholeStageCodegenTransformer (34) +(371) WholeStageCodegenTransformer (33) Input [2]: [d_date_sk#144, d_year#145] Arguments: false -(363) ColumnarBroadcastExchange +(372) ColumnarBroadcastExchange Input [2]: [d_date_sk#144, d_year#145] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=35] -Subquery:6 Hosting operator id = 202 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] - diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/simplified.txt index 85cf04eee0a..e87bd9f602b 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/simplified.txt @@ -87,39 +87,32 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (4) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - FilterExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #11 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_color,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (3) - FilterExecTransformer [d_year,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #11 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_color,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_color,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #10 + WholeStageCodegenTransformer (2) + FilterExecTransformer [d_year,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] InputIteratorTransformer InputAdapter ColumnarExchange [sr_item_sk,sr_ticket_number] #12 @@ -319,15 +312,21 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (35) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - FilterExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] - ReusedSubquery [bloomFilter] #2 - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #3 - ColumnarBroadcastExchange #34 - WholeStageCodegenTransformer (34) - FilterExecTransformer [d_year,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] - ReusedSubquery [bloomFilter] #2 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] + ReusedSubquery [bloomFilter] #2 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (34) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #3 + ColumnarBroadcastExchange #34 + WholeStageCodegenTransformer (33) + FilterExecTransformer [d_year,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] InputIteratorTransformer InputAdapter ReusedExchange [sr_item_sk,sr_ticket_number] #12 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/explain.txt index 88417617286..a9f6b316a2c 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/explain.txt @@ -1,60 +1,63 @@ == Physical Plan == -VeloxColumnarToRow (74) -+- TakeOrderedAndProjectExecTransformer (73) - +- ^ ProjectExecTransformer (71) - +- ^ RegularHashAggregateExecTransformer (70) - +- ^ InputIteratorTransformer (69) - +- ColumnarExchange (67) - +- VeloxResizeBatches (66) - +- ^ ProjectExecTransformer (64) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (61) - :- ^ InputIteratorTransformer (58) - : +- ColumnarBroadcastExchange (56) - : +- ^ ProjectExecTransformer (54) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (53) - : :- ^ ProjectExecTransformer (45) - : : +- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (44) - : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (32) - : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (20) - : : : : :- ^ InputIteratorTransformer (8) - : : : : : +- ColumnarExchange (6) - : : : : : +- VeloxResizeBatches (5) - : : : : : +- ^ ProjectExecTransformer (3) - : : : : : +- ^ FilterExecTransformer (2) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) - : : : : +- ^ InputIteratorTransformer (19) - : : : : +- ColumnarExchange (17) - : : : : +- VeloxResizeBatches (16) - : : : : +- ^ ProjectExecTransformer (14) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13) - : : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (9) - : : : : +- ^ InputIteratorTransformer (12) - : : : : +- ReusedExchange (10) - : : : +- ^ InputIteratorTransformer (31) - : : : +- ColumnarExchange (29) - : : : +- VeloxResizeBatches (28) - : : : +- ^ ProjectExecTransformer (26) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (25) - : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (21) - : : : +- ^ InputIteratorTransformer (24) - : : : +- ReusedExchange (22) - : : +- ^ InputIteratorTransformer (43) - : : +- ColumnarExchange (41) - : : +- VeloxResizeBatches (40) - : : +- ^ ProjectExecTransformer (38) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) - : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (33) - : : +- ^ InputIteratorTransformer (36) - : : +- ReusedExchange (34) - : +- ^ InputIteratorTransformer (52) - : +- ColumnarBroadcastExchange (50) - : +- ^ ProjectExecTransformer (48) - : +- ^ FilterExecTransformer (47) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (46) - +- ^ FilterExecTransformer (60) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (59) +VeloxColumnarToRow (79) ++- TakeOrderedAndProjectExecTransformer (78) + +- ^ ProjectExecTransformer (76) + +- ^ RegularHashAggregateExecTransformer (75) + +- ^ InputIteratorTransformer (74) + +- ColumnarExchange (72) + +- VeloxResizeBatches (71) + +- ^ ProjectExecTransformer (69) + +- ^ FlushableHashAggregateExecTransformer (68) + +- ^ ProjectExecTransformer (67) + +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (66) + :- ^ InputIteratorTransformer (63) + : +- ColumnarBroadcastExchange (61) + : +- ^ ProjectExecTransformer (59) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (58) + : :- ^ ProjectExecTransformer (50) + : : +- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (49) + : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (37) + : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (25) + : : : : :- ^ InputIteratorTransformer (13) + : : : : : +- ColumnarExchange (11) + : : : : : +- VeloxResizeBatches (10) + : : : : : +- ^ ProjectExecTransformer (8) + : : : : : +- ^ InputIteratorTransformer (7) + : : : : : +- RowToVeloxColumnar (5) + : : : : : +- * Filter (4) + : : : : : +- VeloxColumnarToRow (3) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) + : : : : +- ^ InputIteratorTransformer (24) + : : : : +- ColumnarExchange (22) + : : : : +- VeloxResizeBatches (21) + : : : : +- ^ ProjectExecTransformer (19) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) + : : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (14) + : : : : +- ^ InputIteratorTransformer (17) + : : : : +- ReusedExchange (15) + : : : +- ^ InputIteratorTransformer (36) + : : : +- ColumnarExchange (34) + : : : +- VeloxResizeBatches (33) + : : : +- ^ ProjectExecTransformer (31) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (30) + : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (26) + : : : +- ^ InputIteratorTransformer (29) + : : : +- ReusedExchange (27) + : : +- ^ InputIteratorTransformer (48) + : : +- ColumnarExchange (46) + : : +- VeloxResizeBatches (45) + : : +- ^ ProjectExecTransformer (43) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (42) + : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (38) + : : +- ^ InputIteratorTransformer (41) + : : +- ReusedExchange (39) + : +- ^ InputIteratorTransformer (57) + : +- ColumnarBroadcastExchange (55) + : +- ^ ProjectExecTransformer (53) + : +- ^ FilterExecTransformer (52) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (51) + +- ^ FilterExecTransformer (65) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (64) (1) FileSourceScanExecTransformer parquet spark_catalog.default.customer @@ -64,423 +67,424 @@ Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (2) +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Arguments: false + +(3) VeloxColumnarToRow +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(4) Filter [codegen id : 1] +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) + +(5) RowToVeloxColumnar +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(6) InputAdapter Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -Arguments: ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND velox_might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) -(3) ProjectExecTransformer +(7) InputIteratorTransformer +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(8) ProjectExecTransformer Output [4]: [hash(c_customer_sk#1, 42) AS hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(4) WholeStageCodegenTransformer (3) +(9) WholeStageCodegenTransformer (3) Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: hashpartitioning(c_customer_sk#1, 1), ENSURE_REQUIREMENTS, [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [2]: [ss_customer_sk#6, ss_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] ReadSchema: struct -(10) ReusedExchange [Reuses operator id: 91] +(15) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#9] -(11) InputAdapter +(16) InputAdapter Input [1]: [d_date_sk#9] -(12) InputIteratorTransformer +(17) InputIteratorTransformer Input [1]: [d_date_sk#9] -(13) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#7] Right keys [1]: [d_date_sk#9] Join type: Inner Join condition: None -(14) ProjectExecTransformer +(19) ProjectExecTransformer Output [2]: [hash(ss_customer_sk#6, 42) AS hash_partition_key#10, ss_customer_sk#6] Input [3]: [ss_customer_sk#6, ss_sold_date_sk#7, d_date_sk#9] -(15) WholeStageCodegenTransformer (6) +(20) WholeStageCodegenTransformer (6) Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: false -(16) VeloxResizeBatches +(21) VeloxResizeBatches Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: 1024, 2147483647, 10485760 -(17) ColumnarExchange +(22) ColumnarExchange Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: hashpartitioning(ss_customer_sk#6, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#6], [plan_id=3], [shuffle_writer_type=hash] -(18) InputAdapter +(23) InputAdapter Input [1]: [ss_customer_sk#6] -(19) InputIteratorTransformer +(24) InputIteratorTransformer Input [1]: [ss_customer_sk#6] -(20) ShuffledHashJoinExecTransformer +(25) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [ss_customer_sk#6] Join type: LeftSemi Join condition: None -(21) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(26) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [2]: [ws_bill_customer_sk#11, ws_sold_date_sk#12] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ws_sold_date_sk#12), dynamicpruningexpression(ws_sold_date_sk#12 IN dynamicpruning#8)] ReadSchema: struct -(22) ReusedExchange [Reuses operator id: 91] +(27) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#13] -(23) InputAdapter +(28) InputAdapter Input [1]: [d_date_sk#13] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [1]: [d_date_sk#13] -(25) BroadcastHashJoinExecTransformer +(30) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#12] Right keys [1]: [d_date_sk#13] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [2]: [hash(ws_bill_customer_sk#11, 42) AS hash_partition_key#14, ws_bill_customer_sk#11] Input [3]: [ws_bill_customer_sk#11, ws_sold_date_sk#12, d_date_sk#13] -(27) WholeStageCodegenTransformer (9) +(32) WholeStageCodegenTransformer (9) Input [2]: [hash_partition_key#14, ws_bill_customer_sk#11] Arguments: false -(28) VeloxResizeBatches +(33) VeloxResizeBatches Input [2]: [hash_partition_key#14, ws_bill_customer_sk#11] Arguments: 1024, 2147483647, 10485760 -(29) ColumnarExchange +(34) ColumnarExchange Input [2]: [hash_partition_key#14, ws_bill_customer_sk#11] Arguments: hashpartitioning(ws_bill_customer_sk#11, 1), ENSURE_REQUIREMENTS, [ws_bill_customer_sk#11], [plan_id=4], [shuffle_writer_type=hash] -(30) InputAdapter +(35) InputAdapter Input [1]: [ws_bill_customer_sk#11] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [1]: [ws_bill_customer_sk#11] -(32) ShuffledHashJoinExecTransformer +(37) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [ws_bill_customer_sk#11] Join type: LeftAnti Join condition: None -(33) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(38) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(cs_sold_date_sk#16), dynamicpruningexpression(cs_sold_date_sk#16 IN dynamicpruning#8)] ReadSchema: struct -(34) ReusedExchange [Reuses operator id: 91] +(39) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#17] -(35) InputAdapter +(40) InputAdapter Input [1]: [d_date_sk#17] -(36) InputIteratorTransformer +(41) InputIteratorTransformer Input [1]: [d_date_sk#17] -(37) BroadcastHashJoinExecTransformer +(42) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#16] Right keys [1]: [d_date_sk#17] Join type: Inner Join condition: None -(38) ProjectExecTransformer +(43) ProjectExecTransformer Output [2]: [hash(cs_ship_customer_sk#15, 42) AS hash_partition_key#18, cs_ship_customer_sk#15] Input [3]: [cs_ship_customer_sk#15, cs_sold_date_sk#16, d_date_sk#17] -(39) WholeStageCodegenTransformer (12) +(44) WholeStageCodegenTransformer (12) Input [2]: [hash_partition_key#18, cs_ship_customer_sk#15] Arguments: false -(40) VeloxResizeBatches +(45) VeloxResizeBatches Input [2]: [hash_partition_key#18, cs_ship_customer_sk#15] Arguments: 1024, 2147483647, 10485760 -(41) ColumnarExchange +(46) ColumnarExchange Input [2]: [hash_partition_key#18, cs_ship_customer_sk#15] Arguments: hashpartitioning(cs_ship_customer_sk#15, 1), ENSURE_REQUIREMENTS, [cs_ship_customer_sk#15], [plan_id=5], [shuffle_writer_type=hash] -(42) InputAdapter +(47) InputAdapter Input [1]: [cs_ship_customer_sk#15] -(43) InputIteratorTransformer +(48) InputIteratorTransformer Input [1]: [cs_ship_customer_sk#15] -(44) ShuffledHashJoinExecTransformer +(49) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [cs_ship_customer_sk#15] Join type: LeftAnti Join condition: None -(45) ProjectExecTransformer +(50) ProjectExecTransformer Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(46) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(51) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#19, ca_state#20] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [GA,KY,NM]), IsNotNull(ca_address_sk)] ReadSchema: struct -(47) FilterExecTransformer +(52) FilterExecTransformer Input [2]: [ca_address_sk#19, ca_state#20] Arguments: (ca_state#20 IN (KY,GA,NM) AND isnotnull(ca_address_sk#19)) -(48) ProjectExecTransformer +(53) ProjectExecTransformer Output [1]: [ca_address_sk#19] Input [2]: [ca_address_sk#19, ca_state#20] -(49) WholeStageCodegenTransformer (13) +(54) WholeStageCodegenTransformer (13) Input [1]: [ca_address_sk#19] Arguments: false -(50) ColumnarBroadcastExchange +(55) ColumnarBroadcastExchange Input [1]: [ca_address_sk#19] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(51) InputAdapter +(56) InputAdapter Input [1]: [ca_address_sk#19] -(52) InputIteratorTransformer +(57) InputIteratorTransformer Input [1]: [ca_address_sk#19] -(53) BroadcastHashJoinExecTransformer +(58) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#3] Right keys [1]: [ca_address_sk#19] Join type: Inner Join condition: None -(54) ProjectExecTransformer +(59) ProjectExecTransformer Output [1]: [c_current_cdemo_sk#2] Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#19] -(55) WholeStageCodegenTransformer (14) +(60) WholeStageCodegenTransformer (14) Input [1]: [c_current_cdemo_sk#2] Arguments: false -(56) ColumnarBroadcastExchange +(61) ColumnarBroadcastExchange Input [1]: [c_current_cdemo_sk#2] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(57) InputAdapter +(62) InputAdapter Input [1]: [c_current_cdemo_sk#2] -(58) InputIteratorTransformer +(63) InputIteratorTransformer Input [1]: [c_current_cdemo_sk#2] -(59) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(64) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [6]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct -(60) FilterExecTransformer +(65) FilterExecTransformer Input [6]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Arguments: isnotnull(cd_demo_sk#21) -(61) BroadcastHashJoinExecTransformer +(66) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#2] Right keys [1]: [cd_demo_sk#21] Join type: Inner Join condition: None -(62) ProjectExecTransformer +(67) ProjectExecTransformer Output [5]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Input [7]: [c_current_cdemo_sk#2, cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] -(63) FlushableHashAggregateExecTransformer +(68) FlushableHashAggregateExecTransformer Input [5]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Keys [5]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Functions [1]: [partial_count(1)] Aggregate Attributes [1]: [count#27] Results [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] -(64) ProjectExecTransformer +(69) ProjectExecTransformer Output [7]: [hash(cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, 42) AS hash_partition_key#29, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] Input [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] -(65) WholeStageCodegenTransformer (15) +(70) WholeStageCodegenTransformer (15) Input [7]: [hash_partition_key#29, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] Arguments: false -(66) VeloxResizeBatches +(71) VeloxResizeBatches Input [7]: [hash_partition_key#29, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] Arguments: 1024, 2147483647, 10485760 -(67) ColumnarExchange +(72) ColumnarExchange Input [7]: [hash_partition_key#29, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] Arguments: hashpartitioning(cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, 1), ENSURE_REQUIREMENTS, [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28], [plan_id=8], [shuffle_writer_type=hash] -(68) InputAdapter +(73) InputAdapter Input [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] -(69) InputIteratorTransformer +(74) InputIteratorTransformer Input [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] -(70) RegularHashAggregateExecTransformer +(75) RegularHashAggregateExecTransformer Input [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] Keys [5]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Functions [1]: [count(1)] Aggregate Attributes [1]: [count(1)#30] Results [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count(1)#30] -(71) ProjectExecTransformer +(76) ProjectExecTransformer Output [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, count(1)#30 AS cnt1#31, cd_purchase_estimate#25, count(1)#30 AS cnt2#32, cd_credit_rating#26, count(1)#30 AS cnt3#33] Input [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count(1)#30] -(72) WholeStageCodegenTransformer (16) +(77) WholeStageCodegenTransformer (16) Input [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#31, cd_purchase_estimate#25, cnt2#32, cd_credit_rating#26, cnt3#33] Arguments: false -(73) TakeOrderedAndProjectExecTransformer +(78) TakeOrderedAndProjectExecTransformer Input [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#31, cd_purchase_estimate#25, cnt2#32, cd_credit_rating#26, cnt3#33] Arguments: 100, [cd_gender#22 ASC NULLS FIRST, cd_marital_status#23 ASC NULLS FIRST, cd_education_status#24 ASC NULLS FIRST, cd_purchase_estimate#25 ASC NULLS FIRST, cd_credit_rating#26 ASC NULLS FIRST], [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#31, cd_purchase_estimate#25, cnt2#32, cd_credit_rating#26, cnt3#33], 0 -(74) VeloxColumnarToRow +(79) VeloxColumnarToRow Input [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#31, cd_purchase_estimate#25, cnt2#32, cd_credit_rating#26, cnt3#33] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#4, [id=#1] +ObjectHashAggregate (90) ++- VeloxColumnarToRow (89) + +- ColumnarExchange (88) + +- VeloxResizeBatches (87) + +- RowToVeloxColumnar (86) + +- ObjectHashAggregate (85) + +- VeloxColumnarToRow (84) + +- ^ ProjectExecTransformer (82) + +- ^ FilterExecTransformer (81) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (80) -(75) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(80) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#19, ca_state#20] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [GA,KY,NM]), IsNotNull(ca_address_sk)] ReadSchema: struct -(76) FilterExecTransformer +(81) FilterExecTransformer Input [2]: [ca_address_sk#19, ca_state#20] Arguments: (ca_state#20 IN (KY,GA,NM) AND isnotnull(ca_address_sk#19)) -(77) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#19, 42) AS _pre_1#34] +(82) ProjectExecTransformer +Output [1]: [ca_address_sk#19] Input [2]: [ca_address_sk#19, ca_state#20] -(78) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#34] +(83) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#19] +Arguments: false + +(84) VeloxColumnarToRow +Input [1]: [ca_address_sk#19] + +(85) ObjectHashAggregate +Input [1]: [ca_address_sk#19] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#34, 55556, 899992, 0, 0)] -Aggregate Attributes [1]: [buf#35] -Results [1]: [buf#36] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)] +Aggregate Attributes [1]: [buf#34] +Results [1]: [buf#35] -(79) WholeStageCodegenTransformer (1) -Input [1]: [buf#36] -Arguments: false +(86) RowToVeloxColumnar +Input [1]: [buf#35] -(80) VeloxResizeBatches -Input [1]: [buf#36] +(87) VeloxResizeBatches +Input [1]: [buf#35] Arguments: 1024, 2147483647, 10485760 -(81) ColumnarExchange -Input [1]: [buf#36] +(88) ColumnarExchange +Input [1]: [buf#35] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9], [shuffle_writer_type=hash] -(82) InputAdapter -Input [1]: [buf#36] +(89) VeloxColumnarToRow +Input [1]: [buf#35] -(83) InputIteratorTransformer -Input [1]: [buf#36] - -(84) RegularHashAggregateExecTransformer -Input [1]: [buf#36] +(90) ObjectHashAggregate +Input [1]: [buf#35] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)#37] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)#37 AS bloomFilter#38] - -(85) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#38] -Arguments: false - -(86) VeloxColumnarToRow -Input [1]: [bloomFilter#38] - -Subquery:2 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) - +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)#36] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)#36 AS bloomFilter#37] -Subquery:3 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (91) -+- ^ ProjectExecTransformer (89) - +- ^ FilterExecTransformer (88) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) +Subquery:2 Hosting operator id = 14 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 +ColumnarBroadcastExchange (95) ++- ^ ProjectExecTransformer (93) + +- ^ FilterExecTransformer (92) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (91) -(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [3]: [d_date_sk#9, d_year#39, d_moy#40] +(91) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [3]: [d_date_sk#9, d_year#38, d_moy#39] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,6), IsNotNull(d_date_sk)] ReadSchema: struct -(88) FilterExecTransformer -Input [3]: [d_date_sk#9, d_year#39, d_moy#40] -Arguments: (((((isnotnull(d_year#39) AND isnotnull(d_moy#40)) AND (d_year#39 = 2001)) AND (d_moy#40 >= 4)) AND (d_moy#40 <= 6)) AND isnotnull(d_date_sk#9)) +(92) FilterExecTransformer +Input [3]: [d_date_sk#9, d_year#38, d_moy#39] +Arguments: (((((isnotnull(d_year#38) AND isnotnull(d_moy#39)) AND (d_year#38 = 2001)) AND (d_moy#39 >= 4)) AND (d_moy#39 <= 6)) AND isnotnull(d_date_sk#9)) -(89) ProjectExecTransformer +(93) ProjectExecTransformer Output [1]: [d_date_sk#9] -Input [3]: [d_date_sk#9, d_year#39, d_moy#40] +Input [3]: [d_date_sk#9, d_year#38, d_moy#39] -(90) WholeStageCodegenTransformer (4) +(94) WholeStageCodegenTransformer (4) Input [1]: [d_date_sk#9] Arguments: false -(91) ColumnarBroadcastExchange +(95) ColumnarBroadcastExchange Input [1]: [d_date_sk#9] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:4 Hosting operator id = 21 Hosting Expression = ws_sold_date_sk#12 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 26 Hosting Expression = ws_sold_date_sk#12 IN dynamicpruning#8 -Subquery:5 Hosting operator id = 33 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#8 +Subquery:4 Hosting operator id = 38 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#8 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/simplified.txt index 10297e2f0a4..eafdfcb5869 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/simplified.txt @@ -28,34 +28,27 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (3) ProjectExecTransformer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - FilterExecTransformer [c_current_addr_sk,c_current_cdemo_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 55556, 899992, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 55556, 899992, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [c_current_addr_sk,c_current_cdemo_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 55556, 899992, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_state,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] InputIteratorTransformer InputAdapter ColumnarExchange [ss_customer_sk] #5 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/explain.txt index 74d759c2670..24af8b1d00e 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/explain.txt @@ -1,139 +1,148 @@ == Physical Plan == -VeloxColumnarToRow (177) -+- TakeOrderedAndProjectExecTransformer (176) - +- ^ ProjectExecTransformer (174) - +- ^ RegularHashAggregateExecTransformer (173) - +- ^ InputIteratorTransformer (172) - +- ColumnarExchange (170) - +- VeloxResizeBatches (169) - +- ^ ProjectExecTransformer (167) - +- ^ FlushableHashAggregateExecTransformer (166) - +- ^ ExpandExecTransformer (165) - +- ^ InputIteratorTransformer (164) - +- ColumnarUnion (162) - :- ^ ProjectExecTransformer (58) - : +- ^ RegularHashAggregateExecTransformer (57) - : +- ^ InputIteratorTransformer (56) - : +- ColumnarExchange (54) - : +- VeloxResizeBatches (53) - : +- ^ ProjectExecTransformer (51) - : +- ^ FlushableHashAggregateExecTransformer (50) - : +- ^ ProjectExecTransformer (49) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (48) - : :- ^ ProjectExecTransformer (41) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (40) - : : :- ^ ProjectExecTransformer (36) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (35) - : : : :- ^ ProjectExecTransformer (27) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (26) - : : : : :- ^ ProjectExecTransformer (18) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (17) - : : : : : :- ^ InputIteratorTransformer (8) - : : : : : : +- ColumnarExchange (6) - : : : : : : +- VeloxResizeBatches (5) - : : : : : : +- ^ ProjectExecTransformer (3) - : : : : : : +- ^ FilterExecTransformer (2) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : : : +- ^ InputIteratorTransformer (16) - : : : : : +- ColumnarExchange (14) - : : : : : +- VeloxResizeBatches (13) - : : : : : +- ^ ProjectExecTransformer (11) - : : : : : +- ^ FilterExecTransformer (10) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (9) - : : : : +- ^ InputIteratorTransformer (25) - : : : : +- ColumnarBroadcastExchange (23) - : : : : +- ^ ProjectExecTransformer (21) - : : : : +- ^ FilterExecTransformer (20) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (19) - : : : +- ^ InputIteratorTransformer (34) - : : : +- ColumnarBroadcastExchange (32) - : : : +- ^ ProjectExecTransformer (30) - : : : +- ^ FilterExecTransformer (29) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (28) - : : +- ^ InputIteratorTransformer (39) - : : +- ReusedExchange (37) - : +- ^ InputIteratorTransformer (47) - : +- ColumnarBroadcastExchange (45) - : +- ^ FilterExecTransformer (43) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (42) - :- ^ ProjectExecTransformer (109) - : +- ^ RegularHashAggregateExecTransformer (108) - : +- ^ InputIteratorTransformer (107) - : +- ColumnarExchange (105) - : +- VeloxResizeBatches (104) - : +- ^ ProjectExecTransformer (102) - : +- ^ FlushableHashAggregateExecTransformer (101) - : +- ^ ProjectExecTransformer (100) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (99) - : :- ^ ProjectExecTransformer (92) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (91) - : : :- ^ ProjectExecTransformer (87) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (86) - : : : :- ^ ProjectExecTransformer (82) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (81) - : : : : :- ^ ProjectExecTransformer (77) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (76) - : : : : : :- ^ InputIteratorTransformer (67) - : : : : : : +- ColumnarExchange (65) - : : : : : : +- VeloxResizeBatches (64) - : : : : : : +- ^ ProjectExecTransformer (62) - : : : : : : +- ^ FilterExecTransformer (61) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (60) - : : : : : +- ^ InputIteratorTransformer (75) - : : : : : +- ColumnarExchange (73) - : : : : : +- VeloxResizeBatches (72) - : : : : : +- ^ ProjectExecTransformer (70) - : : : : : +- ^ FilterExecTransformer (69) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (68) - : : : : +- ^ InputIteratorTransformer (80) - : : : : +- ReusedExchange (78) - : : : +- ^ InputIteratorTransformer (85) - : : : +- ReusedExchange (83) - : : +- ^ InputIteratorTransformer (90) - : : +- ReusedExchange (88) - : +- ^ InputIteratorTransformer (98) - : +- ColumnarBroadcastExchange (96) - : +- ^ FilterExecTransformer (94) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page (93) - +- ^ ProjectExecTransformer (160) - +- ^ RegularHashAggregateExecTransformer (159) - +- ^ InputIteratorTransformer (158) - +- ColumnarExchange (156) - +- VeloxResizeBatches (155) - +- ^ ProjectExecTransformer (153) - +- ^ FlushableHashAggregateExecTransformer (152) - +- ^ ProjectExecTransformer (151) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (150) - :- ^ ProjectExecTransformer (143) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (142) - : :- ^ ProjectExecTransformer (138) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (137) - : : :- ^ ProjectExecTransformer (133) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (132) - : : : :- ^ ProjectExecTransformer (128) - : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (127) - : : : : :- ^ InputIteratorTransformer (118) - : : : : : +- ColumnarExchange (116) - : : : : : +- VeloxResizeBatches (115) - : : : : : +- ^ ProjectExecTransformer (113) - : : : : : +- ^ FilterExecTransformer (112) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (111) - : : : : +- ^ InputIteratorTransformer (126) - : : : : +- ColumnarExchange (124) - : : : : +- VeloxResizeBatches (123) - : : : : +- ^ ProjectExecTransformer (121) - : : : : +- ^ FilterExecTransformer (120) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (119) - : : : +- ^ InputIteratorTransformer (131) - : : : +- ReusedExchange (129) - : : +- ^ InputIteratorTransformer (136) - : : +- ReusedExchange (134) - : +- ^ InputIteratorTransformer (141) - : +- ReusedExchange (139) - +- ^ InputIteratorTransformer (149) - +- ColumnarBroadcastExchange (147) - +- ^ FilterExecTransformer (145) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (144) +VeloxColumnarToRow (192) ++- TakeOrderedAndProjectExecTransformer (191) + +- ^ ProjectExecTransformer (189) + +- ^ RegularHashAggregateExecTransformer (188) + +- ^ InputIteratorTransformer (187) + +- ColumnarExchange (185) + +- VeloxResizeBatches (184) + +- ^ ProjectExecTransformer (182) + +- ^ FlushableHashAggregateExecTransformer (181) + +- ^ ExpandExecTransformer (180) + +- ^ InputIteratorTransformer (179) + +- ColumnarUnion (177) + :- ^ ProjectExecTransformer (63) + : +- ^ RegularHashAggregateExecTransformer (62) + : +- ^ InputIteratorTransformer (61) + : +- ColumnarExchange (59) + : +- VeloxResizeBatches (58) + : +- ^ ProjectExecTransformer (56) + : +- ^ FlushableHashAggregateExecTransformer (55) + : +- ^ ProjectExecTransformer (54) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (53) + : :- ^ ProjectExecTransformer (46) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (45) + : : :- ^ ProjectExecTransformer (41) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (40) + : : : :- ^ ProjectExecTransformer (32) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (31) + : : : : :- ^ ProjectExecTransformer (23) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (22) + : : : : : :- ^ InputIteratorTransformer (13) + : : : : : : +- ColumnarExchange (11) + : : : : : : +- VeloxResizeBatches (10) + : : : : : : +- ^ ProjectExecTransformer (8) + : : : : : : +- ^ InputIteratorTransformer (7) + : : : : : : +- RowToVeloxColumnar (5) + : : : : : : +- * Filter (4) + : : : : : : +- VeloxColumnarToRow (3) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : : : +- ^ InputIteratorTransformer (21) + : : : : : +- ColumnarExchange (19) + : : : : : +- VeloxResizeBatches (18) + : : : : : +- ^ ProjectExecTransformer (16) + : : : : : +- ^ FilterExecTransformer (15) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (14) + : : : : +- ^ InputIteratorTransformer (30) + : : : : +- ColumnarBroadcastExchange (28) + : : : : +- ^ ProjectExecTransformer (26) + : : : : +- ^ FilterExecTransformer (25) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (24) + : : : +- ^ InputIteratorTransformer (39) + : : : +- ColumnarBroadcastExchange (37) + : : : +- ^ ProjectExecTransformer (35) + : : : +- ^ FilterExecTransformer (34) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (33) + : : +- ^ InputIteratorTransformer (44) + : : +- ReusedExchange (42) + : +- ^ InputIteratorTransformer (52) + : +- ColumnarBroadcastExchange (50) + : +- ^ FilterExecTransformer (48) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (47) + :- ^ ProjectExecTransformer (119) + : +- ^ RegularHashAggregateExecTransformer (118) + : +- ^ InputIteratorTransformer (117) + : +- ColumnarExchange (115) + : +- VeloxResizeBatches (114) + : +- ^ ProjectExecTransformer (112) + : +- ^ FlushableHashAggregateExecTransformer (111) + : +- ^ ProjectExecTransformer (110) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (109) + : :- ^ ProjectExecTransformer (102) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (101) + : : :- ^ ProjectExecTransformer (97) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (96) + : : : :- ^ ProjectExecTransformer (92) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (91) + : : : : :- ^ ProjectExecTransformer (87) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (86) + : : : : : :- ^ InputIteratorTransformer (77) + : : : : : : +- ColumnarExchange (75) + : : : : : : +- VeloxResizeBatches (74) + : : : : : : +- ^ ProjectExecTransformer (72) + : : : : : : +- ^ InputIteratorTransformer (71) + : : : : : : +- RowToVeloxColumnar (69) + : : : : : : +- * Filter (68) + : : : : : : +- VeloxColumnarToRow (67) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (65) + : : : : : +- ^ InputIteratorTransformer (85) + : : : : : +- ColumnarExchange (83) + : : : : : +- VeloxResizeBatches (82) + : : : : : +- ^ ProjectExecTransformer (80) + : : : : : +- ^ FilterExecTransformer (79) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (78) + : : : : +- ^ InputIteratorTransformer (90) + : : : : +- ReusedExchange (88) + : : : +- ^ InputIteratorTransformer (95) + : : : +- ReusedExchange (93) + : : +- ^ InputIteratorTransformer (100) + : : +- ReusedExchange (98) + : +- ^ InputIteratorTransformer (108) + : +- ColumnarBroadcastExchange (106) + : +- ^ FilterExecTransformer (104) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page (103) + +- ^ ProjectExecTransformer (175) + +- ^ RegularHashAggregateExecTransformer (174) + +- ^ InputIteratorTransformer (173) + +- ColumnarExchange (171) + +- VeloxResizeBatches (170) + +- ^ ProjectExecTransformer (168) + +- ^ FlushableHashAggregateExecTransformer (167) + +- ^ ProjectExecTransformer (166) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (165) + :- ^ ProjectExecTransformer (158) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (157) + : :- ^ ProjectExecTransformer (153) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (152) + : : :- ^ ProjectExecTransformer (148) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (147) + : : : :- ^ ProjectExecTransformer (143) + : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (142) + : : : : :- ^ InputIteratorTransformer (133) + : : : : : +- ColumnarExchange (131) + : : : : : +- VeloxResizeBatches (130) + : : : : : +- ^ ProjectExecTransformer (128) + : : : : : +- ^ InputIteratorTransformer (127) + : : : : : +- RowToVeloxColumnar (125) + : : : : : +- * Filter (124) + : : : : : +- VeloxColumnarToRow (123) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (121) + : : : : +- ^ InputIteratorTransformer (141) + : : : : +- ColumnarExchange (139) + : : : : +- VeloxResizeBatches (138) + : : : : +- ^ ProjectExecTransformer (136) + : : : : +- ^ FilterExecTransformer (135) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (134) + : : : +- ^ InputIteratorTransformer (146) + : : : +- ReusedExchange (144) + : : +- ^ InputIteratorTransformer (151) + : : +- ReusedExchange (149) + : +- ^ InputIteratorTransformer (156) + : +- ReusedExchange (154) + +- ^ InputIteratorTransformer (164) + +- ColumnarBroadcastExchange (162) + +- ^ FilterExecTransformer (160) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (159) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -144,252 +153,268 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sol PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (4) +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] +Arguments: false + +(3) VeloxColumnarToRow +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(4) Filter [codegen id : 1] +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] +Condition : ((((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3)) AND might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ss_item_sk#1, 42))) AND might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ss_promo_sk#3, 42))) + +(5) RowToVeloxColumnar Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -Arguments: ((((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3)) AND velox_might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ss_item_sk#1, 42))) AND velox_might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ss_promo_sk#3, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(7) InputIteratorTransformer +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(8) ProjectExecTransformer Output [8]: [hash(ss_item_sk#1, ss_ticket_number#4, 42) AS hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(4) WholeStageCodegenTransformer (6) +(9) WholeStageCodegenTransformer (5) Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7], [plan_id=3], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] Arguments: (isnotnull(sr_item_sk#12) AND isnotnull(sr_ticket_number#13)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [5]: [hash(sr_item_sk#12, sr_ticket_number#13, 42) AS hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Input [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] -(12) WholeStageCodegenTransformer (7) +(17) WholeStageCodegenTransformer (6) Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: hashpartitioning(sr_item_sk#12, sr_ticket_number#13, 1), ENSURE_REQUIREMENTS, [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15], [plan_id=4], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [4]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [4]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(17) ShuffledHashJoinExecTransformer +(22) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#1, ss_ticket_number#4] Right keys [2]: [sr_item_sk#12, sr_ticket_number#13] Join type: LeftOuter Join condition: None -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(19) FileSourceScanExecTransformer parquet spark_catalog.default.item +(24) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct -(20) FilterExecTransformer +(25) FilterExecTransformer Input [2]: [i_item_sk#18, i_current_price#19] Arguments: ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [1]: [i_item_sk#18] Input [2]: [i_item_sk#18, i_current_price#19] -(22) WholeStageCodegenTransformer (8) +(27) WholeStageCodegenTransformer (7) Input [1]: [i_item_sk#18] Arguments: false -(23) ColumnarBroadcastExchange +(28) ColumnarBroadcastExchange Input [1]: [i_item_sk#18] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(24) InputAdapter +(29) InputAdapter Input [1]: [i_item_sk#18] -(25) InputIteratorTransformer +(30) InputIteratorTransformer Input [1]: [i_item_sk#18] -(26) BroadcastHashJoinExecTransformer +(31) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#18] Join type: Inner Join condition: None -(27) ProjectExecTransformer +(32) ProjectExecTransformer Output [7]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, i_item_sk#18] -(28) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(33) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct -(29) FilterExecTransformer +(34) FilterExecTransformer Input [2]: [p_promo_sk#20, p_channel_tv#21] Arguments: ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) -(30) ProjectExecTransformer +(35) ProjectExecTransformer Output [1]: [p_promo_sk#20] Input [2]: [p_promo_sk#20, p_channel_tv#21] -(31) WholeStageCodegenTransformer (9) +(36) WholeStageCodegenTransformer (8) Input [1]: [p_promo_sk#20] Arguments: false -(32) ColumnarBroadcastExchange +(37) ColumnarBroadcastExchange Input [1]: [p_promo_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(33) InputAdapter +(38) InputAdapter Input [1]: [p_promo_sk#20] -(34) InputIteratorTransformer +(39) InputIteratorTransformer Input [1]: [p_promo_sk#20] -(35) BroadcastHashJoinExecTransformer +(40) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#3] Right keys [1]: [p_promo_sk#20] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(41) ProjectExecTransformer Output [6]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [8]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, p_promo_sk#20] -(37) ReusedExchange [Reuses operator id: 206] +(42) ReusedExchange [Reuses operator id: 219] Output [1]: [d_date_sk#22] -(38) InputAdapter +(43) InputAdapter Input [1]: [d_date_sk#22] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [1]: [d_date_sk#22] -(40) BroadcastHashJoinExecTransformer +(45) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#7] Right keys [1]: [d_date_sk#22] Join type: Inner Join condition: None -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [5]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#14, sr_net_loss#15] Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, d_date_sk#22] -(42) FileSourceScanExecTransformer parquet spark_catalog.default.store +(47) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [2]: [s_store_sk#23, s_store_id#24] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct -(43) FilterExecTransformer +(48) FilterExecTransformer Input [2]: [s_store_sk#23, s_store_id#24] Arguments: isnotnull(s_store_sk#23) -(44) WholeStageCodegenTransformer (11) +(49) WholeStageCodegenTransformer (10) Input [2]: [s_store_sk#23, s_store_id#24] Arguments: false -(45) ColumnarBroadcastExchange +(50) ColumnarBroadcastExchange Input [2]: [s_store_sk#23, s_store_id#24] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] -(46) InputAdapter +(51) InputAdapter Input [2]: [s_store_sk#23, s_store_id#24] -(47) InputIteratorTransformer +(52) InputIteratorTransformer Input [2]: [s_store_sk#23, s_store_id#24] -(48) BroadcastHashJoinExecTransformer +(53) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#2] Right keys [1]: [s_store_sk#23] Join type: Inner Join condition: None -(49) ProjectExecTransformer +(54) ProjectExecTransformer Output [4]: [s_store_id#24, UnscaledValue(ss_ext_sales_price#5) AS _pre_1#25, coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00) AS _pre_2#26, (ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)) AS _pre_3#27] Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#14, sr_net_loss#15, s_store_sk#23, s_store_id#24] -(50) FlushableHashAggregateExecTransformer +(55) FlushableHashAggregateExecTransformer Input [4]: [s_store_id#24, _pre_1#25, _pre_2#26, _pre_3#27] Keys [1]: [s_store_id#24] Functions [3]: [partial_sum(_pre_1#25), partial_sum(_pre_2#26), partial_sum(_pre_3#27)] Aggregate Attributes [5]: [sum#28, sum#29, isEmpty#30, sum#31, isEmpty#32] Results [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(51) ProjectExecTransformer +(56) ProjectExecTransformer Output [7]: [hash(s_store_id#24, 42) AS hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(52) WholeStageCodegenTransformer (12) +(57) WholeStageCodegenTransformer (11) Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: false -(53) VeloxResizeBatches +(58) VeloxResizeBatches Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: 1024, 2147483647, 10485760 -(54) ColumnarExchange +(59) ColumnarExchange Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: hashpartitioning(s_store_id#24, 1), ENSURE_REQUIREMENTS, [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37], [plan_id=8], [shuffle_writer_type=hash] -(55) InputAdapter +(60) InputAdapter Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(57) RegularHashAggregateExecTransformer +(62) RegularHashAggregateExecTransformer Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Keys [1]: [s_store_id#24] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00)), sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] Results [4]: [s_store_id#24, sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [5]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#39,17,2) AS sales#42, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40 AS returns#43, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41 AS profit#44, store channel AS channel#45, concat(store, s_store_id#24) AS id#46] Input [4]: [s_store_id#24, sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] -(59) WholeStageCodegenTransformer (13) +(64) WholeStageCodegenTransformer (12) Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46] Arguments: false -(60) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(65) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Batched: true Location: InMemoryFileIndex [] @@ -397,212 +422,228 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#53), dynamicpruningexpression(cs_so PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)] ReadSchema: struct -(61) FilterExecTransformer +(66) WholeStageCodegenTransformer (16) +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] +Arguments: false + +(67) VeloxColumnarToRow +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(68) Filter [codegen id : 2] +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] +Condition : ((((isnotnull(cs_catalog_page_sk#47) AND isnotnull(cs_item_sk#48)) AND isnotnull(cs_promo_sk#49)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(cs_item_sk#48, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(cs_promo_sk#49, 42))) + +(69) RowToVeloxColumnar +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(70) InputAdapter +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(71) InputIteratorTransformer Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -Arguments: ((((isnotnull(cs_catalog_page_sk#47) AND isnotnull(cs_item_sk#48)) AND isnotnull(cs_promo_sk#49)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(cs_item_sk#48, 42))) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(cs_promo_sk#49, 42))) -(62) ProjectExecTransformer +(72) ProjectExecTransformer Output [8]: [hash(cs_item_sk#48, cs_order_number#50, 42) AS hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(63) WholeStageCodegenTransformer (19) +(73) WholeStageCodegenTransformer (17) Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: false -(64) VeloxResizeBatches +(74) VeloxResizeBatches Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: 1024, 2147483647, 10485760 -(65) ColumnarExchange +(75) ColumnarExchange Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: hashpartitioning(cs_item_sk#48, cs_order_number#50, 1), ENSURE_REQUIREMENTS, [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53], [plan_id=9], [shuffle_writer_type=hash] -(66) InputAdapter +(76) InputAdapter Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(67) InputIteratorTransformer +(77) InputIteratorTransformer Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(68) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(78) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct -(69) FilterExecTransformer +(79) FilterExecTransformer Input [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] Arguments: (isnotnull(cr_item_sk#55) AND isnotnull(cr_order_number#56)) -(70) ProjectExecTransformer +(80) ProjectExecTransformer Output [5]: [hash(cr_item_sk#55, cr_order_number#56, 42) AS hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Input [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] -(71) WholeStageCodegenTransformer (20) +(81) WholeStageCodegenTransformer (18) Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: false -(72) VeloxResizeBatches +(82) VeloxResizeBatches Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: 1024, 2147483647, 10485760 -(73) ColumnarExchange +(83) ColumnarExchange Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: hashpartitioning(cr_item_sk#55, cr_order_number#56, 1), ENSURE_REQUIREMENTS, [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58], [plan_id=10], [shuffle_writer_type=hash] -(74) InputAdapter +(84) InputAdapter Input [4]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(75) InputIteratorTransformer +(85) InputIteratorTransformer Input [4]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(76) ShuffledHashJoinExecTransformer +(86) ShuffledHashJoinExecTransformer Left keys [2]: [cs_item_sk#48, cs_order_number#50] Right keys [2]: [cr_item_sk#55, cr_order_number#56] Join type: LeftOuter Join condition: None -(77) ProjectExecTransformer +(87) ProjectExecTransformer Output [8]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [11]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(78) ReusedExchange [Reuses operator id: 23] +(88) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#61] -(79) InputAdapter +(89) InputAdapter Input [1]: [i_item_sk#61] -(80) InputIteratorTransformer +(90) InputIteratorTransformer Input [1]: [i_item_sk#61] -(81) BroadcastHashJoinExecTransformer +(91) BroadcastHashJoinExecTransformer Left keys [1]: [cs_item_sk#48] Right keys [1]: [i_item_sk#61] Join type: Inner Join condition: None -(82) ProjectExecTransformer +(92) ProjectExecTransformer Output [7]: [cs_catalog_page_sk#47, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [9]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, i_item_sk#61] -(83) ReusedExchange [Reuses operator id: 32] +(93) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#62] -(84) InputAdapter +(94) InputAdapter Input [1]: [p_promo_sk#62] -(85) InputIteratorTransformer +(95) InputIteratorTransformer Input [1]: [p_promo_sk#62] -(86) BroadcastHashJoinExecTransformer +(96) BroadcastHashJoinExecTransformer Left keys [1]: [cs_promo_sk#49] Right keys [1]: [p_promo_sk#62] Join type: Inner Join condition: None -(87) ProjectExecTransformer +(97) ProjectExecTransformer Output [6]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [8]: [cs_catalog_page_sk#47, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, p_promo_sk#62] -(88) ReusedExchange [Reuses operator id: 206] +(98) ReusedExchange [Reuses operator id: 219] Output [1]: [d_date_sk#63] -(89) InputAdapter +(99) InputAdapter Input [1]: [d_date_sk#63] -(90) InputIteratorTransformer +(100) InputIteratorTransformer Input [1]: [d_date_sk#63] -(91) BroadcastHashJoinExecTransformer +(101) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#53] Right keys [1]: [d_date_sk#63] Join type: Inner Join condition: None -(92) ProjectExecTransformer +(102) ProjectExecTransformer Output [5]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cr_return_amount#57, cr_net_loss#58] Input [7]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, d_date_sk#63] -(93) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page +(103) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page Output [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct -(94) FilterExecTransformer +(104) FilterExecTransformer Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: isnotnull(cp_catalog_page_sk#64) -(95) WholeStageCodegenTransformer (24) +(105) WholeStageCodegenTransformer (22) Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: false -(96) ColumnarBroadcastExchange +(106) ColumnarBroadcastExchange Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=11] -(97) InputAdapter +(107) InputAdapter Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -(98) InputIteratorTransformer +(108) InputIteratorTransformer Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -(99) BroadcastHashJoinExecTransformer +(109) BroadcastHashJoinExecTransformer Left keys [1]: [cs_catalog_page_sk#47] Right keys [1]: [cp_catalog_page_sk#64] Join type: Inner Join condition: None -(100) ProjectExecTransformer +(110) ProjectExecTransformer Output [4]: [cp_catalog_page_id#65, UnscaledValue(cs_ext_sales_price#51) AS _pre_4#66, coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00) AS _pre_5#67, (cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)) AS _pre_6#68] Input [7]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cr_return_amount#57, cr_net_loss#58, cp_catalog_page_sk#64, cp_catalog_page_id#65] -(101) FlushableHashAggregateExecTransformer +(111) FlushableHashAggregateExecTransformer Input [4]: [cp_catalog_page_id#65, _pre_4#66, _pre_5#67, _pre_6#68] Keys [1]: [cp_catalog_page_id#65] Functions [3]: [partial_sum(_pre_4#66), partial_sum(_pre_5#67), partial_sum(_pre_6#68)] Aggregate Attributes [5]: [sum#69, sum#70, isEmpty#71, sum#72, isEmpty#73] Results [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(102) ProjectExecTransformer +(112) ProjectExecTransformer Output [7]: [hash(cp_catalog_page_id#65, 42) AS hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(103) WholeStageCodegenTransformer (25) +(113) WholeStageCodegenTransformer (23) Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: false -(104) VeloxResizeBatches +(114) VeloxResizeBatches Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: 1024, 2147483647, 10485760 -(105) ColumnarExchange +(115) ColumnarExchange Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: hashpartitioning(cp_catalog_page_id#65, 1), ENSURE_REQUIREMENTS, [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78], [plan_id=12], [shuffle_writer_type=hash] -(106) InputAdapter +(116) InputAdapter Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(107) InputIteratorTransformer +(117) InputIteratorTransformer Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(108) RegularHashAggregateExecTransformer +(118) RegularHashAggregateExecTransformer Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Keys [1]: [cp_catalog_page_id#65] Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#51)), sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00)), sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] Results [4]: [cp_catalog_page_id#65, sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] -(109) ProjectExecTransformer +(119) ProjectExecTransformer Output [5]: [MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#51))#80,17,2) AS sales#83, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81 AS returns#84, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82 AS profit#85, catalog channel AS channel#86, concat(catalog_page, cp_catalog_page_id#65) AS id#87] Input [4]: [cp_catalog_page_id#65, sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] -(110) WholeStageCodegenTransformer (26) +(120) WholeStageCodegenTransformer (24) Input [5]: [sales#83, returns#84, profit#85, channel#86, id#87] Arguments: false -(111) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(121) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Batched: true Location: InMemoryFileIndex [] @@ -610,481 +651,459 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#94), dynamicpruningexpression(ws_so PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)] ReadSchema: struct -(112) FilterExecTransformer +(122) WholeStageCodegenTransformer (28) +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Arguments: false + +(123) VeloxColumnarToRow +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(124) Filter [codegen id : 3] +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Condition : ((((isnotnull(ws_web_site_sk#89) AND isnotnull(ws_item_sk#88)) AND isnotnull(ws_promo_sk#90)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(ws_item_sk#88, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(ws_promo_sk#90, 42))) + +(125) RowToVeloxColumnar +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(126) InputAdapter +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(127) InputIteratorTransformer Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Arguments: ((((isnotnull(ws_web_site_sk#89) AND isnotnull(ws_item_sk#88)) AND isnotnull(ws_promo_sk#90)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(ws_item_sk#88, 42))) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(ws_promo_sk#90, 42))) -(113) ProjectExecTransformer +(128) ProjectExecTransformer Output [8]: [hash(ws_item_sk#88, ws_order_number#91, 42) AS hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(114) WholeStageCodegenTransformer (32) +(129) WholeStageCodegenTransformer (29) Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: false -(115) VeloxResizeBatches +(130) VeloxResizeBatches Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: 1024, 2147483647, 10485760 -(116) ColumnarExchange +(131) ColumnarExchange Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: hashpartitioning(ws_item_sk#88, ws_order_number#91, 1), ENSURE_REQUIREMENTS, [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94], [plan_id=13], [shuffle_writer_type=hash] -(117) InputAdapter +(132) InputAdapter Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(118) InputIteratorTransformer +(133) InputIteratorTransformer Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(119) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns +(134) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns Output [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number)] ReadSchema: struct -(120) FilterExecTransformer +(135) FilterExecTransformer Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] Arguments: (isnotnull(wr_item_sk#96) AND isnotnull(wr_order_number#97)) -(121) ProjectExecTransformer +(136) ProjectExecTransformer Output [5]: [hash(wr_item_sk#96, wr_order_number#97, 42) AS hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -(122) WholeStageCodegenTransformer (33) +(137) WholeStageCodegenTransformer (30) Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: false -(123) VeloxResizeBatches +(138) VeloxResizeBatches Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: 1024, 2147483647, 10485760 -(124) ColumnarExchange +(139) ColumnarExchange Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: hashpartitioning(wr_item_sk#96, wr_order_number#97, 1), ENSURE_REQUIREMENTS, [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99], [plan_id=14], [shuffle_writer_type=hash] -(125) InputAdapter +(140) InputAdapter Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(126) InputIteratorTransformer +(141) InputIteratorTransformer Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(127) ShuffledHashJoinExecTransformer +(142) ShuffledHashJoinExecTransformer Left keys [2]: [ws_item_sk#88, ws_order_number#91] Right keys [2]: [wr_item_sk#96, wr_order_number#97] Join type: LeftOuter Join condition: None -(128) ProjectExecTransformer +(143) ProjectExecTransformer Output [8]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [11]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(129) ReusedExchange [Reuses operator id: 23] +(144) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#102] -(130) InputAdapter +(145) InputAdapter Input [1]: [i_item_sk#102] -(131) InputIteratorTransformer +(146) InputIteratorTransformer Input [1]: [i_item_sk#102] -(132) BroadcastHashJoinExecTransformer +(147) BroadcastHashJoinExecTransformer Left keys [1]: [ws_item_sk#88] Right keys [1]: [i_item_sk#102] Join type: Inner Join condition: None -(133) ProjectExecTransformer +(148) ProjectExecTransformer Output [7]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [9]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, i_item_sk#102] -(134) ReusedExchange [Reuses operator id: 32] +(149) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#103] -(135) InputAdapter +(150) InputAdapter Input [1]: [p_promo_sk#103] -(136) InputIteratorTransformer +(151) InputIteratorTransformer Input [1]: [p_promo_sk#103] -(137) BroadcastHashJoinExecTransformer +(152) BroadcastHashJoinExecTransformer Left keys [1]: [ws_promo_sk#90] Right keys [1]: [p_promo_sk#103] Join type: Inner Join condition: None -(138) ProjectExecTransformer +(153) ProjectExecTransformer Output [6]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [8]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, p_promo_sk#103] -(139) ReusedExchange [Reuses operator id: 206] +(154) ReusedExchange [Reuses operator id: 219] Output [1]: [d_date_sk#104] -(140) InputAdapter +(155) InputAdapter Input [1]: [d_date_sk#104] -(141) InputIteratorTransformer +(156) InputIteratorTransformer Input [1]: [d_date_sk#104] -(142) BroadcastHashJoinExecTransformer +(157) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#94] Right keys [1]: [d_date_sk#104] Join type: Inner Join condition: None -(143) ProjectExecTransformer +(158) ProjectExecTransformer Output [5]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99] Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, d_date_sk#104] -(144) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(159) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#105, web_site_id#106] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct -(145) FilterExecTransformer +(160) FilterExecTransformer Input [2]: [web_site_sk#105, web_site_id#106] Arguments: isnotnull(web_site_sk#105) -(146) WholeStageCodegenTransformer (37) +(161) WholeStageCodegenTransformer (34) Input [2]: [web_site_sk#105, web_site_id#106] Arguments: false -(147) ColumnarBroadcastExchange +(162) ColumnarBroadcastExchange Input [2]: [web_site_sk#105, web_site_id#106] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -(148) InputAdapter +(163) InputAdapter Input [2]: [web_site_sk#105, web_site_id#106] -(149) InputIteratorTransformer +(164) InputIteratorTransformer Input [2]: [web_site_sk#105, web_site_id#106] -(150) BroadcastHashJoinExecTransformer +(165) BroadcastHashJoinExecTransformer Left keys [1]: [ws_web_site_sk#89] Right keys [1]: [web_site_sk#105] Join type: Inner Join condition: None -(151) ProjectExecTransformer +(166) ProjectExecTransformer Output [4]: [web_site_id#106, UnscaledValue(ws_ext_sales_price#92) AS _pre_7#107, coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00) AS _pre_8#108, (ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)) AS _pre_9#109] Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_sk#105, web_site_id#106] -(152) FlushableHashAggregateExecTransformer +(167) FlushableHashAggregateExecTransformer Input [4]: [web_site_id#106, _pre_7#107, _pre_8#108, _pre_9#109] Keys [1]: [web_site_id#106] Functions [3]: [partial_sum(_pre_7#107), partial_sum(_pre_8#108), partial_sum(_pre_9#109)] Aggregate Attributes [5]: [sum#110, sum#111, isEmpty#112, sum#113, isEmpty#114] Results [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(153) ProjectExecTransformer +(168) ProjectExecTransformer Output [7]: [hash(web_site_id#106, 42) AS hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(154) WholeStageCodegenTransformer (38) +(169) WholeStageCodegenTransformer (35) Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: false -(155) VeloxResizeBatches +(170) VeloxResizeBatches Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: 1024, 2147483647, 10485760 -(156) ColumnarExchange +(171) ColumnarExchange Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: hashpartitioning(web_site_id#106, 1), ENSURE_REQUIREMENTS, [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119], [plan_id=16], [shuffle_writer_type=hash] -(157) InputAdapter +(172) InputAdapter Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(158) InputIteratorTransformer +(173) InputIteratorTransformer Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(159) RegularHashAggregateExecTransformer +(174) RegularHashAggregateExecTransformer Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Keys [1]: [web_site_id#106] Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#92)), sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00)), sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] Results [4]: [web_site_id#106, sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] -(160) ProjectExecTransformer +(175) ProjectExecTransformer Output [5]: [MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#92))#121,17,2) AS sales#124, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122 AS returns#125, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123 AS profit#126, web channel AS channel#127, concat(web_site, web_site_id#106) AS id#128] Input [4]: [web_site_id#106, sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] -(161) WholeStageCodegenTransformer (39) +(176) WholeStageCodegenTransformer (36) Input [5]: [sales#124, returns#125, profit#126, channel#127, id#128] Arguments: false -(162) ColumnarUnion +(177) ColumnarUnion Arguments: UnknownPartitioning(0) -(163) InputAdapter +(178) InputAdapter Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46] -(164) InputIteratorTransformer +(179) InputIteratorTransformer Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46] -(165) ExpandExecTransformer +(180) ExpandExecTransformer Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46] Arguments: [[sales#42, returns#43, profit#44, channel#45, id#46, 0], [sales#42, returns#43, profit#44, channel#45, null, 1], [sales#42, returns#43, profit#44, null, null, 3]], [sales#42, returns#43, profit#44, channel#129, id#130, spark_grouping_id#131] -(166) FlushableHashAggregateExecTransformer +(181) FlushableHashAggregateExecTransformer Input [6]: [sales#42, returns#43, profit#44, channel#129, id#130, spark_grouping_id#131] Keys [3]: [channel#129, id#130, spark_grouping_id#131] Functions [3]: [partial_sum(sales#42), partial_sum(returns#43), partial_sum(profit#44)] Aggregate Attributes [6]: [sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] Results [9]: [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] -(167) ProjectExecTransformer +(182) ProjectExecTransformer Output [10]: [hash(channel#129, id#130, spark_grouping_id#131, 42) AS hash_partition_key#144, channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] Input [9]: [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] -(168) WholeStageCodegenTransformer (40) +(183) WholeStageCodegenTransformer (37) Input [10]: [hash_partition_key#144, channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] Arguments: false -(169) VeloxResizeBatches +(184) VeloxResizeBatches Input [10]: [hash_partition_key#144, channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] Arguments: 1024, 2147483647, 10485760 -(170) ColumnarExchange +(185) ColumnarExchange Input [10]: [hash_partition_key#144, channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] Arguments: hashpartitioning(channel#129, id#130, spark_grouping_id#131, 1), ENSURE_REQUIREMENTS, [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143], [plan_id=17], [shuffle_writer_type=hash] -(171) InputAdapter +(186) InputAdapter Input [9]: [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] -(172) InputIteratorTransformer +(187) InputIteratorTransformer Input [9]: [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] -(173) RegularHashAggregateExecTransformer +(188) RegularHashAggregateExecTransformer Input [9]: [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] Keys [3]: [channel#129, id#130, spark_grouping_id#131] Functions [3]: [sum(sales#42), sum(returns#43), sum(profit#44)] Aggregate Attributes [3]: [sum(sales#42)#145, sum(returns#43)#146, sum(profit#44)#147] Results [6]: [channel#129, id#130, spark_grouping_id#131, sum(sales#42)#145, sum(returns#43)#146, sum(profit#44)#147] -(174) ProjectExecTransformer +(189) ProjectExecTransformer Output [5]: [channel#129, id#130, sum(sales#42)#145 AS sales#148, sum(returns#43)#146 AS returns#149, sum(profit#44)#147 AS profit#150] Input [6]: [channel#129, id#130, spark_grouping_id#131, sum(sales#42)#145, sum(returns#43)#146, sum(profit#44)#147] -(175) WholeStageCodegenTransformer (41) +(190) WholeStageCodegenTransformer (38) Input [5]: [channel#129, id#130, sales#148, returns#149, profit#150] Arguments: false -(176) TakeOrderedAndProjectExecTransformer +(191) TakeOrderedAndProjectExecTransformer Input [5]: [channel#129, id#130, sales#148, returns#149, profit#150] Arguments: 100, [channel#129 ASC NULLS FIRST, id#130 ASC NULLS FIRST], [channel#129, id#130, sales#148, returns#149, profit#150], 0 -(177) VeloxColumnarToRow +(192) VeloxColumnarToRow Input [5]: [channel#129, id#130, sales#148, returns#149, profit#150] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (189) -+- ^ RegularHashAggregateExecTransformer (187) - +- ^ InputIteratorTransformer (186) - +- ColumnarExchange (184) - +- VeloxResizeBatches (183) - +- ^ FlushableHashAggregateExecTransformer (181) - +- ^ ProjectExecTransformer (180) - +- ^ FilterExecTransformer (179) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (178) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#9, [id=#1] +ObjectHashAggregate (203) ++- VeloxColumnarToRow (202) + +- ColumnarExchange (201) + +- VeloxResizeBatches (200) + +- RowToVeloxColumnar (199) + +- ObjectHashAggregate (198) + +- VeloxColumnarToRow (197) + +- ^ ProjectExecTransformer (195) + +- ^ FilterExecTransformer (194) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (193) -(178) FileSourceScanExecTransformer parquet spark_catalog.default.item +(193) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct -(179) FilterExecTransformer +(194) FilterExecTransformer Input [2]: [i_item_sk#18, i_current_price#19] Arguments: ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) -(180) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#18, 42) AS _pre_10#151] +(195) ProjectExecTransformer +Output [1]: [i_item_sk#18] Input [2]: [i_item_sk#18, i_current_price#19] -(181) FlushableHashAggregateExecTransformer -Input [1]: [_pre_10#151] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_10#151, 101823, 1521109, 0, 0)] -Aggregate Attributes [1]: [buf#152] -Results [1]: [buf#153] - -(182) WholeStageCodegenTransformer (1) -Input [1]: [buf#153] +(196) WholeStageCodegenTransformer (1) +Input [1]: [i_item_sk#18] Arguments: false -(183) VeloxResizeBatches -Input [1]: [buf#153] -Arguments: 1024, 2147483647, 10485760 - -(184) ColumnarExchange -Input [1]: [buf#153] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=18], [shuffle_writer_type=hash] - -(185) InputAdapter -Input [1]: [buf#153] - -(186) InputIteratorTransformer -Input [1]: [buf#153] +(197) VeloxColumnarToRow +Input [1]: [i_item_sk#18] -(187) RegularHashAggregateExecTransformer -Input [1]: [buf#153] +(198) ObjectHashAggregate +Input [1]: [i_item_sk#18] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#154] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#154 AS bloomFilter#155] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] +Aggregate Attributes [1]: [buf#151] +Results [1]: [buf#152] -(188) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#155] -Arguments: false +(199) RowToVeloxColumnar +Input [1]: [buf#152] -(189) VeloxColumnarToRow -Input [1]: [bloomFilter#155] +(200) VeloxResizeBatches +Input [1]: [buf#152] +Arguments: 1024, 2147483647, 10485760 -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (201) -+- ^ RegularHashAggregateExecTransformer (199) - +- ^ InputIteratorTransformer (198) - +- ColumnarExchange (196) - +- VeloxResizeBatches (195) - +- ^ FlushableHashAggregateExecTransformer (193) - +- ^ ProjectExecTransformer (192) - +- ^ FilterExecTransformer (191) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (190) +(201) ColumnarExchange +Input [1]: [buf#152] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=18], [shuffle_writer_type=hash] +(202) VeloxColumnarToRow +Input [1]: [buf#152] -(190) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(203) ObjectHashAggregate +Input [1]: [buf#152] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#153] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#153 AS bloomFilter#154] + +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#10, [id=#2] +ObjectHashAggregate (214) ++- VeloxColumnarToRow (213) + +- ColumnarExchange (212) + +- VeloxResizeBatches (211) + +- RowToVeloxColumnar (210) + +- ObjectHashAggregate (209) + +- VeloxColumnarToRow (208) + +- ^ ProjectExecTransformer (206) + +- ^ FilterExecTransformer (205) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (204) + + +(204) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct -(191) FilterExecTransformer +(205) FilterExecTransformer Input [2]: [p_promo_sk#20, p_channel_tv#21] Arguments: ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) -(192) ProjectExecTransformer -Output [1]: [xxhash64(p_promo_sk#20, 42) AS _pre_11#156] +(206) ProjectExecTransformer +Output [1]: [p_promo_sk#20] Input [2]: [p_promo_sk#20, p_channel_tv#21] -(193) FlushableHashAggregateExecTransformer -Input [1]: [_pre_11#156] +(207) WholeStageCodegenTransformer (2) +Input [1]: [p_promo_sk#20] +Arguments: false + +(208) VeloxColumnarToRow +Input [1]: [p_promo_sk#20] + +(209) ObjectHashAggregate +Input [1]: [p_promo_sk#20] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_11#156, 986, 24246, 0, 0)] -Aggregate Attributes [1]: [buf#157] -Results [1]: [buf#158] +Functions [1]: [partial_bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] +Aggregate Attributes [1]: [buf#155] +Results [1]: [buf#156] -(194) WholeStageCodegenTransformer (3) -Input [1]: [buf#158] -Arguments: false +(210) RowToVeloxColumnar +Input [1]: [buf#156] -(195) VeloxResizeBatches -Input [1]: [buf#158] +(211) VeloxResizeBatches +Input [1]: [buf#156] Arguments: 1024, 2147483647, 10485760 -(196) ColumnarExchange -Input [1]: [buf#158] +(212) ColumnarExchange +Input [1]: [buf#156] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=19], [shuffle_writer_type=hash] -(197) InputAdapter -Input [1]: [buf#158] - -(198) InputIteratorTransformer -Input [1]: [buf#158] +(213) VeloxColumnarToRow +Input [1]: [buf#156] -(199) RegularHashAggregateExecTransformer -Input [1]: [buf#158] +(214) ObjectHashAggregate +Input [1]: [buf#156] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#159] -Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#159 AS bloomFilter#160] - -(200) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#160] -Arguments: false - -(201) VeloxColumnarToRow -Input [1]: [bloomFilter#160] +Functions [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#157] +Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#157 AS bloomFilter#158] Subquery:3 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (206) -+- ^ ProjectExecTransformer (204) - +- ^ FilterExecTransformer (203) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (202) +ColumnarBroadcastExchange (219) ++- ^ ProjectExecTransformer (217) + +- ^ FilterExecTransformer (216) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (215) -(202) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#22, d_date#161] +(215) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [2]: [d_date_sk#22, d_date#159] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-08-23), LessThanOrEqual(d_date,2000-09-22), IsNotNull(d_date_sk)] ReadSchema: struct -(203) FilterExecTransformer -Input [2]: [d_date_sk#22, d_date#161] -Arguments: (((isnotnull(d_date#161) AND (d_date#161 >= 2000-08-23)) AND (d_date#161 <= 2000-09-22)) AND isnotnull(d_date_sk#22)) +(216) FilterExecTransformer +Input [2]: [d_date_sk#22, d_date#159] +Arguments: (((isnotnull(d_date#159) AND (d_date#159 >= 2000-08-23)) AND (d_date#159 <= 2000-09-22)) AND isnotnull(d_date_sk#22)) -(204) ProjectExecTransformer +(217) ProjectExecTransformer Output [1]: [d_date_sk#22] -Input [2]: [d_date_sk#22, d_date#161] +Input [2]: [d_date_sk#22, d_date#159] -(205) WholeStageCodegenTransformer (5) +(218) WholeStageCodegenTransformer (3) Input [1]: [d_date_sk#22] Arguments: false -(206) ColumnarBroadcastExchange +(219) ColumnarBroadcastExchange Input [1]: [d_date_sk#22] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=20] -Subquery:4 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (189) -+- ^ RegularHashAggregateExecTransformer (187) - +- ^ InputIteratorTransformer (186) - +- ColumnarExchange (184) - +- VeloxResizeBatches (183) - +- ^ FlushableHashAggregateExecTransformer (181) - +- ^ ProjectExecTransformer (180) - +- ^ FilterExecTransformer (179) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (178) - - -Subquery:5 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (201) -+- ^ RegularHashAggregateExecTransformer (199) - +- ^ InputIteratorTransformer (198) - +- ColumnarExchange (196) - +- VeloxResizeBatches (195) - +- ^ FlushableHashAggregateExecTransformer (193) - +- ^ ProjectExecTransformer (192) - +- ^ FilterExecTransformer (191) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (190) - - -Subquery:6 Hosting operator id = 61 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] - -Subquery:7 Hosting operator id = 61 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] - -Subquery:8 Hosting operator id = 60 Hosting Expression = cs_sold_date_sk#53 IN dynamicpruning#8 - -Subquery:9 Hosting operator id = 60 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] - -Subquery:10 Hosting operator id = 60 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:4 Hosting operator id = 68 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] -Subquery:11 Hosting operator id = 112 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] +Subquery:5 Hosting operator id = 68 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] -Subquery:12 Hosting operator id = 112 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:6 Hosting operator id = 65 Hosting Expression = cs_sold_date_sk#53 IN dynamicpruning#8 -Subquery:13 Hosting operator id = 111 Hosting Expression = ws_sold_date_sk#94 IN dynamicpruning#8 +Subquery:7 Hosting operator id = 124 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] -Subquery:14 Hosting operator id = 111 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] +Subquery:8 Hosting operator id = 124 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] -Subquery:15 Hosting operator id = 111 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:9 Hosting operator id = 121 Hosting Expression = ws_sold_date_sk#94 IN dynamicpruning#8 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/simplified.txt index 1196f00f3c0..171ec5a661d 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/simplified.txt @@ -1,27 +1,27 @@ VeloxColumnarToRow TakeOrderedAndProjectExecTransformer [channel,id,sales,returns,profit] - WholeStageCodegenTransformer (41) + WholeStageCodegenTransformer (38) ProjectExecTransformer [channel,id,sum(sales),sum(returns),sum(profit)] RegularHashAggregateExecTransformer [channel,id,spark_grouping_id,sum,isEmpty,sum,isEmpty,sum,isEmpty] [sum(sales),sum(returns),sum(profit),sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [channel,id,spark_grouping_id,sum,isEmpty,sum,isEmpty,sum,isEmpty] #1 VeloxResizeBatches - WholeStageCodegenTransformer (40) + WholeStageCodegenTransformer (37) ProjectExecTransformer [channel,id,spark_grouping_id,sum,isEmpty,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [channel,id,spark_grouping_id,sales,returns,profit] [sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty] ExpandExecTransformer [sales,returns,profit,channel,id] InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (12) ProjectExecTransformer [sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00))),s_store_id] RegularHashAggregateExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [s_store_id,sum,sum,isEmpty,sum,isEmpty] #2 VeloxResizeBatches - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (11) ProjectExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [s_store_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [s_store_id,ss_ext_sales_price,sr_return_amt,ss_net_profit,sr_net_loss] @@ -38,87 +38,66 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] #3 VeloxResizeBatches - WholeStageCodegenTransformer (6) + WholeStageCodegenTransformer (5) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] - FilterExecTransformer [ss_store_sk,ss_item_sk,ss_promo_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #5 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [p_promo_sk] - FilterExecTransformer [p_channel_tv,p_promo_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #4 - WholeStageCodegenTransformer (5) - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_store_sk,ss_item_sk,ss_promo_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #5 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [p_promo_sk] - FilterExecTransformer [p_channel_tv,p_promo_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] + RowToVeloxColumnar + ObjectHashAggregate [p_promo_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [p_promo_sk] + FilterExecTransformer [p_channel_tv,p_promo_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #4 + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] InputIteratorTransformer InputAdapter ColumnarExchange [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss] #7 VeloxResizeBatches - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (6) ProjectExecTransformer [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss] FilterExecTransformer [sr_item_sk,sr_ticket_number] FileSourceScanExecTransformer parquet spark_catalog.default.store_returns [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss,sr_returned_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (7) ProjectExecTransformer [i_item_sk] FilterExecTransformer [i_current_price,i_item_sk] FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (8) ProjectExecTransformer [p_promo_sk] FilterExecTransformer [p_channel_tv,p_promo_sk] FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] @@ -128,17 +107,17 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (10) FilterExecTransformer [s_store_sk] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id] - WholeStageCodegenTransformer (26) + WholeStageCodegenTransformer (24) ProjectExecTransformer [sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00))),cp_catalog_page_id] RegularHashAggregateExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] #11 VeloxResizeBatches - WholeStageCodegenTransformer (25) + WholeStageCodegenTransformer (23) ProjectExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [cp_catalog_page_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [cp_catalog_page_id,cs_ext_sales_price,cr_return_amount,cs_net_profit,cr_net_loss] @@ -155,20 +134,25 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] #12 VeloxResizeBatches - WholeStageCodegenTransformer (19) + WholeStageCodegenTransformer (17) ProjectExecTransformer [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] - FilterExecTransformer [cs_catalog_page_sk,cs_item_sk,cs_promo_sk] - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_catalog_page_sk,cs_item_sk,cs_promo_sk,cs_order_number,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] - ReusedSubquery [d_date_sk] #1 - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [cs_catalog_page_sk,cs_item_sk,cs_promo_sk] + ReusedSubquery [bloomFilter] #2 + ReusedSubquery [bloomFilter] #3 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (16) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_catalog_page_sk,cs_item_sk,cs_promo_sk,cs_order_number,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] + ReusedSubquery [d_date_sk] #1 InputIteratorTransformer InputAdapter ColumnarExchange [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss] #13 VeloxResizeBatches - WholeStageCodegenTransformer (20) + WholeStageCodegenTransformer (18) ProjectExecTransformer [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss] FilterExecTransformer [cr_item_sk,cr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss,cr_returned_date_sk] @@ -184,17 +168,17 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #14 - WholeStageCodegenTransformer (24) + WholeStageCodegenTransformer (22) FilterExecTransformer [cp_catalog_page_sk] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page [cp_catalog_page_sk,cp_catalog_page_id] - WholeStageCodegenTransformer (39) + WholeStageCodegenTransformer (36) ProjectExecTransformer [sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00))),web_site_id] RegularHashAggregateExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [web_site_id,sum,sum,isEmpty,sum,isEmpty] #15 VeloxResizeBatches - WholeStageCodegenTransformer (38) + WholeStageCodegenTransformer (35) ProjectExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [web_site_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [web_site_id,ws_ext_sales_price,wr_return_amt,ws_net_profit,wr_net_loss] @@ -211,20 +195,25 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] #16 VeloxResizeBatches - WholeStageCodegenTransformer (32) + WholeStageCodegenTransformer (29) ProjectExecTransformer [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] - FilterExecTransformer [ws_web_site_sk,ws_item_sk,ws_promo_sk] - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 - FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_web_site_sk,ws_promo_sk,ws_order_number,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] - ReusedSubquery [d_date_sk] #1 - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (3) + Filter [ws_web_site_sk,ws_item_sk,ws_promo_sk] + ReusedSubquery [bloomFilter] #2 + ReusedSubquery [bloomFilter] #3 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (28) + FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_web_site_sk,ws_promo_sk,ws_order_number,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] + ReusedSubquery [d_date_sk] #1 InputIteratorTransformer InputAdapter ColumnarExchange [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss] #17 VeloxResizeBatches - WholeStageCodegenTransformer (33) + WholeStageCodegenTransformer (30) ProjectExecTransformer [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss] FilterExecTransformer [wr_item_sk,wr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss,wr_returned_date_sk] @@ -240,6 +229,6 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #18 - WholeStageCodegenTransformer (37) + WholeStageCodegenTransformer (34) FilterExecTransformer [web_site_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_site_id] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/explain.txt index 1502fa7d454..416bb24d21f 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/explain.txt @@ -1,14 +1,14 @@ == Physical Plan == -VeloxColumnarToRow (43) -+- TakeOrderedAndProjectExecTransformer (42) - +- ^ RegularHashAggregateExecTransformer (40) - +- ^ InputIteratorTransformer (39) - +- ColumnarExchange (37) - +- VeloxResizeBatches (36) - +- ^ ProjectExecTransformer (34) - +- ^ FlushableHashAggregateExecTransformer (33) - +- ^ ProjectExecTransformer (32) - +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (31) +VeloxColumnarToRow (48) ++- TakeOrderedAndProjectExecTransformer (47) + +- ^ RegularHashAggregateExecTransformer (45) + +- ^ InputIteratorTransformer (44) + +- ColumnarExchange (42) + +- VeloxResizeBatches (41) + +- ^ ProjectExecTransformer (39) + +- ^ FlushableHashAggregateExecTransformer (38) + +- ^ ProjectExecTransformer (37) + +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (36) :- ^ InputIteratorTransformer (22) : +- ColumnarExchange (20) : +- VeloxResizeBatches (19) @@ -26,12 +26,15 @@ VeloxColumnarToRow (43) : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.inventory (8) : +- ^ InputIteratorTransformer (15) : +- ReusedExchange (13) - +- ^ InputIteratorTransformer (30) - +- ColumnarExchange (28) - +- VeloxResizeBatches (27) - +- ^ ProjectExecTransformer (25) - +- ^ FilterExecTransformer (24) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (23) + +- ^ InputIteratorTransformer (35) + +- ColumnarExchange (33) + +- VeloxResizeBatches (32) + +- ^ ProjectExecTransformer (30) + +- ^ InputIteratorTransformer (29) + +- RowToVeloxColumnar (27) + +- * Filter (26) + +- VeloxColumnarToRow (25) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (23) (1) FileSourceScanExecTransformer parquet spark_catalog.default.item @@ -89,7 +92,7 @@ Join condition: None Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8] Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_item_sk#6, inv_date_sk#8] -(13) ReusedExchange [Reuses operator id: 48] +(13) ReusedExchange [Reuses operator id: 53] Output [1]: [d_date_sk#10] (14) InputAdapter @@ -133,197 +136,198 @@ Location: CatalogFileIndex [{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct -(24) FilterExecTransformer +(24) WholeStageCodegenTransformer (6) +Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] +Arguments: false + +(25) VeloxColumnarToRow +Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] + +(26) Filter [codegen id : 1] +Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] +Condition : (isnotnull(ss_item_sk#12) AND might_contain(Subquery scalar-subquery#14, [id=#3], xxhash64(ss_item_sk#12, 42))) + +(27) RowToVeloxColumnar Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] -Arguments: (isnotnull(ss_item_sk#12) AND velox_might_contain(Subquery scalar-subquery#14, [id=#3], xxhash64(ss_item_sk#12, 42))) -(25) ProjectExecTransformer +(28) InputAdapter +Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] + +(29) InputIteratorTransformer +Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] + +(30) ProjectExecTransformer Output [2]: [hash(ss_item_sk#12, 42) AS hash_partition_key#15, ss_item_sk#12] Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] -(26) WholeStageCodegenTransformer (7) +(31) WholeStageCodegenTransformer (7) Input [2]: [hash_partition_key#15, ss_item_sk#12] Arguments: false -(27) VeloxResizeBatches +(32) VeloxResizeBatches Input [2]: [hash_partition_key#15, ss_item_sk#12] Arguments: 1024, 2147483647, 10485760 -(28) ColumnarExchange +(33) ColumnarExchange Input [2]: [hash_partition_key#15, ss_item_sk#12] Arguments: hashpartitioning(ss_item_sk#12, 1), ENSURE_REQUIREMENTS, [ss_item_sk#12], [plan_id=4], [shuffle_writer_type=hash] -(29) InputAdapter +(34) InputAdapter Input [1]: [ss_item_sk#12] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [1]: [ss_item_sk#12] -(31) ShuffledHashJoinExecTransformer +(36) ShuffledHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [ss_item_sk#12] Join type: Inner Join condition: None -(32) ProjectExecTransformer +(37) ProjectExecTransformer Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, ss_item_sk#12] -(33) FlushableHashAggregateExecTransformer +(38) FlushableHashAggregateExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Functions: [] Aggregate Attributes: [] Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [4]: [hash(i_item_id#2, i_item_desc#3, i_current_price#4, 42) AS hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(35) WholeStageCodegenTransformer (8) +(40) WholeStageCodegenTransformer (8) Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: false -(36) VeloxResizeBatches +(41) VeloxResizeBatches Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: 1024, 2147483647, 10485760 -(37) ColumnarExchange +(42) ColumnarExchange Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 1), ENSURE_REQUIREMENTS, [i_item_id#2, i_item_desc#3, i_current_price#4], [plan_id=5], [shuffle_writer_type=hash] -(38) InputAdapter +(43) InputAdapter Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(40) RegularHashAggregateExecTransformer +(45) RegularHashAggregateExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Functions: [] Aggregate Attributes: [] Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(41) WholeStageCodegenTransformer (9) +(46) WholeStageCodegenTransformer (9) Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: false -(42) TakeOrderedAndProjectExecTransformer +(47) TakeOrderedAndProjectExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: 100, [i_item_id#2 ASC NULLS FIRST], [i_item_id#2, i_item_desc#3, i_current_price#4], 0 -(43) VeloxColumnarToRow +(48) VeloxColumnarToRow Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] ===== Subqueries ===== Subquery:1 Hosting operator id = 8 Hosting Expression = inv_date_sk#8 IN dynamicpruning#9 -ColumnarBroadcastExchange (48) -+- ^ ProjectExecTransformer (46) - +- ^ FilterExecTransformer (45) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (44) +ColumnarBroadcastExchange (53) ++- ^ ProjectExecTransformer (51) + +- ^ FilterExecTransformer (50) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (49) -(44) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(49) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#10, d_date#17] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-05-25), LessThanOrEqual(d_date,2000-07-24), IsNotNull(d_date_sk)] ReadSchema: struct -(45) FilterExecTransformer +(50) FilterExecTransformer Input [2]: [d_date_sk#10, d_date#17] Arguments: (((isnotnull(d_date#17) AND (d_date#17 >= 2000-05-25)) AND (d_date#17 <= 2000-07-24)) AND isnotnull(d_date_sk#10)) -(46) ProjectExecTransformer +(51) ProjectExecTransformer Output [1]: [d_date_sk#10] Input [2]: [d_date_sk#10, d_date#17] -(47) WholeStageCodegenTransformer (2) +(52) WholeStageCodegenTransformer (2) Input [1]: [d_date_sk#10] Arguments: false -(48) ColumnarBroadcastExchange +(53) ColumnarBroadcastExchange Input [1]: [d_date_sk#10] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -Subquery:2 Hosting operator id = 24 Hosting Expression = Subquery scalar-subquery#14, [id=#3] -VeloxColumnarToRow (60) -+- ^ RegularHashAggregateExecTransformer (58) - +- ^ InputIteratorTransformer (57) - +- ColumnarExchange (55) - +- VeloxResizeBatches (54) - +- ^ FlushableHashAggregateExecTransformer (52) - +- ^ ProjectExecTransformer (51) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (49) +Subquery:2 Hosting operator id = 26 Hosting Expression = Subquery scalar-subquery#14, [id=#3] +ObjectHashAggregate (64) ++- VeloxColumnarToRow (63) + +- ColumnarExchange (62) + +- VeloxResizeBatches (61) + +- RowToVeloxColumnar (60) + +- ObjectHashAggregate (59) + +- VeloxColumnarToRow (58) + +- ^ ProjectExecTransformer (56) + +- ^ FilterExecTransformer (55) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (54) -(49) FileSourceScanExecTransformer parquet spark_catalog.default.item +(54) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,62.00), LessThanOrEqual(i_current_price,92.00), In(i_manufact_id, [129,270,423,821]), IsNotNull(i_item_sk)] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] Arguments: ((((isnotnull(i_current_price#4) AND (i_current_price#4 >= 62.00)) AND (i_current_price#4 <= 92.00)) AND i_manufact_id#5 IN (129,270,821,423)) AND isnotnull(i_item_sk#1)) -(51) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#1, 42) AS _pre_1#18] +(56) ProjectExecTransformer +Output [1]: [i_item_sk#1] Input [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] -(52) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#18] +(57) WholeStageCodegenTransformer (5) +Input [1]: [i_item_sk#1] +Arguments: false + +(58) VeloxColumnarToRow +Input [1]: [i_item_sk#1] + +(59) ObjectHashAggregate +Input [1]: [i_item_sk#1] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#18, 239, 6582, 0, 0)] -Aggregate Attributes [1]: [buf#19] -Results [1]: [buf#20] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] +Aggregate Attributes [1]: [buf#18] +Results [1]: [buf#19] -(53) WholeStageCodegenTransformer (5) -Input [1]: [buf#20] -Arguments: false +(60) RowToVeloxColumnar +Input [1]: [buf#19] -(54) VeloxResizeBatches -Input [1]: [buf#20] +(61) VeloxResizeBatches +Input [1]: [buf#19] Arguments: 1024, 2147483647, 10485760 -(55) ColumnarExchange -Input [1]: [buf#20] +(62) ColumnarExchange +Input [1]: [buf#19] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7], [shuffle_writer_type=hash] -(56) InputAdapter -Input [1]: [buf#20] +(63) VeloxColumnarToRow +Input [1]: [buf#19] -(57) InputIteratorTransformer -Input [1]: [buf#20] - -(58) RegularHashAggregateExecTransformer -Input [1]: [buf#20] +(64) ObjectHashAggregate +Input [1]: [buf#19] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#21] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#21 AS bloomFilter#22] - -(59) WholeStageCodegenTransformer (6) -Input [1]: [bloomFilter#22] -Arguments: false - -(60) VeloxColumnarToRow -Input [1]: [bloomFilter#22] - -Subquery:3 Hosting operator id = 23 Hosting Expression = Subquery scalar-subquery#14, [id=#3] -VeloxColumnarToRow (60) -+- ^ RegularHashAggregateExecTransformer (58) - +- ^ InputIteratorTransformer (57) - +- ColumnarExchange (55) - +- VeloxResizeBatches (54) - +- ^ FlushableHashAggregateExecTransformer (52) - +- ^ ProjectExecTransformer (51) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (49) - +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#20] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#20 AS bloomFilter#21] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/simplified.txt index 0ebf8e97b7b..21e767549d9 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/simplified.txt @@ -45,31 +45,24 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (7) ProjectExecTransformer [ss_item_sk] - FilterExecTransformer [ss_item_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_sold_date_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_item_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (5) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (6) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_sold_date_sk] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/explain.txt index 8c1a07c927e..2f65ed5f9ab 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/explain.txt @@ -1,28 +1,28 @@ == Physical Plan == -VeloxColumnarToRow (82) -+- TakeOrderedAndProjectExecTransformer (81) - +- ^ ProjectExecTransformer (79) - +- ^ RegularHashAggregateExecTransformer (78) - +- ^ InputIteratorTransformer (77) - +- ColumnarExchange (75) - +- VeloxResizeBatches (74) - +- ^ ProjectExecTransformer (72) - +- ^ FlushableHashAggregateExecTransformer (71) - +- ^ ProjectExecTransformer (70) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (69) - :- ^ ProjectExecTransformer (62) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (61) - : :- ^ ProjectExecTransformer (57) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (56) - : : :- ^ ProjectExecTransformer (48) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (47) - : : : :- ^ InputIteratorTransformer (38) - : : : : +- ColumnarExchange (36) - : : : : +- VeloxResizeBatches (35) - : : : : +- ^ ProjectExecTransformer (33) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (32) - : : : : :- ^ ProjectExecTransformer (25) - : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (24) +VeloxColumnarToRow (87) ++- TakeOrderedAndProjectExecTransformer (86) + +- ^ ProjectExecTransformer (84) + +- ^ RegularHashAggregateExecTransformer (83) + +- ^ InputIteratorTransformer (82) + +- ColumnarExchange (80) + +- VeloxResizeBatches (79) + +- ^ ProjectExecTransformer (77) + +- ^ FlushableHashAggregateExecTransformer (76) + +- ^ ProjectExecTransformer (75) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (74) + :- ^ ProjectExecTransformer (67) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (66) + : :- ^ ProjectExecTransformer (62) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (61) + : : :- ^ ProjectExecTransformer (53) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (52) + : : : :- ^ InputIteratorTransformer (43) + : : : : +- ColumnarExchange (41) + : : : : +- VeloxResizeBatches (40) + : : : : +- ^ ProjectExecTransformer (38) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) + : : : : :- ^ ProjectExecTransformer (30) + : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (29) : : : : : :- ^ InputIteratorTransformer (15) : : : : : : +- ColumnarExchange (13) : : : : : : +- VeloxResizeBatches (12) @@ -34,33 +34,36 @@ VeloxColumnarToRow (82) : : : : : : +- ColumnarBroadcastExchange (6) : : : : : : +- ^ FilterExecTransformer (4) : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_page (3) - : : : : : +- ^ InputIteratorTransformer (23) - : : : : : +- ColumnarExchange (21) - : : : : : +- VeloxResizeBatches (20) - : : : : : +- ^ ProjectExecTransformer (18) - : : : : : +- ^ FilterExecTransformer (17) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (16) - : : : : +- ^ InputIteratorTransformer (31) - : : : : +- ColumnarBroadcastExchange (29) - : : : : +- ^ FilterExecTransformer (27) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (26) - : : : +- ^ InputIteratorTransformer (46) - : : : +- ColumnarExchange (44) - : : : +- VeloxResizeBatches (43) - : : : +- ^ ProjectExecTransformer (41) - : : : +- ^ FilterExecTransformer (40) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (39) - : : +- ^ InputIteratorTransformer (55) - : : +- ColumnarBroadcastExchange (53) - : : +- ^ ProjectExecTransformer (51) - : : +- ^ FilterExecTransformer (50) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (49) - : +- ^ InputIteratorTransformer (60) - : +- ReusedExchange (58) - +- ^ InputIteratorTransformer (68) - +- ColumnarBroadcastExchange (66) - +- ^ FilterExecTransformer (64) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.reason (63) + : : : : : +- ^ InputIteratorTransformer (28) + : : : : : +- ColumnarExchange (26) + : : : : : +- VeloxResizeBatches (25) + : : : : : +- ^ ProjectExecTransformer (23) + : : : : : +- ^ InputIteratorTransformer (22) + : : : : : +- RowToVeloxColumnar (20) + : : : : : +- * Filter (19) + : : : : : +- VeloxColumnarToRow (18) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (16) + : : : : +- ^ InputIteratorTransformer (36) + : : : : +- ColumnarBroadcastExchange (34) + : : : : +- ^ FilterExecTransformer (32) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (31) + : : : +- ^ InputIteratorTransformer (51) + : : : +- ColumnarExchange (49) + : : : +- VeloxResizeBatches (48) + : : : +- ^ ProjectExecTransformer (46) + : : : +- ^ FilterExecTransformer (45) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (44) + : : +- ^ InputIteratorTransformer (60) + : : +- ColumnarBroadcastExchange (58) + : : +- ^ ProjectExecTransformer (56) + : : +- ^ FilterExecTransformer (55) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (54) + : +- ^ InputIteratorTransformer (65) + : +- ReusedExchange (63) + +- ^ InputIteratorTransformer (73) + +- ColumnarBroadcastExchange (71) + +- ^ FilterExecTransformer (69) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.reason (68) (1) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales @@ -135,468 +138,454 @@ Location: CatalogFileIndex [{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number), IsNotNull(wr_refunded_cdemo_sk), IsNotNull(wr_returning_cdemo_sk), IsNotNull(wr_refunded_addr_sk), IsNotNull(wr_reason_sk)] ReadSchema: struct -(17) FilterExecTransformer +(17) WholeStageCodegenTransformer (6) +Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] +Arguments: false + +(18) VeloxColumnarToRow +Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] + +(19) Filter [codegen id : 1] +Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] +Condition : (((((((isnotnull(wr_item_sk#11) AND isnotnull(wr_order_number#16)) AND isnotnull(wr_refunded_cdemo_sk#12)) AND isnotnull(wr_returning_cdemo_sk#14)) AND isnotnull(wr_refunded_addr_sk#13)) AND isnotnull(wr_reason_sk#15)) AND might_contain(Subquery scalar-subquery#20, [id=#3], xxhash64(wr_refunded_cdemo_sk#12, 42))) AND might_contain(Subquery scalar-subquery#21, [id=#4], xxhash64(wr_refunded_addr_sk#13, 42))) + +(20) RowToVeloxColumnar +Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] + +(21) InputAdapter +Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] + +(22) InputIteratorTransformer Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] -Arguments: (((((((isnotnull(wr_item_sk#11) AND isnotnull(wr_order_number#16)) AND isnotnull(wr_refunded_cdemo_sk#12)) AND isnotnull(wr_returning_cdemo_sk#14)) AND isnotnull(wr_refunded_addr_sk#13)) AND isnotnull(wr_reason_sk#15)) AND velox_might_contain(Subquery scalar-subquery#20, [id=#3], xxhash64(wr_refunded_cdemo_sk#12, 42))) AND velox_might_contain(Subquery scalar-subquery#21, [id=#4], xxhash64(wr_refunded_addr_sk#13, 42))) -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [9]: [hash(wr_item_sk#11, wr_order_number#16, 42) AS hash_partition_key#22, wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] -(19) WholeStageCodegenTransformer (8) +(24) WholeStageCodegenTransformer (7) Input [9]: [hash_partition_key#22, wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] Arguments: false -(20) VeloxResizeBatches +(25) VeloxResizeBatches Input [9]: [hash_partition_key#22, wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] Arguments: 1024, 2147483647, 10485760 -(21) ColumnarExchange +(26) ColumnarExchange Input [9]: [hash_partition_key#22, wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] Arguments: hashpartitioning(wr_item_sk#11, wr_order_number#16, 1), ENSURE_REQUIREMENTS, [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18], [plan_id=5], [shuffle_writer_type=hash] -(22) InputAdapter +(27) InputAdapter Input [8]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] -(23) InputIteratorTransformer +(28) InputIteratorTransformer Input [8]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] -(24) ShuffledHashJoinExecTransformer +(29) ShuffledHashJoinExecTransformer Left keys [2]: [ws_item_sk#1, ws_order_number#3] Right keys [2]: [wr_item_sk#11, wr_order_number#16] Join type: Inner Join condition: None -(25) ProjectExecTransformer +(30) ProjectExecTransformer Output [10]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18] Input [14]: [ws_item_sk#1, ws_order_number#3, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] -(26) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(31) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), 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 -(27) FilterExecTransformer +(32) FilterExecTransformer Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Arguments: (((isnotnull(cd_demo_sk#23) AND isnotnull(cd_marital_status#24)) AND isnotnull(cd_education_status#25)) AND ((((cd_marital_status#24 = M) AND (cd_education_status#25 = Advanced Degree )) OR ((cd_marital_status#24 = S) AND (cd_education_status#25 = College ))) OR ((cd_marital_status#24 = W) AND (cd_education_status#25 = 2 yr Degree )))) -(28) WholeStageCodegenTransformer (9) +(33) WholeStageCodegenTransformer (8) Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Arguments: false -(29) ColumnarBroadcastExchange +(34) ColumnarBroadcastExchange Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] -(30) InputAdapter +(35) InputAdapter Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] -(32) BroadcastHashJoinExecTransformer +(37) BroadcastHashJoinExecTransformer Left keys [1]: [wr_refunded_cdemo_sk#12] Right keys [1]: [cd_demo_sk#23] Join type: Inner Join condition: ((((((cd_marital_status#24 = M) AND (cd_education_status#25 = Advanced Degree )) AND (ws_sales_price#5 >= 100.00)) AND (ws_sales_price#5 <= 150.00)) OR ((((cd_marital_status#24 = S) AND (cd_education_status#25 = College )) AND (ws_sales_price#5 >= 50.00)) AND (ws_sales_price#5 <= 100.00))) OR ((((cd_marital_status#24 = W) AND (cd_education_status#25 = 2 yr Degree )) AND (ws_sales_price#5 >= 150.00)) AND (ws_sales_price#5 <= 200.00))) -(33) ProjectExecTransformer +(38) ProjectExecTransformer Output [11]: [hash(wr_returning_cdemo_sk#14, cd_marital_status#24, cd_education_status#25, 42) AS hash_partition_key#26, ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] Input [13]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] -(34) WholeStageCodegenTransformer (10) +(39) WholeStageCodegenTransformer (9) Input [11]: [hash_partition_key#26, ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] Arguments: false -(35) VeloxResizeBatches +(40) VeloxResizeBatches Input [11]: [hash_partition_key#26, ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] Arguments: 1024, 2147483647, 10485760 -(36) ColumnarExchange +(41) ColumnarExchange Input [11]: [hash_partition_key#26, ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] Arguments: hashpartitioning(wr_returning_cdemo_sk#14, cd_marital_status#24, cd_education_status#25, 1), ENSURE_REQUIREMENTS, [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25], [plan_id=7], [shuffle_writer_type=hash] -(37) InputAdapter +(42) InputAdapter Input [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] -(38) InputIteratorTransformer +(43) InputIteratorTransformer Input [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] -(39) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(44) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status), IsNotNull(cd_education_status)] ReadSchema: struct -(40) FilterExecTransformer +(45) FilterExecTransformer Input [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Arguments: ((isnotnull(cd_demo_sk#27) AND isnotnull(cd_marital_status#28)) AND isnotnull(cd_education_status#29)) -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [4]: [hash(cd_demo_sk#27, cd_marital_status#28, cd_education_status#29, 42) AS hash_partition_key#30, cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Input [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] -(42) WholeStageCodegenTransformer (11) +(47) WholeStageCodegenTransformer (10) Input [4]: [hash_partition_key#30, cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Arguments: false -(43) VeloxResizeBatches +(48) VeloxResizeBatches Input [4]: [hash_partition_key#30, cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Arguments: 1024, 2147483647, 10485760 -(44) ColumnarExchange +(49) ColumnarExchange Input [4]: [hash_partition_key#30, cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Arguments: hashpartitioning(cd_demo_sk#27, cd_marital_status#28, cd_education_status#29, 1), ENSURE_REQUIREMENTS, [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29], [plan_id=8], [shuffle_writer_type=hash] -(45) InputAdapter +(50) InputAdapter Input [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] -(46) InputIteratorTransformer +(51) InputIteratorTransformer Input [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] -(47) ShuffledHashJoinExecTransformer +(52) ShuffledHashJoinExecTransformer Left keys [3]: [wr_returning_cdemo_sk#14, cd_marital_status#24, cd_education_status#25] Right keys [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Join type: Inner Join condition: None -(48) ProjectExecTransformer +(53) ProjectExecTransformer Output [7]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18] Input [13]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25, cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] -(49) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(54) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_address_sk#31, ca_state#32, ca_country#33] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [IN,NJ,OH]),In(ca_state, [CT,KY,WI])),In(ca_state, [AR,IA,LA]))] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [3]: [ca_address_sk#31, ca_state#32, ca_country#33] Arguments: (((isnotnull(ca_country#33) AND (ca_country#33 = United States)) AND isnotnull(ca_address_sk#31)) AND ((ca_state#32 IN (IN,OH,NJ) OR ca_state#32 IN (WI,CT,KY)) OR ca_state#32 IN (LA,IA,AR))) -(51) ProjectExecTransformer +(56) ProjectExecTransformer Output [2]: [ca_address_sk#31, ca_state#32] Input [3]: [ca_address_sk#31, ca_state#32, ca_country#33] -(52) WholeStageCodegenTransformer (12) +(57) WholeStageCodegenTransformer (11) Input [2]: [ca_address_sk#31, ca_state#32] Arguments: false -(53) ColumnarBroadcastExchange +(58) ColumnarBroadcastExchange Input [2]: [ca_address_sk#31, ca_state#32] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -(54) InputAdapter +(59) InputAdapter Input [2]: [ca_address_sk#31, ca_state#32] -(55) InputIteratorTransformer +(60) InputIteratorTransformer Input [2]: [ca_address_sk#31, ca_state#32] -(56) BroadcastHashJoinExecTransformer +(61) BroadcastHashJoinExecTransformer Left keys [1]: [wr_refunded_addr_sk#13] Right keys [1]: [ca_address_sk#31] Join type: Inner Join condition: ((((ca_state#32 IN (IN,OH,NJ) AND (ws_net_profit#6 >= 100.00)) AND (ws_net_profit#6 <= 200.00)) OR ((ca_state#32 IN (WI,CT,KY) AND (ws_net_profit#6 >= 150.00)) AND (ws_net_profit#6 <= 300.00))) OR ((ca_state#32 IN (LA,IA,AR) AND (ws_net_profit#6 >= 50.00)) AND (ws_net_profit#6 <= 250.00))) -(57) ProjectExecTransformer +(62) ProjectExecTransformer Output [5]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18] Input [9]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, ca_address_sk#31, ca_state#32] -(58) ReusedExchange [Reuses operator id: 87] +(63) ReusedExchange [Reuses operator id: 92] Output [1]: [d_date_sk#34] -(59) InputAdapter +(64) InputAdapter Input [1]: [d_date_sk#34] -(60) InputIteratorTransformer +(65) InputIteratorTransformer Input [1]: [d_date_sk#34] -(61) BroadcastHashJoinExecTransformer +(66) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#7] Right keys [1]: [d_date_sk#34] Join type: Inner Join condition: None -(62) ProjectExecTransformer +(67) ProjectExecTransformer Output [4]: [ws_quantity#4, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18] Input [6]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, d_date_sk#34] -(63) FileSourceScanExecTransformer parquet spark_catalog.default.reason +(68) FileSourceScanExecTransformer parquet spark_catalog.default.reason Output [2]: [r_reason_sk#35, r_reason_desc#36] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/reason] PushedFilters: [IsNotNull(r_reason_sk)] ReadSchema: struct -(64) FilterExecTransformer +(69) FilterExecTransformer Input [2]: [r_reason_sk#35, r_reason_desc#36] Arguments: isnotnull(r_reason_sk#35) -(65) WholeStageCodegenTransformer (14) +(70) WholeStageCodegenTransformer (13) Input [2]: [r_reason_sk#35, r_reason_desc#36] Arguments: false -(66) ColumnarBroadcastExchange +(71) ColumnarBroadcastExchange Input [2]: [r_reason_sk#35, r_reason_desc#36] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10] -(67) InputAdapter +(72) InputAdapter Input [2]: [r_reason_sk#35, r_reason_desc#36] -(68) InputIteratorTransformer +(73) InputIteratorTransformer Input [2]: [r_reason_sk#35, r_reason_desc#36] -(69) BroadcastHashJoinExecTransformer +(74) BroadcastHashJoinExecTransformer Left keys [1]: [wr_reason_sk#15] Right keys [1]: [r_reason_sk#35] Join type: Inner Join condition: None -(70) ProjectExecTransformer +(75) ProjectExecTransformer Output [4]: [ws_quantity#4, r_reason_desc#36, UnscaledValue(wr_refunded_cash#18) AS _pre_1#37, UnscaledValue(wr_fee#17) AS _pre_2#38] Input [6]: [ws_quantity#4, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, r_reason_sk#35, r_reason_desc#36] -(71) FlushableHashAggregateExecTransformer +(76) FlushableHashAggregateExecTransformer Input [4]: [ws_quantity#4, r_reason_desc#36, _pre_1#37, _pre_2#38] Keys [1]: [r_reason_desc#36] Functions [3]: [partial_avg(ws_quantity#4), partial_avg(_pre_1#37), partial_avg(_pre_2#38)] Aggregate Attributes [6]: [sum#39, count#40, sum#41, count#42, sum#43, count#44] Results [7]: [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] -(72) ProjectExecTransformer +(77) ProjectExecTransformer Output [8]: [hash(r_reason_desc#36, 42) AS hash_partition_key#51, r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] Input [7]: [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] -(73) WholeStageCodegenTransformer (15) +(78) WholeStageCodegenTransformer (14) Input [8]: [hash_partition_key#51, r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] Arguments: false -(74) VeloxResizeBatches +(79) VeloxResizeBatches Input [8]: [hash_partition_key#51, r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] Arguments: 1024, 2147483647, 10485760 -(75) ColumnarExchange +(80) ColumnarExchange Input [8]: [hash_partition_key#51, r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] Arguments: hashpartitioning(r_reason_desc#36, 1), ENSURE_REQUIREMENTS, [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50], [plan_id=11], [shuffle_writer_type=hash] -(76) InputAdapter +(81) InputAdapter Input [7]: [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] -(77) InputIteratorTransformer +(82) InputIteratorTransformer Input [7]: [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] -(78) RegularHashAggregateExecTransformer +(83) RegularHashAggregateExecTransformer Input [7]: [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] Keys [1]: [r_reason_desc#36] Functions [3]: [avg(ws_quantity#4), avg(UnscaledValue(wr_refunded_cash#18)), avg(UnscaledValue(wr_fee#17))] Aggregate Attributes [3]: [avg(ws_quantity#4)#52, avg(UnscaledValue(wr_refunded_cash#18))#53, avg(UnscaledValue(wr_fee#17))#54] Results [4]: [r_reason_desc#36, avg(ws_quantity#4)#52, avg(UnscaledValue(wr_refunded_cash#18))#53, avg(UnscaledValue(wr_fee#17))#54] -(79) ProjectExecTransformer +(84) ProjectExecTransformer Output [4]: [substr(r_reason_desc#36, 1, 20) AS substr(r_reason_desc, 1, 20)#55, avg(ws_quantity#4)#52 AS avg(ws_quantity)#56, cast((avg(UnscaledValue(wr_refunded_cash#18))#53 / 100.0) as decimal(11,6)) AS avg(wr_refunded_cash)#57, cast((avg(UnscaledValue(wr_fee#17))#54 / 100.0) as decimal(11,6)) AS avg(wr_fee)#58] Input [4]: [r_reason_desc#36, avg(ws_quantity#4)#52, avg(UnscaledValue(wr_refunded_cash#18))#53, avg(UnscaledValue(wr_fee#17))#54] -(80) WholeStageCodegenTransformer (16) +(85) WholeStageCodegenTransformer (15) Input [4]: [substr(r_reason_desc, 1, 20)#55, avg(ws_quantity)#56, avg(wr_refunded_cash)#57, avg(wr_fee)#58] Arguments: false -(81) TakeOrderedAndProjectExecTransformer +(86) TakeOrderedAndProjectExecTransformer Input [4]: [substr(r_reason_desc, 1, 20)#55, avg(ws_quantity)#56, avg(wr_refunded_cash)#57, avg(wr_fee)#58] Arguments: 100, [substr(r_reason_desc, 1, 20)#55 ASC NULLS FIRST, avg(ws_quantity)#56 ASC NULLS FIRST, avg(wr_refunded_cash)#57 ASC NULLS FIRST, avg(wr_fee)#58 ASC NULLS FIRST], [substr(r_reason_desc, 1, 20)#55, avg(ws_quantity)#56, avg(wr_refunded_cash)#57, avg(wr_fee)#58], 0 -(82) VeloxColumnarToRow +(87) VeloxColumnarToRow Input [4]: [substr(r_reason_desc, 1, 20)#55, avg(ws_quantity)#56, avg(wr_refunded_cash)#57, avg(wr_fee)#58] ===== Subqueries ===== Subquery:1 Hosting operator id = 1 Hosting Expression = ws_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (87) -+- ^ ProjectExecTransformer (85) - +- ^ FilterExecTransformer (84) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (83) +ColumnarBroadcastExchange (92) ++- ^ ProjectExecTransformer (90) + +- ^ FilterExecTransformer (89) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (88) -(83) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(88) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#34, d_year#59] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct -(84) FilterExecTransformer +(89) FilterExecTransformer Input [2]: [d_date_sk#34, d_year#59] Arguments: ((isnotnull(d_year#59) AND (d_year#59 = 2000)) AND isnotnull(d_date_sk#34)) -(85) ProjectExecTransformer +(90) ProjectExecTransformer Output [1]: [d_date_sk#34] Input [2]: [d_date_sk#34, d_year#59] -(86) WholeStageCodegenTransformer (1) +(91) WholeStageCodegenTransformer (1) Input [1]: [d_date_sk#34] Arguments: false -(87) ColumnarBroadcastExchange +(92) ColumnarBroadcastExchange Input [1]: [d_date_sk#34] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] -Subquery:2 Hosting operator id = 17 Hosting Expression = Subquery scalar-subquery#20, [id=#3] -VeloxColumnarToRow (99) -+- ^ RegularHashAggregateExecTransformer (97) - +- ^ InputIteratorTransformer (96) - +- ColumnarExchange (94) - +- VeloxResizeBatches (93) - +- ^ FlushableHashAggregateExecTransformer (91) - +- ^ ProjectExecTransformer (90) - +- ^ FilterExecTransformer (89) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (88) +Subquery:2 Hosting operator id = 19 Hosting Expression = Subquery scalar-subquery#20, [id=#3] +ObjectHashAggregate (103) ++- VeloxColumnarToRow (102) + +- ColumnarExchange (101) + +- VeloxResizeBatches (100) + +- RowToVeloxColumnar (99) + +- ObjectHashAggregate (98) + +- VeloxColumnarToRow (97) + +- ^ ProjectExecTransformer (95) + +- ^ FilterExecTransformer (94) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (93) -(88) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(93) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), 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 -(89) FilterExecTransformer +(94) FilterExecTransformer Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Arguments: (((isnotnull(cd_demo_sk#23) AND isnotnull(cd_marital_status#24)) AND isnotnull(cd_education_status#25)) AND ((((cd_marital_status#24 = M) AND (cd_education_status#25 = Advanced Degree )) OR ((cd_marital_status#24 = S) AND (cd_education_status#25 = College ))) OR ((cd_marital_status#24 = W) AND (cd_education_status#25 = 2 yr Degree )))) -(90) ProjectExecTransformer -Output [1]: [xxhash64(cd_demo_sk#23, 42) AS _pre_3#60] +(95) ProjectExecTransformer +Output [1]: [cd_demo_sk#23] Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] -(91) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#60] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#60, 159981, 2239471, 0, 0)] -Aggregate Attributes [1]: [buf#61] -Results [1]: [buf#62] - -(92) WholeStageCodegenTransformer (4) -Input [1]: [buf#62] +(96) WholeStageCodegenTransformer (4) +Input [1]: [cd_demo_sk#23] Arguments: false -(93) VeloxResizeBatches -Input [1]: [buf#62] -Arguments: 1024, 2147483647, 10485760 - -(94) ColumnarExchange -Input [1]: [buf#62] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13], [shuffle_writer_type=hash] +(97) VeloxColumnarToRow +Input [1]: [cd_demo_sk#23] -(95) InputAdapter -Input [1]: [buf#62] - -(96) InputIteratorTransformer -Input [1]: [buf#62] - -(97) RegularHashAggregateExecTransformer -Input [1]: [buf#62] +(98) ObjectHashAggregate +Input [1]: [cd_demo_sk#23] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)#63] -Results [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)#63 AS bloomFilter#64] +Functions [1]: [partial_bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)] +Aggregate Attributes [1]: [buf#60] +Results [1]: [buf#61] -(98) WholeStageCodegenTransformer (5) -Input [1]: [bloomFilter#64] -Arguments: false +(99) RowToVeloxColumnar +Input [1]: [buf#61] -(99) VeloxColumnarToRow -Input [1]: [bloomFilter#64] +(100) VeloxResizeBatches +Input [1]: [buf#61] +Arguments: 1024, 2147483647, 10485760 -Subquery:3 Hosting operator id = 17 Hosting Expression = Subquery scalar-subquery#21, [id=#4] -VeloxColumnarToRow (111) -+- ^ RegularHashAggregateExecTransformer (109) - +- ^ InputIteratorTransformer (108) - +- ColumnarExchange (106) - +- VeloxResizeBatches (105) - +- ^ FlushableHashAggregateExecTransformer (103) - +- ^ ProjectExecTransformer (102) - +- ^ FilterExecTransformer (101) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (100) +(101) ColumnarExchange +Input [1]: [buf#61] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13], [shuffle_writer_type=hash] +(102) VeloxColumnarToRow +Input [1]: [buf#61] -(100) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(103) ObjectHashAggregate +Input [1]: [buf#61] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)#62] +Results [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)#62 AS bloomFilter#63] + +Subquery:3 Hosting operator id = 19 Hosting Expression = Subquery scalar-subquery#21, [id=#4] +ObjectHashAggregate (114) ++- VeloxColumnarToRow (113) + +- ColumnarExchange (112) + +- VeloxResizeBatches (111) + +- RowToVeloxColumnar (110) + +- ObjectHashAggregate (109) + +- VeloxColumnarToRow (108) + +- ^ ProjectExecTransformer (106) + +- ^ FilterExecTransformer (105) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (104) + + +(104) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_address_sk#31, ca_state#32, ca_country#33] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [IN,NJ,OH]),In(ca_state, [CT,KY,WI])),In(ca_state, [AR,IA,LA]))] ReadSchema: struct -(101) FilterExecTransformer +(105) FilterExecTransformer Input [3]: [ca_address_sk#31, ca_state#32, ca_country#33] Arguments: (((isnotnull(ca_country#33) AND (ca_country#33 = United States)) AND isnotnull(ca_address_sk#31)) AND ((ca_state#32 IN (IN,OH,NJ) OR ca_state#32 IN (WI,CT,KY)) OR ca_state#32 IN (LA,IA,AR))) -(102) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#31, 42) AS _pre_4#65] +(106) ProjectExecTransformer +Output [1]: [ca_address_sk#31] Input [3]: [ca_address_sk#31, ca_state#32, ca_country#33] -(103) FlushableHashAggregateExecTransformer -Input [1]: [_pre_4#65] +(107) WholeStageCodegenTransformer (5) +Input [1]: [ca_address_sk#31] +Arguments: false + +(108) VeloxColumnarToRow +Input [1]: [ca_address_sk#31] + +(109) ObjectHashAggregate +Input [1]: [ca_address_sk#31] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_4#65, 152837, 2153999, 0, 0)] -Aggregate Attributes [1]: [buf#66] -Results [1]: [buf#67] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)] +Aggregate Attributes [1]: [buf#64] +Results [1]: [buf#65] -(104) WholeStageCodegenTransformer (6) -Input [1]: [buf#67] -Arguments: false +(110) RowToVeloxColumnar +Input [1]: [buf#65] -(105) VeloxResizeBatches -Input [1]: [buf#67] +(111) VeloxResizeBatches +Input [1]: [buf#65] Arguments: 1024, 2147483647, 10485760 -(106) ColumnarExchange -Input [1]: [buf#67] +(112) ColumnarExchange +Input [1]: [buf#65] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=14], [shuffle_writer_type=hash] -(107) InputAdapter -Input [1]: [buf#67] +(113) VeloxColumnarToRow +Input [1]: [buf#65] -(108) InputIteratorTransformer -Input [1]: [buf#67] - -(109) RegularHashAggregateExecTransformer -Input [1]: [buf#67] +(114) ObjectHashAggregate +Input [1]: [buf#65] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)#68] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)#68 AS bloomFilter#69] - -(110) WholeStageCodegenTransformer (7) -Input [1]: [bloomFilter#69] -Arguments: false - -(111) VeloxColumnarToRow -Input [1]: [bloomFilter#69] - -Subquery:4 Hosting operator id = 16 Hosting Expression = Subquery scalar-subquery#20, [id=#3] -VeloxColumnarToRow (99) -+- ^ RegularHashAggregateExecTransformer (97) - +- ^ InputIteratorTransformer (96) - +- ColumnarExchange (94) - +- VeloxResizeBatches (93) - +- ^ FlushableHashAggregateExecTransformer (91) - +- ^ ProjectExecTransformer (90) - +- ^ FilterExecTransformer (89) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (88) - - -Subquery:5 Hosting operator id = 16 Hosting Expression = Subquery scalar-subquery#21, [id=#4] -VeloxColumnarToRow (111) -+- ^ RegularHashAggregateExecTransformer (109) - +- ^ InputIteratorTransformer (108) - +- ColumnarExchange (106) - +- VeloxResizeBatches (105) - +- ^ FlushableHashAggregateExecTransformer (103) - +- ^ ProjectExecTransformer (102) - +- ^ FilterExecTransformer (101) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (100) - +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)#66] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)#66 AS bloomFilter#67] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/simplified.txt index c309533c42e..e05cf8cae38 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/simplified.txt @@ -1,13 +1,13 @@ VeloxColumnarToRow TakeOrderedAndProjectExecTransformer [substr(r_reason_desc, 1, 20),avg(ws_quantity),avg(wr_refunded_cash),avg(wr_fee)] - WholeStageCodegenTransformer (16) + WholeStageCodegenTransformer (15) ProjectExecTransformer [r_reason_desc,avg(ws_quantity),avg(UnscaledValue(wr_refunded_cash)),avg(UnscaledValue(wr_fee))] RegularHashAggregateExecTransformer [r_reason_desc,sum,count,sum,count,sum,count] [avg(ws_quantity),avg(UnscaledValue(wr_refunded_cash)),avg(UnscaledValue(wr_fee)),sum,count,sum,count,sum,count] InputIteratorTransformer InputAdapter ColumnarExchange [r_reason_desc,sum,count,sum,count,sum,count] #1 VeloxResizeBatches - WholeStageCodegenTransformer (15) + WholeStageCodegenTransformer (14) ProjectExecTransformer [r_reason_desc,sum,count,sum,count,sum,count] FlushableHashAggregateExecTransformer [r_reason_desc,ws_quantity,_pre_x,_pre_x] [sum,count,sum,count,sum,count,sum,count,sum,count,sum,count,sum,count,sum,count] ProjectExecTransformer [ws_quantity,r_reason_desc,wr_refunded_cash,wr_fee] @@ -22,7 +22,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [wr_returning_cdemo_sk,cd_marital_status,cd_education_status,ws_quantity,ws_net_profit,ws_sold_date_sk,wr_refunded_addr_sk,wr_reason_sk,wr_fee,wr_refunded_cash] #2 VeloxResizeBatches - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (9) ProjectExecTransformer [wr_returning_cdemo_sk,cd_marital_status,cd_education_status,ws_quantity,ws_net_profit,ws_sold_date_sk,wr_refunded_addr_sk,wr_reason_sk,wr_fee,wr_refunded_cash] BroadcastHashJoinExecTransformer [wr_refunded_cdemo_sk,cd_demo_sk,cd_marital_status,cd_education_status,ws_sales_price] ProjectExecTransformer [ws_quantity,ws_sales_price,ws_net_profit,ws_sold_date_sk,wr_refunded_cdemo_sk,wr_refunded_addr_sk,wr_returning_cdemo_sk,wr_reason_sk,wr_fee,wr_refunded_cash] @@ -52,80 +52,59 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [wr_item_sk,wr_order_number,wr_refunded_cdemo_sk,wr_refunded_addr_sk,wr_returning_cdemo_sk,wr_reason_sk,wr_fee,wr_refunded_cash] #6 VeloxResizeBatches - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (7) ProjectExecTransformer [wr_item_sk,wr_order_number,wr_refunded_cdemo_sk,wr_refunded_addr_sk,wr_returning_cdemo_sk,wr_reason_sk,wr_fee,wr_refunded_cash] - FilterExecTransformer [wr_item_sk,wr_order_number,wr_refunded_cdemo_sk,wr_returning_cdemo_sk,wr_refunded_addr_sk,wr_reason_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (5) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(cd_demo_sk, 42), 159981, 2239471, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #7 - VeloxResizeBatches - WholeStageCodegenTransformer (4) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [cd_demo_sk] - FilterExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics [cd_demo_sk,cd_marital_status,cd_education_status] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (7) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 152837, 2153999, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #8 - VeloxResizeBatches - WholeStageCodegenTransformer (6) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_country,ca_address_sk,ca_state] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state,ca_country] - FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_item_sk,wr_refunded_cdemo_sk,wr_refunded_addr_sk,wr_returning_cdemo_sk,wr_reason_sk,wr_order_number,wr_fee,wr_refunded_cash,wr_returned_date_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (5) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(cd_demo_sk, 42), 159981, 2239471, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [wr_item_sk,wr_order_number,wr_refunded_cdemo_sk,wr_returning_cdemo_sk,wr_refunded_addr_sk,wr_reason_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(cd_demo_sk, 42), 159981, 2239471, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #7 VeloxResizeBatches - WholeStageCodegenTransformer (4) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [cd_demo_sk] - FilterExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics [cd_demo_sk,cd_marital_status,cd_education_status] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (7) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 152837, 2153999, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [cd_demo_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + ProjectExecTransformer [cd_demo_sk] + FilterExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics [cd_demo_sk,cd_marital_status,cd_education_status] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 152837, 2153999, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #8 VeloxResizeBatches - WholeStageCodegenTransformer (6) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_country,ca_address_sk,ca_state] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state,ca_country] + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (5) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_country,ca_address_sk,ca_state] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state,ca_country] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (6) + FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_item_sk,wr_refunded_cdemo_sk,wr_refunded_addr_sk,wr_returning_cdemo_sk,wr_reason_sk,wr_order_number,wr_fee,wr_refunded_cash,wr_returned_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (8) FilterExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics [cd_demo_sk,cd_marital_status,cd_education_status] InputIteratorTransformer InputAdapter ColumnarExchange [cd_demo_sk,cd_marital_status,cd_education_status] #10 VeloxResizeBatches - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (10) ProjectExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] FilterExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics [cd_demo_sk,cd_marital_status,cd_education_status] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #11 - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (11) ProjectExecTransformer [ca_address_sk,ca_state] FilterExecTransformer [ca_country,ca_address_sk,ca_state] FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state,ca_country] @@ -135,6 +114,6 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #12 - WholeStageCodegenTransformer (14) + WholeStageCodegenTransformer (13) FilterExecTransformer [r_reason_sk] FileSourceScanExecTransformer parquet spark_catalog.default.reason [r_reason_sk,r_reason_desc] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/explain.txt index 79c8d3f7747..05cec1e391d 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/explain.txt @@ -1,42 +1,45 @@ == Physical Plan == -VeloxColumnarToRow (49) -+- ^ ProjectExecTransformer (47) - +- ^ RegularHashAggregateExecTransformer (46) - +- ^ InputIteratorTransformer (45) - +- ColumnarExchange (43) - +- VeloxResizeBatches (42) - +- ^ FlushableHashAggregateExecTransformer (40) - +- ^ ProjectExecTransformer (39) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (38) - :- ^ ProjectExecTransformer (34) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (33) - : :- ^ InputIteratorTransformer (30) - : : +- ColumnarBroadcastExchange (28) - : : +- ^ ProjectExecTransformer (26) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (25) +VeloxColumnarToRow (54) ++- ^ ProjectExecTransformer (52) + +- ^ RegularHashAggregateExecTransformer (51) + +- ^ InputIteratorTransformer (50) + +- ColumnarExchange (48) + +- VeloxResizeBatches (47) + +- ^ FlushableHashAggregateExecTransformer (45) + +- ^ ProjectExecTransformer (44) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (43) + :- ^ ProjectExecTransformer (39) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (38) + : :- ^ InputIteratorTransformer (35) + : : +- ColumnarBroadcastExchange (33) + : : +- ^ ProjectExecTransformer (31) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (30) : : :- ^ InputIteratorTransformer (7) : : : +- ColumnarBroadcastExchange (5) : : : +- ^ ProjectExecTransformer (3) : : : +- ^ FilterExecTransformer (2) : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (1) - : : +- ^ FilterExecTransformer (24) - : : +- ^ ProjectExecTransformer (23) - : : +- ^ RegularHashAggregateExecTransformer (22) - : : +- ^ InputIteratorTransformer (21) - : : +- ColumnarExchange (19) - : : +- VeloxResizeBatches (18) - : : +- ^ ProjectExecTransformer (16) - : : +- ^ FlushableHashAggregateExecTransformer (15) - : : +- ^ ProjectExecTransformer (14) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13) - : : :- ^ FilterExecTransformer (9) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (8) - : : +- ^ InputIteratorTransformer (12) - : : +- ReusedExchange (10) - : +- ^ FilterExecTransformer (32) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (31) - +- ^ InputIteratorTransformer (37) - +- ReusedExchange (35) + : : +- ^ FilterExecTransformer (29) + : : +- ^ ProjectExecTransformer (28) + : : +- ^ RegularHashAggregateExecTransformer (27) + : : +- ^ InputIteratorTransformer (26) + : : +- ColumnarExchange (24) + : : +- VeloxResizeBatches (23) + : : +- ^ ProjectExecTransformer (21) + : : +- ^ FlushableHashAggregateExecTransformer (20) + : : +- ^ ProjectExecTransformer (19) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) + : : :- ^ InputIteratorTransformer (14) + : : : +- RowToVeloxColumnar (12) + : : : +- * Filter (11) + : : : +- VeloxColumnarToRow (10) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (8) + : : +- ^ InputIteratorTransformer (17) + : : +- ReusedExchange (15) + : +- ^ FilterExecTransformer (37) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (36) + +- ^ InputIteratorTransformer (42) + +- ReusedExchange (40) (1) FileSourceScanExecTransformer parquet spark_catalog.default.item @@ -76,98 +79,114 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#5), dynamicpruningexpression(ws_sol PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct -(9) FilterExecTransformer +(9) WholeStageCodegenTransformer (4) +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] +Arguments: false + +(10) VeloxColumnarToRow +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] + +(11) Filter [codegen id : 1] +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] +Condition : (isnotnull(ws_item_sk#3) AND might_contain(Subquery scalar-subquery#7, [id=#2], xxhash64(ws_item_sk#3, 42))) + +(12) RowToVeloxColumnar +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] + +(13) InputAdapter +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] + +(14) InputIteratorTransformer Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] -Arguments: (isnotnull(ws_item_sk#3) AND velox_might_contain(Subquery scalar-subquery#7, [id=#2], xxhash64(ws_item_sk#3, 42))) -(10) ReusedExchange [Reuses operator id: 66] +(15) ReusedExchange [Reuses operator id: 70] Output [1]: [d_date_sk#8] -(11) InputAdapter +(16) InputAdapter Input [1]: [d_date_sk#8] -(12) InputIteratorTransformer +(17) InputIteratorTransformer Input [1]: [d_date_sk#8] -(13) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#5] Right keys [1]: [d_date_sk#8] Join type: Inner Join condition: None -(14) ProjectExecTransformer +(19) ProjectExecTransformer Output [2]: [ws_item_sk#3, UnscaledValue(ws_ext_discount_amt#4) AS _pre_1#9] Input [4]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5, d_date_sk#8] -(15) FlushableHashAggregateExecTransformer +(20) FlushableHashAggregateExecTransformer Input [2]: [ws_item_sk#3, _pre_1#9] Keys [1]: [ws_item_sk#3] Functions [1]: [partial_avg(_pre_1#9)] Aggregate Attributes [2]: [sum#10, count#11] Results [3]: [ws_item_sk#3, sum#12, count#13] -(16) ProjectExecTransformer +(21) ProjectExecTransformer Output [4]: [hash(ws_item_sk#3, 42) AS hash_partition_key#14, ws_item_sk#3, sum#12, count#13] Input [3]: [ws_item_sk#3, sum#12, count#13] -(17) WholeStageCodegenTransformer (6) +(22) WholeStageCodegenTransformer (6) Input [4]: [hash_partition_key#14, ws_item_sk#3, sum#12, count#13] Arguments: false -(18) VeloxResizeBatches +(23) VeloxResizeBatches Input [4]: [hash_partition_key#14, ws_item_sk#3, sum#12, count#13] Arguments: 1024, 2147483647, 10485760 -(19) ColumnarExchange +(24) ColumnarExchange Input [4]: [hash_partition_key#14, ws_item_sk#3, sum#12, count#13] Arguments: hashpartitioning(ws_item_sk#3, 1), ENSURE_REQUIREMENTS, [ws_item_sk#3, sum#12, count#13], [plan_id=3], [shuffle_writer_type=hash] -(20) InputAdapter +(25) InputAdapter Input [3]: [ws_item_sk#3, sum#12, count#13] -(21) InputIteratorTransformer +(26) InputIteratorTransformer Input [3]: [ws_item_sk#3, sum#12, count#13] -(22) RegularHashAggregateExecTransformer +(27) RegularHashAggregateExecTransformer Input [3]: [ws_item_sk#3, sum#12, count#13] Keys [1]: [ws_item_sk#3] Functions [1]: [avg(UnscaledValue(ws_ext_discount_amt#4))] Aggregate Attributes [1]: [avg(UnscaledValue(ws_ext_discount_amt#4))#15] Results [2]: [ws_item_sk#3, avg(UnscaledValue(ws_ext_discount_amt#4))#15] -(23) ProjectExecTransformer +(28) ProjectExecTransformer Output [2]: [(1.3 * cast((avg(UnscaledValue(ws_ext_discount_amt#4))#15 / 100.0) as decimal(11,6))) AS (1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#3] Input [2]: [ws_item_sk#3, avg(UnscaledValue(ws_ext_discount_amt#4))#15] -(24) FilterExecTransformer +(29) FilterExecTransformer Input [2]: [(1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#3] Arguments: isnotnull((1.3 * avg(ws_ext_discount_amt))#16) -(25) BroadcastHashJoinExecTransformer +(30) BroadcastHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [ws_item_sk#3] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16] Input [3]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#3] -(27) WholeStageCodegenTransformer (7) +(32) WholeStageCodegenTransformer (7) Input [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16] Arguments: false -(28) ColumnarBroadcastExchange +(33) ColumnarBroadcastExchange Input [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] -(29) InputAdapter +(34) InputAdapter Input [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16] -(31) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(36) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [3]: [ws_item_sk#17, ws_ext_discount_amt#18, ws_sold_date_sk#19] Batched: true Location: InMemoryFileIndex [] @@ -175,192 +194,177 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#19), dynamicpruningexpression(ws_so PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_ext_discount_amt)] ReadSchema: struct -(32) FilterExecTransformer +(37) FilterExecTransformer Input [3]: [ws_item_sk#17, ws_ext_discount_amt#18, ws_sold_date_sk#19] Arguments: (isnotnull(ws_item_sk#17) AND isnotnull(ws_ext_discount_amt#18)) -(33) BroadcastHashJoinExecTransformer +(38) BroadcastHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [ws_item_sk#17] Join type: Inner Join condition: (cast(ws_ext_discount_amt#18 as decimal(14,7)) > (1.3 * avg(ws_ext_discount_amt))#16) -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [2]: [ws_ext_discount_amt#18, ws_sold_date_sk#19] Input [5]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#17, ws_ext_discount_amt#18, ws_sold_date_sk#19] -(35) ReusedExchange [Reuses operator id: 66] +(40) ReusedExchange [Reuses operator id: 70] Output [1]: [d_date_sk#20] -(36) InputAdapter +(41) InputAdapter Input [1]: [d_date_sk#20] -(37) InputIteratorTransformer +(42) InputIteratorTransformer Input [1]: [d_date_sk#20] -(38) BroadcastHashJoinExecTransformer +(43) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#19] Right keys [1]: [d_date_sk#20] Join type: Inner Join condition: None -(39) ProjectExecTransformer +(44) ProjectExecTransformer Output [1]: [UnscaledValue(ws_ext_discount_amt#18) AS _pre_2#21] Input [3]: [ws_ext_discount_amt#18, ws_sold_date_sk#19, d_date_sk#20] -(40) FlushableHashAggregateExecTransformer +(45) FlushableHashAggregateExecTransformer Input [1]: [_pre_2#21] Keys: [] Functions [1]: [partial_sum(_pre_2#21)] Aggregate Attributes [1]: [sum#22] Results [1]: [sum#23] -(41) WholeStageCodegenTransformer (10) +(46) WholeStageCodegenTransformer (10) Input [1]: [sum#23] Arguments: false -(42) VeloxResizeBatches +(47) VeloxResizeBatches Input [1]: [sum#23] Arguments: 1024, 2147483647, 10485760 -(43) ColumnarExchange +(48) ColumnarExchange Input [1]: [sum#23] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5], [shuffle_writer_type=hash] -(44) InputAdapter +(49) InputAdapter Input [1]: [sum#23] -(45) InputIteratorTransformer +(50) InputIteratorTransformer Input [1]: [sum#23] -(46) RegularHashAggregateExecTransformer +(51) RegularHashAggregateExecTransformer Input [1]: [sum#23] Keys: [] Functions [1]: [sum(UnscaledValue(ws_ext_discount_amt#18))] Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_discount_amt#18))#24] Results [1]: [sum(UnscaledValue(ws_ext_discount_amt#18))#24] -(47) ProjectExecTransformer +(52) ProjectExecTransformer Output [1]: [MakeDecimal(sum(UnscaledValue(ws_ext_discount_amt#18))#24,17,2) AS Excess Discount Amount #25] Input [1]: [sum(UnscaledValue(ws_ext_discount_amt#18))#24] -(48) WholeStageCodegenTransformer (11) +(53) WholeStageCodegenTransformer (11) Input [1]: [Excess Discount Amount #25] Arguments: false -(49) VeloxColumnarToRow +(54) VeloxColumnarToRow Input [1]: [Excess Discount Amount #25] ===== Subqueries ===== -Subquery:1 Hosting operator id = 9 Hosting Expression = Subquery scalar-subquery#7, [id=#2] -VeloxColumnarToRow (61) -+- ^ RegularHashAggregateExecTransformer (59) - +- ^ InputIteratorTransformer (58) - +- ColumnarExchange (56) - +- VeloxResizeBatches (55) - +- ^ FlushableHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ FilterExecTransformer (51) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (50) +Subquery:1 Hosting operator id = 11 Hosting Expression = Subquery scalar-subquery#7, [id=#2] +ObjectHashAggregate (65) ++- VeloxColumnarToRow (64) + +- ColumnarExchange (63) + +- VeloxResizeBatches (62) + +- RowToVeloxColumnar (61) + +- ObjectHashAggregate (60) + +- VeloxColumnarToRow (59) + +- ^ ProjectExecTransformer (57) + +- ^ FilterExecTransformer (56) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (55) -(50) FileSourceScanExecTransformer parquet spark_catalog.default.item +(55) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#1, i_manufact_id#2] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manufact_id), EqualTo(i_manufact_id,350), IsNotNull(i_item_sk)] ReadSchema: struct -(51) FilterExecTransformer +(56) FilterExecTransformer Input [2]: [i_item_sk#1, i_manufact_id#2] Arguments: ((isnotnull(i_manufact_id#2) AND (i_manufact_id#2 = 350)) AND isnotnull(i_item_sk#1)) -(52) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#1, 42) AS _pre_3#26] +(57) ProjectExecTransformer +Output [1]: [i_item_sk#1] Input [2]: [i_item_sk#1, i_manufact_id#2] -(53) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#26] +(58) WholeStageCodegenTransformer (2) +Input [1]: [i_item_sk#1] +Arguments: false + +(59) VeloxColumnarToRow +Input [1]: [i_item_sk#1] + +(60) ObjectHashAggregate +Input [1]: [i_item_sk#1] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#26, 199, 5556, 0, 0)] -Aggregate Attributes [1]: [buf#27] -Results [1]: [buf#28] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] +Aggregate Attributes [1]: [buf#26] +Results [1]: [buf#27] -(54) WholeStageCodegenTransformer (2) -Input [1]: [buf#28] -Arguments: false +(61) RowToVeloxColumnar +Input [1]: [buf#27] -(55) VeloxResizeBatches -Input [1]: [buf#28] +(62) VeloxResizeBatches +Input [1]: [buf#27] Arguments: 1024, 2147483647, 10485760 -(56) ColumnarExchange -Input [1]: [buf#28] +(63) ColumnarExchange +Input [1]: [buf#27] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6], [shuffle_writer_type=hash] -(57) InputAdapter -Input [1]: [buf#28] - -(58) InputIteratorTransformer -Input [1]: [buf#28] +(64) VeloxColumnarToRow +Input [1]: [buf#27] -(59) RegularHashAggregateExecTransformer -Input [1]: [buf#28] +(65) ObjectHashAggregate +Input [1]: [buf#27] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#29] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#29 AS bloomFilter#30] - -(60) WholeStageCodegenTransformer (3) -Input [1]: [bloomFilter#30] -Arguments: false - -(61) VeloxColumnarToRow -Input [1]: [bloomFilter#30] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#28] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#28 AS bloomFilter#29] Subquery:2 Hosting operator id = 8 Hosting Expression = ws_sold_date_sk#5 IN dynamicpruning#6 -ColumnarBroadcastExchange (66) -+- ^ ProjectExecTransformer (64) - +- ^ FilterExecTransformer (63) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (62) +ColumnarBroadcastExchange (70) ++- ^ ProjectExecTransformer (68) + +- ^ FilterExecTransformer (67) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (66) -(62) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#8, d_date#31] +(66) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [2]: [d_date_sk#8, d_date#30] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-01-27), LessThanOrEqual(d_date,2000-04-26), IsNotNull(d_date_sk)] ReadSchema: struct -(63) FilterExecTransformer -Input [2]: [d_date_sk#8, d_date#31] -Arguments: (((isnotnull(d_date#31) AND (d_date#31 >= 2000-01-27)) AND (d_date#31 <= 2000-04-26)) AND isnotnull(d_date_sk#8)) +(67) FilterExecTransformer +Input [2]: [d_date_sk#8, d_date#30] +Arguments: (((isnotnull(d_date#30) AND (d_date#30 >= 2000-01-27)) AND (d_date#30 <= 2000-04-26)) AND isnotnull(d_date_sk#8)) -(64) ProjectExecTransformer +(68) ProjectExecTransformer Output [1]: [d_date_sk#8] -Input [2]: [d_date_sk#8, d_date#31] +Input [2]: [d_date_sk#8, d_date#30] -(65) WholeStageCodegenTransformer (4) +(69) WholeStageCodegenTransformer (3) Input [1]: [d_date_sk#8] Arguments: false -(66) ColumnarBroadcastExchange +(70) ColumnarBroadcastExchange Input [1]: [d_date_sk#8] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:3 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#7, [id=#2] -VeloxColumnarToRow (61) -+- ^ RegularHashAggregateExecTransformer (59) - +- ^ InputIteratorTransformer (58) - +- ColumnarExchange (56) - +- VeloxResizeBatches (55) - +- ^ FlushableHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ FilterExecTransformer (51) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (50) - - -Subquery:4 Hosting operator id = 31 Hosting Expression = ws_sold_date_sk#19 IN dynamicpruning#6 +Subquery:3 Hosting operator id = 36 Hosting Expression = ws_sold_date_sk#19 IN dynamicpruning#6 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/simplified.txt index 15ffbe4ce83..1d96ba9c5f2 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/simplified.txt @@ -37,40 +37,33 @@ VeloxColumnarToRow FlushableHashAggregateExecTransformer [ws_item_sk,_pre_x] [sum,count,sum,count,sum,count] ProjectExecTransformer [ws_item_sk,ws_ext_discount_amt] BroadcastHashJoinExecTransformer [ws_sold_date_sk,d_date_sk] - FilterExecTransformer [ws_item_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (3) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (2) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] - FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_ext_discount_amt,ws_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (4) - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (3) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ws_item_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (2) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_manufact_id,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_ext_discount_amt,ws_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #5 + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] InputIteratorTransformer InputAdapter ReusedExchange [d_date_sk] #5 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt index 95d1d08e432..e6413d2cff9 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt @@ -1,50 +1,53 @@ == Physical Plan == -VeloxColumnarToRow (59) -+- ^ ProjectExecTransformer (57) - +- ^ RegularHashAggregateExecTransformer (56) - +- ^ RegularHashAggregateExecTransformer (55) - +- ^ RegularHashAggregateExecTransformer (54) - +- ^ RegularHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51) - :- ^ ProjectExecTransformer (43) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (42) - : :- ^ ProjectExecTransformer (34) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (33) - : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (25) - : : : :- ^ ProjectExecTransformer (17) - : : : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (16) - : : : : :- ^ InputIteratorTransformer (8) - : : : : : +- ColumnarExchange (6) - : : : : : +- VeloxResizeBatches (5) - : : : : : +- ^ ProjectExecTransformer (3) - : : : : : +- ^ FilterExecTransformer (2) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (1) - : : : : +- ^ InputIteratorTransformer (15) - : : : : +- ColumnarExchange (13) - : : : : +- VeloxResizeBatches (12) - : : : : +- ^ ProjectExecTransformer (10) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (9) - : : : +- ^ InputIteratorTransformer (24) - : : : +- ColumnarExchange (22) - : : : +- VeloxResizeBatches (21) - : : : +- ^ ProjectExecTransformer (19) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (18) - : : +- ^ InputIteratorTransformer (32) - : : +- ColumnarBroadcastExchange (30) - : : +- ^ ProjectExecTransformer (28) - : : +- ^ FilterExecTransformer (27) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (26) - : +- ^ InputIteratorTransformer (41) - : +- ColumnarBroadcastExchange (39) - : +- ^ ProjectExecTransformer (37) - : +- ^ FilterExecTransformer (36) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (35) - +- ^ InputIteratorTransformer (50) - +- ColumnarBroadcastExchange (48) - +- ^ ProjectExecTransformer (46) - +- ^ FilterExecTransformer (45) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (44) +VeloxColumnarToRow (64) ++- ^ ProjectExecTransformer (62) + +- ^ RegularHashAggregateExecTransformer (61) + +- ^ RegularHashAggregateExecTransformer (60) + +- ^ RegularHashAggregateExecTransformer (59) + +- ^ RegularHashAggregateExecTransformer (58) + +- ^ ProjectExecTransformer (57) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (56) + :- ^ ProjectExecTransformer (48) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (47) + : :- ^ ProjectExecTransformer (39) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (38) + : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (30) + : : : :- ^ ProjectExecTransformer (22) + : : : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (21) + : : : : :- ^ InputIteratorTransformer (13) + : : : : : +- ColumnarExchange (11) + : : : : : +- VeloxResizeBatches (10) + : : : : : +- ^ ProjectExecTransformer (8) + : : : : : +- ^ InputIteratorTransformer (7) + : : : : : +- RowToVeloxColumnar (5) + : : : : : +- * Filter (4) + : : : : : +- VeloxColumnarToRow (3) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (1) + : : : : +- ^ InputIteratorTransformer (20) + : : : : +- ColumnarExchange (18) + : : : : +- VeloxResizeBatches (17) + : : : : +- ^ ProjectExecTransformer (15) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (14) + : : : +- ^ InputIteratorTransformer (29) + : : : +- ColumnarExchange (27) + : : : +- VeloxResizeBatches (26) + : : : +- ^ ProjectExecTransformer (24) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (23) + : : +- ^ InputIteratorTransformer (37) + : : +- ColumnarBroadcastExchange (35) + : : +- ^ ProjectExecTransformer (33) + : : +- ^ FilterExecTransformer (32) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (31) + : +- ^ InputIteratorTransformer (46) + : +- ColumnarBroadcastExchange (44) + : +- ^ ProjectExecTransformer (42) + : +- ^ FilterExecTransformer (41) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (40) + +- ^ InputIteratorTransformer (55) + +- ColumnarBroadcastExchange (53) + +- ^ ProjectExecTransformer (51) + +- ^ FilterExecTransformer (50) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (49) (1) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales @@ -54,494 +57,465 @@ Location: CatalogFileIndex [{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (4) +Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] +Arguments: false + +(3) VeloxColumnarToRow +Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] + +(4) Filter [codegen id : 1] +Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] +Condition : (((((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ws_ship_addr_sk#2, 42))) AND might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ws_web_site_sk#3, 42))) AND might_contain(Subquery scalar-subquery#11, [id=#3], xxhash64(ws_ship_date_sk#1, 42))) + +(5) RowToVeloxColumnar Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] -Arguments: (((((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND velox_might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ws_ship_addr_sk#2, 42))) AND velox_might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ws_web_site_sk#3, 42))) AND velox_might_contain(Subquery scalar-subquery#11, [id=#3], xxhash64(ws_ship_date_sk#1, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] + +(7) InputIteratorTransformer +Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] + +(8) ProjectExecTransformer Output [8]: [hash(ws_order_number#5, 42) AS hash_partition_key#12, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] -(4) WholeStageCodegenTransformer (7) +(9) WholeStageCodegenTransformer (5) Input [8]: [hash_partition_key#12, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [8]: [hash_partition_key#12, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [8]: [hash_partition_key#12, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Arguments: hashpartitioning(ws_order_number#5, 1), ENSURE_REQUIREMENTS, [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7], [plan_id=4], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [3]: [ws_warehouse_sk#13, ws_order_number#14, ws_sold_date_sk#15] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_sales] ReadSchema: struct -(10) ProjectExecTransformer +(15) ProjectExecTransformer Output [3]: [hash(ws_order_number#14, 42) AS hash_partition_key#16, ws_warehouse_sk#13, ws_order_number#14] Input [3]: [ws_warehouse_sk#13, ws_order_number#14, ws_sold_date_sk#15] -(11) WholeStageCodegenTransformer (8) +(16) WholeStageCodegenTransformer (6) Input [3]: [hash_partition_key#16, ws_warehouse_sk#13, ws_order_number#14] Arguments: false -(12) VeloxResizeBatches +(17) VeloxResizeBatches Input [3]: [hash_partition_key#16, ws_warehouse_sk#13, ws_order_number#14] Arguments: 1024, 2147483647, 10485760 -(13) ColumnarExchange +(18) ColumnarExchange Input [3]: [hash_partition_key#16, ws_warehouse_sk#13, ws_order_number#14] Arguments: hashpartitioning(ws_order_number#14, 1), ENSURE_REQUIREMENTS, [ws_warehouse_sk#13, ws_order_number#14], [plan_id=5], [shuffle_writer_type=hash] -(14) InputAdapter +(19) InputAdapter Input [2]: [ws_warehouse_sk#13, ws_order_number#14] -(15) InputIteratorTransformer +(20) InputIteratorTransformer Input [2]: [ws_warehouse_sk#13, ws_order_number#14] -(16) ShuffledHashJoinExecTransformer +(21) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#5] Right keys [1]: [ws_order_number#14] Join type: LeftSemi Join condition: NOT (ws_warehouse_sk#4 = ws_warehouse_sk#13) -(17) ProjectExecTransformer +(22) ProjectExecTransformer Output [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -(18) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns +(23) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns Output [2]: [wr_order_number#17, wr_returned_date_sk#18] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_returns] ReadSchema: struct -(19) ProjectExecTransformer +(24) ProjectExecTransformer Output [2]: [hash(wr_order_number#17, 42) AS hash_partition_key#19, wr_order_number#17] Input [2]: [wr_order_number#17, wr_returned_date_sk#18] -(20) WholeStageCodegenTransformer (9) +(25) WholeStageCodegenTransformer (7) Input [2]: [hash_partition_key#19, wr_order_number#17] Arguments: false -(21) VeloxResizeBatches +(26) VeloxResizeBatches Input [2]: [hash_partition_key#19, wr_order_number#17] Arguments: 1024, 2147483647, 10485760 -(22) ColumnarExchange +(27) ColumnarExchange Input [2]: [hash_partition_key#19, wr_order_number#17] Arguments: hashpartitioning(wr_order_number#17, 1), ENSURE_REQUIREMENTS, [wr_order_number#17], [plan_id=6], [shuffle_writer_type=hash] -(23) InputAdapter +(28) InputAdapter Input [1]: [wr_order_number#17] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [1]: [wr_order_number#17] -(25) ShuffledHashJoinExecTransformer +(30) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#5] Right keys [1]: [wr_order_number#17] Join type: LeftAnti Join condition: None -(26) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(31) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct -(27) FilterExecTransformer +(32) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_state#21] Arguments: ((isnotnull(ca_state#21) AND (ca_state#21 = IL)) AND isnotnull(ca_address_sk#20)) -(28) ProjectExecTransformer +(33) ProjectExecTransformer Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_state#21] -(29) WholeStageCodegenTransformer (10) +(34) WholeStageCodegenTransformer (8) Input [1]: [ca_address_sk#20] Arguments: false -(30) ColumnarBroadcastExchange +(35) ColumnarBroadcastExchange Input [1]: [ca_address_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(31) InputAdapter +(36) InputAdapter Input [1]: [ca_address_sk#20] -(32) InputIteratorTransformer +(37) InputIteratorTransformer Input [1]: [ca_address_sk#20] -(33) BroadcastHashJoinExecTransformer +(38) BroadcastHashJoinExecTransformer Left keys [1]: [ws_ship_addr_sk#2] Right keys [1]: [ca_address_sk#20] Join type: Inner Join condition: None -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [5]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ca_address_sk#20] -(35) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(40) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#22, web_company_name#23] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct -(36) FilterExecTransformer +(41) FilterExecTransformer Input [2]: [web_site_sk#22, web_company_name#23] Arguments: ((isnotnull(web_company_name#23) AND (web_company_name#23 = pri )) AND isnotnull(web_site_sk#22)) -(37) ProjectExecTransformer +(42) ProjectExecTransformer Output [1]: [web_site_sk#22] Input [2]: [web_site_sk#22, web_company_name#23] -(38) WholeStageCodegenTransformer (11) +(43) WholeStageCodegenTransformer (9) Input [1]: [web_site_sk#22] Arguments: false -(39) ColumnarBroadcastExchange +(44) ColumnarBroadcastExchange Input [1]: [web_site_sk#22] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -(40) InputAdapter +(45) InputAdapter Input [1]: [web_site_sk#22] -(41) InputIteratorTransformer +(46) InputIteratorTransformer Input [1]: [web_site_sk#22] -(42) BroadcastHashJoinExecTransformer +(47) BroadcastHashJoinExecTransformer Left keys [1]: [ws_web_site_sk#3] Right keys [1]: [web_site_sk#22] Join type: Inner Join condition: None -(43) ProjectExecTransformer +(48) ProjectExecTransformer Output [4]: [ws_ship_date_sk#1, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [6]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, web_site_sk#22] -(44) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(49) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#24, d_date#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(45) FilterExecTransformer +(50) FilterExecTransformer Input [2]: [d_date_sk#24, d_date#25] Arguments: (((isnotnull(d_date#25) AND (d_date#25 >= 1999-02-01)) AND (d_date#25 <= 1999-04-02)) AND isnotnull(d_date_sk#24)) -(46) ProjectExecTransformer +(51) ProjectExecTransformer Output [1]: [d_date_sk#24] Input [2]: [d_date_sk#24, d_date#25] -(47) WholeStageCodegenTransformer (12) +(52) WholeStageCodegenTransformer (10) Input [1]: [d_date_sk#24] Arguments: false -(48) ColumnarBroadcastExchange +(53) ColumnarBroadcastExchange Input [1]: [d_date_sk#24] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -(49) InputAdapter +(54) InputAdapter Input [1]: [d_date_sk#24] -(50) InputIteratorTransformer +(55) InputIteratorTransformer Input [1]: [d_date_sk#24] -(51) BroadcastHashJoinExecTransformer +(56) BroadcastHashJoinExecTransformer Left keys [1]: [ws_ship_date_sk#1] Right keys [1]: [d_date_sk#24] Join type: Inner Join condition: None -(52) ProjectExecTransformer +(57) ProjectExecTransformer Output [3]: [ws_order_number#5, UnscaledValue(ws_ext_ship_cost#6) AS _pre_1#26, UnscaledValue(ws_net_profit#7) AS _pre_2#27] Input [5]: [ws_ship_date_sk#1, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, d_date_sk#24] -(53) RegularHashAggregateExecTransformer +(58) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#5, _pre_1#26, _pre_2#27] Keys [1]: [ws_order_number#5] Functions [2]: [partial_sum(_pre_1#26), partial_sum(_pre_2#27)] Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29] Results [3]: [ws_order_number#5, sum#30, sum#31] -(54) RegularHashAggregateExecTransformer +(59) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#5, sum#30, sum#31] Keys [1]: [ws_order_number#5] Functions [2]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(UnscaledValue(ws_net_profit#7))] Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29] Results [3]: [ws_order_number#5, sum#30, sum#31] -(55) RegularHashAggregateExecTransformer +(60) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#5, sum#30, sum#31] Keys: [] Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(UnscaledValue(ws_net_profit#7)), partial_count(distinct ws_order_number#5)] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29, count(ws_order_number#5)#32] Results [3]: [sum#30, sum#31, count#33] -(56) RegularHashAggregateExecTransformer +(61) RegularHashAggregateExecTransformer Input [3]: [sum#30, sum#31, count#33] Keys: [] Functions [3]: [sum(UnscaledValue(ws_ext_ship_cost#6)), sum(UnscaledValue(ws_net_profit#7)), count(distinct ws_order_number#5)] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29, count(ws_order_number#5)#32] Results [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29, count(ws_order_number#5)#32] -(57) ProjectExecTransformer +(62) ProjectExecTransformer Output [3]: [count(ws_order_number#5)#32 AS order count #34, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#6))#28,17,2) AS total shipping cost #35, MakeDecimal(sum(UnscaledValue(ws_net_profit#7))#29,17,2) AS total net profit #36] Input [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29, count(ws_order_number#5)#32] -(58) WholeStageCodegenTransformer (13) +(63) WholeStageCodegenTransformer (11) Input [3]: [order count #34, total shipping cost #35, total net profit #36] Arguments: false -(59) VeloxColumnarToRow +(64) VeloxColumnarToRow Input [3]: [order count #34, total shipping cost #35, total net profit #36] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (71) -+- ^ RegularHashAggregateExecTransformer (69) - +- ^ InputIteratorTransformer (68) - +- ColumnarExchange (66) - +- VeloxResizeBatches (65) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ FilterExecTransformer (61) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (60) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#9, [id=#1] +ObjectHashAggregate (75) ++- VeloxColumnarToRow (74) + +- ColumnarExchange (73) + +- VeloxResizeBatches (72) + +- RowToVeloxColumnar (71) + +- ObjectHashAggregate (70) + +- VeloxColumnarToRow (69) + +- ^ ProjectExecTransformer (67) + +- ^ FilterExecTransformer (66) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (65) -(60) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(65) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct -(61) FilterExecTransformer +(66) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_state#21] Arguments: ((isnotnull(ca_state#21) AND (ca_state#21 = IL)) AND isnotnull(ca_address_sk#20)) -(62) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#20, 42) AS _pre_3#37] +(67) ProjectExecTransformer +Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_state#21] -(63) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#37] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#37, 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [buf#38] -Results [1]: [buf#39] - -(64) WholeStageCodegenTransformer (1) -Input [1]: [buf#39] +(68) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#20] Arguments: false -(65) VeloxResizeBatches -Input [1]: [buf#39] -Arguments: 1024, 2147483647, 10485760 - -(66) ColumnarExchange -Input [1]: [buf#39] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] - -(67) InputAdapter -Input [1]: [buf#39] - -(68) InputIteratorTransformer -Input [1]: [buf#39] +(69) VeloxColumnarToRow +Input [1]: [ca_address_sk#20] -(69) RegularHashAggregateExecTransformer -Input [1]: [buf#39] +(70) ObjectHashAggregate +Input [1]: [ca_address_sk#20] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#40] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#40 AS bloomFilter#41] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [buf#37] +Results [1]: [buf#38] -(70) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#41] -Arguments: false +(71) RowToVeloxColumnar +Input [1]: [buf#38] -(71) VeloxColumnarToRow -Input [1]: [bloomFilter#41] +(72) VeloxResizeBatches +Input [1]: [buf#38] +Arguments: 1024, 2147483647, 10485760 -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (83) -+- ^ RegularHashAggregateExecTransformer (81) - +- ^ InputIteratorTransformer (80) - +- ColumnarExchange (78) - +- VeloxResizeBatches (77) - +- ^ FlushableHashAggregateExecTransformer (75) - +- ^ ProjectExecTransformer (74) - +- ^ FilterExecTransformer (73) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (72) +(73) ColumnarExchange +Input [1]: [buf#38] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] +(74) VeloxColumnarToRow +Input [1]: [buf#38] -(72) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(75) ObjectHashAggregate +Input [1]: [buf#38] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#39] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#39 AS bloomFilter#40] + +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#10, [id=#2] +ObjectHashAggregate (86) ++- VeloxColumnarToRow (85) + +- ColumnarExchange (84) + +- VeloxResizeBatches (83) + +- RowToVeloxColumnar (82) + +- ObjectHashAggregate (81) + +- VeloxColumnarToRow (80) + +- ^ ProjectExecTransformer (78) + +- ^ FilterExecTransformer (77) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (76) + + +(76) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#22, web_company_name#23] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct -(73) FilterExecTransformer +(77) FilterExecTransformer Input [2]: [web_site_sk#22, web_company_name#23] Arguments: ((isnotnull(web_company_name#23) AND (web_company_name#23 = pri )) AND isnotnull(web_site_sk#22)) -(74) ProjectExecTransformer -Output [1]: [xxhash64(web_site_sk#22, 42) AS _pre_4#42] +(78) ProjectExecTransformer +Output [1]: [web_site_sk#22] Input [2]: [web_site_sk#22, web_company_name#23] -(75) FlushableHashAggregateExecTransformer -Input [1]: [_pre_4#42] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_4#42, 4, 144, 0, 0)] -Aggregate Attributes [1]: [buf#43] -Results [1]: [buf#44] - -(76) WholeStageCodegenTransformer (3) -Input [1]: [buf#44] +(79) WholeStageCodegenTransformer (2) +Input [1]: [web_site_sk#22] Arguments: false -(77) VeloxResizeBatches -Input [1]: [buf#44] -Arguments: 1024, 2147483647, 10485760 - -(78) ColumnarExchange -Input [1]: [buf#44] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] - -(79) InputAdapter -Input [1]: [buf#44] - -(80) InputIteratorTransformer -Input [1]: [buf#44] +(80) VeloxColumnarToRow +Input [1]: [web_site_sk#22] -(81) RegularHashAggregateExecTransformer -Input [1]: [buf#44] +(81) ObjectHashAggregate +Input [1]: [web_site_sk#22] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)#45] -Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)#45 AS bloomFilter#46] +Functions [1]: [partial_bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [buf#41] +Results [1]: [buf#42] -(82) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#46] -Arguments: false +(82) RowToVeloxColumnar +Input [1]: [buf#42] -(83) VeloxColumnarToRow -Input [1]: [bloomFilter#46] +(83) VeloxResizeBatches +Input [1]: [buf#42] +Arguments: 1024, 2147483647, 10485760 -Subquery:3 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#11, [id=#3] -VeloxColumnarToRow (95) -+- ^ RegularHashAggregateExecTransformer (93) - +- ^ InputIteratorTransformer (92) - +- ColumnarExchange (90) - +- VeloxResizeBatches (89) - +- ^ FlushableHashAggregateExecTransformer (87) - +- ^ ProjectExecTransformer (86) - +- ^ FilterExecTransformer (85) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (84) +(84) ColumnarExchange +Input [1]: [buf#42] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] +(85) VeloxColumnarToRow +Input [1]: [buf#42] -(84) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(86) ObjectHashAggregate +Input [1]: [buf#42] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)#43] +Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)#43 AS bloomFilter#44] + +Subquery:3 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#11, [id=#3] +ObjectHashAggregate (97) ++- VeloxColumnarToRow (96) + +- ColumnarExchange (95) + +- VeloxResizeBatches (94) + +- RowToVeloxColumnar (93) + +- ObjectHashAggregate (92) + +- VeloxColumnarToRow (91) + +- ^ ProjectExecTransformer (89) + +- ^ FilterExecTransformer (88) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) + + +(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#24, d_date#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(85) FilterExecTransformer +(88) FilterExecTransformer Input [2]: [d_date_sk#24, d_date#25] Arguments: (((isnotnull(d_date#25) AND (d_date#25 >= 1999-02-01)) AND (d_date#25 <= 1999-04-02)) AND isnotnull(d_date_sk#24)) -(86) ProjectExecTransformer -Output [1]: [xxhash64(d_date_sk#24, 42) AS _pre_5#47] +(89) ProjectExecTransformer +Output [1]: [d_date_sk#24] Input [2]: [d_date_sk#24, d_date#25] -(87) FlushableHashAggregateExecTransformer -Input [1]: [_pre_5#47] +(90) WholeStageCodegenTransformer (3) +Input [1]: [d_date_sk#24] +Arguments: false + +(91) VeloxColumnarToRow +Input [1]: [d_date_sk#24] + +(92) ObjectHashAggregate +Input [1]: [d_date_sk#24] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_5#47, 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [buf#48] -Results [1]: [buf#49] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [buf#45] +Results [1]: [buf#46] -(88) WholeStageCodegenTransformer (5) -Input [1]: [buf#49] -Arguments: false +(93) RowToVeloxColumnar +Input [1]: [buf#46] -(89) VeloxResizeBatches -Input [1]: [buf#49] +(94) VeloxResizeBatches +Input [1]: [buf#46] Arguments: 1024, 2147483647, 10485760 -(90) ColumnarExchange -Input [1]: [buf#49] +(95) ColumnarExchange +Input [1]: [buf#46] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(91) InputAdapter -Input [1]: [buf#49] +(96) VeloxColumnarToRow +Input [1]: [buf#46] -(92) InputIteratorTransformer -Input [1]: [buf#49] - -(93) RegularHashAggregateExecTransformer -Input [1]: [buf#49] +(97) ObjectHashAggregate +Input [1]: [buf#46] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#50] -Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#50 AS bloomFilter#51] - -(94) WholeStageCodegenTransformer (6) -Input [1]: [bloomFilter#51] -Arguments: false - -(95) VeloxColumnarToRow -Input [1]: [bloomFilter#51] - -Subquery:4 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (71) -+- ^ RegularHashAggregateExecTransformer (69) - +- ^ InputIteratorTransformer (68) - +- ColumnarExchange (66) - +- VeloxResizeBatches (65) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ FilterExecTransformer (61) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (60) - - -Subquery:5 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (83) -+- ^ RegularHashAggregateExecTransformer (81) - +- ^ InputIteratorTransformer (80) - +- ColumnarExchange (78) - +- VeloxResizeBatches (77) - +- ^ FlushableHashAggregateExecTransformer (75) - +- ^ ProjectExecTransformer (74) - +- ^ FilterExecTransformer (73) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (72) - - -Subquery:6 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#11, [id=#3] -VeloxColumnarToRow (95) -+- ^ RegularHashAggregateExecTransformer (93) - +- ^ InputIteratorTransformer (92) - +- ColumnarExchange (90) - +- VeloxResizeBatches (89) - +- ^ FlushableHashAggregateExecTransformer (87) - +- ^ ProjectExecTransformer (86) - +- ^ FilterExecTransformer (85) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (84) - +Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#47] +Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#47 AS bloomFilter#48] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt index 547b6e44685..0ba5c7ff66e 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt @@ -1,5 +1,5 @@ VeloxColumnarToRow - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))] RegularHashAggregateExecTransformer [sum,sum,count] [sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count] RegularHashAggregateExecTransformer [ws_order_number] [sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count] @@ -18,120 +18,85 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ws_order_number,ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_warehouse_sk,ws_ext_ship_cost,ws_net_profit] #1 VeloxResizeBatches - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (5) ProjectExecTransformer [ws_order_number,ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_warehouse_sk,ws_ext_ship_cost,ws_net_profit] - FilterExecTransformer [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #2 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [web_site_sk] - FilterExecTransformer [web_company_name,web_site_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_warehouse_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit,ws_sold_date_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #2 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_state,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #3 VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [web_site_sk] - FilterExecTransformer [web_company_name,web_site_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [web_site_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [web_site_sk] + FilterExecTransformer [web_company_name,web_site_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + RowToVeloxColumnar + ObjectHashAggregate [d_date_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_warehouse_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit,ws_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarExchange [ws_order_number,ws_warehouse_sk] #5 VeloxResizeBatches - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (6) ProjectExecTransformer [ws_order_number,ws_warehouse_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_warehouse_sk,ws_order_number,ws_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarExchange [wr_order_number] #6 VeloxResizeBatches - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (7) ProjectExecTransformer [wr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_order_number,wr_returned_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #7 - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (8) ProjectExecTransformer [ca_address_sk] FilterExecTransformer [ca_state,ca_address_sk] FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (9) ProjectExecTransformer [web_site_sk] FilterExecTransformer [web_company_name,web_site_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (10) ProjectExecTransformer [d_date_sk] FilterExecTransformer [d_date,d_date_sk] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt index db8f1b9518f..d538d995bf4 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt @@ -1,62 +1,65 @@ == Physical Plan == -VeloxColumnarToRow (74) -+- ^ ProjectExecTransformer (72) - +- ^ RegularHashAggregateExecTransformer (71) - +- ^ RegularHashAggregateExecTransformer (70) - +- ^ RegularHashAggregateExecTransformer (69) - +- ^ RegularHashAggregateExecTransformer (68) - +- ^ ProjectExecTransformer (67) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (66) - :- ^ ProjectExecTransformer (58) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) - : :- ^ ProjectExecTransformer (49) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (48) - : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (40) - : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (22) - : : : : :- ^ InputIteratorTransformer (8) - : : : : : +- ColumnarExchange (6) - : : : : : +- VeloxResizeBatches (5) - : : : : : +- ^ ProjectExecTransformer (3) - : : : : : +- ^ FilterExecTransformer (2) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (1) - : : : : +- ^ ProjectExecTransformer (21) - : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (20) - : : : : :- ^ InputIteratorTransformer (16) - : : : : : +- ColumnarExchange (14) - : : : : : +- VeloxResizeBatches (13) - : : : : : +- ^ ProjectExecTransformer (11) - : : : : : +- ^ FilterExecTransformer (10) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (9) - : : : : +- ^ InputIteratorTransformer (19) - : : : : +- ReusedExchange (17) - : : : +- ^ ProjectExecTransformer (39) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (38) - : : : :- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (34) - : : : : :- ^ InputIteratorTransformer (30) - : : : : : +- ColumnarExchange (28) - : : : : : +- VeloxResizeBatches (27) - : : : : : +- ^ ProjectExecTransformer (25) - : : : : : +- ^ FilterExecTransformer (24) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (23) - : : : : +- ^ InputIteratorTransformer (33) - : : : : +- ReusedExchange (31) - : : : +- ^ InputIteratorTransformer (37) - : : : +- ReusedExchange (35) - : : +- ^ InputIteratorTransformer (47) - : : +- ColumnarBroadcastExchange (45) - : : +- ^ ProjectExecTransformer (43) - : : +- ^ FilterExecTransformer (42) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (41) - : +- ^ InputIteratorTransformer (56) - : +- ColumnarBroadcastExchange (54) - : +- ^ ProjectExecTransformer (52) - : +- ^ FilterExecTransformer (51) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (50) - +- ^ InputIteratorTransformer (65) - +- ColumnarBroadcastExchange (63) - +- ^ ProjectExecTransformer (61) - +- ^ FilterExecTransformer (60) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (59) +VeloxColumnarToRow (79) ++- ^ ProjectExecTransformer (77) + +- ^ RegularHashAggregateExecTransformer (76) + +- ^ RegularHashAggregateExecTransformer (75) + +- ^ RegularHashAggregateExecTransformer (74) + +- ^ RegularHashAggregateExecTransformer (73) + +- ^ ProjectExecTransformer (72) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (71) + :- ^ ProjectExecTransformer (63) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) + : :- ^ ProjectExecTransformer (54) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (53) + : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (45) + : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (27) + : : : : :- ^ InputIteratorTransformer (13) + : : : : : +- ColumnarExchange (11) + : : : : : +- VeloxResizeBatches (10) + : : : : : +- ^ ProjectExecTransformer (8) + : : : : : +- ^ InputIteratorTransformer (7) + : : : : : +- RowToVeloxColumnar (5) + : : : : : +- * Filter (4) + : : : : : +- VeloxColumnarToRow (3) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (1) + : : : : +- ^ ProjectExecTransformer (26) + : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (25) + : : : : :- ^ InputIteratorTransformer (21) + : : : : : +- ColumnarExchange (19) + : : : : : +- VeloxResizeBatches (18) + : : : : : +- ^ ProjectExecTransformer (16) + : : : : : +- ^ FilterExecTransformer (15) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (14) + : : : : +- ^ InputIteratorTransformer (24) + : : : : +- ReusedExchange (22) + : : : +- ^ ProjectExecTransformer (44) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (43) + : : : :- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (39) + : : : : :- ^ InputIteratorTransformer (35) + : : : : : +- ColumnarExchange (33) + : : : : : +- VeloxResizeBatches (32) + : : : : : +- ^ ProjectExecTransformer (30) + : : : : : +- ^ FilterExecTransformer (29) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (28) + : : : : +- ^ InputIteratorTransformer (38) + : : : : +- ReusedExchange (36) + : : : +- ^ InputIteratorTransformer (42) + : : : +- ReusedExchange (40) + : : +- ^ InputIteratorTransformer (52) + : : +- ColumnarBroadcastExchange (50) + : : +- ^ ProjectExecTransformer (48) + : : +- ^ FilterExecTransformer (47) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (46) + : +- ^ InputIteratorTransformer (61) + : +- ColumnarBroadcastExchange (59) + : +- ^ ProjectExecTransformer (57) + : +- ^ FilterExecTransformer (56) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (55) + +- ^ InputIteratorTransformer (70) + +- ColumnarBroadcastExchange (68) + +- ^ ProjectExecTransformer (66) + +- ^ FilterExecTransformer (65) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (64) (1) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales @@ -66,553 +69,524 @@ Location: CatalogFileIndex [{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (4) +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] +Arguments: false + +(3) VeloxColumnarToRow +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] + +(4) Filter [codegen id : 1] +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] +Condition : (((((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND might_contain(Subquery scalar-subquery#8, [id=#1], xxhash64(ws_ship_addr_sk#2, 42))) AND might_contain(Subquery scalar-subquery#9, [id=#2], xxhash64(ws_web_site_sk#3, 42))) AND might_contain(Subquery scalar-subquery#10, [id=#3], xxhash64(ws_ship_date_sk#1, 42))) + +(5) RowToVeloxColumnar Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] -Arguments: (((((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND velox_might_contain(Subquery scalar-subquery#8, [id=#1], xxhash64(ws_ship_addr_sk#2, 42))) AND velox_might_contain(Subquery scalar-subquery#9, [id=#2], xxhash64(ws_web_site_sk#3, 42))) AND velox_might_contain(Subquery scalar-subquery#10, [id=#3], xxhash64(ws_ship_date_sk#1, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] + +(7) InputIteratorTransformer +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] + +(8) ProjectExecTransformer Output [7]: [hash(ws_order_number#4, 42) AS hash_partition_key#11, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] -(4) WholeStageCodegenTransformer (7) +(9) WholeStageCodegenTransformer (5) Input [7]: [hash_partition_key#11, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [7]: [hash_partition_key#11, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [7]: [hash_partition_key#11, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Arguments: hashpartitioning(ws_order_number#4, 1), ENSURE_REQUIREMENTS, [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6], [plan_id=4], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [3]: [ws_warehouse_sk#12, ws_order_number#13, ws_sold_date_sk#14] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_order_number), IsNotNull(ws_warehouse_sk)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [3]: [ws_warehouse_sk#12, ws_order_number#13, ws_sold_date_sk#14] Arguments: (isnotnull(ws_order_number#13) AND isnotnull(ws_warehouse_sk#12)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [3]: [hash(ws_order_number#13, 42) AS hash_partition_key#15, ws_warehouse_sk#12, ws_order_number#13] Input [3]: [ws_warehouse_sk#12, ws_order_number#13, ws_sold_date_sk#14] -(12) WholeStageCodegenTransformer (8) +(17) WholeStageCodegenTransformer (6) Input [3]: [hash_partition_key#15, ws_warehouse_sk#12, ws_order_number#13] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [3]: [hash_partition_key#15, ws_warehouse_sk#12, ws_order_number#13] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [3]: [hash_partition_key#15, ws_warehouse_sk#12, ws_order_number#13] Arguments: hashpartitioning(ws_order_number#13, 1), ENSURE_REQUIREMENTS, [ws_warehouse_sk#12, ws_order_number#13], [plan_id=5], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [2]: [ws_warehouse_sk#12, ws_order_number#13] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [2]: [ws_warehouse_sk#12, ws_order_number#13] -(17) ReusedExchange [Reuses operator id: 14] +(22) ReusedExchange [Reuses operator id: 19] Output [2]: [ws_warehouse_sk#16, ws_order_number#17] -(18) InputAdapter +(23) InputAdapter Input [2]: [ws_warehouse_sk#16, ws_order_number#17] -(19) InputIteratorTransformer +(24) InputIteratorTransformer Input [2]: [ws_warehouse_sk#16, ws_order_number#17] -(20) ShuffledHashJoinExecTransformer +(25) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#13] Right keys [1]: [ws_order_number#17] Join type: Inner Join condition: NOT (ws_warehouse_sk#12 = ws_warehouse_sk#16) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [1]: [ws_order_number#13] Input [4]: [ws_warehouse_sk#12, ws_order_number#13, ws_warehouse_sk#16, ws_order_number#17] -(22) ShuffledHashJoinExecTransformer +(27) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#4] Right keys [1]: [ws_order_number#13] Join type: LeftSemi Join condition: None -(23) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns +(28) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns Output [2]: [wr_order_number#18, wr_returned_date_sk#19] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_order_number)] ReadSchema: struct -(24) FilterExecTransformer +(29) FilterExecTransformer Input [2]: [wr_order_number#18, wr_returned_date_sk#19] Arguments: isnotnull(wr_order_number#18) -(25) ProjectExecTransformer +(30) ProjectExecTransformer Output [2]: [hash(wr_order_number#18, 42) AS hash_partition_key#20, wr_order_number#18] Input [2]: [wr_order_number#18, wr_returned_date_sk#19] -(26) WholeStageCodegenTransformer (10) +(31) WholeStageCodegenTransformer (8) Input [2]: [hash_partition_key#20, wr_order_number#18] Arguments: false -(27) VeloxResizeBatches +(32) VeloxResizeBatches Input [2]: [hash_partition_key#20, wr_order_number#18] Arguments: 1024, 2147483647, 10485760 -(28) ColumnarExchange +(33) ColumnarExchange Input [2]: [hash_partition_key#20, wr_order_number#18] Arguments: hashpartitioning(wr_order_number#18, 1), ENSURE_REQUIREMENTS, [wr_order_number#18], [plan_id=6], [shuffle_writer_type=hash] -(29) InputAdapter +(34) InputAdapter Input [1]: [wr_order_number#18] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [1]: [wr_order_number#18] -(31) ReusedExchange [Reuses operator id: 14] +(36) ReusedExchange [Reuses operator id: 19] Output [2]: [ws_warehouse_sk#21, ws_order_number#22] -(32) InputAdapter +(37) InputAdapter Input [2]: [ws_warehouse_sk#21, ws_order_number#22] -(33) InputIteratorTransformer +(38) InputIteratorTransformer Input [2]: [ws_warehouse_sk#21, ws_order_number#22] -(34) ShuffledHashJoinExecTransformer +(39) ShuffledHashJoinExecTransformer Left keys [1]: [wr_order_number#18] Right keys [1]: [ws_order_number#22] Join type: Inner Join condition: None -(35) ReusedExchange [Reuses operator id: 14] +(40) ReusedExchange [Reuses operator id: 19] Output [2]: [ws_warehouse_sk#23, ws_order_number#24] -(36) InputAdapter +(41) InputAdapter Input [2]: [ws_warehouse_sk#23, ws_order_number#24] -(37) InputIteratorTransformer +(42) InputIteratorTransformer Input [2]: [ws_warehouse_sk#23, ws_order_number#24] -(38) ShuffledHashJoinExecTransformer +(43) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#22] Right keys [1]: [ws_order_number#24] Join type: Inner Join condition: NOT (ws_warehouse_sk#21 = ws_warehouse_sk#23) -(39) ProjectExecTransformer +(44) ProjectExecTransformer Output [1]: [wr_order_number#18] Input [5]: [wr_order_number#18, ws_warehouse_sk#21, ws_order_number#22, ws_warehouse_sk#23, ws_order_number#24] -(40) ShuffledHashJoinExecTransformer +(45) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#4] Right keys [1]: [wr_order_number#18] Join type: LeftSemi Join condition: None -(41) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(46) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#25, ca_state#26] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct -(42) FilterExecTransformer +(47) FilterExecTransformer Input [2]: [ca_address_sk#25, ca_state#26] Arguments: ((isnotnull(ca_state#26) AND (ca_state#26 = IL)) AND isnotnull(ca_address_sk#25)) -(43) ProjectExecTransformer +(48) ProjectExecTransformer Output [1]: [ca_address_sk#25] Input [2]: [ca_address_sk#25, ca_state#26] -(44) WholeStageCodegenTransformer (13) +(49) WholeStageCodegenTransformer (11) Input [1]: [ca_address_sk#25] Arguments: false -(45) ColumnarBroadcastExchange +(50) ColumnarBroadcastExchange Input [1]: [ca_address_sk#25] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(46) InputAdapter +(51) InputAdapter Input [1]: [ca_address_sk#25] -(47) InputIteratorTransformer +(52) InputIteratorTransformer Input [1]: [ca_address_sk#25] -(48) BroadcastHashJoinExecTransformer +(53) BroadcastHashJoinExecTransformer Left keys [1]: [ws_ship_addr_sk#2] Right keys [1]: [ca_address_sk#25] Join type: Inner Join condition: None -(49) ProjectExecTransformer +(54) ProjectExecTransformer Output [5]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ca_address_sk#25] -(50) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(55) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#27, web_company_name#28] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct -(51) FilterExecTransformer +(56) FilterExecTransformer Input [2]: [web_site_sk#27, web_company_name#28] Arguments: ((isnotnull(web_company_name#28) AND (web_company_name#28 = pri )) AND isnotnull(web_site_sk#27)) -(52) ProjectExecTransformer +(57) ProjectExecTransformer Output [1]: [web_site_sk#27] Input [2]: [web_site_sk#27, web_company_name#28] -(53) WholeStageCodegenTransformer (14) +(58) WholeStageCodegenTransformer (12) Input [1]: [web_site_sk#27] Arguments: false -(54) ColumnarBroadcastExchange +(59) ColumnarBroadcastExchange Input [1]: [web_site_sk#27] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -(55) InputAdapter +(60) InputAdapter Input [1]: [web_site_sk#27] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [1]: [web_site_sk#27] -(57) BroadcastHashJoinExecTransformer +(62) BroadcastHashJoinExecTransformer Left keys [1]: [ws_web_site_sk#3] Right keys [1]: [web_site_sk#27] Join type: Inner Join condition: None -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [4]: [ws_ship_date_sk#1, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Input [6]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, web_site_sk#27] -(59) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(64) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#29, d_date#30] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(60) FilterExecTransformer +(65) FilterExecTransformer Input [2]: [d_date_sk#29, d_date#30] Arguments: (((isnotnull(d_date#30) AND (d_date#30 >= 1999-02-01)) AND (d_date#30 <= 1999-04-02)) AND isnotnull(d_date_sk#29)) -(61) ProjectExecTransformer +(66) ProjectExecTransformer Output [1]: [d_date_sk#29] Input [2]: [d_date_sk#29, d_date#30] -(62) WholeStageCodegenTransformer (15) +(67) WholeStageCodegenTransformer (13) Input [1]: [d_date_sk#29] Arguments: false -(63) ColumnarBroadcastExchange +(68) ColumnarBroadcastExchange Input [1]: [d_date_sk#29] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -(64) InputAdapter +(69) InputAdapter Input [1]: [d_date_sk#29] -(65) InputIteratorTransformer +(70) InputIteratorTransformer Input [1]: [d_date_sk#29] -(66) BroadcastHashJoinExecTransformer +(71) BroadcastHashJoinExecTransformer Left keys [1]: [ws_ship_date_sk#1] Right keys [1]: [d_date_sk#29] Join type: Inner Join condition: None -(67) ProjectExecTransformer +(72) ProjectExecTransformer Output [3]: [ws_order_number#4, UnscaledValue(ws_ext_ship_cost#5) AS _pre_1#31, UnscaledValue(ws_net_profit#6) AS _pre_2#32] Input [5]: [ws_ship_date_sk#1, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, d_date_sk#29] -(68) RegularHashAggregateExecTransformer +(73) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#4, _pre_1#31, _pre_2#32] Keys [1]: [ws_order_number#4] Functions [2]: [partial_sum(_pre_1#31), partial_sum(_pre_2#32)] Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34] Results [3]: [ws_order_number#4, sum#35, sum#36] -(69) RegularHashAggregateExecTransformer +(74) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#4, sum#35, sum#36] Keys [1]: [ws_order_number#4] Functions [2]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(UnscaledValue(ws_net_profit#6))] Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34] Results [3]: [ws_order_number#4, sum#35, sum#36] -(70) RegularHashAggregateExecTransformer +(75) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#4, sum#35, sum#36] Keys: [] Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(UnscaledValue(ws_net_profit#6)), partial_count(distinct ws_order_number#4)] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34, count(ws_order_number#4)#37] Results [3]: [sum#35, sum#36, count#38] -(71) RegularHashAggregateExecTransformer +(76) RegularHashAggregateExecTransformer Input [3]: [sum#35, sum#36, count#38] Keys: [] Functions [3]: [sum(UnscaledValue(ws_ext_ship_cost#5)), sum(UnscaledValue(ws_net_profit#6)), count(distinct ws_order_number#4)] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34, count(ws_order_number#4)#37] Results [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34, count(ws_order_number#4)#37] -(72) ProjectExecTransformer +(77) ProjectExecTransformer Output [3]: [count(ws_order_number#4)#37 AS order count #39, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#5))#33,17,2) AS total shipping cost #40, MakeDecimal(sum(UnscaledValue(ws_net_profit#6))#34,17,2) AS total net profit #41] Input [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34, count(ws_order_number#4)#37] -(73) WholeStageCodegenTransformer (16) +(78) WholeStageCodegenTransformer (14) Input [3]: [order count #39, total shipping cost #40, total net profit #41] Arguments: false -(74) VeloxColumnarToRow +(79) VeloxColumnarToRow Input [3]: [order count #39, total shipping cost #40, total net profit #41] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#8, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#8, [id=#1] +ObjectHashAggregate (90) ++- VeloxColumnarToRow (89) + +- ColumnarExchange (88) + +- VeloxResizeBatches (87) + +- RowToVeloxColumnar (86) + +- ObjectHashAggregate (85) + +- VeloxColumnarToRow (84) + +- ^ ProjectExecTransformer (82) + +- ^ FilterExecTransformer (81) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (80) -(75) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(80) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#25, ca_state#26] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct -(76) FilterExecTransformer +(81) FilterExecTransformer Input [2]: [ca_address_sk#25, ca_state#26] Arguments: ((isnotnull(ca_state#26) AND (ca_state#26 = IL)) AND isnotnull(ca_address_sk#25)) -(77) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#25, 42) AS _pre_3#42] +(82) ProjectExecTransformer +Output [1]: [ca_address_sk#25] Input [2]: [ca_address_sk#25, ca_state#26] -(78) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#42] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#42, 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [buf#43] -Results [1]: [buf#44] - -(79) WholeStageCodegenTransformer (1) -Input [1]: [buf#44] +(83) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#25] Arguments: false -(80) VeloxResizeBatches -Input [1]: [buf#44] -Arguments: 1024, 2147483647, 10485760 - -(81) ColumnarExchange -Input [1]: [buf#44] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] - -(82) InputAdapter -Input [1]: [buf#44] - -(83) InputIteratorTransformer -Input [1]: [buf#44] +(84) VeloxColumnarToRow +Input [1]: [ca_address_sk#25] -(84) RegularHashAggregateExecTransformer -Input [1]: [buf#44] +(85) ObjectHashAggregate +Input [1]: [ca_address_sk#25] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)#45] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)#45 AS bloomFilter#46] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [buf#42] +Results [1]: [buf#43] -(85) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#46] -Arguments: false +(86) RowToVeloxColumnar +Input [1]: [buf#43] -(86) VeloxColumnarToRow -Input [1]: [bloomFilter#46] +(87) VeloxResizeBatches +Input [1]: [buf#43] +Arguments: 1024, 2147483647, 10485760 -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#9, [id=#2] -VeloxColumnarToRow (98) -+- ^ RegularHashAggregateExecTransformer (96) - +- ^ InputIteratorTransformer (95) - +- ColumnarExchange (93) - +- VeloxResizeBatches (92) - +- ^ FlushableHashAggregateExecTransformer (90) - +- ^ ProjectExecTransformer (89) - +- ^ FilterExecTransformer (88) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (87) +(88) ColumnarExchange +Input [1]: [buf#43] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] +(89) VeloxColumnarToRow +Input [1]: [buf#43] -(87) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(90) ObjectHashAggregate +Input [1]: [buf#43] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)#44] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)#44 AS bloomFilter#45] + +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#9, [id=#2] +ObjectHashAggregate (101) ++- VeloxColumnarToRow (100) + +- ColumnarExchange (99) + +- VeloxResizeBatches (98) + +- RowToVeloxColumnar (97) + +- ObjectHashAggregate (96) + +- VeloxColumnarToRow (95) + +- ^ ProjectExecTransformer (93) + +- ^ FilterExecTransformer (92) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (91) + + +(91) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#27, web_company_name#28] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct -(88) FilterExecTransformer +(92) FilterExecTransformer Input [2]: [web_site_sk#27, web_company_name#28] Arguments: ((isnotnull(web_company_name#28) AND (web_company_name#28 = pri )) AND isnotnull(web_site_sk#27)) -(89) ProjectExecTransformer -Output [1]: [xxhash64(web_site_sk#27, 42) AS _pre_4#47] +(93) ProjectExecTransformer +Output [1]: [web_site_sk#27] Input [2]: [web_site_sk#27, web_company_name#28] -(90) FlushableHashAggregateExecTransformer -Input [1]: [_pre_4#47] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_4#47, 4, 144, 0, 0)] -Aggregate Attributes [1]: [buf#48] -Results [1]: [buf#49] - -(91) WholeStageCodegenTransformer (3) -Input [1]: [buf#49] +(94) WholeStageCodegenTransformer (2) +Input [1]: [web_site_sk#27] Arguments: false -(92) VeloxResizeBatches -Input [1]: [buf#49] -Arguments: 1024, 2147483647, 10485760 - -(93) ColumnarExchange -Input [1]: [buf#49] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] - -(94) InputAdapter -Input [1]: [buf#49] - -(95) InputIteratorTransformer -Input [1]: [buf#49] +(95) VeloxColumnarToRow +Input [1]: [web_site_sk#27] -(96) RegularHashAggregateExecTransformer -Input [1]: [buf#49] +(96) ObjectHashAggregate +Input [1]: [web_site_sk#27] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)#50] -Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)#50 AS bloomFilter#51] +Functions [1]: [partial_bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [buf#46] +Results [1]: [buf#47] -(97) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#51] -Arguments: false +(97) RowToVeloxColumnar +Input [1]: [buf#47] -(98) VeloxColumnarToRow -Input [1]: [bloomFilter#51] +(98) VeloxResizeBatches +Input [1]: [buf#47] +Arguments: 1024, 2147483647, 10485760 -Subquery:3 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#10, [id=#3] -VeloxColumnarToRow (110) -+- ^ RegularHashAggregateExecTransformer (108) - +- ^ InputIteratorTransformer (107) - +- ColumnarExchange (105) - +- VeloxResizeBatches (104) - +- ^ FlushableHashAggregateExecTransformer (102) - +- ^ ProjectExecTransformer (101) - +- ^ FilterExecTransformer (100) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (99) +(99) ColumnarExchange +Input [1]: [buf#47] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] +(100) VeloxColumnarToRow +Input [1]: [buf#47] -(99) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(101) ObjectHashAggregate +Input [1]: [buf#47] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)#48] +Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)#48 AS bloomFilter#49] + +Subquery:3 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#10, [id=#3] +ObjectHashAggregate (112) ++- VeloxColumnarToRow (111) + +- ColumnarExchange (110) + +- VeloxResizeBatches (109) + +- RowToVeloxColumnar (108) + +- ObjectHashAggregate (107) + +- VeloxColumnarToRow (106) + +- ^ ProjectExecTransformer (104) + +- ^ FilterExecTransformer (103) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (102) + + +(102) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#29, d_date#30] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(100) FilterExecTransformer +(103) FilterExecTransformer Input [2]: [d_date_sk#29, d_date#30] Arguments: (((isnotnull(d_date#30) AND (d_date#30 >= 1999-02-01)) AND (d_date#30 <= 1999-04-02)) AND isnotnull(d_date_sk#29)) -(101) ProjectExecTransformer -Output [1]: [xxhash64(d_date_sk#29, 42) AS _pre_5#52] +(104) ProjectExecTransformer +Output [1]: [d_date_sk#29] Input [2]: [d_date_sk#29, d_date#30] -(102) FlushableHashAggregateExecTransformer -Input [1]: [_pre_5#52] +(105) WholeStageCodegenTransformer (3) +Input [1]: [d_date_sk#29] +Arguments: false + +(106) VeloxColumnarToRow +Input [1]: [d_date_sk#29] + +(107) ObjectHashAggregate +Input [1]: [d_date_sk#29] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_5#52, 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [buf#53] -Results [1]: [buf#54] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [buf#50] +Results [1]: [buf#51] -(103) WholeStageCodegenTransformer (5) -Input [1]: [buf#54] -Arguments: false +(108) RowToVeloxColumnar +Input [1]: [buf#51] -(104) VeloxResizeBatches -Input [1]: [buf#54] +(109) VeloxResizeBatches +Input [1]: [buf#51] Arguments: 1024, 2147483647, 10485760 -(105) ColumnarExchange -Input [1]: [buf#54] +(110) ColumnarExchange +Input [1]: [buf#51] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(106) InputAdapter -Input [1]: [buf#54] +(111) VeloxColumnarToRow +Input [1]: [buf#51] -(107) InputIteratorTransformer -Input [1]: [buf#54] - -(108) RegularHashAggregateExecTransformer -Input [1]: [buf#54] +(112) ObjectHashAggregate +Input [1]: [buf#51] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)#55] -Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)#55 AS bloomFilter#56] - -(109) WholeStageCodegenTransformer (6) -Input [1]: [bloomFilter#56] -Arguments: false - -(110) VeloxColumnarToRow -Input [1]: [bloomFilter#56] - -Subquery:4 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#8, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) - - -Subquery:5 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#9, [id=#2] -VeloxColumnarToRow (98) -+- ^ RegularHashAggregateExecTransformer (96) - +- ^ InputIteratorTransformer (95) - +- ColumnarExchange (93) - +- VeloxResizeBatches (92) - +- ^ FlushableHashAggregateExecTransformer (90) - +- ^ ProjectExecTransformer (89) - +- ^ FilterExecTransformer (88) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (87) - - -Subquery:6 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#10, [id=#3] -VeloxColumnarToRow (110) -+- ^ RegularHashAggregateExecTransformer (108) - +- ^ InputIteratorTransformer (107) - +- ColumnarExchange (105) - +- VeloxResizeBatches (104) - +- ^ FlushableHashAggregateExecTransformer (102) - +- ^ ProjectExecTransformer (101) - +- ^ FilterExecTransformer (100) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (99) - +Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)#52] +Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)#52 AS bloomFilter#53] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt index b764f51091d..24682895f45 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt @@ -1,5 +1,5 @@ VeloxColumnarToRow - WholeStageCodegenTransformer (16) + WholeStageCodegenTransformer (14) ProjectExecTransformer [count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))] RegularHashAggregateExecTransformer [sum,sum,count] [sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count] RegularHashAggregateExecTransformer [ws_order_number] [sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count] @@ -17,95 +17,60 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ws_order_number,ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_ext_ship_cost,ws_net_profit] #1 VeloxResizeBatches - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (5) ProjectExecTransformer [ws_order_number,ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_ext_ship_cost,ws_net_profit] - FilterExecTransformer [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #2 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [web_site_sk] - FilterExecTransformer [web_company_name,web_site_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit,ws_sold_date_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #2 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_state,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #3 VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [web_site_sk] - FilterExecTransformer [web_company_name,web_site_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [web_site_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [web_site_sk] + FilterExecTransformer [web_company_name,web_site_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + RowToVeloxColumnar + ObjectHashAggregate [d_date_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit,ws_sold_date_sk] ProjectExecTransformer [ws_order_number] ShuffledHashJoinExecTransformer [ws_order_number,ws_order_number,ws_warehouse_sk,ws_warehouse_sk] InputIteratorTransformer InputAdapter ColumnarExchange [ws_order_number,ws_warehouse_sk] #5 VeloxResizeBatches - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (6) ProjectExecTransformer [ws_order_number,ws_warehouse_sk] FilterExecTransformer [ws_order_number,ws_warehouse_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_warehouse_sk,ws_order_number,ws_sold_date_sk] @@ -119,7 +84,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [wr_order_number] #6 VeloxResizeBatches - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (8) ProjectExecTransformer [wr_order_number] FilterExecTransformer [wr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_order_number,wr_returned_date_sk] @@ -132,21 +97,21 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #7 - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [ca_address_sk] FilterExecTransformer [ca_state,ca_address_sk] FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (14) + WholeStageCodegenTransformer (12) ProjectExecTransformer [web_site_sk] FilterExecTransformer [web_company_name,web_site_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (15) + WholeStageCodegenTransformer (13) ProjectExecTransformer [d_date_sk] FilterExecTransformer [d_date,d_date_sk] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/explain.txt index 1dd5eb0a109..e4bc9aa68f5 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/explain.txt @@ -1,59 +1,62 @@ == Physical Plan == -VeloxColumnarToRow (74) -+- TakeOrderedAndProjectExecTransformer (73) - +- ^ ProjectExecTransformer (71) - +- ^ RegularHashAggregateExecTransformer (70) - +- ^ InputIteratorTransformer (69) - +- ColumnarExchange (67) - +- VeloxResizeBatches (66) - +- ^ ProjectExecTransformer (64) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (61) - :- ^ InputIteratorTransformer (58) - : +- ColumnarBroadcastExchange (56) - : +- ^ ProjectExecTransformer (54) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (53) - : :- ^ ProjectExecTransformer (45) - : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (44) - : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (20) - : : : :- ^ InputIteratorTransformer (8) - : : : : +- ColumnarExchange (6) - : : : : +- VeloxResizeBatches (5) - : : : : +- ^ ProjectExecTransformer (3) - : : : : +- ^ FilterExecTransformer (2) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) - : : : +- ^ InputIteratorTransformer (19) - : : : +- ColumnarExchange (17) - : : : +- VeloxResizeBatches (16) - : : : +- ^ ProjectExecTransformer (14) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13) - : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (9) - : : : +- ^ InputIteratorTransformer (12) - : : : +- ReusedExchange (10) - : : +- ^ InputIteratorTransformer (43) - : : +- ColumnarExchange (41) - : : +- VeloxResizeBatches (40) - : : +- ^ ProjectExecTransformer (38) - : : +- ^ InputIteratorTransformer (37) - : : +- ColumnarUnion (35) - : : :- ^ ProjectExecTransformer (26) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (25) - : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (21) - : : : +- ^ InputIteratorTransformer (24) - : : : +- ReusedExchange (22) - : : +- ^ ProjectExecTransformer (33) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (32) - : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (28) - : : +- ^ InputIteratorTransformer (31) - : : +- ReusedExchange (29) - : +- ^ InputIteratorTransformer (52) - : +- ColumnarBroadcastExchange (50) - : +- ^ ProjectExecTransformer (48) - : +- ^ FilterExecTransformer (47) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (46) - +- ^ FilterExecTransformer (60) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (59) +VeloxColumnarToRow (79) ++- TakeOrderedAndProjectExecTransformer (78) + +- ^ ProjectExecTransformer (76) + +- ^ RegularHashAggregateExecTransformer (75) + +- ^ InputIteratorTransformer (74) + +- ColumnarExchange (72) + +- VeloxResizeBatches (71) + +- ^ ProjectExecTransformer (69) + +- ^ FlushableHashAggregateExecTransformer (68) + +- ^ ProjectExecTransformer (67) + +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (66) + :- ^ InputIteratorTransformer (63) + : +- ColumnarBroadcastExchange (61) + : +- ^ ProjectExecTransformer (59) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (58) + : :- ^ ProjectExecTransformer (50) + : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (49) + : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (25) + : : : :- ^ InputIteratorTransformer (13) + : : : : +- ColumnarExchange (11) + : : : : +- VeloxResizeBatches (10) + : : : : +- ^ ProjectExecTransformer (8) + : : : : +- ^ InputIteratorTransformer (7) + : : : : +- RowToVeloxColumnar (5) + : : : : +- * Filter (4) + : : : : +- VeloxColumnarToRow (3) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) + : : : +- ^ InputIteratorTransformer (24) + : : : +- ColumnarExchange (22) + : : : +- VeloxResizeBatches (21) + : : : +- ^ ProjectExecTransformer (19) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) + : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (14) + : : : +- ^ InputIteratorTransformer (17) + : : : +- ReusedExchange (15) + : : +- ^ InputIteratorTransformer (48) + : : +- ColumnarExchange (46) + : : +- VeloxResizeBatches (45) + : : +- ^ ProjectExecTransformer (43) + : : +- ^ InputIteratorTransformer (42) + : : +- ColumnarUnion (40) + : : :- ^ ProjectExecTransformer (31) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (30) + : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (26) + : : : +- ^ InputIteratorTransformer (29) + : : : +- ReusedExchange (27) + : : +- ^ ProjectExecTransformer (38) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) + : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (33) + : : +- ^ InputIteratorTransformer (36) + : : +- ReusedExchange (34) + : +- ^ InputIteratorTransformer (57) + : +- ColumnarBroadcastExchange (55) + : +- ^ ProjectExecTransformer (53) + : +- ^ FilterExecTransformer (52) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (51) + +- ^ FilterExecTransformer (65) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (64) (1) FileSourceScanExecTransformer parquet spark_catalog.default.customer @@ -63,420 +66,421 @@ Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (2) +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Arguments: false + +(3) VeloxColumnarToRow +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(4) Filter [codegen id : 1] +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) + +(5) RowToVeloxColumnar +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(6) InputAdapter +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(7) InputIteratorTransformer Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -Arguments: ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND velox_might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) -(3) ProjectExecTransformer +(8) ProjectExecTransformer Output [4]: [hash(c_customer_sk#1, 42) AS hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(4) WholeStageCodegenTransformer (3) +(9) WholeStageCodegenTransformer (3) Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: hashpartitioning(c_customer_sk#1, 1), ENSURE_REQUIREMENTS, [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [2]: [ss_customer_sk#6, ss_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] ReadSchema: struct -(10) ReusedExchange [Reuses operator id: 91] +(15) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#9] -(11) InputAdapter +(16) InputAdapter Input [1]: [d_date_sk#9] -(12) InputIteratorTransformer +(17) InputIteratorTransformer Input [1]: [d_date_sk#9] -(13) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#7] Right keys [1]: [d_date_sk#9] Join type: Inner Join condition: None -(14) ProjectExecTransformer +(19) ProjectExecTransformer Output [2]: [hash(ss_customer_sk#6, 42) AS hash_partition_key#10, ss_customer_sk#6] Input [3]: [ss_customer_sk#6, ss_sold_date_sk#7, d_date_sk#9] -(15) WholeStageCodegenTransformer (6) +(20) WholeStageCodegenTransformer (6) Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: false -(16) VeloxResizeBatches +(21) VeloxResizeBatches Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: 1024, 2147483647, 10485760 -(17) ColumnarExchange +(22) ColumnarExchange Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: hashpartitioning(ss_customer_sk#6, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#6], [plan_id=3], [shuffle_writer_type=hash] -(18) InputAdapter +(23) InputAdapter Input [1]: [ss_customer_sk#6] -(19) InputIteratorTransformer +(24) InputIteratorTransformer Input [1]: [ss_customer_sk#6] -(20) ShuffledHashJoinExecTransformer +(25) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [ss_customer_sk#6] Join type: LeftSemi Join condition: None -(21) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(26) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [2]: [ws_bill_customer_sk#11, ws_sold_date_sk#12] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ws_sold_date_sk#12), dynamicpruningexpression(ws_sold_date_sk#12 IN dynamicpruning#8)] ReadSchema: struct -(22) ReusedExchange [Reuses operator id: 91] +(27) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#13] -(23) InputAdapter +(28) InputAdapter Input [1]: [d_date_sk#13] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [1]: [d_date_sk#13] -(25) BroadcastHashJoinExecTransformer +(30) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#12] Right keys [1]: [d_date_sk#13] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [1]: [ws_bill_customer_sk#11 AS customer_sk#14] Input [3]: [ws_bill_customer_sk#11, ws_sold_date_sk#12, d_date_sk#13] -(27) WholeStageCodegenTransformer (9) +(32) WholeStageCodegenTransformer (9) Input [1]: [customer_sk#14] Arguments: false -(28) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(33) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(cs_sold_date_sk#16), dynamicpruningexpression(cs_sold_date_sk#16 IN dynamicpruning#8)] ReadSchema: struct -(29) ReusedExchange [Reuses operator id: 91] +(34) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#17] -(30) InputAdapter +(35) InputAdapter Input [1]: [d_date_sk#17] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [1]: [d_date_sk#17] -(32) BroadcastHashJoinExecTransformer +(37) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#16] Right keys [1]: [d_date_sk#17] Join type: Inner Join condition: None -(33) ProjectExecTransformer +(38) ProjectExecTransformer Output [1]: [cs_ship_customer_sk#15 AS customer_sk#18] Input [3]: [cs_ship_customer_sk#15, cs_sold_date_sk#16, d_date_sk#17] -(34) WholeStageCodegenTransformer (12) +(39) WholeStageCodegenTransformer (12) Input [1]: [customer_sk#18] Arguments: false -(35) ColumnarUnion +(40) ColumnarUnion Arguments: UnknownPartitioning(0) -(36) InputAdapter +(41) InputAdapter Input [1]: [customer_sk#14] -(37) InputIteratorTransformer +(42) InputIteratorTransformer Input [1]: [customer_sk#14] -(38) ProjectExecTransformer +(43) ProjectExecTransformer Output [2]: [hash(customer_sk#14, 42) AS hash_partition_key#19, customer_sk#14] Input [1]: [customer_sk#14] -(39) WholeStageCodegenTransformer (13) +(44) WholeStageCodegenTransformer (13) Input [2]: [hash_partition_key#19, customer_sk#14] Arguments: false -(40) VeloxResizeBatches +(45) VeloxResizeBatches Input [2]: [hash_partition_key#19, customer_sk#14] Arguments: 1024, 2147483647, 10485760 -(41) ColumnarExchange +(46) ColumnarExchange Input [2]: [hash_partition_key#19, customer_sk#14] Arguments: hashpartitioning(customer_sk#14, 1), ENSURE_REQUIREMENTS, [customer_sk#14], [plan_id=4], [shuffle_writer_type=hash] -(42) InputAdapter +(47) InputAdapter Input [1]: [customer_sk#14] -(43) InputIteratorTransformer +(48) InputIteratorTransformer Input [1]: [customer_sk#14] -(44) ShuffledHashJoinExecTransformer +(49) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [customer_sk#14] Join type: LeftSemi Join condition: None -(45) ProjectExecTransformer +(50) ProjectExecTransformer Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(46) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(51) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_county#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(47) FilterExecTransformer +(52) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_county#21] Arguments: (ca_county#21 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#20)) -(48) ProjectExecTransformer +(53) ProjectExecTransformer Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_county#21] -(49) WholeStageCodegenTransformer (14) +(54) WholeStageCodegenTransformer (14) Input [1]: [ca_address_sk#20] Arguments: false -(50) ColumnarBroadcastExchange +(55) ColumnarBroadcastExchange Input [1]: [ca_address_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(51) InputAdapter +(56) InputAdapter Input [1]: [ca_address_sk#20] -(52) InputIteratorTransformer +(57) InputIteratorTransformer Input [1]: [ca_address_sk#20] -(53) BroadcastHashJoinExecTransformer +(58) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#3] Right keys [1]: [ca_address_sk#20] Join type: Inner Join condition: None -(54) ProjectExecTransformer +(59) ProjectExecTransformer Output [1]: [c_current_cdemo_sk#2] Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#20] -(55) WholeStageCodegenTransformer (15) +(60) WholeStageCodegenTransformer (15) Input [1]: [c_current_cdemo_sk#2] Arguments: false -(56) ColumnarBroadcastExchange +(61) ColumnarBroadcastExchange Input [1]: [c_current_cdemo_sk#2] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(57) InputAdapter +(62) InputAdapter Input [1]: [c_current_cdemo_sk#2] -(58) InputIteratorTransformer +(63) InputIteratorTransformer Input [1]: [c_current_cdemo_sk#2] -(59) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(64) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct -(60) FilterExecTransformer +(65) FilterExecTransformer Input [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Arguments: isnotnull(cd_demo_sk#22) -(61) BroadcastHashJoinExecTransformer +(66) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#2] Right keys [1]: [cd_demo_sk#22] Join type: Inner Join condition: None -(62) ProjectExecTransformer +(67) ProjectExecTransformer Output [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -(63) FlushableHashAggregateExecTransformer +(68) FlushableHashAggregateExecTransformer Input [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Keys [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Functions [1]: [partial_count(1)] Aggregate Attributes [1]: [count#31] Results [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] -(64) ProjectExecTransformer +(69) ProjectExecTransformer Output [10]: [hash(cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, 42) AS hash_partition_key#33, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] -(65) WholeStageCodegenTransformer (16) +(70) WholeStageCodegenTransformer (16) Input [10]: [hash_partition_key#33, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] Arguments: false -(66) VeloxResizeBatches +(71) VeloxResizeBatches Input [10]: [hash_partition_key#33, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] Arguments: 1024, 2147483647, 10485760 -(67) ColumnarExchange +(72) ColumnarExchange Input [10]: [hash_partition_key#33, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] Arguments: hashpartitioning(cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, 1), ENSURE_REQUIREMENTS, [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32], [plan_id=7], [shuffle_writer_type=hash] -(68) InputAdapter +(73) InputAdapter Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] -(69) InputIteratorTransformer +(74) InputIteratorTransformer Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] -(70) RegularHashAggregateExecTransformer +(75) RegularHashAggregateExecTransformer Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] Keys [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Functions [1]: [count(1)] Aggregate Attributes [1]: [count(1)#34] Results [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count(1)#34] -(71) ProjectExecTransformer +(76) ProjectExecTransformer Output [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, count(1)#34 AS cnt1#35, cd_purchase_estimate#26, count(1)#34 AS cnt2#36, cd_credit_rating#27, count(1)#34 AS cnt3#37, cd_dep_count#28, count(1)#34 AS cnt4#38, cd_dep_employed_count#29, count(1)#34 AS cnt5#39, cd_dep_college_count#30, count(1)#34 AS cnt6#40] Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count(1)#34] -(72) WholeStageCodegenTransformer (17) +(77) WholeStageCodegenTransformer (17) Input [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#35, cd_purchase_estimate#26, cnt2#36, cd_credit_rating#27, cnt3#37, cd_dep_count#28, cnt4#38, cd_dep_employed_count#29, cnt5#39, cd_dep_college_count#30, cnt6#40] Arguments: false -(73) TakeOrderedAndProjectExecTransformer +(78) TakeOrderedAndProjectExecTransformer Input [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#35, cd_purchase_estimate#26, cnt2#36, cd_credit_rating#27, cnt3#37, cd_dep_count#28, cnt4#38, cd_dep_employed_count#29, cnt5#39, cd_dep_college_count#30, cnt6#40] Arguments: 100, [cd_gender#23 ASC NULLS FIRST, cd_marital_status#24 ASC NULLS FIRST, cd_education_status#25 ASC NULLS FIRST, cd_purchase_estimate#26 ASC NULLS FIRST, cd_credit_rating#27 ASC NULLS FIRST, cd_dep_count#28 ASC NULLS FIRST, cd_dep_employed_count#29 ASC NULLS FIRST, cd_dep_college_count#30 ASC NULLS FIRST], [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#35, cd_purchase_estimate#26, cnt2#36, cd_credit_rating#27, cnt3#37, cd_dep_count#28, cnt4#38, cd_dep_employed_count#29, cnt5#39, cd_dep_college_count#30, cnt6#40], 0 -(74) VeloxColumnarToRow +(79) VeloxColumnarToRow Input [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#35, cd_purchase_estimate#26, cnt2#36, cd_credit_rating#27, cnt3#37, cd_dep_count#28, cnt4#38, cd_dep_employed_count#29, cnt5#39, cd_dep_college_count#30, cnt6#40] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#4, [id=#1] +ObjectHashAggregate (90) ++- VeloxColumnarToRow (89) + +- ColumnarExchange (88) + +- VeloxResizeBatches (87) + +- RowToVeloxColumnar (86) + +- ObjectHashAggregate (85) + +- VeloxColumnarToRow (84) + +- ^ ProjectExecTransformer (82) + +- ^ FilterExecTransformer (81) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (80) -(75) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(80) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_county#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(76) FilterExecTransformer +(81) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_county#21] Arguments: (ca_county#21 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#20)) -(77) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#20, 42) AS _pre_1#41] +(82) ProjectExecTransformer +Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_county#21] -(78) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#41] +(83) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#20] +Arguments: false + +(84) VeloxColumnarToRow +Input [1]: [ca_address_sk#20] + +(85) ObjectHashAggregate +Input [1]: [ca_address_sk#20] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#41, 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [buf#42] -Results [1]: [buf#43] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [buf#41] +Results [1]: [buf#42] -(79) WholeStageCodegenTransformer (1) -Input [1]: [buf#43] -Arguments: false +(86) RowToVeloxColumnar +Input [1]: [buf#42] -(80) VeloxResizeBatches -Input [1]: [buf#43] +(87) VeloxResizeBatches +Input [1]: [buf#42] Arguments: 1024, 2147483647, 10485760 -(81) ColumnarExchange -Input [1]: [buf#43] +(88) ColumnarExchange +Input [1]: [buf#42] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8], [shuffle_writer_type=hash] -(82) InputAdapter -Input [1]: [buf#43] - -(83) InputIteratorTransformer -Input [1]: [buf#43] +(89) VeloxColumnarToRow +Input [1]: [buf#42] -(84) RegularHashAggregateExecTransformer -Input [1]: [buf#43] +(90) ObjectHashAggregate +Input [1]: [buf#42] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)#44] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)#44 AS bloomFilter#45] - -(85) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#45] -Arguments: false - -(86) VeloxColumnarToRow -Input [1]: [bloomFilter#45] - -Subquery:2 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) - +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)#43] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)#43 AS bloomFilter#44] -Subquery:3 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (91) -+- ^ ProjectExecTransformer (89) - +- ^ FilterExecTransformer (88) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) +Subquery:2 Hosting operator id = 14 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 +ColumnarBroadcastExchange (95) ++- ^ ProjectExecTransformer (93) + +- ^ FilterExecTransformer (92) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (91) -(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [3]: [d_date_sk#9, d_year#46, d_moy#47] +(91) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [3]: [d_date_sk#9, d_year#45, d_moy#46] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,7), IsNotNull(d_date_sk)] ReadSchema: struct -(88) FilterExecTransformer -Input [3]: [d_date_sk#9, d_year#46, d_moy#47] -Arguments: (((((isnotnull(d_year#46) AND isnotnull(d_moy#47)) AND (d_year#46 = 2002)) AND (d_moy#47 >= 4)) AND (d_moy#47 <= 7)) AND isnotnull(d_date_sk#9)) +(92) FilterExecTransformer +Input [3]: [d_date_sk#9, d_year#45, d_moy#46] +Arguments: (((((isnotnull(d_year#45) AND isnotnull(d_moy#46)) AND (d_year#45 = 2002)) AND (d_moy#46 >= 4)) AND (d_moy#46 <= 7)) AND isnotnull(d_date_sk#9)) -(89) ProjectExecTransformer +(93) ProjectExecTransformer Output [1]: [d_date_sk#9] -Input [3]: [d_date_sk#9, d_year#46, d_moy#47] +Input [3]: [d_date_sk#9, d_year#45, d_moy#46] -(90) WholeStageCodegenTransformer (4) +(94) WholeStageCodegenTransformer (4) Input [1]: [d_date_sk#9] Arguments: false -(91) ColumnarBroadcastExchange +(95) ColumnarBroadcastExchange Input [1]: [d_date_sk#9] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:4 Hosting operator id = 21 Hosting Expression = ws_sold_date_sk#12 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 26 Hosting Expression = ws_sold_date_sk#12 IN dynamicpruning#8 -Subquery:5 Hosting operator id = 28 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#8 +Subquery:4 Hosting operator id = 33 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#8 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/simplified.txt index 7e9e3672808..396ad79aa9d 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/simplified.txt @@ -27,34 +27,27 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (3) ProjectExecTransformer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - FilterExecTransformer [c_current_addr_sk,c_current_cdemo_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] - FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [c_current_addr_sk,c_current_cdemo_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_county,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] InputIteratorTransformer InputAdapter ColumnarExchange [ss_customer_sk] #5 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/explain.txt index 758702123b8..d265fb91649 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/explain.txt @@ -1,261 +1,267 @@ == Physical Plan == -VeloxColumnarToRow (343) -+- ^ SortExecTransformer (341) - +- ^ InputIteratorTransformer (340) - +- ColumnarExchange (338) - +- VeloxResizeBatches (337) - +- ^ ProjectExecTransformer (335) - +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (334) - :- ^ InputIteratorTransformer (201) - : +- ColumnarExchange (199) - : +- VeloxResizeBatches (198) - : +- ^ ProjectExecTransformer (196) - : +- ^ RegularHashAggregateExecTransformer (195) - : +- ^ InputIteratorTransformer (194) - : +- ColumnarExchange (192) - : +- VeloxResizeBatches (191) - : +- ^ ProjectExecTransformer (189) - : +- ^ FlushableHashAggregateExecTransformer (188) - : +- ^ ProjectExecTransformer (187) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (186) - : :- ^ ProjectExecTransformer (178) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (177) - : : :- ^ ProjectExecTransformer (173) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (172) - : : : :- ^ ProjectExecTransformer (165) - : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (164) - : : : : :- ^ InputIteratorTransformer (160) - : : : : : +- ColumnarExchange (158) - : : : : : +- VeloxResizeBatches (157) - : : : : : +- ^ ProjectExecTransformer (155) - : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (154) - : : : : : :- ^ InputIteratorTransformer (145) - : : : : : : +- ColumnarExchange (143) - : : : : : : +- VeloxResizeBatches (142) - : : : : : : +- ^ ProjectExecTransformer (140) - : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (139) - : : : : : : :- ^ ProjectExecTransformer (135) - : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (134) - : : : : : : : :- ^ ProjectExecTransformer (127) - : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (126) - : : : : : : : : :- ^ ProjectExecTransformer (119) - : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (118) - : : : : : : : : : :- ^ InputIteratorTransformer (114) - : : : : : : : : : : +- ColumnarExchange (112) - : : : : : : : : : : +- VeloxResizeBatches (111) - : : : : : : : : : : +- ^ ProjectExecTransformer (109) - : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (108) - : : : : : : : : : : :- ^ InputIteratorTransformer (99) - : : : : : : : : : : : +- ColumnarExchange (97) - : : : : : : : : : : : +- VeloxResizeBatches (96) - : : : : : : : : : : : +- ^ ProjectExecTransformer (94) - : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (93) - : : : : : : : : : : : :- ^ ProjectExecTransformer (89) - : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (88) - : : : : : : : : : : : : :- ^ ProjectExecTransformer (81) - : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (80) - : : : : : : : : : : : : : :- ^ InputIteratorTransformer (71) - : : : : : : : : : : : : : : +- ColumnarExchange (69) - : : : : : : : : : : : : : : +- VeloxResizeBatches (68) - : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (66) - : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (65) - : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (58) - : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) - : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (53) - : : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (52) - : : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (18) - : : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (17) - : : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (8) - : : : : : : : : : : : : : : : : : : +- ColumnarExchange (6) - : : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (5) - : : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (3) - : : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (2) - : : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (16) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (14) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (13) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (11) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (10) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (9) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (51) - : : : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (49) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (47) - : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (46) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (45) - : : : : : : : : : : : : : : : : +- ^ RegularHashAggregateExecTransformer (44) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (43) - : : : : : : : : : : : : : : : : +- ColumnarExchange (41) - : : : : : : : : : : : : : : : : +- VeloxResizeBatches (40) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (38) - : : : : : : : : : : : : : : : : +- ^ FlushableHashAggregateExecTransformer (37) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (36) - : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (35) - : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (26) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (24) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (23) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (21) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (20) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (19) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (34) - : : : : : : : : : : : : : : : : +- ColumnarExchange (32) - : : : : : : : : : : : : : : : : +- VeloxResizeBatches (31) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (29) - : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (28) - : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (27) - : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (56) - : : : : : : : : : : : : : : : +- ReusedExchange (54) - : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (64) - : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (62) - : : : : : : : : : : : : : : +- ^ FilterExecTransformer (60) - : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (59) - : : : : : : : : : : : : : +- ^ InputIteratorTransformer (79) - : : : : : : : : : : : : : +- ColumnarExchange (77) - : : : : : : : : : : : : : +- VeloxResizeBatches (76) - : : : : : : : : : : : : : +- ^ ProjectExecTransformer (74) - : : : : : : : : : : : : : +- ^ FilterExecTransformer (73) - : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (72) - : : : : : : : : : : : : +- ^ InputIteratorTransformer (87) - : : : : : : : : : : : : +- ColumnarBroadcastExchange (85) - : : : : : : : : : : : : +- ^ FilterExecTransformer (83) - : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) - : : : : : : : : : : : +- ^ InputIteratorTransformer (92) - : : : : : : : : : : : +- ReusedExchange (90) - : : : : : : : : : : +- ^ InputIteratorTransformer (107) - : : : : : : : : : : +- ColumnarExchange (105) - : : : : : : : : : : +- VeloxResizeBatches (104) - : : : : : : : : : : +- ^ ProjectExecTransformer (102) - : : : : : : : : : : +- ^ FilterExecTransformer (101) - : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (100) - : : : : : : : : : +- ^ InputIteratorTransformer (117) - : : : : : : : : : +- ReusedExchange (115) - : : : : : : : : +- ^ InputIteratorTransformer (125) - : : : : : : : : +- ColumnarBroadcastExchange (123) - : : : : : : : : +- ^ FilterExecTransformer (121) - : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (120) - : : : : : : : +- ^ InputIteratorTransformer (133) - : : : : : : : +- ColumnarBroadcastExchange (131) - : : : : : : : +- ^ FilterExecTransformer (129) - : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics (128) - : : : : : : +- ^ InputIteratorTransformer (138) - : : : : : : +- ReusedExchange (136) - : : : : : +- ^ InputIteratorTransformer (153) - : : : : : +- ColumnarExchange (151) - : : : : : +- VeloxResizeBatches (150) - : : : : : +- ^ ProjectExecTransformer (148) - : : : : : +- ^ FilterExecTransformer (147) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (146) - : : : : +- ^ InputIteratorTransformer (163) - : : : : +- ReusedExchange (161) - : : : +- ^ InputIteratorTransformer (171) - : : : +- ColumnarBroadcastExchange (169) - : : : +- ^ FilterExecTransformer (167) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.income_band (166) - : : +- ^ InputIteratorTransformer (176) - : : +- ReusedExchange (174) - : +- ^ InputIteratorTransformer (185) - : +- ColumnarBroadcastExchange (183) - : +- ^ ProjectExecTransformer (181) - : +- ^ FilterExecTransformer (180) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (179) - +- ^ InputIteratorTransformer (333) - +- ColumnarExchange (331) - +- VeloxResizeBatches (330) - +- ^ ProjectExecTransformer (328) - +- ^ RegularHashAggregateExecTransformer (327) - +- ^ InputIteratorTransformer (326) - +- ColumnarExchange (324) - +- VeloxResizeBatches (323) - +- ^ ProjectExecTransformer (321) - +- ^ FlushableHashAggregateExecTransformer (320) - +- ^ ProjectExecTransformer (319) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (318) - :- ^ ProjectExecTransformer (314) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (313) - : :- ^ ProjectExecTransformer (309) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (308) - : : :- ^ ProjectExecTransformer (304) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (303) - : : : :- ^ InputIteratorTransformer (299) - : : : : +- ColumnarExchange (297) - : : : : +- VeloxResizeBatches (296) - : : : : +- ^ ProjectExecTransformer (294) - : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (293) - : : : : :- ^ InputIteratorTransformer (289) - : : : : : +- ColumnarExchange (287) - : : : : : +- VeloxResizeBatches (286) - : : : : : +- ^ ProjectExecTransformer (284) - : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) - : : : : : :- ^ ProjectExecTransformer (279) - : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (278) - : : : : : : :- ^ ProjectExecTransformer (274) - : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (273) - : : : : : : : :- ^ ProjectExecTransformer (269) - : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (268) - : : : : : : : : :- ^ InputIteratorTransformer (264) - : : : : : : : : : +- ColumnarExchange (262) - : : : : : : : : : +- VeloxResizeBatches (261) - : : : : : : : : : +- ^ ProjectExecTransformer (259) - : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (258) - : : : : : : : : : :- ^ InputIteratorTransformer (254) - : : : : : : : : : : +- ColumnarExchange (252) - : : : : : : : : : : +- VeloxResizeBatches (251) - : : : : : : : : : : +- ^ ProjectExecTransformer (249) - : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (248) - : : : : : : : : : : :- ^ ProjectExecTransformer (244) - : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (243) - : : : : : : : : : : : :- ^ ProjectExecTransformer (239) - : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (238) - : : : : : : : : : : : : :- ^ InputIteratorTransformer (234) - : : : : : : : : : : : : : +- ColumnarExchange (232) - : : : : : : : : : : : : : +- VeloxResizeBatches (231) - : : : : : : : : : : : : : +- ^ ProjectExecTransformer (229) - : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (228) - : : : : : : : : : : : : : :- ^ ProjectExecTransformer (224) - : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (223) - : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (219) - : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (218) - : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (214) - : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (213) - : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (209) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (207) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (206) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (204) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (203) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (202) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (212) - : : : : : : : : : : : : : : : : +- ReusedExchange (210) - : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (217) - : : : : : : : : : : : : : : : +- ReusedExchange (215) - : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (222) - : : : : : : : : : : : : : : +- ReusedExchange (220) - : : : : : : : : : : : : : +- ^ InputIteratorTransformer (227) - : : : : : : : : : : : : : +- ReusedExchange (225) - : : : : : : : : : : : : +- ^ InputIteratorTransformer (237) - : : : : : : : : : : : : +- ReusedExchange (235) - : : : : : : : : : : : +- ^ InputIteratorTransformer (242) - : : : : : : : : : : : +- ReusedExchange (240) - : : : : : : : : : : +- ^ InputIteratorTransformer (247) - : : : : : : : : : : +- ReusedExchange (245) - : : : : : : : : : +- ^ InputIteratorTransformer (257) - : : : : : : : : : +- ReusedExchange (255) - : : : : : : : : +- ^ InputIteratorTransformer (267) - : : : : : : : : +- ReusedExchange (265) - : : : : : : : +- ^ InputIteratorTransformer (272) - : : : : : : : +- ReusedExchange (270) - : : : : : : +- ^ InputIteratorTransformer (277) - : : : : : : +- ReusedExchange (275) - : : : : : +- ^ InputIteratorTransformer (282) - : : : : : +- ReusedExchange (280) - : : : : +- ^ InputIteratorTransformer (292) - : : : : +- ReusedExchange (290) - : : : +- ^ InputIteratorTransformer (302) - : : : +- ReusedExchange (300) - : : +- ^ InputIteratorTransformer (307) - : : +- ReusedExchange (305) - : +- ^ InputIteratorTransformer (312) - : +- ReusedExchange (310) - +- ^ InputIteratorTransformer (317) - +- ReusedExchange (315) +VeloxColumnarToRow (353) ++- ^ SortExecTransformer (351) + +- ^ InputIteratorTransformer (350) + +- ColumnarExchange (348) + +- VeloxResizeBatches (347) + +- ^ ProjectExecTransformer (345) + +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (344) + :- ^ InputIteratorTransformer (206) + : +- ColumnarExchange (204) + : +- VeloxResizeBatches (203) + : +- ^ ProjectExecTransformer (201) + : +- ^ RegularHashAggregateExecTransformer (200) + : +- ^ InputIteratorTransformer (199) + : +- ColumnarExchange (197) + : +- VeloxResizeBatches (196) + : +- ^ ProjectExecTransformer (194) + : +- ^ FlushableHashAggregateExecTransformer (193) + : +- ^ ProjectExecTransformer (192) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (191) + : :- ^ ProjectExecTransformer (183) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (182) + : : :- ^ ProjectExecTransformer (178) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (177) + : : : :- ^ ProjectExecTransformer (170) + : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (169) + : : : : :- ^ InputIteratorTransformer (165) + : : : : : +- ColumnarExchange (163) + : : : : : +- VeloxResizeBatches (162) + : : : : : +- ^ ProjectExecTransformer (160) + : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (159) + : : : : : :- ^ InputIteratorTransformer (150) + : : : : : : +- ColumnarExchange (148) + : : : : : : +- VeloxResizeBatches (147) + : : : : : : +- ^ ProjectExecTransformer (145) + : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (144) + : : : : : : :- ^ ProjectExecTransformer (140) + : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (139) + : : : : : : : :- ^ ProjectExecTransformer (132) + : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (131) + : : : : : : : : :- ^ ProjectExecTransformer (124) + : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (123) + : : : : : : : : : :- ^ InputIteratorTransformer (119) + : : : : : : : : : : +- ColumnarExchange (117) + : : : : : : : : : : +- VeloxResizeBatches (116) + : : : : : : : : : : +- ^ ProjectExecTransformer (114) + : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (113) + : : : : : : : : : : :- ^ InputIteratorTransformer (104) + : : : : : : : : : : : +- ColumnarExchange (102) + : : : : : : : : : : : +- VeloxResizeBatches (101) + : : : : : : : : : : : +- ^ ProjectExecTransformer (99) + : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (98) + : : : : : : : : : : : :- ^ ProjectExecTransformer (94) + : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (93) + : : : : : : : : : : : : :- ^ ProjectExecTransformer (86) + : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (85) + : : : : : : : : : : : : : :- ^ InputIteratorTransformer (76) + : : : : : : : : : : : : : : +- ColumnarExchange (74) + : : : : : : : : : : : : : : +- VeloxResizeBatches (73) + : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (71) + : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (70) + : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (63) + : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) + : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (58) + : : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) + : : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (23) + : : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (22) + : : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (13) + : : : : : : : : : : : : : : : : : : +- ColumnarExchange (11) + : : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (10) + : : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (8) + : : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (7) + : : : : : : : : : : : : : : : : : : +- RowToVeloxColumnar (5) + : : : : : : : : : : : : : : : : : : +- * Filter (4) + : : : : : : : : : : : : : : : : : : +- VeloxColumnarToRow (3) + : : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (21) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (19) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (18) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (16) + : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (15) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (14) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (56) + : : : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (54) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (52) + : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (51) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (50) + : : : : : : : : : : : : : : : : +- ^ RegularHashAggregateExecTransformer (49) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (48) + : : : : : : : : : : : : : : : : +- ColumnarExchange (46) + : : : : : : : : : : : : : : : : +- VeloxResizeBatches (45) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (43) + : : : : : : : : : : : : : : : : +- ^ FlushableHashAggregateExecTransformer (42) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (41) + : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (40) + : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (31) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (29) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (28) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (26) + : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (25) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (24) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (39) + : : : : : : : : : : : : : : : : +- ColumnarExchange (37) + : : : : : : : : : : : : : : : : +- VeloxResizeBatches (36) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (34) + : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (33) + : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (32) + : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (61) + : : : : : : : : : : : : : : : +- ReusedExchange (59) + : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (69) + : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (67) + : : : : : : : : : : : : : : +- ^ FilterExecTransformer (65) + : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (64) + : : : : : : : : : : : : : +- ^ InputIteratorTransformer (84) + : : : : : : : : : : : : : +- ColumnarExchange (82) + : : : : : : : : : : : : : +- VeloxResizeBatches (81) + : : : : : : : : : : : : : +- ^ ProjectExecTransformer (79) + : : : : : : : : : : : : : +- ^ FilterExecTransformer (78) + : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (77) + : : : : : : : : : : : : +- ^ InputIteratorTransformer (92) + : : : : : : : : : : : : +- ColumnarBroadcastExchange (90) + : : : : : : : : : : : : +- ^ FilterExecTransformer (88) + : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) + : : : : : : : : : : : +- ^ InputIteratorTransformer (97) + : : : : : : : : : : : +- ReusedExchange (95) + : : : : : : : : : : +- ^ InputIteratorTransformer (112) + : : : : : : : : : : +- ColumnarExchange (110) + : : : : : : : : : : +- VeloxResizeBatches (109) + : : : : : : : : : : +- ^ ProjectExecTransformer (107) + : : : : : : : : : : +- ^ FilterExecTransformer (106) + : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (105) + : : : : : : : : : +- ^ InputIteratorTransformer (122) + : : : : : : : : : +- ReusedExchange (120) + : : : : : : : : +- ^ InputIteratorTransformer (130) + : : : : : : : : +- ColumnarBroadcastExchange (128) + : : : : : : : : +- ^ FilterExecTransformer (126) + : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (125) + : : : : : : : +- ^ InputIteratorTransformer (138) + : : : : : : : +- ColumnarBroadcastExchange (136) + : : : : : : : +- ^ FilterExecTransformer (134) + : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics (133) + : : : : : : +- ^ InputIteratorTransformer (143) + : : : : : : +- ReusedExchange (141) + : : : : : +- ^ InputIteratorTransformer (158) + : : : : : +- ColumnarExchange (156) + : : : : : +- VeloxResizeBatches (155) + : : : : : +- ^ ProjectExecTransformer (153) + : : : : : +- ^ FilterExecTransformer (152) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (151) + : : : : +- ^ InputIteratorTransformer (168) + : : : : +- ReusedExchange (166) + : : : +- ^ InputIteratorTransformer (176) + : : : +- ColumnarBroadcastExchange (174) + : : : +- ^ FilterExecTransformer (172) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.income_band (171) + : : +- ^ InputIteratorTransformer (181) + : : +- ReusedExchange (179) + : +- ^ InputIteratorTransformer (190) + : +- ColumnarBroadcastExchange (188) + : +- ^ ProjectExecTransformer (186) + : +- ^ FilterExecTransformer (185) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (184) + +- ^ InputIteratorTransformer (343) + +- ColumnarExchange (341) + +- VeloxResizeBatches (340) + +- ^ ProjectExecTransformer (338) + +- ^ RegularHashAggregateExecTransformer (337) + +- ^ InputIteratorTransformer (336) + +- ColumnarExchange (334) + +- VeloxResizeBatches (333) + +- ^ ProjectExecTransformer (331) + +- ^ FlushableHashAggregateExecTransformer (330) + +- ^ ProjectExecTransformer (329) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (328) + :- ^ ProjectExecTransformer (324) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (323) + : :- ^ ProjectExecTransformer (319) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (318) + : : :- ^ ProjectExecTransformer (314) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (313) + : : : :- ^ InputIteratorTransformer (309) + : : : : +- ColumnarExchange (307) + : : : : +- VeloxResizeBatches (306) + : : : : +- ^ ProjectExecTransformer (304) + : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (303) + : : : : :- ^ InputIteratorTransformer (299) + : : : : : +- ColumnarExchange (297) + : : : : : +- VeloxResizeBatches (296) + : : : : : +- ^ ProjectExecTransformer (294) + : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (293) + : : : : : :- ^ ProjectExecTransformer (289) + : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (288) + : : : : : : :- ^ ProjectExecTransformer (284) + : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) + : : : : : : : :- ^ ProjectExecTransformer (279) + : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (278) + : : : : : : : : :- ^ InputIteratorTransformer (274) + : : : : : : : : : +- ColumnarExchange (272) + : : : : : : : : : +- VeloxResizeBatches (271) + : : : : : : : : : +- ^ ProjectExecTransformer (269) + : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (268) + : : : : : : : : : :- ^ InputIteratorTransformer (264) + : : : : : : : : : : +- ColumnarExchange (262) + : : : : : : : : : : +- VeloxResizeBatches (261) + : : : : : : : : : : +- ^ ProjectExecTransformer (259) + : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (258) + : : : : : : : : : : :- ^ ProjectExecTransformer (254) + : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (253) + : : : : : : : : : : : :- ^ ProjectExecTransformer (249) + : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (248) + : : : : : : : : : : : : :- ^ InputIteratorTransformer (244) + : : : : : : : : : : : : : +- ColumnarExchange (242) + : : : : : : : : : : : : : +- VeloxResizeBatches (241) + : : : : : : : : : : : : : +- ^ ProjectExecTransformer (239) + : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (238) + : : : : : : : : : : : : : :- ^ ProjectExecTransformer (234) + : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (233) + : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (229) + : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (228) + : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (224) + : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (223) + : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (219) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (217) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (216) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (214) + : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (213) + : : : : : : : : : : : : : : : : : +- RowToVeloxColumnar (211) + : : : : : : : : : : : : : : : : : +- * Filter (210) + : : : : : : : : : : : : : : : : : +- VeloxColumnarToRow (209) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (207) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (222) + : : : : : : : : : : : : : : : : +- ReusedExchange (220) + : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (227) + : : : : : : : : : : : : : : : +- ReusedExchange (225) + : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (232) + : : : : : : : : : : : : : : +- ReusedExchange (230) + : : : : : : : : : : : : : +- ^ InputIteratorTransformer (237) + : : : : : : : : : : : : : +- ReusedExchange (235) + : : : : : : : : : : : : +- ^ InputIteratorTransformer (247) + : : : : : : : : : : : : +- ReusedExchange (245) + : : : : : : : : : : : +- ^ InputIteratorTransformer (252) + : : : : : : : : : : : +- ReusedExchange (250) + : : : : : : : : : : +- ^ InputIteratorTransformer (257) + : : : : : : : : : : +- ReusedExchange (255) + : : : : : : : : : +- ^ InputIteratorTransformer (267) + : : : : : : : : : +- ReusedExchange (265) + : : : : : : : : +- ^ InputIteratorTransformer (277) + : : : : : : : : +- ReusedExchange (275) + : : : : : : : +- ^ InputIteratorTransformer (282) + : : : : : : : +- ReusedExchange (280) + : : : : : : +- ^ InputIteratorTransformer (287) + : : : : : : +- ReusedExchange (285) + : : : : : +- ^ InputIteratorTransformer (292) + : : : : : +- ReusedExchange (290) + : : : : +- ^ InputIteratorTransformer (302) + : : : : +- ReusedExchange (300) + : : : +- ^ InputIteratorTransformer (312) + : : : +- ReusedExchange (310) + : : +- ^ InputIteratorTransformer (317) + : : +- ReusedExchange (315) + : +- ^ InputIteratorTransformer (322) + : +- ReusedExchange (320) + +- ^ InputIteratorTransformer (327) + +- ReusedExchange (325) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -266,829 +272,845 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#12), dynamicpruningexpression(ss_so PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (3) +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] +Arguments: false + +(3) VeloxColumnarToRow +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(4) Filter [codegen id : 1] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] +Condition : ((((((((isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#8)) AND isnotnull(ss_store_sk#6)) AND isnotnull(ss_customer_sk#2)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_promo_sk#7)) AND isnotnull(ss_hdemo_sk#4)) AND isnotnull(ss_addr_sk#5)) AND might_contain(Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#1, 42))) + +(5) RowToVeloxColumnar +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(6) InputAdapter +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(7) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -Arguments: ((((((((isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#8)) AND isnotnull(ss_store_sk#6)) AND isnotnull(ss_customer_sk#2)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_promo_sk#7)) AND isnotnull(ss_hdemo_sk#4)) AND isnotnull(ss_addr_sk#5)) AND velox_might_contain(Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#1, 42))) -(3) ProjectExecTransformer +(8) ProjectExecTransformer Output [13]: [hash(ss_item_sk#1, ss_ticket_number#8, 42) AS hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(4) WholeStageCodegenTransformer (4) +(9) WholeStageCodegenTransformer (4) Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#8, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] Arguments: (isnotnull(sr_item_sk#16) AND isnotnull(sr_ticket_number#17)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [3]: [hash(sr_item_sk#16, sr_ticket_number#17, 42) AS hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Input [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] -(12) WholeStageCodegenTransformer (5) +(17) WholeStageCodegenTransformer (5) Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: hashpartitioning(sr_item_sk#16, sr_ticket_number#17, 1), ENSURE_REQUIREMENTS, [sr_item_sk#16, sr_ticket_number#17], [plan_id=3], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [2]: [sr_item_sk#16, sr_ticket_number#17] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [2]: [sr_item_sk#16, sr_ticket_number#17] -(17) ShuffledHashJoinExecTransformer +(22) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#1, ss_ticket_number#8] Right keys [2]: [sr_item_sk#16, sr_ticket_number#17] Join type: Inner Join condition: None -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, sr_item_sk#16, sr_ticket_number#17] -(19) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(24) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_order_number)] ReadSchema: struct -(20) FilterExecTransformer +(25) FilterExecTransformer Input [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] Arguments: (isnotnull(cs_item_sk#20) AND isnotnull(cs_order_number#21)) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [4]: [hash(cs_item_sk#20, cs_order_number#21, 42) AS hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Input [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] -(22) WholeStageCodegenTransformer (6) +(27) WholeStageCodegenTransformer (6) Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: false -(23) VeloxResizeBatches +(28) VeloxResizeBatches Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: 1024, 2147483647, 10485760 -(24) ColumnarExchange +(29) ColumnarExchange Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: hashpartitioning(cs_item_sk#20, cs_order_number#21, 1), ENSURE_REQUIREMENTS, [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22], [plan_id=4], [shuffle_writer_type=hash] -(25) InputAdapter +(30) InputAdapter Input [3]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] -(26) InputIteratorTransformer +(31) InputIteratorTransformer Input [3]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] -(27) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(32) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct -(28) FilterExecTransformer +(33) FilterExecTransformer Input [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] Arguments: (isnotnull(cr_item_sk#25) AND isnotnull(cr_order_number#26)) -(29) ProjectExecTransformer +(34) ProjectExecTransformer Output [6]: [hash(cr_item_sk#25, cr_order_number#26, 42) AS hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Input [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] -(30) WholeStageCodegenTransformer (7) +(35) WholeStageCodegenTransformer (7) Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: false -(31) VeloxResizeBatches +(36) VeloxResizeBatches Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: 1024, 2147483647, 10485760 -(32) ColumnarExchange +(37) ColumnarExchange Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: hashpartitioning(cr_item_sk#25, cr_order_number#26, 1), ENSURE_REQUIREMENTS, [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29], [plan_id=5], [shuffle_writer_type=hash] -(33) InputAdapter +(38) InputAdapter Input [5]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(34) InputIteratorTransformer +(39) InputIteratorTransformer Input [5]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(35) ShuffledHashJoinExecTransformer +(40) ShuffledHashJoinExecTransformer Left keys [2]: [cs_item_sk#20, cs_order_number#21] Right keys [2]: [cr_item_sk#25, cr_order_number#26] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(41) ProjectExecTransformer Output [3]: [cs_item_sk#20, UnscaledValue(cs_ext_list_price#22) AS _pre_1#32, ((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29) AS _pre_2#33] Input [8]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(37) FlushableHashAggregateExecTransformer +(42) FlushableHashAggregateExecTransformer Input [3]: [cs_item_sk#20, _pre_1#32, _pre_2#33] Keys [1]: [cs_item_sk#20] Functions [2]: [partial_sum(_pre_1#32), partial_sum(_pre_2#33)] Aggregate Attributes [3]: [sum#34, sum#35, isEmpty#36] Results [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(38) ProjectExecTransformer +(43) ProjectExecTransformer Output [5]: [hash(cs_item_sk#20, 42) AS hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(39) WholeStageCodegenTransformer (8) +(44) WholeStageCodegenTransformer (8) Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: false -(40) VeloxResizeBatches +(45) VeloxResizeBatches Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: 1024, 2147483647, 10485760 -(41) ColumnarExchange +(46) ColumnarExchange Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: hashpartitioning(cs_item_sk#20, 1), ENSURE_REQUIREMENTS, [cs_item_sk#20, sum#37, sum#38, isEmpty#39], [plan_id=6], [shuffle_writer_type=hash] -(42) InputAdapter +(47) InputAdapter Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(43) InputIteratorTransformer +(48) InputIteratorTransformer Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(44) RegularHashAggregateExecTransformer +(49) RegularHashAggregateExecTransformer Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] Keys [1]: [cs_item_sk#20] Functions [2]: [sum(UnscaledValue(cs_ext_list_price#22)), sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))] Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] Results [3]: [cs_item_sk#20, sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] -(45) ProjectExecTransformer +(50) ProjectExecTransformer Output [3]: [cs_item_sk#20, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#22))#41,17,2) AS sale#43, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42 AS refund#44] Input [3]: [cs_item_sk#20, sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] -(46) FilterExecTransformer +(51) FilterExecTransformer Input [3]: [cs_item_sk#20, sale#43, refund#44] Arguments: ((isnotnull(sale#43) AND isnotnull(refund#44)) AND (cast(sale#43 as decimal(21,2)) > (2 * refund#44))) -(47) ProjectExecTransformer +(52) ProjectExecTransformer Output [1]: [cs_item_sk#20] Input [3]: [cs_item_sk#20, sale#43, refund#44] -(48) WholeStageCodegenTransformer (9) +(53) WholeStageCodegenTransformer (9) Input [1]: [cs_item_sk#20] Arguments: false -(49) ColumnarBroadcastExchange +(54) ColumnarBroadcastExchange Input [1]: [cs_item_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(50) InputAdapter +(55) InputAdapter Input [1]: [cs_item_sk#20] -(51) InputIteratorTransformer +(56) InputIteratorTransformer Input [1]: [cs_item_sk#20] -(52) BroadcastHashJoinExecTransformer +(57) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [cs_item_sk#20] Join type: Inner Join condition: None -(53) ProjectExecTransformer +(58) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, cs_item_sk#20] -(54) ReusedExchange [Reuses operator id: 359] +(59) ReusedExchange [Reuses operator id: 368] Output [2]: [d_date_sk#45, d_year#46] -(55) InputAdapter +(60) InputAdapter Input [2]: [d_date_sk#45, d_year#46] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [2]: [d_date_sk#45, d_year#46] -(57) BroadcastHashJoinExecTransformer +(62) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#12] Right keys [1]: [d_date_sk#45] Join type: Inner Join condition: None -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46] Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, d_date_sk#45, d_year#46] -(59) FileSourceScanExecTransformer parquet spark_catalog.default.store +(64) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_name), IsNotNull(s_zip)] ReadSchema: struct -(60) FilterExecTransformer +(65) FilterExecTransformer Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: ((isnotnull(s_store_sk#47) AND isnotnull(s_store_name#48)) AND isnotnull(s_zip#49)) -(61) WholeStageCodegenTransformer (11) +(66) WholeStageCodegenTransformer (11) Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: false -(62) ColumnarBroadcastExchange +(67) ColumnarBroadcastExchange Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] -(63) InputAdapter +(68) InputAdapter Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] -(64) InputIteratorTransformer +(69) InputIteratorTransformer Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] -(65) BroadcastHashJoinExecTransformer +(70) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#6] Right keys [1]: [s_store_sk#47] Join type: Inner Join condition: None -(66) ProjectExecTransformer +(71) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#2, 42) AS hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_sk#47, s_store_name#48, s_zip#49] -(67) WholeStageCodegenTransformer (12) +(72) WholeStageCodegenTransformer (12) Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: false -(68) VeloxResizeBatches +(73) VeloxResizeBatches Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: 1024, 2147483647, 10485760 -(69) ColumnarExchange +(74) ColumnarExchange Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: hashpartitioning(ss_customer_sk#2, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49], [plan_id=9], [shuffle_writer_type=hash] -(70) InputAdapter +(75) InputAdapter Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] -(71) InputIteratorTransformer +(76) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] -(72) FileSourceScanExecTransformer parquet spark_catalog.default.customer +(77) FileSourceScanExecTransformer parquet spark_catalog.default.customer Output [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_first_sales_date_sk), IsNotNull(c_first_shipto_date_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_hdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct -(73) FilterExecTransformer +(78) FilterExecTransformer Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: (((((isnotnull(c_customer_sk#51) AND isnotnull(c_first_sales_date_sk#56)) AND isnotnull(c_first_shipto_date_sk#55)) AND isnotnull(c_current_cdemo_sk#52)) AND isnotnull(c_current_hdemo_sk#53)) AND isnotnull(c_current_addr_sk#54)) -(74) ProjectExecTransformer +(79) ProjectExecTransformer Output [7]: [hash(c_customer_sk#51, 42) AS hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(75) WholeStageCodegenTransformer (13) +(80) WholeStageCodegenTransformer (13) Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: false -(76) VeloxResizeBatches +(81) VeloxResizeBatches Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: 1024, 2147483647, 10485760 -(77) ColumnarExchange +(82) ColumnarExchange Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: hashpartitioning(c_customer_sk#51, 1), ENSURE_REQUIREMENTS, [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56], [plan_id=10], [shuffle_writer_type=hash] -(78) InputAdapter +(83) InputAdapter Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(79) InputIteratorTransformer +(84) InputIteratorTransformer Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(80) ShuffledHashJoinExecTransformer +(85) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#2] Right keys [1]: [c_customer_sk#51] Join type: Inner Join condition: None -(81) ProjectExecTransformer +(86) ProjectExecTransformer Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Input [18]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(82) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#58, d_year#59] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct -(83) FilterExecTransformer +(88) FilterExecTransformer Input [2]: [d_date_sk#58, d_year#59] Arguments: isnotnull(d_date_sk#58) -(84) WholeStageCodegenTransformer (14) +(89) WholeStageCodegenTransformer (14) Input [2]: [d_date_sk#58, d_year#59] Arguments: false -(85) ColumnarBroadcastExchange +(90) ColumnarBroadcastExchange Input [2]: [d_date_sk#58, d_year#59] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=11] -(86) InputAdapter +(91) InputAdapter Input [2]: [d_date_sk#58, d_year#59] -(87) InputIteratorTransformer +(92) InputIteratorTransformer Input [2]: [d_date_sk#58, d_year#59] -(88) BroadcastHashJoinExecTransformer +(93) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_sales_date_sk#56] Right keys [1]: [d_date_sk#58] Join type: Inner Join condition: None -(89) ProjectExecTransformer +(94) ProjectExecTransformer Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, d_year#59] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56, d_date_sk#58, d_year#59] -(90) ReusedExchange [Reuses operator id: 85] +(95) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#60, d_year#61] -(91) InputAdapter +(96) InputAdapter Input [2]: [d_date_sk#60, d_year#61] -(92) InputIteratorTransformer +(97) InputIteratorTransformer Input [2]: [d_date_sk#60, d_year#61] -(93) BroadcastHashJoinExecTransformer +(98) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_shipto_date_sk#55] Right keys [1]: [d_date_sk#60] Join type: Inner Join condition: None -(94) ProjectExecTransformer +(99) ProjectExecTransformer Output [17]: [hash(ss_cdemo_sk#3, 42) AS hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, d_year#59, d_date_sk#60, d_year#61] -(95) WholeStageCodegenTransformer (16) +(100) WholeStageCodegenTransformer (16) Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: false -(96) VeloxResizeBatches +(101) VeloxResizeBatches Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: 1024, 2147483647, 10485760 -(97) ColumnarExchange +(102) ColumnarExchange Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: hashpartitioning(ss_cdemo_sk#3, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61], [plan_id=12], [shuffle_writer_type=hash] -(98) InputAdapter +(103) InputAdapter Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] -(99) InputIteratorTransformer +(104) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] -(100) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(105) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [2]: [cd_demo_sk#63, cd_marital_status#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status)] ReadSchema: struct -(101) FilterExecTransformer +(106) FilterExecTransformer Input [2]: [cd_demo_sk#63, cd_marital_status#64] Arguments: (isnotnull(cd_demo_sk#63) AND isnotnull(cd_marital_status#64)) -(102) ProjectExecTransformer +(107) ProjectExecTransformer Output [3]: [hash(cd_demo_sk#63, 42) AS hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(103) WholeStageCodegenTransformer (17) +(108) WholeStageCodegenTransformer (17) Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: false -(104) VeloxResizeBatches +(109) VeloxResizeBatches Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: 1024, 2147483647, 10485760 -(105) ColumnarExchange +(110) ColumnarExchange Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: hashpartitioning(cd_demo_sk#63, 1), ENSURE_REQUIREMENTS, [cd_demo_sk#63, cd_marital_status#64], [plan_id=13], [shuffle_writer_type=hash] -(106) InputAdapter +(111) InputAdapter Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(107) InputIteratorTransformer +(112) InputIteratorTransformer Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(108) ShuffledHashJoinExecTransformer +(113) ShuffledHashJoinExecTransformer Left keys [1]: [ss_cdemo_sk#3] Right keys [1]: [cd_demo_sk#63] Join type: Inner Join condition: None -(109) ProjectExecTransformer +(114) ProjectExecTransformer Output [17]: [hash(c_current_cdemo_sk#52, 42) AS hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_demo_sk#63, cd_marital_status#64] -(110) WholeStageCodegenTransformer (18) +(115) WholeStageCodegenTransformer (18) Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: false -(111) VeloxResizeBatches +(116) VeloxResizeBatches Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: 1024, 2147483647, 10485760 -(112) ColumnarExchange +(117) ColumnarExchange Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: hashpartitioning(c_current_cdemo_sk#52, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64], [plan_id=14], [shuffle_writer_type=hash] -(113) InputAdapter +(118) InputAdapter Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] -(114) InputIteratorTransformer +(119) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] -(115) ReusedExchange [Reuses operator id: 105] +(120) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#67, cd_marital_status#68] -(116) InputAdapter +(121) InputAdapter Input [2]: [cd_demo_sk#67, cd_marital_status#68] -(117) InputIteratorTransformer +(122) InputIteratorTransformer Input [2]: [cd_demo_sk#67, cd_marital_status#68] -(118) ShuffledHashJoinExecTransformer +(123) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#52] Right keys [1]: [cd_demo_sk#67] Join type: Inner Join condition: NOT (cd_marital_status#64 = cd_marital_status#68) -(119) ProjectExecTransformer +(124) ProjectExecTransformer Output [14]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [18]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64, cd_demo_sk#67, cd_marital_status#68] -(120) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(125) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [1]: [p_promo_sk#69] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_promo_sk)] ReadSchema: struct -(121) FilterExecTransformer +(126) FilterExecTransformer Input [1]: [p_promo_sk#69] Arguments: isnotnull(p_promo_sk#69) -(122) WholeStageCodegenTransformer (20) +(127) WholeStageCodegenTransformer (20) Input [1]: [p_promo_sk#69] Arguments: false -(123) ColumnarBroadcastExchange +(128) ColumnarBroadcastExchange Input [1]: [p_promo_sk#69] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -(124) InputAdapter +(129) InputAdapter Input [1]: [p_promo_sk#69] -(125) InputIteratorTransformer +(130) InputIteratorTransformer Input [1]: [p_promo_sk#69] -(126) BroadcastHashJoinExecTransformer +(131) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#7] Right keys [1]: [p_promo_sk#69] Join type: Inner Join condition: None -(127) ProjectExecTransformer +(132) ProjectExecTransformer Output [13]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, p_promo_sk#69] -(128) FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics +(133) FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics Output [2]: [hd_demo_sk#70, hd_income_band_sk#71] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_demo_sk), IsNotNull(hd_income_band_sk)] ReadSchema: struct -(129) FilterExecTransformer +(134) FilterExecTransformer Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: (isnotnull(hd_demo_sk#70) AND isnotnull(hd_income_band_sk#71)) -(130) WholeStageCodegenTransformer (21) +(135) WholeStageCodegenTransformer (21) Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: false -(131) ColumnarBroadcastExchange +(136) ColumnarBroadcastExchange Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=16] -(132) InputAdapter +(137) InputAdapter Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] -(133) InputIteratorTransformer +(138) InputIteratorTransformer Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] -(134) BroadcastHashJoinExecTransformer +(139) BroadcastHashJoinExecTransformer Left keys [1]: [ss_hdemo_sk#4] Right keys [1]: [hd_demo_sk#70] Join type: Inner Join condition: None -(135) ProjectExecTransformer +(140) ProjectExecTransformer Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71] Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_demo_sk#70, hd_income_band_sk#71] -(136) ReusedExchange [Reuses operator id: 131] +(141) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(137) InputAdapter +(142) InputAdapter Input [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(138) InputIteratorTransformer +(143) InputIteratorTransformer Input [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(139) BroadcastHashJoinExecTransformer +(144) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_hdemo_sk#53] Right keys [1]: [hd_demo_sk#72] Join type: Inner Join condition: None -(140) ProjectExecTransformer +(145) ProjectExecTransformer Output [14]: [hash(ss_addr_sk#5, 42) AS hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Input [15]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_demo_sk#72, hd_income_band_sk#73] -(141) WholeStageCodegenTransformer (23) +(146) WholeStageCodegenTransformer (23) Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: false -(142) VeloxResizeBatches +(147) VeloxResizeBatches Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: 1024, 2147483647, 10485760 -(143) ColumnarExchange +(148) ColumnarExchange Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: hashpartitioning(ss_addr_sk#5, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73], [plan_id=17], [shuffle_writer_type=hash] -(144) InputAdapter +(149) InputAdapter Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] -(145) InputIteratorTransformer +(150) InputIteratorTransformer Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] -(146) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(151) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct -(147) FilterExecTransformer +(152) FilterExecTransformer Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: isnotnull(ca_address_sk#75) -(148) ProjectExecTransformer +(153) ProjectExecTransformer Output [6]: [hash(ca_address_sk#75, 42) AS hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(149) WholeStageCodegenTransformer (24) +(154) WholeStageCodegenTransformer (24) Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: false -(150) VeloxResizeBatches +(155) VeloxResizeBatches Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: 1024, 2147483647, 10485760 -(151) ColumnarExchange +(156) ColumnarExchange Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: hashpartitioning(ca_address_sk#75, 1), ENSURE_REQUIREMENTS, [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79], [plan_id=18], [shuffle_writer_type=hash] -(152) InputAdapter +(157) InputAdapter Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(153) InputIteratorTransformer +(158) InputIteratorTransformer Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(154) ShuffledHashJoinExecTransformer +(159) ShuffledHashJoinExecTransformer Left keys [1]: [ss_addr_sk#5] Right keys [1]: [ca_address_sk#75] Join type: Inner Join condition: None -(155) ProjectExecTransformer +(160) ProjectExecTransformer Output [17]: [hash(c_current_addr_sk#54, 42) AS hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Input [18]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(156) WholeStageCodegenTransformer (25) +(161) WholeStageCodegenTransformer (25) Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: false -(157) VeloxResizeBatches +(162) VeloxResizeBatches Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: 1024, 2147483647, 10485760 -(158) ColumnarExchange +(163) ColumnarExchange Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: hashpartitioning(c_current_addr_sk#54, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79], [plan_id=19], [shuffle_writer_type=hash] -(159) InputAdapter +(164) InputAdapter Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(160) InputIteratorTransformer +(165) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(161) ReusedExchange [Reuses operator id: 151] +(166) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(162) InputAdapter +(167) InputAdapter Input [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(163) InputIteratorTransformer +(168) InputIteratorTransformer Input [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(164) ShuffledHashJoinExecTransformer +(169) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#54] Right keys [1]: [ca_address_sk#82] Join type: Inner Join condition: None -(165) ProjectExecTransformer +(170) ProjectExecTransformer Output [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(166) FileSourceScanExecTransformer parquet spark_catalog.default.income_band +(171) FileSourceScanExecTransformer parquet spark_catalog.default.income_band Output [1]: [ib_income_band_sk#87] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/income_band] PushedFilters: [IsNotNull(ib_income_band_sk)] ReadSchema: struct -(167) FilterExecTransformer +(172) FilterExecTransformer Input [1]: [ib_income_band_sk#87] Arguments: isnotnull(ib_income_band_sk#87) -(168) WholeStageCodegenTransformer (27) +(173) WholeStageCodegenTransformer (27) Input [1]: [ib_income_band_sk#87] Arguments: false -(169) ColumnarBroadcastExchange +(174) ColumnarBroadcastExchange Input [1]: [ib_income_band_sk#87] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=20] -(170) InputAdapter +(175) InputAdapter Input [1]: [ib_income_band_sk#87] -(171) InputIteratorTransformer +(176) InputIteratorTransformer Input [1]: [ib_income_band_sk#87] -(172) BroadcastHashJoinExecTransformer +(177) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#71] Right keys [1]: [ib_income_band_sk#87] Join type: Inner Join condition: None -(173) ProjectExecTransformer +(178) ProjectExecTransformer Output [18]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, ib_income_band_sk#87] -(174) ReusedExchange [Reuses operator id: 169] +(179) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#88] -(175) InputAdapter +(180) InputAdapter Input [1]: [ib_income_band_sk#88] -(176) InputIteratorTransformer +(181) InputIteratorTransformer Input [1]: [ib_income_band_sk#88] -(177) BroadcastHashJoinExecTransformer +(182) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#73] Right keys [1]: [ib_income_band_sk#88] Join type: Inner Join condition: None -(178) ProjectExecTransformer +(183) ProjectExecTransformer Output [17]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, ib_income_band_sk#88] -(179) FileSourceScanExecTransformer parquet spark_catalog.default.item +(184) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood ,floral ,indian ,medium ,purple ,spring ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)] ReadSchema: struct -(180) FilterExecTransformer +(185) FilterExecTransformer Input [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] Arguments: ((((((isnotnull(i_current_price#90) AND i_color#91 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#90 >= 64.00)) AND (i_current_price#90 <= 74.00)) AND (i_current_price#90 >= 65.00)) AND (i_current_price#90 <= 79.00)) AND isnotnull(i_item_sk#89)) -(181) ProjectExecTransformer +(186) ProjectExecTransformer Output [2]: [i_item_sk#89, i_product_name#92] Input [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] -(182) WholeStageCodegenTransformer (29) +(187) WholeStageCodegenTransformer (29) Input [2]: [i_item_sk#89, i_product_name#92] Arguments: false -(183) ColumnarBroadcastExchange +(188) ColumnarBroadcastExchange Input [2]: [i_item_sk#89, i_product_name#92] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=21] -(184) InputAdapter +(189) InputAdapter Input [2]: [i_item_sk#89, i_product_name#92] -(185) InputIteratorTransformer +(190) InputIteratorTransformer Input [2]: [i_item_sk#89, i_product_name#92] -(186) BroadcastHashJoinExecTransformer +(191) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#89] Join type: Inner Join condition: None -(187) ProjectExecTransformer +(192) ProjectExecTransformer Output [18]: [d_year#46, d_year#59, d_year#61, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92, UnscaledValue(ss_wholesale_cost#9) AS _pre_3#93, UnscaledValue(ss_list_price#10) AS _pre_4#94, UnscaledValue(ss_coupon_amt#11) AS _pre_5#95] Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92] -(188) FlushableHashAggregateExecTransformer +(193) FlushableHashAggregateExecTransformer Input [18]: [d_year#46, d_year#59, d_year#61, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92, _pre_3#93, _pre_4#94, _pre_5#95] Keys [15]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61] Functions [4]: [partial_count(1), partial_sum(_pre_3#93), partial_sum(_pre_4#94), partial_sum(_pre_5#95)] Aggregate Attributes [4]: [count#96, sum#97, sum#98, sum#99] Results [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(189) ProjectExecTransformer +(194) ProjectExecTransformer Output [20]: [hash(i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, 42) AS hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(190) WholeStageCodegenTransformer (30) +(195) WholeStageCodegenTransformer (30) Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: false -(191) VeloxResizeBatches +(196) VeloxResizeBatches Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: 1024, 2147483647, 10485760 -(192) ColumnarExchange +(197) ColumnarExchange Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: hashpartitioning(i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, 1), ENSURE_REQUIREMENTS, [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103], [plan_id=22], [shuffle_writer_type=hash] -(193) InputAdapter +(198) InputAdapter Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(194) InputIteratorTransformer +(199) InputIteratorTransformer Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(195) RegularHashAggregateExecTransformer +(200) RegularHashAggregateExecTransformer Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Keys [15]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61] Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#9)), sum(UnscaledValue(ss_list_price#10)), sum(UnscaledValue(ss_coupon_amt#11))] Aggregate Attributes [4]: [count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] Results [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] -(196) ProjectExecTransformer +(201) ProjectExecTransformer Output [18]: [hash(i_item_sk#89, s_store_name#48, s_zip#49, 42) AS hash_partition_key#109, i_product_name#92 AS product_name#110, i_item_sk#89 AS item_sk#111, s_store_name#48 AS store_name#112, s_zip#49 AS store_zip#113, ca_street_number#76 AS b_street_number#114, ca_street_name#77 AS b_streen_name#115, ca_city#78 AS b_city#116, ca_zip#79 AS b_zip#117, ca_street_number#83 AS c_street_number#118, ca_street_name#84 AS c_street_name#119, ca_city#85 AS c_city#120, ca_zip#86 AS c_zip#121, d_year#46 AS syear#122, count(1)#105 AS cnt#123, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#9))#106,17,2) AS s1#124, MakeDecimal(sum(UnscaledValue(ss_list_price#10))#107,17,2) AS s2#125, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#11))#108,17,2) AS s3#126] Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] -(197) WholeStageCodegenTransformer (31) +(202) WholeStageCodegenTransformer (31) Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: false -(198) VeloxResizeBatches +(203) VeloxResizeBatches Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: 1024, 2147483647, 10485760 -(199) ColumnarExchange +(204) ColumnarExchange Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: hashpartitioning(item_sk#111, store_name#112, store_zip#113, 1), ENSURE_REQUIREMENTS, [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126], [plan_id=23], [shuffle_writer_type=hash] -(200) InputAdapter +(205) InputAdapter Input [17]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] -(201) InputIteratorTransformer +(206) InputIteratorTransformer Input [17]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] -(202) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(207) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Batched: true Location: InMemoryFileIndex [] @@ -1096,674 +1118,673 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#138), dynamicpruningexpression(ss_s PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)] ReadSchema: struct -(203) FilterExecTransformer +(208) WholeStageCodegenTransformer (34) +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] +Arguments: false + +(209) VeloxColumnarToRow +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(210) Filter [codegen id : 2] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -Arguments: ((((((((isnotnull(ss_item_sk#127) AND isnotnull(ss_ticket_number#134)) AND isnotnull(ss_store_sk#132)) AND isnotnull(ss_customer_sk#128)) AND isnotnull(ss_cdemo_sk#129)) AND isnotnull(ss_promo_sk#133)) AND isnotnull(ss_hdemo_sk#130)) AND isnotnull(ss_addr_sk#131)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#127, 42))) +Condition : ((((((((isnotnull(ss_item_sk#127) AND isnotnull(ss_ticket_number#134)) AND isnotnull(ss_store_sk#132)) AND isnotnull(ss_customer_sk#128)) AND isnotnull(ss_cdemo_sk#129)) AND isnotnull(ss_promo_sk#133)) AND isnotnull(ss_hdemo_sk#130)) AND isnotnull(ss_addr_sk#131)) AND might_contain(ReusedSubquery Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#127, 42))) -(204) ProjectExecTransformer +(211) RowToVeloxColumnar +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(212) InputAdapter +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(213) InputIteratorTransformer +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(214) ProjectExecTransformer Output [13]: [hash(ss_item_sk#127, ss_ticket_number#134, 42) AS hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(205) WholeStageCodegenTransformer (35) +(215) WholeStageCodegenTransformer (35) Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: false -(206) VeloxResizeBatches +(216) VeloxResizeBatches Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: 1024, 2147483647, 10485760 -(207) ColumnarExchange +(217) ColumnarExchange Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: hashpartitioning(ss_item_sk#127, ss_ticket_number#134, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138], [plan_id=24], [shuffle_writer_type=hash] -(208) InputAdapter +(218) InputAdapter Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(209) InputIteratorTransformer +(219) InputIteratorTransformer Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(210) ReusedExchange [Reuses operator id: 14] +(220) ReusedExchange [Reuses operator id: 19] Output [2]: [sr_item_sk#141, sr_ticket_number#142] -(211) InputAdapter +(221) InputAdapter Input [2]: [sr_item_sk#141, sr_ticket_number#142] -(212) InputIteratorTransformer +(222) InputIteratorTransformer Input [2]: [sr_item_sk#141, sr_ticket_number#142] -(213) ShuffledHashJoinExecTransformer +(223) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#127, ss_ticket_number#134] Right keys [2]: [sr_item_sk#141, sr_ticket_number#142] Join type: Inner Join condition: None -(214) ProjectExecTransformer +(224) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [14]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, sr_item_sk#141, sr_ticket_number#142] -(215) ReusedExchange [Reuses operator id: 49] +(225) ReusedExchange [Reuses operator id: 54] Output [1]: [cs_item_sk#143] -(216) InputAdapter +(226) InputAdapter Input [1]: [cs_item_sk#143] -(217) InputIteratorTransformer +(227) InputIteratorTransformer Input [1]: [cs_item_sk#143] -(218) BroadcastHashJoinExecTransformer +(228) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#127] Right keys [1]: [cs_item_sk#143] Join type: Inner Join condition: None -(219) ProjectExecTransformer +(229) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, cs_item_sk#143] -(220) ReusedExchange [Reuses operator id: 363] +(230) ReusedExchange [Reuses operator id: 372] Output [2]: [d_date_sk#144, d_year#145] -(221) InputAdapter +(231) InputAdapter Input [2]: [d_date_sk#144, d_year#145] -(222) InputIteratorTransformer +(232) InputIteratorTransformer Input [2]: [d_date_sk#144, d_year#145] -(223) BroadcastHashJoinExecTransformer +(233) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#138] Right keys [1]: [d_date_sk#144] Join type: Inner Join condition: None -(224) ProjectExecTransformer +(234) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145] Input [13]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, d_date_sk#144, d_year#145] -(225) ReusedExchange [Reuses operator id: 62] +(235) ReusedExchange [Reuses operator id: 67] Output [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(226) InputAdapter +(236) InputAdapter Input [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(227) InputIteratorTransformer +(237) InputIteratorTransformer Input [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(228) BroadcastHashJoinExecTransformer +(238) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#132] Right keys [1]: [s_store_sk#146] Join type: Inner Join condition: None -(229) ProjectExecTransformer +(239) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#128, 42) AS hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Input [14]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_sk#146, s_store_name#147, s_zip#148] -(230) WholeStageCodegenTransformer (43) +(240) WholeStageCodegenTransformer (43) Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: false -(231) VeloxResizeBatches +(241) VeloxResizeBatches Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: 1024, 2147483647, 10485760 -(232) ColumnarExchange +(242) ColumnarExchange Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: hashpartitioning(ss_customer_sk#128, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148], [plan_id=25], [shuffle_writer_type=hash] -(233) InputAdapter +(243) InputAdapter Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] -(234) InputIteratorTransformer +(244) InputIteratorTransformer Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] -(235) ReusedExchange [Reuses operator id: 77] +(245) ReusedExchange [Reuses operator id: 82] Output [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(236) InputAdapter +(246) InputAdapter Input [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(237) InputIteratorTransformer +(247) InputIteratorTransformer Input [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(238) ShuffledHashJoinExecTransformer +(248) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#128] Right keys [1]: [c_customer_sk#150] Join type: Inner Join condition: None -(239) ProjectExecTransformer +(249) ProjectExecTransformer Output [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] Input [18]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(240) ReusedExchange [Reuses operator id: 85] +(250) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#156, d_year#157] -(241) InputAdapter +(251) InputAdapter Input [2]: [d_date_sk#156, d_year#157] -(242) InputIteratorTransformer +(252) InputIteratorTransformer Input [2]: [d_date_sk#156, d_year#157] -(243) BroadcastHashJoinExecTransformer +(253) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_sales_date_sk#155] Right keys [1]: [d_date_sk#156] Join type: Inner Join condition: None -(244) ProjectExecTransformer +(254) ProjectExecTransformer Output [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, d_year#157] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155, d_date_sk#156, d_year#157] -(245) ReusedExchange [Reuses operator id: 85] +(255) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#158, d_year#159] -(246) InputAdapter +(256) InputAdapter Input [2]: [d_date_sk#158, d_year#159] -(247) InputIteratorTransformer +(257) InputIteratorTransformer Input [2]: [d_date_sk#158, d_year#159] -(248) BroadcastHashJoinExecTransformer +(258) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_shipto_date_sk#154] Right keys [1]: [d_date_sk#158] Join type: Inner Join condition: None -(249) ProjectExecTransformer +(259) ProjectExecTransformer Output [17]: [hash(ss_cdemo_sk#129, 42) AS hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, d_year#157, d_date_sk#158, d_year#159] -(250) WholeStageCodegenTransformer (47) +(260) WholeStageCodegenTransformer (47) Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: false -(251) VeloxResizeBatches +(261) VeloxResizeBatches Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: 1024, 2147483647, 10485760 -(252) ColumnarExchange +(262) ColumnarExchange Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: hashpartitioning(ss_cdemo_sk#129, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159], [plan_id=26], [shuffle_writer_type=hash] -(253) InputAdapter +(263) InputAdapter Input [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] -(254) InputIteratorTransformer +(264) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] -(255) ReusedExchange [Reuses operator id: 105] +(265) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#161, cd_marital_status#162] -(256) InputAdapter +(266) InputAdapter Input [2]: [cd_demo_sk#161, cd_marital_status#162] -(257) InputIteratorTransformer +(267) InputIteratorTransformer Input [2]: [cd_demo_sk#161, cd_marital_status#162] -(258) ShuffledHashJoinExecTransformer +(268) ShuffledHashJoinExecTransformer Left keys [1]: [ss_cdemo_sk#129] Right keys [1]: [cd_demo_sk#161] Join type: Inner Join condition: None -(259) ProjectExecTransformer +(269) ProjectExecTransformer Output [17]: [hash(c_current_cdemo_sk#151, 42) AS hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_demo_sk#161, cd_marital_status#162] -(260) WholeStageCodegenTransformer (49) +(270) WholeStageCodegenTransformer (49) Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: false -(261) VeloxResizeBatches +(271) VeloxResizeBatches Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: 1024, 2147483647, 10485760 -(262) ColumnarExchange +(272) ColumnarExchange Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: hashpartitioning(c_current_cdemo_sk#151, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162], [plan_id=27], [shuffle_writer_type=hash] -(263) InputAdapter +(273) InputAdapter Input [16]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] -(264) InputIteratorTransformer +(274) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] -(265) ReusedExchange [Reuses operator id: 105] +(275) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#164, cd_marital_status#165] -(266) InputAdapter +(276) InputAdapter Input [2]: [cd_demo_sk#164, cd_marital_status#165] -(267) InputIteratorTransformer +(277) InputIteratorTransformer Input [2]: [cd_demo_sk#164, cd_marital_status#165] -(268) ShuffledHashJoinExecTransformer +(278) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#151] Right keys [1]: [cd_demo_sk#164] Join type: Inner Join condition: NOT (cd_marital_status#162 = cd_marital_status#165) -(269) ProjectExecTransformer +(279) ProjectExecTransformer Output [14]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [18]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162, cd_demo_sk#164, cd_marital_status#165] -(270) ReusedExchange [Reuses operator id: 123] +(280) ReusedExchange [Reuses operator id: 128] Output [1]: [p_promo_sk#166] -(271) InputAdapter +(281) InputAdapter Input [1]: [p_promo_sk#166] -(272) InputIteratorTransformer +(282) InputIteratorTransformer Input [1]: [p_promo_sk#166] -(273) BroadcastHashJoinExecTransformer +(283) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#133] Right keys [1]: [p_promo_sk#166] Join type: Inner Join condition: None -(274) ProjectExecTransformer +(284) ProjectExecTransformer Output [13]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [15]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, p_promo_sk#166] -(275) ReusedExchange [Reuses operator id: 131] +(285) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(276) InputAdapter +(286) InputAdapter Input [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(277) InputIteratorTransformer +(287) InputIteratorTransformer Input [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(278) BroadcastHashJoinExecTransformer +(288) BroadcastHashJoinExecTransformer Left keys [1]: [ss_hdemo_sk#130] Right keys [1]: [hd_demo_sk#167] Join type: Inner Join condition: None -(279) ProjectExecTransformer +(289) ProjectExecTransformer Output [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168] Input [15]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_demo_sk#167, hd_income_band_sk#168] -(280) ReusedExchange [Reuses operator id: 131] +(290) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(281) InputAdapter +(291) InputAdapter Input [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(282) InputIteratorTransformer +(292) InputIteratorTransformer Input [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(283) BroadcastHashJoinExecTransformer +(293) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_hdemo_sk#152] Right keys [1]: [hd_demo_sk#169] Join type: Inner Join condition: None -(284) ProjectExecTransformer +(294) ProjectExecTransformer Output [14]: [hash(ss_addr_sk#131, 42) AS hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Input [15]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_demo_sk#169, hd_income_band_sk#170] -(285) WholeStageCodegenTransformer (54) +(295) WholeStageCodegenTransformer (54) Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: false -(286) VeloxResizeBatches +(296) VeloxResizeBatches Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: 1024, 2147483647, 10485760 -(287) ColumnarExchange +(297) ColumnarExchange Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: hashpartitioning(ss_addr_sk#131, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170], [plan_id=28], [shuffle_writer_type=hash] -(288) InputAdapter +(298) InputAdapter Input [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] -(289) InputIteratorTransformer +(299) InputIteratorTransformer Input [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] -(290) ReusedExchange [Reuses operator id: 151] +(300) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(291) InputAdapter +(301) InputAdapter Input [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(292) InputIteratorTransformer +(302) InputIteratorTransformer Input [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(293) ShuffledHashJoinExecTransformer +(303) ShuffledHashJoinExecTransformer Left keys [1]: [ss_addr_sk#131] Right keys [1]: [ca_address_sk#172] Join type: Inner Join condition: None -(294) ProjectExecTransformer +(304) ProjectExecTransformer Output [17]: [hash(c_current_addr_sk#153, 42) AS hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Input [18]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(295) WholeStageCodegenTransformer (56) +(305) WholeStageCodegenTransformer (56) Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: false -(296) VeloxResizeBatches +(306) VeloxResizeBatches Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: 1024, 2147483647, 10485760 -(297) ColumnarExchange +(307) ColumnarExchange Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: hashpartitioning(c_current_addr_sk#153, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176], [plan_id=29], [shuffle_writer_type=hash] -(298) InputAdapter +(308) InputAdapter Input [16]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(299) InputIteratorTransformer +(309) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(300) ReusedExchange [Reuses operator id: 151] +(310) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(301) InputAdapter +(311) InputAdapter Input [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(302) InputIteratorTransformer +(312) InputIteratorTransformer Input [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(303) ShuffledHashJoinExecTransformer +(313) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#153] Right keys [1]: [ca_address_sk#178] Join type: Inner Join condition: None -(304) ProjectExecTransformer +(314) ProjectExecTransformer Output [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [21]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(305) ReusedExchange [Reuses operator id: 169] +(315) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#183] -(306) InputAdapter +(316) InputAdapter Input [1]: [ib_income_band_sk#183] -(307) InputIteratorTransformer +(317) InputIteratorTransformer Input [1]: [ib_income_band_sk#183] -(308) BroadcastHashJoinExecTransformer +(318) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#168] Right keys [1]: [ib_income_band_sk#183] Join type: Inner Join condition: None -(309) ProjectExecTransformer +(319) ProjectExecTransformer Output [18]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [20]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, ib_income_band_sk#183] -(310) ReusedExchange [Reuses operator id: 169] +(320) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#184] -(311) InputAdapter +(321) InputAdapter Input [1]: [ib_income_band_sk#184] -(312) InputIteratorTransformer +(322) InputIteratorTransformer Input [1]: [ib_income_band_sk#184] -(313) BroadcastHashJoinExecTransformer +(323) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#170] Right keys [1]: [ib_income_band_sk#184] Join type: Inner Join condition: None -(314) ProjectExecTransformer +(324) ProjectExecTransformer Output [17]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, ib_income_band_sk#184] -(315) ReusedExchange [Reuses operator id: 183] +(325) ReusedExchange [Reuses operator id: 188] Output [2]: [i_item_sk#185, i_product_name#186] -(316) InputAdapter +(326) InputAdapter Input [2]: [i_item_sk#185, i_product_name#186] -(317) InputIteratorTransformer +(327) InputIteratorTransformer Input [2]: [i_item_sk#185, i_product_name#186] -(318) BroadcastHashJoinExecTransformer +(328) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#127] Right keys [1]: [i_item_sk#185] Join type: Inner Join condition: None -(319) ProjectExecTransformer +(329) ProjectExecTransformer Output [18]: [d_year#145, d_year#157, d_year#159, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186, UnscaledValue(ss_wholesale_cost#135) AS _pre_6#187, UnscaledValue(ss_list_price#136) AS _pre_7#188, UnscaledValue(ss_coupon_amt#137) AS _pre_8#189] Input [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186] -(320) FlushableHashAggregateExecTransformer +(330) FlushableHashAggregateExecTransformer Input [18]: [d_year#145, d_year#157, d_year#159, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186, _pre_6#187, _pre_7#188, _pre_8#189] Keys [15]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159] Functions [4]: [partial_count(1), partial_sum(_pre_6#187), partial_sum(_pre_7#188), partial_sum(_pre_8#189)] Aggregate Attributes [4]: [count#96, sum#190, sum#191, sum#192] Results [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(321) ProjectExecTransformer +(331) ProjectExecTransformer Output [20]: [hash(i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, 42) AS hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(322) WholeStageCodegenTransformer (61) +(332) WholeStageCodegenTransformer (61) Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: false -(323) VeloxResizeBatches +(333) VeloxResizeBatches Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: 1024, 2147483647, 10485760 -(324) ColumnarExchange +(334) ColumnarExchange Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: hashpartitioning(i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, 1), ENSURE_REQUIREMENTS, [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195], [plan_id=30], [shuffle_writer_type=hash] -(325) InputAdapter +(335) InputAdapter Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(326) InputIteratorTransformer +(336) InputIteratorTransformer Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(327) RegularHashAggregateExecTransformer +(337) RegularHashAggregateExecTransformer Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Keys [15]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159] Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#135)), sum(UnscaledValue(ss_list_price#136)), sum(UnscaledValue(ss_coupon_amt#137))] Aggregate Attributes [4]: [count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] Results [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] -(328) ProjectExecTransformer +(338) ProjectExecTransformer Output [9]: [hash(i_item_sk#185, s_store_name#147, s_zip#148, 42) AS hash_partition_key#197, i_item_sk#185 AS item_sk#198, s_store_name#147 AS store_name#199, s_zip#148 AS store_zip#200, d_year#145 AS syear#201, count(1)#105 AS cnt#202, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#135))#106,17,2) AS s1#203, MakeDecimal(sum(UnscaledValue(ss_list_price#136))#107,17,2) AS s2#204, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#137))#108,17,2) AS s3#205] Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] -(329) WholeStageCodegenTransformer (62) +(339) WholeStageCodegenTransformer (62) Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: false -(330) VeloxResizeBatches +(340) VeloxResizeBatches Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: 1024, 2147483647, 10485760 -(331) ColumnarExchange +(341) ColumnarExchange Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: hashpartitioning(item_sk#198, store_name#199, store_zip#200, 1), ENSURE_REQUIREMENTS, [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205], [plan_id=31], [shuffle_writer_type=hash] -(332) InputAdapter +(342) InputAdapter Input [8]: [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(333) InputIteratorTransformer +(343) InputIteratorTransformer Input [8]: [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(334) ShuffledHashJoinExecTransformer +(344) ShuffledHashJoinExecTransformer Left keys [3]: [item_sk#111, store_name#112, store_zip#113] Right keys [3]: [item_sk#198, store_name#199, store_zip#200] Join type: Inner Join condition: (cnt#202 <= cnt#123) -(335) ProjectExecTransformer +(345) ProjectExecTransformer Output [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Input [25]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(336) WholeStageCodegenTransformer (63) +(346) WholeStageCodegenTransformer (63) Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: false -(337) VeloxResizeBatches +(347) VeloxResizeBatches Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: 1024, 2147483647, 10485760 -(338) ColumnarExchange +(348) ColumnarExchange Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: rangepartitioning(product_name#110 ASC NULLS FIRST, store_name#112 ASC NULLS FIRST, cnt#202 ASC NULLS FIRST, s1#124 ASC NULLS FIRST, s1#203 ASC NULLS FIRST, 1), ENSURE_REQUIREMENTS, [plan_id=32], [shuffle_writer_type=hash] -(339) InputAdapter +(349) InputAdapter Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] -(340) InputIteratorTransformer +(350) InputIteratorTransformer Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] -(341) SortExecTransformer +(351) SortExecTransformer Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: [product_name#110 ASC NULLS FIRST, store_name#112 ASC NULLS FIRST, cnt#202 ASC NULLS FIRST, s1#124 ASC NULLS FIRST, s1#203 ASC NULLS FIRST], true, 0 -(342) WholeStageCodegenTransformer (64) +(352) WholeStageCodegenTransformer (64) Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: false -(343) VeloxColumnarToRow +(353) VeloxColumnarToRow Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#14, [id=#1] -VeloxColumnarToRow (355) -+- ^ RegularHashAggregateExecTransformer (353) - +- ^ InputIteratorTransformer (352) - +- ColumnarExchange (350) - +- VeloxResizeBatches (349) - +- ^ FlushableHashAggregateExecTransformer (347) - +- ^ ProjectExecTransformer (346) - +- ^ FilterExecTransformer (345) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (344) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#14, [id=#1] +ObjectHashAggregate (364) ++- VeloxColumnarToRow (363) + +- ColumnarExchange (362) + +- VeloxResizeBatches (361) + +- RowToVeloxColumnar (360) + +- ObjectHashAggregate (359) + +- VeloxColumnarToRow (358) + +- ^ ProjectExecTransformer (356) + +- ^ FilterExecTransformer (355) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (354) -(344) FileSourceScanExecTransformer parquet spark_catalog.default.item +(354) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [3]: [i_item_sk#89, i_current_price#90, i_color#91] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood ,floral ,indian ,medium ,purple ,spring ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)] ReadSchema: struct -(345) FilterExecTransformer +(355) FilterExecTransformer Input [3]: [i_item_sk#89, i_current_price#90, i_color#91] Arguments: ((((((isnotnull(i_current_price#90) AND i_color#91 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#90 >= 64.00)) AND (i_current_price#90 <= 74.00)) AND (i_current_price#90 >= 65.00)) AND (i_current_price#90 <= 79.00)) AND isnotnull(i_item_sk#89)) -(346) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#89, 42) AS _pre_9#206] +(356) ProjectExecTransformer +Output [1]: [i_item_sk#89] Input [3]: [i_item_sk#89, i_current_price#90, i_color#91] -(347) FlushableHashAggregateExecTransformer -Input [1]: [_pre_9#206] +(357) WholeStageCodegenTransformer (1) +Input [1]: [i_item_sk#89] +Arguments: false + +(358) VeloxColumnarToRow +Input [1]: [i_item_sk#89] + +(359) ObjectHashAggregate +Input [1]: [i_item_sk#89] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_9#206, 1250, 30121, 0, 0)] -Aggregate Attributes [1]: [buf#207] -Results [1]: [buf#208] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] +Aggregate Attributes [1]: [buf#206] +Results [1]: [buf#207] -(348) WholeStageCodegenTransformer (1) -Input [1]: [buf#208] -Arguments: false +(360) RowToVeloxColumnar +Input [1]: [buf#207] -(349) VeloxResizeBatches -Input [1]: [buf#208] +(361) VeloxResizeBatches +Input [1]: [buf#207] Arguments: 1024, 2147483647, 10485760 -(350) ColumnarExchange -Input [1]: [buf#208] +(362) ColumnarExchange +Input [1]: [buf#207] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=33], [shuffle_writer_type=hash] -(351) InputAdapter -Input [1]: [buf#208] +(363) VeloxColumnarToRow +Input [1]: [buf#207] -(352) InputIteratorTransformer -Input [1]: [buf#208] - -(353) RegularHashAggregateExecTransformer -Input [1]: [buf#208] +(364) ObjectHashAggregate +Input [1]: [buf#207] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#209] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#209 AS bloomFilter#210] - -(354) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#210] -Arguments: false - -(355) VeloxColumnarToRow -Input [1]: [bloomFilter#210] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#208] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#208 AS bloomFilter#209] Subquery:2 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13 -ColumnarBroadcastExchange (359) -+- ^ FilterExecTransformer (357) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (356) +ColumnarBroadcastExchange (368) ++- ^ FilterExecTransformer (366) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (365) -(356) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(365) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#45, d_year#46] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct -(357) FilterExecTransformer +(366) FilterExecTransformer Input [2]: [d_date_sk#45, d_year#46] Arguments: ((isnotnull(d_year#46) AND (d_year#46 = 1999)) AND isnotnull(d_date_sk#45)) -(358) WholeStageCodegenTransformer (3) +(367) WholeStageCodegenTransformer (2) Input [2]: [d_date_sk#45, d_year#46] Arguments: false -(359) ColumnarBroadcastExchange +(368) ColumnarBroadcastExchange Input [2]: [d_date_sk#45, d_year#46] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=34] -Subquery:3 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#14, [id=#1] -VeloxColumnarToRow (355) -+- ^ RegularHashAggregateExecTransformer (353) - +- ^ InputIteratorTransformer (352) - +- ColumnarExchange (350) - +- VeloxResizeBatches (349) - +- ^ FlushableHashAggregateExecTransformer (347) - +- ^ ProjectExecTransformer (346) - +- ^ FilterExecTransformer (345) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (344) - +Subquery:3 Hosting operator id = 210 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] -Subquery:4 Hosting operator id = 203 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] +Subquery:4 Hosting operator id = 207 Hosting Expression = ss_sold_date_sk#138 IN dynamicpruning#139 +ColumnarBroadcastExchange (372) ++- ^ FilterExecTransformer (370) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (369) -Subquery:5 Hosting operator id = 202 Hosting Expression = ss_sold_date_sk#138 IN dynamicpruning#139 -ColumnarBroadcastExchange (363) -+- ^ FilterExecTransformer (361) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (360) - -(360) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(369) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#144, d_year#145] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct -(361) FilterExecTransformer +(370) FilterExecTransformer Input [2]: [d_date_sk#144, d_year#145] Arguments: ((isnotnull(d_year#145) AND (d_year#145 = 2000)) AND isnotnull(d_date_sk#144)) -(362) WholeStageCodegenTransformer (34) +(371) WholeStageCodegenTransformer (33) Input [2]: [d_date_sk#144, d_year#145] Arguments: false -(363) ColumnarBroadcastExchange +(372) ColumnarBroadcastExchange Input [2]: [d_date_sk#144, d_year#145] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=35] -Subquery:6 Hosting operator id = 202 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] - diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/simplified.txt index b8ad5a9d7c4..b141fdc39fa 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/simplified.txt @@ -87,39 +87,32 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (4) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - FilterExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #11 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_color,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (3) - FilterExecTransformer [d_year,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #11 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_color,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_color,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #10 + WholeStageCodegenTransformer (2) + FilterExecTransformer [d_year,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] InputIteratorTransformer InputAdapter ColumnarExchange [sr_item_sk,sr_ticket_number] #12 @@ -319,15 +312,21 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (35) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - FilterExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] - ReusedSubquery [bloomFilter] #2 - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #3 - ColumnarBroadcastExchange #34 - WholeStageCodegenTransformer (34) - FilterExecTransformer [d_year,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] - ReusedSubquery [bloomFilter] #2 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] + ReusedSubquery [bloomFilter] #2 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (34) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #3 + ColumnarBroadcastExchange #34 + WholeStageCodegenTransformer (33) + FilterExecTransformer [d_year,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] InputIteratorTransformer InputAdapter ReusedExchange [sr_item_sk,sr_ticket_number] #12 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/explain.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/explain.txt index 07dfc031cef..53ca6905ba3 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/explain.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/explain.txt @@ -1,284 +1,293 @@ == Physical Plan == -VeloxColumnarToRow (372) -+- TakeOrderedAndProjectExecTransformer (371) - +- ^ RegularHashAggregateExecTransformer (369) - +- ^ InputIteratorTransformer (368) - +- ColumnarExchange (366) - +- VeloxResizeBatches (365) - +- ^ ProjectExecTransformer (363) - +- ^ FlushableHashAggregateExecTransformer (362) - +- ^ InputIteratorTransformer (361) - +- ColumnarUnion (359) - :- ^ ProjectExecTransformer (173) - : +- ^ RegularHashAggregateExecTransformer (172) - : +- ^ InputIteratorTransformer (171) - : +- ColumnarExchange (169) - : +- VeloxResizeBatches (168) - : +- ^ ProjectExecTransformer (166) - : +- ^ FlushableHashAggregateExecTransformer (165) - : +- ^ InputIteratorTransformer (164) - : +- ColumnarUnion (162) - : :- ^ ProjectExecTransformer (58) - : : +- ^ RegularHashAggregateExecTransformer (57) - : : +- ^ InputIteratorTransformer (56) - : : +- ColumnarExchange (54) - : : +- VeloxResizeBatches (53) - : : +- ^ ProjectExecTransformer (51) - : : +- ^ FlushableHashAggregateExecTransformer (50) - : : +- ^ ProjectExecTransformer (49) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (48) - : : :- ^ ProjectExecTransformer (41) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (40) - : : : :- ^ ProjectExecTransformer (36) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (35) - : : : : :- ^ ProjectExecTransformer (27) - : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (26) - : : : : : :- ^ ProjectExecTransformer (18) - : : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (17) - : : : : : : :- ^ InputIteratorTransformer (8) - : : : : : : : +- ColumnarExchange (6) - : : : : : : : +- VeloxResizeBatches (5) - : : : : : : : +- ^ ProjectExecTransformer (3) - : : : : : : : +- ^ FilterExecTransformer (2) - : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : : : : +- ^ InputIteratorTransformer (16) - : : : : : : +- ColumnarExchange (14) - : : : : : : +- VeloxResizeBatches (13) - : : : : : : +- ^ ProjectExecTransformer (11) - : : : : : : +- ^ FilterExecTransformer (10) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (9) - : : : : : +- ^ InputIteratorTransformer (25) - : : : : : +- ColumnarBroadcastExchange (23) - : : : : : +- ^ ProjectExecTransformer (21) - : : : : : +- ^ FilterExecTransformer (20) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (19) - : : : : +- ^ InputIteratorTransformer (34) - : : : : +- ColumnarBroadcastExchange (32) - : : : : +- ^ ProjectExecTransformer (30) - : : : : +- ^ FilterExecTransformer (29) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (28) - : : : +- ^ InputIteratorTransformer (39) - : : : +- ReusedExchange (37) - : : +- ^ InputIteratorTransformer (47) - : : +- ColumnarBroadcastExchange (45) - : : +- ^ FilterExecTransformer (43) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (42) - : :- ^ ProjectExecTransformer (109) - : : +- ^ RegularHashAggregateExecTransformer (108) - : : +- ^ InputIteratorTransformer (107) - : : +- ColumnarExchange (105) - : : +- VeloxResizeBatches (104) - : : +- ^ ProjectExecTransformer (102) - : : +- ^ FlushableHashAggregateExecTransformer (101) - : : +- ^ ProjectExecTransformer (100) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (99) - : : :- ^ ProjectExecTransformer (92) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (91) - : : : :- ^ ProjectExecTransformer (87) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (86) - : : : : :- ^ ProjectExecTransformer (82) - : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (81) - : : : : : :- ^ ProjectExecTransformer (77) - : : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (76) - : : : : : : :- ^ InputIteratorTransformer (67) - : : : : : : : +- ColumnarExchange (65) - : : : : : : : +- VeloxResizeBatches (64) - : : : : : : : +- ^ ProjectExecTransformer (62) - : : : : : : : +- ^ FilterExecTransformer (61) - : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (60) - : : : : : : +- ^ InputIteratorTransformer (75) - : : : : : : +- ColumnarExchange (73) - : : : : : : +- VeloxResizeBatches (72) - : : : : : : +- ^ ProjectExecTransformer (70) - : : : : : : +- ^ FilterExecTransformer (69) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (68) - : : : : : +- ^ InputIteratorTransformer (80) - : : : : : +- ReusedExchange (78) - : : : : +- ^ InputIteratorTransformer (85) - : : : : +- ReusedExchange (83) - : : : +- ^ InputIteratorTransformer (90) - : : : +- ReusedExchange (88) - : : +- ^ InputIteratorTransformer (98) - : : +- ColumnarBroadcastExchange (96) - : : +- ^ FilterExecTransformer (94) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page (93) - : +- ^ ProjectExecTransformer (160) - : +- ^ RegularHashAggregateExecTransformer (159) - : +- ^ InputIteratorTransformer (158) - : +- ColumnarExchange (156) - : +- VeloxResizeBatches (155) - : +- ^ ProjectExecTransformer (153) - : +- ^ FlushableHashAggregateExecTransformer (152) - : +- ^ ProjectExecTransformer (151) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (150) - : :- ^ ProjectExecTransformer (143) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (142) - : : :- ^ ProjectExecTransformer (138) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (137) - : : : :- ^ ProjectExecTransformer (133) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (132) - : : : : :- ^ ProjectExecTransformer (128) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (127) - : : : : : :- ^ InputIteratorTransformer (118) - : : : : : : +- ColumnarExchange (116) - : : : : : : +- VeloxResizeBatches (115) - : : : : : : +- ^ ProjectExecTransformer (113) - : : : : : : +- ^ FilterExecTransformer (112) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (111) - : : : : : +- ^ InputIteratorTransformer (126) - : : : : : +- ColumnarExchange (124) - : : : : : +- VeloxResizeBatches (123) - : : : : : +- ^ ProjectExecTransformer (121) - : : : : : +- ^ FilterExecTransformer (120) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (119) - : : : : +- ^ InputIteratorTransformer (131) - : : : : +- ReusedExchange (129) - : : : +- ^ InputIteratorTransformer (136) - : : : +- ReusedExchange (134) - : : +- ^ InputIteratorTransformer (141) - : : +- ReusedExchange (139) - : +- ^ InputIteratorTransformer (149) - : +- ColumnarBroadcastExchange (147) - : +- ^ FilterExecTransformer (145) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (144) - :- ^ ProjectExecTransformer (250) - : +- ^ RegularHashAggregateExecTransformer (249) - : +- ^ InputIteratorTransformer (248) - : +- ColumnarExchange (246) - : +- VeloxResizeBatches (245) - : +- ^ ProjectExecTransformer (243) - : +- ^ FlushableHashAggregateExecTransformer (242) - : +- ^ ProjectExecTransformer (241) - : +- ^ RegularHashAggregateExecTransformer (240) - : +- ^ InputIteratorTransformer (239) - : +- ColumnarExchange (237) - : +- VeloxResizeBatches (236) - : +- ^ ProjectExecTransformer (234) - : +- ^ FlushableHashAggregateExecTransformer (233) - : +- ^ InputIteratorTransformer (232) - : +- ColumnarUnion (230) - : :- ^ ProjectExecTransformer (179) - : : +- ^ RegularHashAggregateExecTransformer (178) - : : +- ^ InputIteratorTransformer (177) - : : +- ReusedExchange (175) - : :- ^ ProjectExecTransformer (185) - : : +- ^ RegularHashAggregateExecTransformer (184) - : : +- ^ InputIteratorTransformer (183) - : : +- ReusedExchange (181) - : +- ^ ProjectExecTransformer (228) - : +- ^ RegularHashAggregateExecTransformer (227) - : +- ^ InputIteratorTransformer (226) - : +- ColumnarExchange (224) - : +- VeloxResizeBatches (223) - : +- ^ ProjectExecTransformer (221) - : +- ^ FlushableHashAggregateExecTransformer (220) - : +- ^ ProjectExecTransformer (219) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (218) - : :- ^ ProjectExecTransformer (214) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (213) - : : :- ^ ProjectExecTransformer (209) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (208) - : : : :- ^ ProjectExecTransformer (204) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (203) - : : : : :- ^ ProjectExecTransformer (199) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (198) - : : : : : :- ^ InputIteratorTransformer (194) - : : : : : : +- ColumnarExchange (192) - : : : : : : +- VeloxResizeBatches (191) - : : : : : : +- ^ ProjectExecTransformer (189) - : : : : : : +- ^ FilterExecTransformer (188) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (187) - : : : : : +- ^ InputIteratorTransformer (197) - : : : : : +- ReusedExchange (195) - : : : : +- ^ InputIteratorTransformer (202) - : : : : +- ReusedExchange (200) - : : : +- ^ InputIteratorTransformer (207) - : : : +- ReusedExchange (205) - : : +- ^ InputIteratorTransformer (212) - : : +- ReusedExchange (210) - : +- ^ InputIteratorTransformer (217) - : +- ReusedExchange (215) - +- ^ ProjectExecTransformer (357) - +- ^ RegularHashAggregateExecTransformer (356) - +- ^ ProjectExecTransformer (355) - +- ^ RegularHashAggregateExecTransformer (354) - +- ^ InputIteratorTransformer (353) - +- ColumnarExchange (351) - +- VeloxResizeBatches (350) - +- ^ ProjectExecTransformer (348) - +- ^ FlushableHashAggregateExecTransformer (347) - +- ^ InputIteratorTransformer (346) - +- ColumnarUnion (344) - :- ^ ProjectExecTransformer (293) - : +- ^ RegularHashAggregateExecTransformer (292) - : +- ^ InputIteratorTransformer (291) - : +- ColumnarExchange (289) - : +- VeloxResizeBatches (288) - : +- ^ ProjectExecTransformer (286) - : +- ^ FlushableHashAggregateExecTransformer (285) - : +- ^ ProjectExecTransformer (284) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) - : :- ^ ProjectExecTransformer (279) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (278) - : : :- ^ ProjectExecTransformer (274) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (273) - : : : :- ^ ProjectExecTransformer (269) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (268) - : : : : :- ^ ProjectExecTransformer (264) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (263) - : : : : : :- ^ InputIteratorTransformer (259) - : : : : : : +- ColumnarExchange (257) - : : : : : : +- VeloxResizeBatches (256) - : : : : : : +- ^ ProjectExecTransformer (254) - : : : : : : +- ^ FilterExecTransformer (253) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (252) - : : : : : +- ^ InputIteratorTransformer (262) - : : : : : +- ReusedExchange (260) - : : : : +- ^ InputIteratorTransformer (267) - : : : : +- ReusedExchange (265) - : : : +- ^ InputIteratorTransformer (272) - : : : +- ReusedExchange (270) - : : +- ^ InputIteratorTransformer (277) - : : +- ReusedExchange (275) - : +- ^ InputIteratorTransformer (282) - : +- ReusedExchange (280) - :- ^ ProjectExecTransformer (336) - : +- ^ RegularHashAggregateExecTransformer (335) - : +- ^ InputIteratorTransformer (334) - : +- ColumnarExchange (332) - : +- VeloxResizeBatches (331) - : +- ^ ProjectExecTransformer (329) - : +- ^ FlushableHashAggregateExecTransformer (328) - : +- ^ ProjectExecTransformer (327) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (326) - : :- ^ ProjectExecTransformer (322) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (321) - : : :- ^ ProjectExecTransformer (317) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (316) - : : : :- ^ ProjectExecTransformer (312) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (311) - : : : : :- ^ ProjectExecTransformer (307) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (306) - : : : : : :- ^ InputIteratorTransformer (302) - : : : : : : +- ColumnarExchange (300) - : : : : : : +- VeloxResizeBatches (299) - : : : : : : +- ^ ProjectExecTransformer (297) - : : : : : : +- ^ FilterExecTransformer (296) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (295) - : : : : : +- ^ InputIteratorTransformer (305) - : : : : : +- ReusedExchange (303) - : : : : +- ^ InputIteratorTransformer (310) - : : : : +- ReusedExchange (308) - : : : +- ^ InputIteratorTransformer (315) - : : : +- ReusedExchange (313) - : : +- ^ InputIteratorTransformer (320) - : : +- ReusedExchange (318) - : +- ^ InputIteratorTransformer (325) - : +- ReusedExchange (323) - +- ^ ProjectExecTransformer (342) - +- ^ RegularHashAggregateExecTransformer (341) - +- ^ InputIteratorTransformer (340) - +- ReusedExchange (338) +VeloxColumnarToRow (387) ++- TakeOrderedAndProjectExecTransformer (386) + +- ^ RegularHashAggregateExecTransformer (384) + +- ^ InputIteratorTransformer (383) + +- ColumnarExchange (381) + +- VeloxResizeBatches (380) + +- ^ ProjectExecTransformer (378) + +- ^ FlushableHashAggregateExecTransformer (377) + +- ^ InputIteratorTransformer (376) + +- ColumnarUnion (374) + :- ^ ProjectExecTransformer (188) + : +- ^ RegularHashAggregateExecTransformer (187) + : +- ^ InputIteratorTransformer (186) + : +- ColumnarExchange (184) + : +- VeloxResizeBatches (183) + : +- ^ ProjectExecTransformer (181) + : +- ^ FlushableHashAggregateExecTransformer (180) + : +- ^ InputIteratorTransformer (179) + : +- ColumnarUnion (177) + : :- ^ ProjectExecTransformer (63) + : : +- ^ RegularHashAggregateExecTransformer (62) + : : +- ^ InputIteratorTransformer (61) + : : +- ColumnarExchange (59) + : : +- VeloxResizeBatches (58) + : : +- ^ ProjectExecTransformer (56) + : : +- ^ FlushableHashAggregateExecTransformer (55) + : : +- ^ ProjectExecTransformer (54) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (53) + : : :- ^ ProjectExecTransformer (46) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (45) + : : : :- ^ ProjectExecTransformer (41) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (40) + : : : : :- ^ ProjectExecTransformer (32) + : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (31) + : : : : : :- ^ ProjectExecTransformer (23) + : : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (22) + : : : : : : :- ^ InputIteratorTransformer (13) + : : : : : : : +- ColumnarExchange (11) + : : : : : : : +- VeloxResizeBatches (10) + : : : : : : : +- ^ ProjectExecTransformer (8) + : : : : : : : +- ^ InputIteratorTransformer (7) + : : : : : : : +- RowToVeloxColumnar (5) + : : : : : : : +- * Filter (4) + : : : : : : : +- VeloxColumnarToRow (3) + : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : : : : +- ^ InputIteratorTransformer (21) + : : : : : : +- ColumnarExchange (19) + : : : : : : +- VeloxResizeBatches (18) + : : : : : : +- ^ ProjectExecTransformer (16) + : : : : : : +- ^ FilterExecTransformer (15) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (14) + : : : : : +- ^ InputIteratorTransformer (30) + : : : : : +- ColumnarBroadcastExchange (28) + : : : : : +- ^ ProjectExecTransformer (26) + : : : : : +- ^ FilterExecTransformer (25) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (24) + : : : : +- ^ InputIteratorTransformer (39) + : : : : +- ColumnarBroadcastExchange (37) + : : : : +- ^ ProjectExecTransformer (35) + : : : : +- ^ FilterExecTransformer (34) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (33) + : : : +- ^ InputIteratorTransformer (44) + : : : +- ReusedExchange (42) + : : +- ^ InputIteratorTransformer (52) + : : +- ColumnarBroadcastExchange (50) + : : +- ^ FilterExecTransformer (48) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (47) + : :- ^ ProjectExecTransformer (119) + : : +- ^ RegularHashAggregateExecTransformer (118) + : : +- ^ InputIteratorTransformer (117) + : : +- ColumnarExchange (115) + : : +- VeloxResizeBatches (114) + : : +- ^ ProjectExecTransformer (112) + : : +- ^ FlushableHashAggregateExecTransformer (111) + : : +- ^ ProjectExecTransformer (110) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (109) + : : :- ^ ProjectExecTransformer (102) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (101) + : : : :- ^ ProjectExecTransformer (97) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (96) + : : : : :- ^ ProjectExecTransformer (92) + : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (91) + : : : : : :- ^ ProjectExecTransformer (87) + : : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (86) + : : : : : : :- ^ InputIteratorTransformer (77) + : : : : : : : +- ColumnarExchange (75) + : : : : : : : +- VeloxResizeBatches (74) + : : : : : : : +- ^ ProjectExecTransformer (72) + : : : : : : : +- ^ InputIteratorTransformer (71) + : : : : : : : +- RowToVeloxColumnar (69) + : : : : : : : +- * Filter (68) + : : : : : : : +- VeloxColumnarToRow (67) + : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (65) + : : : : : : +- ^ InputIteratorTransformer (85) + : : : : : : +- ColumnarExchange (83) + : : : : : : +- VeloxResizeBatches (82) + : : : : : : +- ^ ProjectExecTransformer (80) + : : : : : : +- ^ FilterExecTransformer (79) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (78) + : : : : : +- ^ InputIteratorTransformer (90) + : : : : : +- ReusedExchange (88) + : : : : +- ^ InputIteratorTransformer (95) + : : : : +- ReusedExchange (93) + : : : +- ^ InputIteratorTransformer (100) + : : : +- ReusedExchange (98) + : : +- ^ InputIteratorTransformer (108) + : : +- ColumnarBroadcastExchange (106) + : : +- ^ FilterExecTransformer (104) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page (103) + : +- ^ ProjectExecTransformer (175) + : +- ^ RegularHashAggregateExecTransformer (174) + : +- ^ InputIteratorTransformer (173) + : +- ColumnarExchange (171) + : +- VeloxResizeBatches (170) + : +- ^ ProjectExecTransformer (168) + : +- ^ FlushableHashAggregateExecTransformer (167) + : +- ^ ProjectExecTransformer (166) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (165) + : :- ^ ProjectExecTransformer (158) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (157) + : : :- ^ ProjectExecTransformer (153) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (152) + : : : :- ^ ProjectExecTransformer (148) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (147) + : : : : :- ^ ProjectExecTransformer (143) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (142) + : : : : : :- ^ InputIteratorTransformer (133) + : : : : : : +- ColumnarExchange (131) + : : : : : : +- VeloxResizeBatches (130) + : : : : : : +- ^ ProjectExecTransformer (128) + : : : : : : +- ^ InputIteratorTransformer (127) + : : : : : : +- RowToVeloxColumnar (125) + : : : : : : +- * Filter (124) + : : : : : : +- VeloxColumnarToRow (123) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (121) + : : : : : +- ^ InputIteratorTransformer (141) + : : : : : +- ColumnarExchange (139) + : : : : : +- VeloxResizeBatches (138) + : : : : : +- ^ ProjectExecTransformer (136) + : : : : : +- ^ FilterExecTransformer (135) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (134) + : : : : +- ^ InputIteratorTransformer (146) + : : : : +- ReusedExchange (144) + : : : +- ^ InputIteratorTransformer (151) + : : : +- ReusedExchange (149) + : : +- ^ InputIteratorTransformer (156) + : : +- ReusedExchange (154) + : +- ^ InputIteratorTransformer (164) + : +- ColumnarBroadcastExchange (162) + : +- ^ FilterExecTransformer (160) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (159) + :- ^ ProjectExecTransformer (265) + : +- ^ RegularHashAggregateExecTransformer (264) + : +- ^ InputIteratorTransformer (263) + : +- ColumnarExchange (261) + : +- VeloxResizeBatches (260) + : +- ^ ProjectExecTransformer (258) + : +- ^ FlushableHashAggregateExecTransformer (257) + : +- ^ ProjectExecTransformer (256) + : +- ^ RegularHashAggregateExecTransformer (255) + : +- ^ InputIteratorTransformer (254) + : +- ColumnarExchange (252) + : +- VeloxResizeBatches (251) + : +- ^ ProjectExecTransformer (249) + : +- ^ FlushableHashAggregateExecTransformer (248) + : +- ^ InputIteratorTransformer (247) + : +- ColumnarUnion (245) + : :- ^ ProjectExecTransformer (194) + : : +- ^ RegularHashAggregateExecTransformer (193) + : : +- ^ InputIteratorTransformer (192) + : : +- ReusedExchange (190) + : :- ^ ProjectExecTransformer (200) + : : +- ^ RegularHashAggregateExecTransformer (199) + : : +- ^ InputIteratorTransformer (198) + : : +- ReusedExchange (196) + : +- ^ ProjectExecTransformer (243) + : +- ^ RegularHashAggregateExecTransformer (242) + : +- ^ InputIteratorTransformer (241) + : +- ColumnarExchange (239) + : +- VeloxResizeBatches (238) + : +- ^ ProjectExecTransformer (236) + : +- ^ FlushableHashAggregateExecTransformer (235) + : +- ^ ProjectExecTransformer (234) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (233) + : :- ^ ProjectExecTransformer (229) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (228) + : : :- ^ ProjectExecTransformer (224) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (223) + : : : :- ^ ProjectExecTransformer (219) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (218) + : : : : :- ^ ProjectExecTransformer (214) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (213) + : : : : : :- ^ InputIteratorTransformer (209) + : : : : : : +- ColumnarExchange (207) + : : : : : : +- VeloxResizeBatches (206) + : : : : : : +- ^ ProjectExecTransformer (204) + : : : : : : +- ^ FilterExecTransformer (203) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (202) + : : : : : +- ^ InputIteratorTransformer (212) + : : : : : +- ReusedExchange (210) + : : : : +- ^ InputIteratorTransformer (217) + : : : : +- ReusedExchange (215) + : : : +- ^ InputIteratorTransformer (222) + : : : +- ReusedExchange (220) + : : +- ^ InputIteratorTransformer (227) + : : +- ReusedExchange (225) + : +- ^ InputIteratorTransformer (232) + : +- ReusedExchange (230) + +- ^ ProjectExecTransformer (372) + +- ^ RegularHashAggregateExecTransformer (371) + +- ^ ProjectExecTransformer (370) + +- ^ RegularHashAggregateExecTransformer (369) + +- ^ InputIteratorTransformer (368) + +- ColumnarExchange (366) + +- VeloxResizeBatches (365) + +- ^ ProjectExecTransformer (363) + +- ^ FlushableHashAggregateExecTransformer (362) + +- ^ InputIteratorTransformer (361) + +- ColumnarUnion (359) + :- ^ ProjectExecTransformer (308) + : +- ^ RegularHashAggregateExecTransformer (307) + : +- ^ InputIteratorTransformer (306) + : +- ColumnarExchange (304) + : +- VeloxResizeBatches (303) + : +- ^ ProjectExecTransformer (301) + : +- ^ FlushableHashAggregateExecTransformer (300) + : +- ^ ProjectExecTransformer (299) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (298) + : :- ^ ProjectExecTransformer (294) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (293) + : : :- ^ ProjectExecTransformer (289) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (288) + : : : :- ^ ProjectExecTransformer (284) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) + : : : : :- ^ ProjectExecTransformer (279) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (278) + : : : : : :- ^ InputIteratorTransformer (274) + : : : : : : +- ColumnarExchange (272) + : : : : : : +- VeloxResizeBatches (271) + : : : : : : +- ^ ProjectExecTransformer (269) + : : : : : : +- ^ FilterExecTransformer (268) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (267) + : : : : : +- ^ InputIteratorTransformer (277) + : : : : : +- ReusedExchange (275) + : : : : +- ^ InputIteratorTransformer (282) + : : : : +- ReusedExchange (280) + : : : +- ^ InputIteratorTransformer (287) + : : : +- ReusedExchange (285) + : : +- ^ InputIteratorTransformer (292) + : : +- ReusedExchange (290) + : +- ^ InputIteratorTransformer (297) + : +- ReusedExchange (295) + :- ^ ProjectExecTransformer (351) + : +- ^ RegularHashAggregateExecTransformer (350) + : +- ^ InputIteratorTransformer (349) + : +- ColumnarExchange (347) + : +- VeloxResizeBatches (346) + : +- ^ ProjectExecTransformer (344) + : +- ^ FlushableHashAggregateExecTransformer (343) + : +- ^ ProjectExecTransformer (342) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (341) + : :- ^ ProjectExecTransformer (337) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (336) + : : :- ^ ProjectExecTransformer (332) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (331) + : : : :- ^ ProjectExecTransformer (327) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (326) + : : : : :- ^ ProjectExecTransformer (322) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (321) + : : : : : :- ^ InputIteratorTransformer (317) + : : : : : : +- ColumnarExchange (315) + : : : : : : +- VeloxResizeBatches (314) + : : : : : : +- ^ ProjectExecTransformer (312) + : : : : : : +- ^ FilterExecTransformer (311) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (310) + : : : : : +- ^ InputIteratorTransformer (320) + : : : : : +- ReusedExchange (318) + : : : : +- ^ InputIteratorTransformer (325) + : : : : +- ReusedExchange (323) + : : : +- ^ InputIteratorTransformer (330) + : : : +- ReusedExchange (328) + : : +- ^ InputIteratorTransformer (335) + : : +- ReusedExchange (333) + : +- ^ InputIteratorTransformer (340) + : +- ReusedExchange (338) + +- ^ ProjectExecTransformer (357) + +- ^ RegularHashAggregateExecTransformer (356) + +- ^ InputIteratorTransformer (355) + +- ReusedExchange (353) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -289,252 +298,268 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sol PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (4) +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] +Arguments: false + +(3) VeloxColumnarToRow +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(4) Filter [codegen id : 1] +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] +Condition : ((((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3)) AND might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ss_item_sk#1, 42))) AND might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ss_promo_sk#3, 42))) + +(5) RowToVeloxColumnar Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -Arguments: ((((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3)) AND velox_might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ss_item_sk#1, 42))) AND velox_might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ss_promo_sk#3, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(7) InputIteratorTransformer +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(8) ProjectExecTransformer Output [8]: [hash(ss_item_sk#1, ss_ticket_number#4, 42) AS hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(4) WholeStageCodegenTransformer (6) +(9) WholeStageCodegenTransformer (5) Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7], [plan_id=3], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] Arguments: (isnotnull(sr_item_sk#12) AND isnotnull(sr_ticket_number#13)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [5]: [hash(sr_item_sk#12, sr_ticket_number#13, 42) AS hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Input [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] -(12) WholeStageCodegenTransformer (7) +(17) WholeStageCodegenTransformer (6) Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: hashpartitioning(sr_item_sk#12, sr_ticket_number#13, 1), ENSURE_REQUIREMENTS, [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15], [plan_id=4], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [4]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [4]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(17) ShuffledHashJoinExecTransformer +(22) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#1, ss_ticket_number#4] Right keys [2]: [sr_item_sk#12, sr_ticket_number#13] Join type: LeftOuter Join condition: None -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(19) FileSourceScanExecTransformer parquet spark_catalog.default.item +(24) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct -(20) FilterExecTransformer +(25) FilterExecTransformer Input [2]: [i_item_sk#18, i_current_price#19] Arguments: ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [1]: [i_item_sk#18] Input [2]: [i_item_sk#18, i_current_price#19] -(22) WholeStageCodegenTransformer (8) +(27) WholeStageCodegenTransformer (7) Input [1]: [i_item_sk#18] Arguments: false -(23) ColumnarBroadcastExchange +(28) ColumnarBroadcastExchange Input [1]: [i_item_sk#18] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(24) InputAdapter +(29) InputAdapter Input [1]: [i_item_sk#18] -(25) InputIteratorTransformer +(30) InputIteratorTransformer Input [1]: [i_item_sk#18] -(26) BroadcastHashJoinExecTransformer +(31) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#18] Join type: Inner Join condition: None -(27) ProjectExecTransformer +(32) ProjectExecTransformer Output [7]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, i_item_sk#18] -(28) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(33) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct -(29) FilterExecTransformer +(34) FilterExecTransformer Input [2]: [p_promo_sk#20, p_channel_tv#21] Arguments: ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) -(30) ProjectExecTransformer +(35) ProjectExecTransformer Output [1]: [p_promo_sk#20] Input [2]: [p_promo_sk#20, p_channel_tv#21] -(31) WholeStageCodegenTransformer (9) +(36) WholeStageCodegenTransformer (8) Input [1]: [p_promo_sk#20] Arguments: false -(32) ColumnarBroadcastExchange +(37) ColumnarBroadcastExchange Input [1]: [p_promo_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(33) InputAdapter +(38) InputAdapter Input [1]: [p_promo_sk#20] -(34) InputIteratorTransformer +(39) InputIteratorTransformer Input [1]: [p_promo_sk#20] -(35) BroadcastHashJoinExecTransformer +(40) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#3] Right keys [1]: [p_promo_sk#20] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(41) ProjectExecTransformer Output [6]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [8]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, p_promo_sk#20] -(37) ReusedExchange [Reuses operator id: 401] +(42) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#22] -(38) InputAdapter +(43) InputAdapter Input [1]: [d_date_sk#22] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [1]: [d_date_sk#22] -(40) BroadcastHashJoinExecTransformer +(45) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#7] Right keys [1]: [d_date_sk#22] Join type: Inner Join condition: None -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [5]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#14, sr_net_loss#15] Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, d_date_sk#22] -(42) FileSourceScanExecTransformer parquet spark_catalog.default.store +(47) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [2]: [s_store_sk#23, s_store_id#24] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct -(43) FilterExecTransformer +(48) FilterExecTransformer Input [2]: [s_store_sk#23, s_store_id#24] Arguments: isnotnull(s_store_sk#23) -(44) WholeStageCodegenTransformer (11) +(49) WholeStageCodegenTransformer (10) Input [2]: [s_store_sk#23, s_store_id#24] Arguments: false -(45) ColumnarBroadcastExchange +(50) ColumnarBroadcastExchange Input [2]: [s_store_sk#23, s_store_id#24] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] -(46) InputAdapter +(51) InputAdapter Input [2]: [s_store_sk#23, s_store_id#24] -(47) InputIteratorTransformer +(52) InputIteratorTransformer Input [2]: [s_store_sk#23, s_store_id#24] -(48) BroadcastHashJoinExecTransformer +(53) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#2] Right keys [1]: [s_store_sk#23] Join type: Inner Join condition: None -(49) ProjectExecTransformer +(54) ProjectExecTransformer Output [4]: [s_store_id#24, UnscaledValue(ss_ext_sales_price#5) AS _pre_1#25, coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00) AS _pre_2#26, (ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)) AS _pre_3#27] Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#14, sr_net_loss#15, s_store_sk#23, s_store_id#24] -(50) FlushableHashAggregateExecTransformer +(55) FlushableHashAggregateExecTransformer Input [4]: [s_store_id#24, _pre_1#25, _pre_2#26, _pre_3#27] Keys [1]: [s_store_id#24] Functions [3]: [partial_sum(_pre_1#25), partial_sum(_pre_2#26), partial_sum(_pre_3#27)] Aggregate Attributes [5]: [sum#28, sum#29, isEmpty#30, sum#31, isEmpty#32] Results [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(51) ProjectExecTransformer +(56) ProjectExecTransformer Output [7]: [hash(s_store_id#24, 42) AS hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(52) WholeStageCodegenTransformer (12) +(57) WholeStageCodegenTransformer (11) Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: false -(53) VeloxResizeBatches +(58) VeloxResizeBatches Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: 1024, 2147483647, 10485760 -(54) ColumnarExchange +(59) ColumnarExchange Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: hashpartitioning(s_store_id#24, 1), ENSURE_REQUIREMENTS, [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37], [plan_id=8], [shuffle_writer_type=hash] -(55) InputAdapter +(60) InputAdapter Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(57) RegularHashAggregateExecTransformer +(62) RegularHashAggregateExecTransformer Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Keys [1]: [s_store_id#24] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00)), sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] Results [4]: [s_store_id#24, sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [5]: [store channel AS channel#42, concat(store, s_store_id#24) AS id#43, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#39,17,2) AS sales#44, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40 AS returns#45, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41 AS profit#46] Input [4]: [s_store_id#24, sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] -(59) WholeStageCodegenTransformer (13) +(64) WholeStageCodegenTransformer (12) Input [5]: [channel#42, id#43, sales#44, returns#45, profit#46] Arguments: false -(60) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(65) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Batched: true Location: InMemoryFileIndex [] @@ -542,212 +567,228 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#53), dynamicpruningexpression(cs_so PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)] ReadSchema: struct -(61) FilterExecTransformer +(66) WholeStageCodegenTransformer (16) +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] +Arguments: false + +(67) VeloxColumnarToRow Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -Arguments: ((((isnotnull(cs_catalog_page_sk#47) AND isnotnull(cs_item_sk#48)) AND isnotnull(cs_promo_sk#49)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(cs_item_sk#48, 42))) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(cs_promo_sk#49, 42))) -(62) ProjectExecTransformer +(68) Filter [codegen id : 2] +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] +Condition : ((((isnotnull(cs_catalog_page_sk#47) AND isnotnull(cs_item_sk#48)) AND isnotnull(cs_promo_sk#49)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(cs_item_sk#48, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(cs_promo_sk#49, 42))) + +(69) RowToVeloxColumnar +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(70) InputAdapter +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(71) InputIteratorTransformer +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(72) ProjectExecTransformer Output [8]: [hash(cs_item_sk#48, cs_order_number#50, 42) AS hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(63) WholeStageCodegenTransformer (19) +(73) WholeStageCodegenTransformer (17) Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: false -(64) VeloxResizeBatches +(74) VeloxResizeBatches Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: 1024, 2147483647, 10485760 -(65) ColumnarExchange +(75) ColumnarExchange Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: hashpartitioning(cs_item_sk#48, cs_order_number#50, 1), ENSURE_REQUIREMENTS, [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53], [plan_id=9], [shuffle_writer_type=hash] -(66) InputAdapter +(76) InputAdapter Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(67) InputIteratorTransformer +(77) InputIteratorTransformer Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(68) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(78) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct -(69) FilterExecTransformer +(79) FilterExecTransformer Input [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] Arguments: (isnotnull(cr_item_sk#55) AND isnotnull(cr_order_number#56)) -(70) ProjectExecTransformer +(80) ProjectExecTransformer Output [5]: [hash(cr_item_sk#55, cr_order_number#56, 42) AS hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Input [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] -(71) WholeStageCodegenTransformer (20) +(81) WholeStageCodegenTransformer (18) Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: false -(72) VeloxResizeBatches +(82) VeloxResizeBatches Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: 1024, 2147483647, 10485760 -(73) ColumnarExchange +(83) ColumnarExchange Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: hashpartitioning(cr_item_sk#55, cr_order_number#56, 1), ENSURE_REQUIREMENTS, [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58], [plan_id=10], [shuffle_writer_type=hash] -(74) InputAdapter +(84) InputAdapter Input [4]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(75) InputIteratorTransformer +(85) InputIteratorTransformer Input [4]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(76) ShuffledHashJoinExecTransformer +(86) ShuffledHashJoinExecTransformer Left keys [2]: [cs_item_sk#48, cs_order_number#50] Right keys [2]: [cr_item_sk#55, cr_order_number#56] Join type: LeftOuter Join condition: None -(77) ProjectExecTransformer +(87) ProjectExecTransformer Output [8]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [11]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(78) ReusedExchange [Reuses operator id: 23] +(88) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#61] -(79) InputAdapter +(89) InputAdapter Input [1]: [i_item_sk#61] -(80) InputIteratorTransformer +(90) InputIteratorTransformer Input [1]: [i_item_sk#61] -(81) BroadcastHashJoinExecTransformer +(91) BroadcastHashJoinExecTransformer Left keys [1]: [cs_item_sk#48] Right keys [1]: [i_item_sk#61] Join type: Inner Join condition: None -(82) ProjectExecTransformer +(92) ProjectExecTransformer Output [7]: [cs_catalog_page_sk#47, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [9]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, i_item_sk#61] -(83) ReusedExchange [Reuses operator id: 32] +(93) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#62] -(84) InputAdapter +(94) InputAdapter Input [1]: [p_promo_sk#62] -(85) InputIteratorTransformer +(95) InputIteratorTransformer Input [1]: [p_promo_sk#62] -(86) BroadcastHashJoinExecTransformer +(96) BroadcastHashJoinExecTransformer Left keys [1]: [cs_promo_sk#49] Right keys [1]: [p_promo_sk#62] Join type: Inner Join condition: None -(87) ProjectExecTransformer +(97) ProjectExecTransformer Output [6]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [8]: [cs_catalog_page_sk#47, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, p_promo_sk#62] -(88) ReusedExchange [Reuses operator id: 401] +(98) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#63] -(89) InputAdapter +(99) InputAdapter Input [1]: [d_date_sk#63] -(90) InputIteratorTransformer +(100) InputIteratorTransformer Input [1]: [d_date_sk#63] -(91) BroadcastHashJoinExecTransformer +(101) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#53] Right keys [1]: [d_date_sk#63] Join type: Inner Join condition: None -(92) ProjectExecTransformer +(102) ProjectExecTransformer Output [5]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cr_return_amount#57, cr_net_loss#58] Input [7]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, d_date_sk#63] -(93) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page +(103) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page Output [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct -(94) FilterExecTransformer +(104) FilterExecTransformer Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: isnotnull(cp_catalog_page_sk#64) -(95) WholeStageCodegenTransformer (24) +(105) WholeStageCodegenTransformer (22) Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: false -(96) ColumnarBroadcastExchange +(106) ColumnarBroadcastExchange Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=11] -(97) InputAdapter +(107) InputAdapter Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -(98) InputIteratorTransformer +(108) InputIteratorTransformer Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -(99) BroadcastHashJoinExecTransformer +(109) BroadcastHashJoinExecTransformer Left keys [1]: [cs_catalog_page_sk#47] Right keys [1]: [cp_catalog_page_sk#64] Join type: Inner Join condition: None -(100) ProjectExecTransformer +(110) ProjectExecTransformer Output [4]: [cp_catalog_page_id#65, UnscaledValue(cs_ext_sales_price#51) AS _pre_4#66, coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00) AS _pre_5#67, (cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)) AS _pre_6#68] Input [7]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cr_return_amount#57, cr_net_loss#58, cp_catalog_page_sk#64, cp_catalog_page_id#65] -(101) FlushableHashAggregateExecTransformer +(111) FlushableHashAggregateExecTransformer Input [4]: [cp_catalog_page_id#65, _pre_4#66, _pre_5#67, _pre_6#68] Keys [1]: [cp_catalog_page_id#65] Functions [3]: [partial_sum(_pre_4#66), partial_sum(_pre_5#67), partial_sum(_pre_6#68)] Aggregate Attributes [5]: [sum#69, sum#70, isEmpty#71, sum#72, isEmpty#73] Results [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(102) ProjectExecTransformer +(112) ProjectExecTransformer Output [7]: [hash(cp_catalog_page_id#65, 42) AS hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(103) WholeStageCodegenTransformer (25) +(113) WholeStageCodegenTransformer (23) Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: false -(104) VeloxResizeBatches +(114) VeloxResizeBatches Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: 1024, 2147483647, 10485760 -(105) ColumnarExchange +(115) ColumnarExchange Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: hashpartitioning(cp_catalog_page_id#65, 1), ENSURE_REQUIREMENTS, [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78], [plan_id=12], [shuffle_writer_type=hash] -(106) InputAdapter +(116) InputAdapter Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(107) InputIteratorTransformer +(117) InputIteratorTransformer Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(108) RegularHashAggregateExecTransformer +(118) RegularHashAggregateExecTransformer Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Keys [1]: [cp_catalog_page_id#65] Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#51)), sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00)), sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] Results [4]: [cp_catalog_page_id#65, sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] -(109) ProjectExecTransformer +(119) ProjectExecTransformer Output [5]: [catalog channel AS channel#83, concat(catalog_page, cp_catalog_page_id#65) AS id#84, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#51))#80,17,2) AS sales#85, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81 AS returns#86, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82 AS profit#87] Input [4]: [cp_catalog_page_id#65, sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] -(110) WholeStageCodegenTransformer (26) +(120) WholeStageCodegenTransformer (24) Input [5]: [channel#83, id#84, sales#85, returns#86, profit#87] Arguments: false -(111) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(121) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Batched: true Location: InMemoryFileIndex [] @@ -755,313 +796,329 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#94), dynamicpruningexpression(ws_so PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)] ReadSchema: struct -(112) FilterExecTransformer +(122) WholeStageCodegenTransformer (28) +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Arguments: false + +(123) VeloxColumnarToRow Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Arguments: ((((isnotnull(ws_web_site_sk#89) AND isnotnull(ws_item_sk#88)) AND isnotnull(ws_promo_sk#90)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(ws_item_sk#88, 42))) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(ws_promo_sk#90, 42))) -(113) ProjectExecTransformer +(124) Filter [codegen id : 3] +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Condition : ((((isnotnull(ws_web_site_sk#89) AND isnotnull(ws_item_sk#88)) AND isnotnull(ws_promo_sk#90)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(ws_item_sk#88, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(ws_promo_sk#90, 42))) + +(125) RowToVeloxColumnar +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(126) InputAdapter +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(127) InputIteratorTransformer +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(128) ProjectExecTransformer Output [8]: [hash(ws_item_sk#88, ws_order_number#91, 42) AS hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(114) WholeStageCodegenTransformer (32) +(129) WholeStageCodegenTransformer (29) Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: false -(115) VeloxResizeBatches +(130) VeloxResizeBatches Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: 1024, 2147483647, 10485760 -(116) ColumnarExchange +(131) ColumnarExchange Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: hashpartitioning(ws_item_sk#88, ws_order_number#91, 1), ENSURE_REQUIREMENTS, [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94], [plan_id=13], [shuffle_writer_type=hash] -(117) InputAdapter +(132) InputAdapter Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(118) InputIteratorTransformer +(133) InputIteratorTransformer Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(119) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns +(134) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns Output [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number)] ReadSchema: struct -(120) FilterExecTransformer +(135) FilterExecTransformer Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] Arguments: (isnotnull(wr_item_sk#96) AND isnotnull(wr_order_number#97)) -(121) ProjectExecTransformer +(136) ProjectExecTransformer Output [5]: [hash(wr_item_sk#96, wr_order_number#97, 42) AS hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -(122) WholeStageCodegenTransformer (33) +(137) WholeStageCodegenTransformer (30) Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: false -(123) VeloxResizeBatches +(138) VeloxResizeBatches Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: 1024, 2147483647, 10485760 -(124) ColumnarExchange +(139) ColumnarExchange Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: hashpartitioning(wr_item_sk#96, wr_order_number#97, 1), ENSURE_REQUIREMENTS, [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99], [plan_id=14], [shuffle_writer_type=hash] -(125) InputAdapter +(140) InputAdapter Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(126) InputIteratorTransformer +(141) InputIteratorTransformer Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(127) ShuffledHashJoinExecTransformer +(142) ShuffledHashJoinExecTransformer Left keys [2]: [ws_item_sk#88, ws_order_number#91] Right keys [2]: [wr_item_sk#96, wr_order_number#97] Join type: LeftOuter Join condition: None -(128) ProjectExecTransformer +(143) ProjectExecTransformer Output [8]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [11]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(129) ReusedExchange [Reuses operator id: 23] +(144) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#102] -(130) InputAdapter +(145) InputAdapter Input [1]: [i_item_sk#102] -(131) InputIteratorTransformer +(146) InputIteratorTransformer Input [1]: [i_item_sk#102] -(132) BroadcastHashJoinExecTransformer +(147) BroadcastHashJoinExecTransformer Left keys [1]: [ws_item_sk#88] Right keys [1]: [i_item_sk#102] Join type: Inner Join condition: None -(133) ProjectExecTransformer +(148) ProjectExecTransformer Output [7]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [9]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, i_item_sk#102] -(134) ReusedExchange [Reuses operator id: 32] +(149) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#103] -(135) InputAdapter +(150) InputAdapter Input [1]: [p_promo_sk#103] -(136) InputIteratorTransformer +(151) InputIteratorTransformer Input [1]: [p_promo_sk#103] -(137) BroadcastHashJoinExecTransformer +(152) BroadcastHashJoinExecTransformer Left keys [1]: [ws_promo_sk#90] Right keys [1]: [p_promo_sk#103] Join type: Inner Join condition: None -(138) ProjectExecTransformer +(153) ProjectExecTransformer Output [6]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [8]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, p_promo_sk#103] -(139) ReusedExchange [Reuses operator id: 401] +(154) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#104] -(140) InputAdapter +(155) InputAdapter Input [1]: [d_date_sk#104] -(141) InputIteratorTransformer +(156) InputIteratorTransformer Input [1]: [d_date_sk#104] -(142) BroadcastHashJoinExecTransformer +(157) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#94] Right keys [1]: [d_date_sk#104] Join type: Inner Join condition: None -(143) ProjectExecTransformer +(158) ProjectExecTransformer Output [5]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99] Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, d_date_sk#104] -(144) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(159) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#105, web_site_id#106] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct -(145) FilterExecTransformer +(160) FilterExecTransformer Input [2]: [web_site_sk#105, web_site_id#106] Arguments: isnotnull(web_site_sk#105) -(146) WholeStageCodegenTransformer (37) +(161) WholeStageCodegenTransformer (34) Input [2]: [web_site_sk#105, web_site_id#106] Arguments: false -(147) ColumnarBroadcastExchange +(162) ColumnarBroadcastExchange Input [2]: [web_site_sk#105, web_site_id#106] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -(148) InputAdapter +(163) InputAdapter Input [2]: [web_site_sk#105, web_site_id#106] -(149) InputIteratorTransformer +(164) InputIteratorTransformer Input [2]: [web_site_sk#105, web_site_id#106] -(150) BroadcastHashJoinExecTransformer +(165) BroadcastHashJoinExecTransformer Left keys [1]: [ws_web_site_sk#89] Right keys [1]: [web_site_sk#105] Join type: Inner Join condition: None -(151) ProjectExecTransformer +(166) ProjectExecTransformer Output [4]: [web_site_id#106, UnscaledValue(ws_ext_sales_price#92) AS _pre_7#107, coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00) AS _pre_8#108, (ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)) AS _pre_9#109] Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_sk#105, web_site_id#106] -(152) FlushableHashAggregateExecTransformer +(167) FlushableHashAggregateExecTransformer Input [4]: [web_site_id#106, _pre_7#107, _pre_8#108, _pre_9#109] Keys [1]: [web_site_id#106] Functions [3]: [partial_sum(_pre_7#107), partial_sum(_pre_8#108), partial_sum(_pre_9#109)] Aggregate Attributes [5]: [sum#110, sum#111, isEmpty#112, sum#113, isEmpty#114] Results [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(153) ProjectExecTransformer +(168) ProjectExecTransformer Output [7]: [hash(web_site_id#106, 42) AS hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(154) WholeStageCodegenTransformer (38) +(169) WholeStageCodegenTransformer (35) Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: false -(155) VeloxResizeBatches +(170) VeloxResizeBatches Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: 1024, 2147483647, 10485760 -(156) ColumnarExchange +(171) ColumnarExchange Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: hashpartitioning(web_site_id#106, 1), ENSURE_REQUIREMENTS, [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119], [plan_id=16], [shuffle_writer_type=hash] -(157) InputAdapter +(172) InputAdapter Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(158) InputIteratorTransformer +(173) InputIteratorTransformer Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(159) RegularHashAggregateExecTransformer +(174) RegularHashAggregateExecTransformer Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Keys [1]: [web_site_id#106] Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#92)), sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00)), sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] Results [4]: [web_site_id#106, sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] -(160) ProjectExecTransformer +(175) ProjectExecTransformer Output [5]: [web channel AS channel#124, concat(web_site, web_site_id#106) AS id#125, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#92))#121,17,2) AS sales#126, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122 AS returns#127, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123 AS profit#128] Input [4]: [web_site_id#106, sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] -(161) WholeStageCodegenTransformer (39) +(176) WholeStageCodegenTransformer (36) Input [5]: [channel#124, id#125, sales#126, returns#127, profit#128] Arguments: false -(162) ColumnarUnion +(177) ColumnarUnion Arguments: UnknownPartitioning(0) -(163) InputAdapter +(178) InputAdapter Input [5]: [channel#42, id#43, sales#44, returns#45, profit#46] -(164) InputIteratorTransformer +(179) InputIteratorTransformer Input [5]: [channel#42, id#43, sales#44, returns#45, profit#46] -(165) FlushableHashAggregateExecTransformer +(180) FlushableHashAggregateExecTransformer Input [5]: [channel#42, id#43, sales#44, returns#45, profit#46] Keys [2]: [channel#42, id#43] Functions [3]: [partial_sum(sales#44), partial_sum(returns#45), partial_sum(profit#46)] Aggregate Attributes [6]: [sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] Results [8]: [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] -(166) ProjectExecTransformer +(181) ProjectExecTransformer Output [9]: [hash(channel#42, id#43, 42) AS hash_partition_key#141, channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] Input [8]: [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] -(167) WholeStageCodegenTransformer (40) +(182) WholeStageCodegenTransformer (37) Input [9]: [hash_partition_key#141, channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] Arguments: false -(168) VeloxResizeBatches +(183) VeloxResizeBatches Input [9]: [hash_partition_key#141, channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] Arguments: 1024, 2147483647, 10485760 -(169) ColumnarExchange +(184) ColumnarExchange Input [9]: [hash_partition_key#141, channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] Arguments: hashpartitioning(channel#42, id#43, 1), ENSURE_REQUIREMENTS, [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140], [plan_id=17], [shuffle_writer_type=hash] -(170) InputAdapter +(185) InputAdapter Input [8]: [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] -(171) InputIteratorTransformer +(186) InputIteratorTransformer Input [8]: [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] -(172) RegularHashAggregateExecTransformer +(187) RegularHashAggregateExecTransformer Input [8]: [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] Keys [2]: [channel#42, id#43] Functions [3]: [sum(sales#44), sum(returns#45), sum(profit#46)] Aggregate Attributes [3]: [sum(sales#44)#142, sum(returns#45)#143, sum(profit#46)#144] Results [5]: [channel#42, id#43, sum(sales#44)#142, sum(returns#45)#143, sum(profit#46)#144] -(173) ProjectExecTransformer +(188) ProjectExecTransformer Output [5]: [channel#42, id#43, cast(sum(sales#44)#142 as decimal(37,2)) AS sales#145, cast(sum(returns#45)#143 as decimal(38,2)) AS returns#146, cast(sum(profit#46)#144 as decimal(38,2)) AS profit#147] Input [5]: [channel#42, id#43, sum(sales#44)#142, sum(returns#45)#143, sum(profit#46)#144] -(174) WholeStageCodegenTransformer (41) +(189) WholeStageCodegenTransformer (38) Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Arguments: false -(175) ReusedExchange [Reuses operator id: 54] +(190) ReusedExchange [Reuses operator id: 59] Output [6]: [s_store_id#148, sum#149, sum#150, isEmpty#151, sum#152, isEmpty#153] -(176) InputAdapter +(191) InputAdapter Input [6]: [s_store_id#148, sum#149, sum#150, isEmpty#151, sum#152, isEmpty#153] -(177) InputIteratorTransformer +(192) InputIteratorTransformer Input [6]: [s_store_id#148, sum#149, sum#150, isEmpty#151, sum#152, isEmpty#153] -(178) RegularHashAggregateExecTransformer +(193) RegularHashAggregateExecTransformer Input [6]: [s_store_id#148, sum#149, sum#150, isEmpty#151, sum#152, isEmpty#153] Keys [1]: [s_store_id#148] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#154)), sum(coalesce(cast(sr_return_amt#155 as decimal(12,2)), 0.00)), sum((ss_net_profit#156 - coalesce(cast(sr_net_loss#157 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#154))#39, sum(coalesce(cast(sr_return_amt#155 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#156 - coalesce(cast(sr_net_loss#157 as decimal(12,2)), 0.00)))#41] Results [4]: [s_store_id#148, sum(UnscaledValue(ss_ext_sales_price#154))#39, sum(coalesce(cast(sr_return_amt#155 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#156 - coalesce(cast(sr_net_loss#157 as decimal(12,2)), 0.00)))#41] -(179) ProjectExecTransformer +(194) ProjectExecTransformer Output [5]: [store channel AS channel#158, concat(store, s_store_id#148) AS id#159, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#154))#39,17,2) AS sales#160, sum(coalesce(cast(sr_return_amt#155 as decimal(12,2)), 0.00))#40 AS returns#161, sum((ss_net_profit#156 - coalesce(cast(sr_net_loss#157 as decimal(12,2)), 0.00)))#41 AS profit#162] Input [4]: [s_store_id#148, sum(UnscaledValue(ss_ext_sales_price#154))#39, sum(coalesce(cast(sr_return_amt#155 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#156 - coalesce(cast(sr_net_loss#157 as decimal(12,2)), 0.00)))#41] -(180) WholeStageCodegenTransformer (54) +(195) WholeStageCodegenTransformer (50) Input [5]: [channel#158, id#159, sales#160, returns#161, profit#162] Arguments: false -(181) ReusedExchange [Reuses operator id: 105] +(196) ReusedExchange [Reuses operator id: 115] Output [6]: [cp_catalog_page_id#163, sum#164, sum#165, isEmpty#166, sum#167, isEmpty#168] -(182) InputAdapter +(197) InputAdapter Input [6]: [cp_catalog_page_id#163, sum#164, sum#165, isEmpty#166, sum#167, isEmpty#168] -(183) InputIteratorTransformer +(198) InputIteratorTransformer Input [6]: [cp_catalog_page_id#163, sum#164, sum#165, isEmpty#166, sum#167, isEmpty#168] -(184) RegularHashAggregateExecTransformer +(199) RegularHashAggregateExecTransformer Input [6]: [cp_catalog_page_id#163, sum#164, sum#165, isEmpty#166, sum#167, isEmpty#168] Keys [1]: [cp_catalog_page_id#163] Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#169)), sum(coalesce(cast(cr_return_amount#170 as decimal(12,2)), 0.00)), sum((cs_net_profit#171 - coalesce(cast(cr_net_loss#172 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#169))#80, sum(coalesce(cast(cr_return_amount#170 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#171 - coalesce(cast(cr_net_loss#172 as decimal(12,2)), 0.00)))#82] Results [4]: [cp_catalog_page_id#163, sum(UnscaledValue(cs_ext_sales_price#169))#80, sum(coalesce(cast(cr_return_amount#170 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#171 - coalesce(cast(cr_net_loss#172 as decimal(12,2)), 0.00)))#82] -(185) ProjectExecTransformer +(200) ProjectExecTransformer Output [5]: [catalog channel AS channel#173, concat(catalog_page, cp_catalog_page_id#163) AS id#174, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#169))#80,17,2) AS sales#175, sum(coalesce(cast(cr_return_amount#170 as decimal(12,2)), 0.00))#81 AS returns#176, sum((cs_net_profit#171 - coalesce(cast(cr_net_loss#172 as decimal(12,2)), 0.00)))#82 AS profit#177] Input [4]: [cp_catalog_page_id#163, sum(UnscaledValue(cs_ext_sales_price#169))#80, sum(coalesce(cast(cr_return_amount#170 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#171 - coalesce(cast(cr_net_loss#172 as decimal(12,2)), 0.00)))#82] -(186) WholeStageCodegenTransformer (67) +(201) WholeStageCodegenTransformer (62) Input [5]: [channel#173, id#174, sales#175, returns#176, profit#177] Arguments: false -(187) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(202) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [7]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Batched: true Location: InMemoryFileIndex [] @@ -1069,265 +1126,265 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#184), dynamicpruningexpression(ws_s PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)] ReadSchema: struct -(188) FilterExecTransformer +(203) FilterExecTransformer Input [7]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Arguments: ((isnotnull(ws_web_site_sk#179) AND isnotnull(ws_item_sk#178)) AND isnotnull(ws_promo_sk#180)) -(189) ProjectExecTransformer +(204) ProjectExecTransformer Output [8]: [hash(ws_item_sk#178, ws_order_number#181, 42) AS hash_partition_key#185, ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Input [7]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] -(190) WholeStageCodegenTransformer (69) +(205) WholeStageCodegenTransformer (64) Input [8]: [hash_partition_key#185, ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Arguments: false -(191) VeloxResizeBatches +(206) VeloxResizeBatches Input [8]: [hash_partition_key#185, ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Arguments: 1024, 2147483647, 10485760 -(192) ColumnarExchange +(207) ColumnarExchange Input [8]: [hash_partition_key#185, ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Arguments: hashpartitioning(ws_item_sk#178, ws_order_number#181, 1), ENSURE_REQUIREMENTS, [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184], [plan_id=18], [shuffle_writer_type=hash] -(193) InputAdapter +(208) InputAdapter Input [7]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] -(194) InputIteratorTransformer +(209) InputIteratorTransformer Input [7]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] -(195) ReusedExchange [Reuses operator id: 124] +(210) ReusedExchange [Reuses operator id: 139] Output [4]: [wr_item_sk#186, wr_order_number#187, wr_return_amt#188, wr_net_loss#189] -(196) InputAdapter +(211) InputAdapter Input [4]: [wr_item_sk#186, wr_order_number#187, wr_return_amt#188, wr_net_loss#189] -(197) InputIteratorTransformer +(212) InputIteratorTransformer Input [4]: [wr_item_sk#186, wr_order_number#187, wr_return_amt#188, wr_net_loss#189] -(198) ShuffledHashJoinExecTransformer +(213) ShuffledHashJoinExecTransformer Left keys [2]: [ws_item_sk#178, ws_order_number#181] Right keys [2]: [wr_item_sk#186, wr_order_number#187] Join type: LeftOuter Join condition: None -(199) ProjectExecTransformer +(214) ProjectExecTransformer Output [8]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189] Input [11]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_item_sk#186, wr_order_number#187, wr_return_amt#188, wr_net_loss#189] -(200) ReusedExchange [Reuses operator id: 23] +(215) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#190] -(201) InputAdapter +(216) InputAdapter Input [1]: [i_item_sk#190] -(202) InputIteratorTransformer +(217) InputIteratorTransformer Input [1]: [i_item_sk#190] -(203) BroadcastHashJoinExecTransformer +(218) BroadcastHashJoinExecTransformer Left keys [1]: [ws_item_sk#178] Right keys [1]: [i_item_sk#190] Join type: Inner Join condition: None -(204) ProjectExecTransformer +(219) ProjectExecTransformer Output [7]: [ws_web_site_sk#179, ws_promo_sk#180, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189] Input [9]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189, i_item_sk#190] -(205) ReusedExchange [Reuses operator id: 32] +(220) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#191] -(206) InputAdapter +(221) InputAdapter Input [1]: [p_promo_sk#191] -(207) InputIteratorTransformer +(222) InputIteratorTransformer Input [1]: [p_promo_sk#191] -(208) BroadcastHashJoinExecTransformer +(223) BroadcastHashJoinExecTransformer Left keys [1]: [ws_promo_sk#180] Right keys [1]: [p_promo_sk#191] Join type: Inner Join condition: None -(209) ProjectExecTransformer +(224) ProjectExecTransformer Output [6]: [ws_web_site_sk#179, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189] Input [8]: [ws_web_site_sk#179, ws_promo_sk#180, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189, p_promo_sk#191] -(210) ReusedExchange [Reuses operator id: 401] +(225) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#192] -(211) InputAdapter +(226) InputAdapter Input [1]: [d_date_sk#192] -(212) InputIteratorTransformer +(227) InputIteratorTransformer Input [1]: [d_date_sk#192] -(213) BroadcastHashJoinExecTransformer +(228) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#184] Right keys [1]: [d_date_sk#192] Join type: Inner Join condition: None -(214) ProjectExecTransformer +(229) ProjectExecTransformer Output [5]: [ws_web_site_sk#179, ws_ext_sales_price#182, ws_net_profit#183, wr_return_amt#188, wr_net_loss#189] Input [7]: [ws_web_site_sk#179, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189, d_date_sk#192] -(215) ReusedExchange [Reuses operator id: 147] +(230) ReusedExchange [Reuses operator id: 162] Output [2]: [web_site_sk#193, web_site_id#194] -(216) InputAdapter +(231) InputAdapter Input [2]: [web_site_sk#193, web_site_id#194] -(217) InputIteratorTransformer +(232) InputIteratorTransformer Input [2]: [web_site_sk#193, web_site_id#194] -(218) BroadcastHashJoinExecTransformer +(233) BroadcastHashJoinExecTransformer Left keys [1]: [ws_web_site_sk#179] Right keys [1]: [web_site_sk#193] Join type: Inner Join condition: None -(219) ProjectExecTransformer +(234) ProjectExecTransformer Output [4]: [web_site_id#194, UnscaledValue(ws_ext_sales_price#182) AS _pre_10#195, coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00) AS _pre_11#196, (ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)) AS _pre_12#197] Input [7]: [ws_web_site_sk#179, ws_ext_sales_price#182, ws_net_profit#183, wr_return_amt#188, wr_net_loss#189, web_site_sk#193, web_site_id#194] -(220) FlushableHashAggregateExecTransformer +(235) FlushableHashAggregateExecTransformer Input [4]: [web_site_id#194, _pre_10#195, _pre_11#196, _pre_12#197] Keys [1]: [web_site_id#194] Functions [3]: [partial_sum(_pre_10#195), partial_sum(_pre_11#196), partial_sum(_pre_12#197)] Aggregate Attributes [5]: [sum#198, sum#199, isEmpty#200, sum#201, isEmpty#202] Results [6]: [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] -(221) ProjectExecTransformer +(236) ProjectExecTransformer Output [7]: [hash(web_site_id#194, 42) AS hash_partition_key#208, web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] Input [6]: [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] -(222) WholeStageCodegenTransformer (75) +(237) WholeStageCodegenTransformer (70) Input [7]: [hash_partition_key#208, web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] Arguments: false -(223) VeloxResizeBatches +(238) VeloxResizeBatches Input [7]: [hash_partition_key#208, web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] Arguments: 1024, 2147483647, 10485760 -(224) ColumnarExchange +(239) ColumnarExchange Input [7]: [hash_partition_key#208, web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] Arguments: hashpartitioning(web_site_id#194, 1), ENSURE_REQUIREMENTS, [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207], [plan_id=19], [shuffle_writer_type=hash] -(225) InputAdapter +(240) InputAdapter Input [6]: [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] -(226) InputIteratorTransformer +(241) InputIteratorTransformer Input [6]: [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] -(227) RegularHashAggregateExecTransformer +(242) RegularHashAggregateExecTransformer Input [6]: [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] Keys [1]: [web_site_id#194] Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#182)), sum(coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00)), sum((ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#182))#121, sum(coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)))#123] Results [4]: [web_site_id#194, sum(UnscaledValue(ws_ext_sales_price#182))#121, sum(coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)))#123] -(228) ProjectExecTransformer +(243) ProjectExecTransformer Output [5]: [web channel AS channel#209, concat(web_site, web_site_id#194) AS id#210, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#182))#121,17,2) AS sales#211, sum(coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00))#122 AS returns#212, sum((ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)))#123 AS profit#213] Input [4]: [web_site_id#194, sum(UnscaledValue(ws_ext_sales_price#182))#121, sum(coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)))#123] -(229) WholeStageCodegenTransformer (76) +(244) WholeStageCodegenTransformer (71) Input [5]: [channel#209, id#210, sales#211, returns#212, profit#213] Arguments: false -(230) ColumnarUnion +(245) ColumnarUnion Arguments: UnknownPartitioning(0) -(231) InputAdapter +(246) InputAdapter Input [5]: [channel#158, id#159, sales#160, returns#161, profit#162] -(232) InputIteratorTransformer +(247) InputIteratorTransformer Input [5]: [channel#158, id#159, sales#160, returns#161, profit#162] -(233) FlushableHashAggregateExecTransformer +(248) FlushableHashAggregateExecTransformer Input [5]: [channel#158, id#159, sales#160, returns#161, profit#162] Keys [2]: [channel#158, id#159] Functions [3]: [partial_sum(sales#160), partial_sum(returns#161), partial_sum(profit#162)] Aggregate Attributes [6]: [sum#214, isEmpty#215, sum#216, isEmpty#217, sum#218, isEmpty#219] Results [8]: [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] -(234) ProjectExecTransformer +(249) ProjectExecTransformer Output [9]: [hash(channel#158, id#159, 42) AS hash_partition_key#226, channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] Input [8]: [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] -(235) WholeStageCodegenTransformer (77) +(250) WholeStageCodegenTransformer (72) Input [9]: [hash_partition_key#226, channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] Arguments: false -(236) VeloxResizeBatches +(251) VeloxResizeBatches Input [9]: [hash_partition_key#226, channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] Arguments: 1024, 2147483647, 10485760 -(237) ColumnarExchange +(252) ColumnarExchange Input [9]: [hash_partition_key#226, channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] Arguments: hashpartitioning(channel#158, id#159, 1), ENSURE_REQUIREMENTS, [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225], [plan_id=20], [shuffle_writer_type=hash] -(238) InputAdapter +(253) InputAdapter Input [8]: [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] -(239) InputIteratorTransformer +(254) InputIteratorTransformer Input [8]: [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] -(240) RegularHashAggregateExecTransformer +(255) RegularHashAggregateExecTransformer Input [8]: [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] Keys [2]: [channel#158, id#159] Functions [3]: [sum(sales#160), sum(returns#161), sum(profit#162)] Aggregate Attributes [3]: [sum(sales#160)#142, sum(returns#161)#143, sum(profit#162)#144] Results [5]: [channel#158, id#159, sum(sales#160)#142, sum(returns#161)#143, sum(profit#162)#144] -(241) ProjectExecTransformer +(256) ProjectExecTransformer Output [4]: [channel#158, sum(sales#160)#142 AS sales#227, sum(returns#161)#143 AS returns#228, sum(profit#162)#144 AS profit#229] Input [5]: [channel#158, id#159, sum(sales#160)#142, sum(returns#161)#143, sum(profit#162)#144] -(242) FlushableHashAggregateExecTransformer +(257) FlushableHashAggregateExecTransformer Input [4]: [channel#158, sales#227, returns#228, profit#229] Keys [1]: [channel#158] Functions [3]: [partial_sum(sales#227), partial_sum(returns#228), partial_sum(profit#229)] Aggregate Attributes [6]: [sum#230, isEmpty#231, sum#232, isEmpty#233, sum#234, isEmpty#235] Results [7]: [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] -(243) ProjectExecTransformer +(258) ProjectExecTransformer Output [8]: [hash(channel#158, 42) AS hash_partition_key#242, channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] Input [7]: [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] -(244) WholeStageCodegenTransformer (78) +(259) WholeStageCodegenTransformer (73) Input [8]: [hash_partition_key#242, channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] Arguments: false -(245) VeloxResizeBatches +(260) VeloxResizeBatches Input [8]: [hash_partition_key#242, channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] Arguments: 1024, 2147483647, 10485760 -(246) ColumnarExchange +(261) ColumnarExchange Input [8]: [hash_partition_key#242, channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] Arguments: hashpartitioning(channel#158, 1), ENSURE_REQUIREMENTS, [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241], [plan_id=21], [shuffle_writer_type=hash] -(247) InputAdapter +(262) InputAdapter Input [7]: [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] -(248) InputIteratorTransformer +(263) InputIteratorTransformer Input [7]: [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] -(249) RegularHashAggregateExecTransformer +(264) RegularHashAggregateExecTransformer Input [7]: [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] Keys [1]: [channel#158] Functions [3]: [sum(sales#227), sum(returns#228), sum(profit#229)] Aggregate Attributes [3]: [sum(sales#227)#243, sum(returns#228)#244, sum(profit#229)#245] Results [4]: [channel#158, sum(sales#227)#243, sum(returns#228)#244, sum(profit#229)#245] -(250) ProjectExecTransformer +(265) ProjectExecTransformer Output [5]: [channel#158, null AS id#246, sum(sales#227)#243 AS sales#247, sum(returns#228)#244 AS returns#248, sum(profit#229)#245 AS profit#249] Input [4]: [channel#158, sum(sales#227)#243, sum(returns#228)#244, sum(profit#229)#245] -(251) WholeStageCodegenTransformer (79) +(266) WholeStageCodegenTransformer (74) Input [5]: [channel#158, id#246, sales#247, returns#248, profit#249] Arguments: false -(252) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(267) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [7]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Batched: true Location: InMemoryFileIndex [] @@ -1335,172 +1392,172 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#256), dynamicpruningexpression(ss_s PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)] ReadSchema: struct -(253) FilterExecTransformer +(268) FilterExecTransformer Input [7]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Arguments: ((isnotnull(ss_store_sk#251) AND isnotnull(ss_item_sk#250)) AND isnotnull(ss_promo_sk#252)) -(254) ProjectExecTransformer +(269) ProjectExecTransformer Output [8]: [hash(ss_item_sk#250, ss_ticket_number#253, 42) AS hash_partition_key#257, ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Input [7]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] -(255) WholeStageCodegenTransformer (81) +(270) WholeStageCodegenTransformer (76) Input [8]: [hash_partition_key#257, ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Arguments: false -(256) VeloxResizeBatches +(271) VeloxResizeBatches Input [8]: [hash_partition_key#257, ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Arguments: 1024, 2147483647, 10485760 -(257) ColumnarExchange +(272) ColumnarExchange Input [8]: [hash_partition_key#257, ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Arguments: hashpartitioning(ss_item_sk#250, ss_ticket_number#253, 1), ENSURE_REQUIREMENTS, [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256], [plan_id=22], [shuffle_writer_type=hash] -(258) InputAdapter +(273) InputAdapter Input [7]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] -(259) InputIteratorTransformer +(274) InputIteratorTransformer Input [7]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] -(260) ReusedExchange [Reuses operator id: 14] +(275) ReusedExchange [Reuses operator id: 19] Output [4]: [sr_item_sk#258, sr_ticket_number#259, sr_return_amt#260, sr_net_loss#261] -(261) InputAdapter +(276) InputAdapter Input [4]: [sr_item_sk#258, sr_ticket_number#259, sr_return_amt#260, sr_net_loss#261] -(262) InputIteratorTransformer +(277) InputIteratorTransformer Input [4]: [sr_item_sk#258, sr_ticket_number#259, sr_return_amt#260, sr_net_loss#261] -(263) ShuffledHashJoinExecTransformer +(278) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#250, ss_ticket_number#253] Right keys [2]: [sr_item_sk#258, sr_ticket_number#259] Join type: LeftOuter Join condition: None -(264) ProjectExecTransformer +(279) ProjectExecTransformer Output [8]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261] Input [11]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_item_sk#258, sr_ticket_number#259, sr_return_amt#260, sr_net_loss#261] -(265) ReusedExchange [Reuses operator id: 23] +(280) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#262] -(266) InputAdapter +(281) InputAdapter Input [1]: [i_item_sk#262] -(267) InputIteratorTransformer +(282) InputIteratorTransformer Input [1]: [i_item_sk#262] -(268) BroadcastHashJoinExecTransformer +(283) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#250] Right keys [1]: [i_item_sk#262] Join type: Inner Join condition: None -(269) ProjectExecTransformer +(284) ProjectExecTransformer Output [7]: [ss_store_sk#251, ss_promo_sk#252, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261] Input [9]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261, i_item_sk#262] -(270) ReusedExchange [Reuses operator id: 32] +(285) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#263] -(271) InputAdapter +(286) InputAdapter Input [1]: [p_promo_sk#263] -(272) InputIteratorTransformer +(287) InputIteratorTransformer Input [1]: [p_promo_sk#263] -(273) BroadcastHashJoinExecTransformer +(288) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#252] Right keys [1]: [p_promo_sk#263] Join type: Inner Join condition: None -(274) ProjectExecTransformer +(289) ProjectExecTransformer Output [6]: [ss_store_sk#251, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261] Input [8]: [ss_store_sk#251, ss_promo_sk#252, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261, p_promo_sk#263] -(275) ReusedExchange [Reuses operator id: 401] +(290) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#264] -(276) InputAdapter +(291) InputAdapter Input [1]: [d_date_sk#264] -(277) InputIteratorTransformer +(292) InputIteratorTransformer Input [1]: [d_date_sk#264] -(278) BroadcastHashJoinExecTransformer +(293) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#256] Right keys [1]: [d_date_sk#264] Join type: Inner Join condition: None -(279) ProjectExecTransformer +(294) ProjectExecTransformer Output [5]: [ss_store_sk#251, ss_ext_sales_price#254, ss_net_profit#255, sr_return_amt#260, sr_net_loss#261] Input [7]: [ss_store_sk#251, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261, d_date_sk#264] -(280) ReusedExchange [Reuses operator id: 45] +(295) ReusedExchange [Reuses operator id: 50] Output [2]: [s_store_sk#265, s_store_id#266] -(281) InputAdapter +(296) InputAdapter Input [2]: [s_store_sk#265, s_store_id#266] -(282) InputIteratorTransformer +(297) InputIteratorTransformer Input [2]: [s_store_sk#265, s_store_id#266] -(283) BroadcastHashJoinExecTransformer +(298) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#251] Right keys [1]: [s_store_sk#265] Join type: Inner Join condition: None -(284) ProjectExecTransformer +(299) ProjectExecTransformer Output [4]: [s_store_id#266, UnscaledValue(ss_ext_sales_price#254) AS _pre_13#267, coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00) AS _pre_14#268, (ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)) AS _pre_15#269] Input [7]: [ss_store_sk#251, ss_ext_sales_price#254, ss_net_profit#255, sr_return_amt#260, sr_net_loss#261, s_store_sk#265, s_store_id#266] -(285) FlushableHashAggregateExecTransformer +(300) FlushableHashAggregateExecTransformer Input [4]: [s_store_id#266, _pre_13#267, _pre_14#268, _pre_15#269] Keys [1]: [s_store_id#266] Functions [3]: [partial_sum(_pre_13#267), partial_sum(_pre_14#268), partial_sum(_pre_15#269)] Aggregate Attributes [5]: [sum#270, sum#271, isEmpty#272, sum#273, isEmpty#274] Results [6]: [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] -(286) ProjectExecTransformer +(301) ProjectExecTransformer Output [7]: [hash(s_store_id#266, 42) AS hash_partition_key#280, s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] Input [6]: [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] -(287) WholeStageCodegenTransformer (87) +(302) WholeStageCodegenTransformer (82) Input [7]: [hash_partition_key#280, s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] Arguments: false -(288) VeloxResizeBatches +(303) VeloxResizeBatches Input [7]: [hash_partition_key#280, s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] Arguments: 1024, 2147483647, 10485760 -(289) ColumnarExchange +(304) ColumnarExchange Input [7]: [hash_partition_key#280, s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] Arguments: hashpartitioning(s_store_id#266, 1), ENSURE_REQUIREMENTS, [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279], [plan_id=23], [shuffle_writer_type=hash] -(290) InputAdapter +(305) InputAdapter Input [6]: [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] -(291) InputIteratorTransformer +(306) InputIteratorTransformer Input [6]: [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] -(292) RegularHashAggregateExecTransformer +(307) RegularHashAggregateExecTransformer Input [6]: [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] Keys [1]: [s_store_id#266] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#254)), sum(coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00)), sum((ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#254))#39, sum(coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)))#41] Results [4]: [s_store_id#266, sum(UnscaledValue(ss_ext_sales_price#254))#39, sum(coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)))#41] -(293) ProjectExecTransformer +(308) ProjectExecTransformer Output [5]: [store channel AS channel#281, concat(store, s_store_id#266) AS id#282, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#254))#39,17,2) AS sales#283, sum(coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00))#40 AS returns#284, sum((ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)))#41 AS profit#285] Input [4]: [s_store_id#266, sum(UnscaledValue(ss_ext_sales_price#254))#39, sum(coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)))#41] -(294) WholeStageCodegenTransformer (88) +(309) WholeStageCodegenTransformer (83) Input [5]: [channel#281, id#282, sales#283, returns#284, profit#285] Arguments: false -(295) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(310) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [7]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Batched: true Location: InMemoryFileIndex [] @@ -1508,527 +1565,489 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#292), dynamicpruningexpression(cs_s PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)] ReadSchema: struct -(296) FilterExecTransformer +(311) FilterExecTransformer Input [7]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Arguments: ((isnotnull(cs_catalog_page_sk#286) AND isnotnull(cs_item_sk#287)) AND isnotnull(cs_promo_sk#288)) -(297) ProjectExecTransformer +(312) ProjectExecTransformer Output [8]: [hash(cs_item_sk#287, cs_order_number#289, 42) AS hash_partition_key#293, cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Input [7]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] -(298) WholeStageCodegenTransformer (90) +(313) WholeStageCodegenTransformer (85) Input [8]: [hash_partition_key#293, cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Arguments: false -(299) VeloxResizeBatches +(314) VeloxResizeBatches Input [8]: [hash_partition_key#293, cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Arguments: 1024, 2147483647, 10485760 -(300) ColumnarExchange +(315) ColumnarExchange Input [8]: [hash_partition_key#293, cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Arguments: hashpartitioning(cs_item_sk#287, cs_order_number#289, 1), ENSURE_REQUIREMENTS, [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292], [plan_id=24], [shuffle_writer_type=hash] -(301) InputAdapter +(316) InputAdapter Input [7]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] -(302) InputIteratorTransformer +(317) InputIteratorTransformer Input [7]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] -(303) ReusedExchange [Reuses operator id: 73] +(318) ReusedExchange [Reuses operator id: 83] Output [4]: [cr_item_sk#294, cr_order_number#295, cr_return_amount#296, cr_net_loss#297] -(304) InputAdapter +(319) InputAdapter Input [4]: [cr_item_sk#294, cr_order_number#295, cr_return_amount#296, cr_net_loss#297] -(305) InputIteratorTransformer +(320) InputIteratorTransformer Input [4]: [cr_item_sk#294, cr_order_number#295, cr_return_amount#296, cr_net_loss#297] -(306) ShuffledHashJoinExecTransformer +(321) ShuffledHashJoinExecTransformer Left keys [2]: [cs_item_sk#287, cs_order_number#289] Right keys [2]: [cr_item_sk#294, cr_order_number#295] Join type: LeftOuter Join condition: None -(307) ProjectExecTransformer +(322) ProjectExecTransformer Output [8]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297] Input [11]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_item_sk#294, cr_order_number#295, cr_return_amount#296, cr_net_loss#297] -(308) ReusedExchange [Reuses operator id: 23] +(323) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#298] -(309) InputAdapter +(324) InputAdapter Input [1]: [i_item_sk#298] -(310) InputIteratorTransformer +(325) InputIteratorTransformer Input [1]: [i_item_sk#298] -(311) BroadcastHashJoinExecTransformer +(326) BroadcastHashJoinExecTransformer Left keys [1]: [cs_item_sk#287] Right keys [1]: [i_item_sk#298] Join type: Inner Join condition: None -(312) ProjectExecTransformer +(327) ProjectExecTransformer Output [7]: [cs_catalog_page_sk#286, cs_promo_sk#288, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297] Input [9]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297, i_item_sk#298] -(313) ReusedExchange [Reuses operator id: 32] +(328) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#299] -(314) InputAdapter +(329) InputAdapter Input [1]: [p_promo_sk#299] -(315) InputIteratorTransformer +(330) InputIteratorTransformer Input [1]: [p_promo_sk#299] -(316) BroadcastHashJoinExecTransformer +(331) BroadcastHashJoinExecTransformer Left keys [1]: [cs_promo_sk#288] Right keys [1]: [p_promo_sk#299] Join type: Inner Join condition: None -(317) ProjectExecTransformer +(332) ProjectExecTransformer Output [6]: [cs_catalog_page_sk#286, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297] Input [8]: [cs_catalog_page_sk#286, cs_promo_sk#288, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297, p_promo_sk#299] -(318) ReusedExchange [Reuses operator id: 401] +(333) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#300] -(319) InputAdapter +(334) InputAdapter Input [1]: [d_date_sk#300] -(320) InputIteratorTransformer +(335) InputIteratorTransformer Input [1]: [d_date_sk#300] -(321) BroadcastHashJoinExecTransformer +(336) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#292] Right keys [1]: [d_date_sk#300] Join type: Inner Join condition: None -(322) ProjectExecTransformer +(337) ProjectExecTransformer Output [5]: [cs_catalog_page_sk#286, cs_ext_sales_price#290, cs_net_profit#291, cr_return_amount#296, cr_net_loss#297] Input [7]: [cs_catalog_page_sk#286, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297, d_date_sk#300] -(323) ReusedExchange [Reuses operator id: 96] +(338) ReusedExchange [Reuses operator id: 106] Output [2]: [cp_catalog_page_sk#301, cp_catalog_page_id#302] -(324) InputAdapter +(339) InputAdapter Input [2]: [cp_catalog_page_sk#301, cp_catalog_page_id#302] -(325) InputIteratorTransformer +(340) InputIteratorTransformer Input [2]: [cp_catalog_page_sk#301, cp_catalog_page_id#302] -(326) BroadcastHashJoinExecTransformer +(341) BroadcastHashJoinExecTransformer Left keys [1]: [cs_catalog_page_sk#286] Right keys [1]: [cp_catalog_page_sk#301] Join type: Inner Join condition: None -(327) ProjectExecTransformer +(342) ProjectExecTransformer Output [4]: [cp_catalog_page_id#302, UnscaledValue(cs_ext_sales_price#290) AS _pre_16#303, coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00) AS _pre_17#304, (cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)) AS _pre_18#305] Input [7]: [cs_catalog_page_sk#286, cs_ext_sales_price#290, cs_net_profit#291, cr_return_amount#296, cr_net_loss#297, cp_catalog_page_sk#301, cp_catalog_page_id#302] -(328) FlushableHashAggregateExecTransformer +(343) FlushableHashAggregateExecTransformer Input [4]: [cp_catalog_page_id#302, _pre_16#303, _pre_17#304, _pre_18#305] Keys [1]: [cp_catalog_page_id#302] Functions [3]: [partial_sum(_pre_16#303), partial_sum(_pre_17#304), partial_sum(_pre_18#305)] Aggregate Attributes [5]: [sum#306, sum#307, isEmpty#308, sum#309, isEmpty#310] Results [6]: [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] -(329) ProjectExecTransformer +(344) ProjectExecTransformer Output [7]: [hash(cp_catalog_page_id#302, 42) AS hash_partition_key#316, cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] Input [6]: [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] -(330) WholeStageCodegenTransformer (96) +(345) WholeStageCodegenTransformer (91) Input [7]: [hash_partition_key#316, cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] Arguments: false -(331) VeloxResizeBatches +(346) VeloxResizeBatches Input [7]: [hash_partition_key#316, cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] Arguments: 1024, 2147483647, 10485760 -(332) ColumnarExchange +(347) ColumnarExchange Input [7]: [hash_partition_key#316, cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] Arguments: hashpartitioning(cp_catalog_page_id#302, 1), ENSURE_REQUIREMENTS, [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315], [plan_id=25], [shuffle_writer_type=hash] -(333) InputAdapter +(348) InputAdapter Input [6]: [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] -(334) InputIteratorTransformer +(349) InputIteratorTransformer Input [6]: [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] -(335) RegularHashAggregateExecTransformer +(350) RegularHashAggregateExecTransformer Input [6]: [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] Keys [1]: [cp_catalog_page_id#302] Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#290)), sum(coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00)), sum((cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#290))#80, sum(coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)))#82] Results [4]: [cp_catalog_page_id#302, sum(UnscaledValue(cs_ext_sales_price#290))#80, sum(coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)))#82] -(336) ProjectExecTransformer +(351) ProjectExecTransformer Output [5]: [catalog channel AS channel#317, concat(catalog_page, cp_catalog_page_id#302) AS id#318, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#290))#80,17,2) AS sales#319, sum(coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00))#81 AS returns#320, sum((cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)))#82 AS profit#321] Input [4]: [cp_catalog_page_id#302, sum(UnscaledValue(cs_ext_sales_price#290))#80, sum(coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)))#82] -(337) WholeStageCodegenTransformer (97) +(352) WholeStageCodegenTransformer (92) Input [5]: [channel#317, id#318, sales#319, returns#320, profit#321] Arguments: false -(338) ReusedExchange [Reuses operator id: 224] +(353) ReusedExchange [Reuses operator id: 239] Output [6]: [web_site_id#322, sum#323, sum#324, isEmpty#325, sum#326, isEmpty#327] -(339) InputAdapter +(354) InputAdapter Input [6]: [web_site_id#322, sum#323, sum#324, isEmpty#325, sum#326, isEmpty#327] -(340) InputIteratorTransformer +(355) InputIteratorTransformer Input [6]: [web_site_id#322, sum#323, sum#324, isEmpty#325, sum#326, isEmpty#327] -(341) RegularHashAggregateExecTransformer +(356) RegularHashAggregateExecTransformer Input [6]: [web_site_id#322, sum#323, sum#324, isEmpty#325, sum#326, isEmpty#327] Keys [1]: [web_site_id#322] Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#328)), sum(coalesce(cast(wr_return_amt#329 as decimal(12,2)), 0.00)), sum((ws_net_profit#330 - coalesce(cast(wr_net_loss#331 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#328))#121, sum(coalesce(cast(wr_return_amt#329 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#330 - coalesce(cast(wr_net_loss#331 as decimal(12,2)), 0.00)))#123] Results [4]: [web_site_id#322, sum(UnscaledValue(ws_ext_sales_price#328))#121, sum(coalesce(cast(wr_return_amt#329 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#330 - coalesce(cast(wr_net_loss#331 as decimal(12,2)), 0.00)))#123] -(342) ProjectExecTransformer +(357) ProjectExecTransformer Output [5]: [web channel AS channel#332, concat(web_site, web_site_id#322) AS id#333, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#328))#121,17,2) AS sales#334, sum(coalesce(cast(wr_return_amt#329 as decimal(12,2)), 0.00))#122 AS returns#335, sum((ws_net_profit#330 - coalesce(cast(wr_net_loss#331 as decimal(12,2)), 0.00)))#123 AS profit#336] Input [4]: [web_site_id#322, sum(UnscaledValue(ws_ext_sales_price#328))#121, sum(coalesce(cast(wr_return_amt#329 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#330 - coalesce(cast(wr_net_loss#331 as decimal(12,2)), 0.00)))#123] -(343) WholeStageCodegenTransformer (106) +(358) WholeStageCodegenTransformer (101) Input [5]: [channel#332, id#333, sales#334, returns#335, profit#336] Arguments: false -(344) ColumnarUnion +(359) ColumnarUnion Arguments: UnknownPartitioning(0) -(345) InputAdapter +(360) InputAdapter Input [5]: [channel#281, id#282, sales#283, returns#284, profit#285] -(346) InputIteratorTransformer +(361) InputIteratorTransformer Input [5]: [channel#281, id#282, sales#283, returns#284, profit#285] -(347) FlushableHashAggregateExecTransformer +(362) FlushableHashAggregateExecTransformer Input [5]: [channel#281, id#282, sales#283, returns#284, profit#285] Keys [2]: [channel#281, id#282] Functions [3]: [partial_sum(sales#283), partial_sum(returns#284), partial_sum(profit#285)] Aggregate Attributes [6]: [sum#337, isEmpty#338, sum#339, isEmpty#340, sum#341, isEmpty#342] Results [8]: [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] -(348) ProjectExecTransformer +(363) ProjectExecTransformer Output [9]: [hash(channel#281, id#282, 42) AS hash_partition_key#349, channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] Input [8]: [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] -(349) WholeStageCodegenTransformer (107) +(364) WholeStageCodegenTransformer (102) Input [9]: [hash_partition_key#349, channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] Arguments: false -(350) VeloxResizeBatches +(365) VeloxResizeBatches Input [9]: [hash_partition_key#349, channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] Arguments: 1024, 2147483647, 10485760 -(351) ColumnarExchange +(366) ColumnarExchange Input [9]: [hash_partition_key#349, channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] Arguments: hashpartitioning(channel#281, id#282, 1), ENSURE_REQUIREMENTS, [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348], [plan_id=26], [shuffle_writer_type=hash] -(352) InputAdapter +(367) InputAdapter Input [8]: [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] -(353) InputIteratorTransformer +(368) InputIteratorTransformer Input [8]: [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] -(354) RegularHashAggregateExecTransformer +(369) RegularHashAggregateExecTransformer Input [8]: [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] Keys [2]: [channel#281, id#282] Functions [3]: [sum(sales#283), sum(returns#284), sum(profit#285)] Aggregate Attributes [3]: [sum(sales#283)#142, sum(returns#284)#143, sum(profit#285)#144] Results [5]: [channel#281, id#282, sum(sales#283)#142, sum(returns#284)#143, sum(profit#285)#144] -(355) ProjectExecTransformer +(370) ProjectExecTransformer Output [3]: [sum(sales#283)#142 AS sales#350, sum(returns#284)#143 AS returns#351, sum(profit#285)#144 AS profit#352] Input [5]: [channel#281, id#282, sum(sales#283)#142, sum(returns#284)#143, sum(profit#285)#144] -(356) RegularHashAggregateExecTransformer +(371) RegularHashAggregateExecTransformer Input [3]: [sales#350, returns#351, profit#352] Keys: [] Functions [3]: [sum(sales#350), sum(returns#351), sum(profit#352)] Aggregate Attributes [3]: [sum(sales#350)#353, sum(returns#351)#354, sum(profit#352)#355] Results [3]: [sum(sales#350)#353, sum(returns#351)#354, sum(profit#352)#355] -(357) ProjectExecTransformer +(372) ProjectExecTransformer Output [5]: [null AS channel#356, null AS id#357, sum(sales#350)#353 AS sales#358, sum(returns#351)#354 AS returns#359, sum(profit#352)#355 AS profit#360] Input [3]: [sum(sales#350)#353, sum(returns#351)#354, sum(profit#352)#355] -(358) WholeStageCodegenTransformer (108) +(373) WholeStageCodegenTransformer (103) Input [5]: [channel#356, id#357, sales#358, returns#359, profit#360] Arguments: false -(359) ColumnarUnion +(374) ColumnarUnion Arguments: UnknownPartitioning(0) -(360) InputAdapter +(375) InputAdapter Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(361) InputIteratorTransformer +(376) InputIteratorTransformer Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(362) FlushableHashAggregateExecTransformer +(377) FlushableHashAggregateExecTransformer Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Keys [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Functions: [] Aggregate Attributes: [] Results [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(363) ProjectExecTransformer +(378) ProjectExecTransformer Output [6]: [hash(channel#42, id#43, sales#145, returns#146, profit#147, 42) AS hash_partition_key#361, channel#42, id#43, sales#145, returns#146, profit#147] Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(364) WholeStageCodegenTransformer (109) +(379) WholeStageCodegenTransformer (104) Input [6]: [hash_partition_key#361, channel#42, id#43, sales#145, returns#146, profit#147] Arguments: false -(365) VeloxResizeBatches +(380) VeloxResizeBatches Input [6]: [hash_partition_key#361, channel#42, id#43, sales#145, returns#146, profit#147] Arguments: 1024, 2147483647, 10485760 -(366) ColumnarExchange +(381) ColumnarExchange Input [6]: [hash_partition_key#361, channel#42, id#43, sales#145, returns#146, profit#147] Arguments: hashpartitioning(channel#42, id#43, sales#145, returns#146, profit#147, 1), ENSURE_REQUIREMENTS, [channel#42, id#43, sales#145, returns#146, profit#147], [plan_id=27], [shuffle_writer_type=hash] -(367) InputAdapter +(382) InputAdapter Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(368) InputIteratorTransformer +(383) InputIteratorTransformer Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(369) RegularHashAggregateExecTransformer +(384) RegularHashAggregateExecTransformer Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Keys [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Functions: [] Aggregate Attributes: [] Results [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(370) WholeStageCodegenTransformer (110) +(385) WholeStageCodegenTransformer (105) Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Arguments: false -(371) TakeOrderedAndProjectExecTransformer +(386) TakeOrderedAndProjectExecTransformer Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Arguments: 100, [channel#42 ASC NULLS FIRST, id#43 ASC NULLS FIRST], [channel#42, id#43, sales#145, returns#146, profit#147], 0 -(372) VeloxColumnarToRow +(387) VeloxColumnarToRow Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (384) -+- ^ RegularHashAggregateExecTransformer (382) - +- ^ InputIteratorTransformer (381) - +- ColumnarExchange (379) - +- VeloxResizeBatches (378) - +- ^ FlushableHashAggregateExecTransformer (376) - +- ^ ProjectExecTransformer (375) - +- ^ FilterExecTransformer (374) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (373) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#9, [id=#1] +ObjectHashAggregate (398) ++- VeloxColumnarToRow (397) + +- ColumnarExchange (396) + +- VeloxResizeBatches (395) + +- RowToVeloxColumnar (394) + +- ObjectHashAggregate (393) + +- VeloxColumnarToRow (392) + +- ^ ProjectExecTransformer (390) + +- ^ FilterExecTransformer (389) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (388) -(373) FileSourceScanExecTransformer parquet spark_catalog.default.item +(388) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct -(374) FilterExecTransformer +(389) FilterExecTransformer Input [2]: [i_item_sk#18, i_current_price#19] Arguments: ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) -(375) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#18, 42) AS _pre_19#362] +(390) ProjectExecTransformer +Output [1]: [i_item_sk#18] Input [2]: [i_item_sk#18, i_current_price#19] -(376) FlushableHashAggregateExecTransformer -Input [1]: [_pre_19#362] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_19#362, 101823, 1521109, 0, 0)] -Aggregate Attributes [1]: [buf#363] -Results [1]: [buf#364] - -(377) WholeStageCodegenTransformer (1) -Input [1]: [buf#364] +(391) WholeStageCodegenTransformer (1) +Input [1]: [i_item_sk#18] Arguments: false -(378) VeloxResizeBatches -Input [1]: [buf#364] -Arguments: 1024, 2147483647, 10485760 - -(379) ColumnarExchange -Input [1]: [buf#364] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=28], [shuffle_writer_type=hash] - -(380) InputAdapter -Input [1]: [buf#364] - -(381) InputIteratorTransformer -Input [1]: [buf#364] +(392) VeloxColumnarToRow +Input [1]: [i_item_sk#18] -(382) RegularHashAggregateExecTransformer -Input [1]: [buf#364] +(393) ObjectHashAggregate +Input [1]: [i_item_sk#18] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#365] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#365 AS bloomFilter#366] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] +Aggregate Attributes [1]: [buf#362] +Results [1]: [buf#363] -(383) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#366] -Arguments: false +(394) RowToVeloxColumnar +Input [1]: [buf#363] -(384) VeloxColumnarToRow -Input [1]: [bloomFilter#366] +(395) VeloxResizeBatches +Input [1]: [buf#363] +Arguments: 1024, 2147483647, 10485760 -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (396) -+- ^ RegularHashAggregateExecTransformer (394) - +- ^ InputIteratorTransformer (393) - +- ColumnarExchange (391) - +- VeloxResizeBatches (390) - +- ^ FlushableHashAggregateExecTransformer (388) - +- ^ ProjectExecTransformer (387) - +- ^ FilterExecTransformer (386) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (385) +(396) ColumnarExchange +Input [1]: [buf#363] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=28], [shuffle_writer_type=hash] +(397) VeloxColumnarToRow +Input [1]: [buf#363] -(385) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(398) ObjectHashAggregate +Input [1]: [buf#363] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#364] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#364 AS bloomFilter#365] + +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#10, [id=#2] +ObjectHashAggregate (409) ++- VeloxColumnarToRow (408) + +- ColumnarExchange (407) + +- VeloxResizeBatches (406) + +- RowToVeloxColumnar (405) + +- ObjectHashAggregate (404) + +- VeloxColumnarToRow (403) + +- ^ ProjectExecTransformer (401) + +- ^ FilterExecTransformer (400) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (399) + + +(399) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct -(386) FilterExecTransformer +(400) FilterExecTransformer Input [2]: [p_promo_sk#20, p_channel_tv#21] Arguments: ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) -(387) ProjectExecTransformer -Output [1]: [xxhash64(p_promo_sk#20, 42) AS _pre_20#367] +(401) ProjectExecTransformer +Output [1]: [p_promo_sk#20] Input [2]: [p_promo_sk#20, p_channel_tv#21] -(388) FlushableHashAggregateExecTransformer -Input [1]: [_pre_20#367] +(402) WholeStageCodegenTransformer (2) +Input [1]: [p_promo_sk#20] +Arguments: false + +(403) VeloxColumnarToRow +Input [1]: [p_promo_sk#20] + +(404) ObjectHashAggregate +Input [1]: [p_promo_sk#20] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_20#367, 986, 24246, 0, 0)] -Aggregate Attributes [1]: [buf#368] -Results [1]: [buf#369] +Functions [1]: [partial_bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] +Aggregate Attributes [1]: [buf#366] +Results [1]: [buf#367] -(389) WholeStageCodegenTransformer (3) -Input [1]: [buf#369] -Arguments: false +(405) RowToVeloxColumnar +Input [1]: [buf#367] -(390) VeloxResizeBatches -Input [1]: [buf#369] +(406) VeloxResizeBatches +Input [1]: [buf#367] Arguments: 1024, 2147483647, 10485760 -(391) ColumnarExchange -Input [1]: [buf#369] +(407) ColumnarExchange +Input [1]: [buf#367] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=29], [shuffle_writer_type=hash] -(392) InputAdapter -Input [1]: [buf#369] +(408) VeloxColumnarToRow +Input [1]: [buf#367] -(393) InputIteratorTransformer -Input [1]: [buf#369] - -(394) RegularHashAggregateExecTransformer -Input [1]: [buf#369] +(409) ObjectHashAggregate +Input [1]: [buf#367] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#370] -Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#370 AS bloomFilter#371] - -(395) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#371] -Arguments: false - -(396) VeloxColumnarToRow -Input [1]: [bloomFilter#371] +Functions [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#368] +Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#368 AS bloomFilter#369] Subquery:3 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (401) -+- ^ ProjectExecTransformer (399) - +- ^ FilterExecTransformer (398) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (397) +ColumnarBroadcastExchange (414) ++- ^ ProjectExecTransformer (412) + +- ^ FilterExecTransformer (411) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (410) -(397) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#22, d_date#372] +(410) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [2]: [d_date_sk#22, d_date#370] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1998-08-04), LessThanOrEqual(d_date,1998-09-03), IsNotNull(d_date_sk)] ReadSchema: struct -(398) FilterExecTransformer -Input [2]: [d_date_sk#22, d_date#372] -Arguments: (((isnotnull(d_date#372) AND (d_date#372 >= 1998-08-04)) AND (d_date#372 <= 1998-09-03)) AND isnotnull(d_date_sk#22)) +(411) FilterExecTransformer +Input [2]: [d_date_sk#22, d_date#370] +Arguments: (((isnotnull(d_date#370) AND (d_date#370 >= 1998-08-04)) AND (d_date#370 <= 1998-09-03)) AND isnotnull(d_date_sk#22)) -(399) ProjectExecTransformer +(412) ProjectExecTransformer Output [1]: [d_date_sk#22] -Input [2]: [d_date_sk#22, d_date#372] +Input [2]: [d_date_sk#22, d_date#370] -(400) WholeStageCodegenTransformer (5) +(413) WholeStageCodegenTransformer (3) Input [1]: [d_date_sk#22] Arguments: false -(401) ColumnarBroadcastExchange +(414) ColumnarBroadcastExchange Input [1]: [d_date_sk#22] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=30] -Subquery:4 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (384) -+- ^ RegularHashAggregateExecTransformer (382) - +- ^ InputIteratorTransformer (381) - +- ColumnarExchange (379) - +- VeloxResizeBatches (378) - +- ^ FlushableHashAggregateExecTransformer (376) - +- ^ ProjectExecTransformer (375) - +- ^ FilterExecTransformer (374) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (373) - - -Subquery:5 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (396) -+- ^ RegularHashAggregateExecTransformer (394) - +- ^ InputIteratorTransformer (393) - +- ColumnarExchange (391) - +- VeloxResizeBatches (390) - +- ^ FlushableHashAggregateExecTransformer (388) - +- ^ ProjectExecTransformer (387) - +- ^ FilterExecTransformer (386) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (385) - - -Subquery:6 Hosting operator id = 61 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] - -Subquery:7 Hosting operator id = 61 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] - -Subquery:8 Hosting operator id = 60 Hosting Expression = cs_sold_date_sk#53 IN dynamicpruning#8 - -Subquery:9 Hosting operator id = 60 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] - -Subquery:10 Hosting operator id = 60 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:4 Hosting operator id = 68 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] -Subquery:11 Hosting operator id = 112 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] +Subquery:5 Hosting operator id = 68 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] -Subquery:12 Hosting operator id = 112 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:6 Hosting operator id = 65 Hosting Expression = cs_sold_date_sk#53 IN dynamicpruning#8 -Subquery:13 Hosting operator id = 111 Hosting Expression = ws_sold_date_sk#94 IN dynamicpruning#8 +Subquery:7 Hosting operator id = 124 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] -Subquery:14 Hosting operator id = 111 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] +Subquery:8 Hosting operator id = 124 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] -Subquery:15 Hosting operator id = 111 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:9 Hosting operator id = 121 Hosting Expression = ws_sold_date_sk#94 IN dynamicpruning#8 -Subquery:16 Hosting operator id = 187 Hosting Expression = ws_sold_date_sk#184 IN dynamicpruning#8 +Subquery:10 Hosting operator id = 202 Hosting Expression = ws_sold_date_sk#184 IN dynamicpruning#8 -Subquery:17 Hosting operator id = 252 Hosting Expression = ss_sold_date_sk#256 IN dynamicpruning#8 +Subquery:11 Hosting operator id = 267 Hosting Expression = ss_sold_date_sk#256 IN dynamicpruning#8 -Subquery:18 Hosting operator id = 295 Hosting Expression = cs_sold_date_sk#292 IN dynamicpruning#8 +Subquery:12 Hosting operator id = 310 Hosting Expression = cs_sold_date_sk#292 IN dynamicpruning#8 diff --git a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/simplified.txt b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/simplified.txt index 31b7a3bbe69..66a2c0a4388 100644 --- a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/simplified.txt +++ b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/simplified.txt @@ -1,38 +1,38 @@ VeloxColumnarToRow TakeOrderedAndProjectExecTransformer [channel,id,sales,returns,profit] - WholeStageCodegenTransformer (110) + WholeStageCodegenTransformer (105) RegularHashAggregateExecTransformer [channel,id,sales,returns,profit] InputIteratorTransformer InputAdapter ColumnarExchange [channel,id,sales,returns,profit] #1 VeloxResizeBatches - WholeStageCodegenTransformer (109) + WholeStageCodegenTransformer (104) ProjectExecTransformer [channel,id,sales,returns,profit] FlushableHashAggregateExecTransformer [channel,id,sales,returns,profit] InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (41) + WholeStageCodegenTransformer (38) ProjectExecTransformer [channel,id,sum(sales),sum(returns),sum(profit)] RegularHashAggregateExecTransformer [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] [sum(sales),sum(returns),sum(profit),sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] #2 VeloxResizeBatches - WholeStageCodegenTransformer (40) + WholeStageCodegenTransformer (37) ProjectExecTransformer [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [channel,id,sales,returns,profit] [sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (12) ProjectExecTransformer [s_store_id,sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [s_store_id,sum,sum,isEmpty,sum,isEmpty] #3 VeloxResizeBatches - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (11) ProjectExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [s_store_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [s_store_id,ss_ext_sales_price,sr_return_amt,ss_net_profit,sr_net_loss] @@ -49,87 +49,66 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] #4 VeloxResizeBatches - WholeStageCodegenTransformer (6) + WholeStageCodegenTransformer (5) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] - FilterExecTransformer [ss_store_sk,ss_item_sk,ss_promo_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #7 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [p_promo_sk] - FilterExecTransformer [p_channel_tv,p_promo_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (5) - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_store_sk,ss_item_sk,ss_promo_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #7 VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [p_promo_sk] - FilterExecTransformer [p_channel_tv,p_promo_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] + RowToVeloxColumnar + ObjectHashAggregate [p_promo_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [p_promo_sk] + FilterExecTransformer [p_channel_tv,p_promo_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #5 + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] InputIteratorTransformer InputAdapter ColumnarExchange [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss] #8 VeloxResizeBatches - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (6) ProjectExecTransformer [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss] FilterExecTransformer [sr_item_sk,sr_ticket_number] FileSourceScanExecTransformer parquet spark_catalog.default.store_returns [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss,sr_returned_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (7) ProjectExecTransformer [i_item_sk] FilterExecTransformer [i_current_price,i_item_sk] FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (8) ProjectExecTransformer [p_promo_sk] FilterExecTransformer [p_channel_tv,p_promo_sk] FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] @@ -139,17 +118,17 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #11 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (10) FilterExecTransformer [s_store_sk] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id] - WholeStageCodegenTransformer (26) + WholeStageCodegenTransformer (24) ProjectExecTransformer [cp_catalog_page_id,sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] #12 VeloxResizeBatches - WholeStageCodegenTransformer (25) + WholeStageCodegenTransformer (23) ProjectExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [cp_catalog_page_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [cp_catalog_page_id,cs_ext_sales_price,cr_return_amount,cs_net_profit,cr_net_loss] @@ -166,20 +145,25 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] #13 VeloxResizeBatches - WholeStageCodegenTransformer (19) + WholeStageCodegenTransformer (17) ProjectExecTransformer [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] - FilterExecTransformer [cs_catalog_page_sk,cs_item_sk,cs_promo_sk] - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_catalog_page_sk,cs_item_sk,cs_promo_sk,cs_order_number,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] - ReusedSubquery [d_date_sk] #1 - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [cs_catalog_page_sk,cs_item_sk,cs_promo_sk] + ReusedSubquery [bloomFilter] #2 + ReusedSubquery [bloomFilter] #3 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (16) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_catalog_page_sk,cs_item_sk,cs_promo_sk,cs_order_number,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] + ReusedSubquery [d_date_sk] #1 InputIteratorTransformer InputAdapter ColumnarExchange [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss] #14 VeloxResizeBatches - WholeStageCodegenTransformer (20) + WholeStageCodegenTransformer (18) ProjectExecTransformer [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss] FilterExecTransformer [cr_item_sk,cr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss,cr_returned_date_sk] @@ -195,17 +179,17 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #15 - WholeStageCodegenTransformer (24) + WholeStageCodegenTransformer (22) FilterExecTransformer [cp_catalog_page_sk] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page [cp_catalog_page_sk,cp_catalog_page_id] - WholeStageCodegenTransformer (39) + WholeStageCodegenTransformer (36) ProjectExecTransformer [web_site_id,sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [web_site_id,sum,sum,isEmpty,sum,isEmpty] #16 VeloxResizeBatches - WholeStageCodegenTransformer (38) + WholeStageCodegenTransformer (35) ProjectExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [web_site_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [web_site_id,ws_ext_sales_price,wr_return_amt,ws_net_profit,wr_net_loss] @@ -222,20 +206,25 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] #17 VeloxResizeBatches - WholeStageCodegenTransformer (32) + WholeStageCodegenTransformer (29) ProjectExecTransformer [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] - FilterExecTransformer [ws_web_site_sk,ws_item_sk,ws_promo_sk] - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 - FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_web_site_sk,ws_promo_sk,ws_order_number,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] - ReusedSubquery [d_date_sk] #1 - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (3) + Filter [ws_web_site_sk,ws_item_sk,ws_promo_sk] + ReusedSubquery [bloomFilter] #2 + ReusedSubquery [bloomFilter] #3 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (28) + FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_web_site_sk,ws_promo_sk,ws_order_number,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] + ReusedSubquery [d_date_sk] #1 InputIteratorTransformer InputAdapter ColumnarExchange [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss] #18 VeloxResizeBatches - WholeStageCodegenTransformer (33) + WholeStageCodegenTransformer (30) ProjectExecTransformer [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss] FilterExecTransformer [wr_item_sk,wr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss,wr_returned_date_sk] @@ -251,17 +240,17 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #19 - WholeStageCodegenTransformer (37) + WholeStageCodegenTransformer (34) FilterExecTransformer [web_site_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_site_id] - WholeStageCodegenTransformer (79) + WholeStageCodegenTransformer (74) ProjectExecTransformer [channel,sum(sales),sum(returns),sum(profit)] RegularHashAggregateExecTransformer [channel,sum,isEmpty,sum,isEmpty,sum,isEmpty] [sum(sales),sum(returns),sum(profit),sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [channel,sum,isEmpty,sum,isEmpty,sum,isEmpty] #20 VeloxResizeBatches - WholeStageCodegenTransformer (78) + WholeStageCodegenTransformer (73) ProjectExecTransformer [channel,sum,isEmpty,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [channel,sales,returns,profit] [sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [channel,sum(sales),sum(returns),sum(profit)] @@ -270,32 +259,32 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] #21 VeloxResizeBatches - WholeStageCodegenTransformer (77) + WholeStageCodegenTransformer (72) ProjectExecTransformer [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [channel,id,sales,returns,profit] [sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (54) + WholeStageCodegenTransformer (50) ProjectExecTransformer [s_store_id,sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ReusedExchange [s_store_id,sum,sum,isEmpty,sum,isEmpty] #3 - WholeStageCodegenTransformer (67) + WholeStageCodegenTransformer (62) ProjectExecTransformer [cp_catalog_page_id,sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ReusedExchange [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] #12 - WholeStageCodegenTransformer (76) + WholeStageCodegenTransformer (71) ProjectExecTransformer [web_site_id,sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [web_site_id,sum,sum,isEmpty,sum,isEmpty] #22 VeloxResizeBatches - WholeStageCodegenTransformer (75) + WholeStageCodegenTransformer (70) ProjectExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [web_site_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [web_site_id,ws_ext_sales_price,wr_return_amt,ws_net_profit,wr_net_loss] @@ -312,7 +301,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] #23 VeloxResizeBatches - WholeStageCodegenTransformer (69) + WholeStageCodegenTransformer (64) ProjectExecTransformer [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] FilterExecTransformer [ws_web_site_sk,ws_item_sk,ws_promo_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_web_site_sk,ws_promo_sk,ws_order_number,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] @@ -332,7 +321,7 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ReusedExchange [web_site_sk,web_site_id] #19 - WholeStageCodegenTransformer (108) + WholeStageCodegenTransformer (103) ProjectExecTransformer [sum(sales),sum(returns),sum(profit)] RegularHashAggregateExecTransformer [sales,returns,profit] [sum(sales),sum(returns),sum(profit),sum,isEmpty,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [sum(sales),sum(returns),sum(profit)] @@ -341,20 +330,20 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] #24 VeloxResizeBatches - WholeStageCodegenTransformer (107) + WholeStageCodegenTransformer (102) ProjectExecTransformer [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [channel,id,sales,returns,profit] [sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (88) + WholeStageCodegenTransformer (83) ProjectExecTransformer [s_store_id,sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [s_store_id,sum,sum,isEmpty,sum,isEmpty] #25 VeloxResizeBatches - WholeStageCodegenTransformer (87) + WholeStageCodegenTransformer (82) ProjectExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [s_store_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [s_store_id,ss_ext_sales_price,sr_return_amt,ss_net_profit,sr_net_loss] @@ -371,7 +360,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] #26 VeloxResizeBatches - WholeStageCodegenTransformer (81) + WholeStageCodegenTransformer (76) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] FilterExecTransformer [ss_store_sk,ss_item_sk,ss_promo_sk] FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] @@ -391,14 +380,14 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ReusedExchange [s_store_sk,s_store_id] #11 - WholeStageCodegenTransformer (97) + WholeStageCodegenTransformer (92) ProjectExecTransformer [cp_catalog_page_id,sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] #27 VeloxResizeBatches - WholeStageCodegenTransformer (96) + WholeStageCodegenTransformer (91) ProjectExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [cp_catalog_page_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [cp_catalog_page_id,cs_ext_sales_price,cr_return_amount,cs_net_profit,cr_net_loss] @@ -415,7 +404,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] #28 VeloxResizeBatches - WholeStageCodegenTransformer (90) + WholeStageCodegenTransformer (85) ProjectExecTransformer [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] FilterExecTransformer [cs_catalog_page_sk,cs_item_sk,cs_promo_sk] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_catalog_page_sk,cs_item_sk,cs_promo_sk,cs_order_number,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] @@ -435,7 +424,7 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ReusedExchange [cp_catalog_page_sk,cp_catalog_page_id] #15 - WholeStageCodegenTransformer (106) + WholeStageCodegenTransformer (101) ProjectExecTransformer [web_site_id,sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/explain.txt index 71c967f7966..b142e8fd591 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/explain.txt @@ -1,62 +1,65 @@ == Physical Plan == -VeloxColumnarToRow (77) -+- TakeOrderedAndProjectExecTransformer (76) - +- ^ ProjectExecTransformer (74) - +- ^ RegularHashAggregateExecTransformer (73) - +- ^ InputIteratorTransformer (72) - +- ColumnarExchange (70) - +- VeloxResizeBatches (69) - +- ^ ProjectExecTransformer (67) - +- ^ FlushableHashAggregateExecTransformer (66) - +- ^ ProjectExecTransformer (65) - +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (64) - :- ^ InputIteratorTransformer (61) - : +- ColumnarBroadcastExchange (59) - : +- ^ ProjectExecTransformer (57) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (56) - : :- ^ ProjectExecTransformer (48) - : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (47) - : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (34) - : : : :- ^ InputIteratorTransformer (8) - : : : : +- ColumnarExchange (6) - : : : : +- VeloxResizeBatches (5) - : : : : +- ^ ProjectExecTransformer (3) - : : : : +- ^ FilterExecTransformer (2) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) - : : : +- ^ InputIteratorTransformer (33) - : : : +- ColumnarExchange (31) - : : : +- VeloxResizeBatches (30) - : : : +- ^ ProjectExecTransformer (28) - : : : +- ^ InputIteratorTransformer (27) - : : : +- ColumnarUnion (25) - : : : :- ^ ProjectExecTransformer (15) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (14) - : : : : :- ^ FilterExecTransformer (10) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (9) - : : : : +- ^ InputIteratorTransformer (13) - : : : : +- ReusedExchange (11) - : : : +- ^ ProjectExecTransformer (23) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (22) - : : : :- ^ FilterExecTransformer (18) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (17) - : : : +- ^ InputIteratorTransformer (21) - : : : +- ReusedExchange (19) - : : +- ^ InputIteratorTransformer (46) - : : +- ColumnarExchange (44) - : : +- VeloxResizeBatches (43) - : : +- ^ ProjectExecTransformer (41) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (40) - : : :- ^ FilterExecTransformer (36) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (35) - : : +- ^ InputIteratorTransformer (39) - : : +- ReusedExchange (37) - : +- ^ InputIteratorTransformer (55) - : +- ColumnarBroadcastExchange (53) - : +- ^ ProjectExecTransformer (51) - : +- ^ FilterExecTransformer (50) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (49) - +- ^ FilterExecTransformer (63) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (62) +VeloxColumnarToRow (82) ++- TakeOrderedAndProjectExecTransformer (81) + +- ^ ProjectExecTransformer (79) + +- ^ RegularHashAggregateExecTransformer (78) + +- ^ InputIteratorTransformer (77) + +- ColumnarExchange (75) + +- VeloxResizeBatches (74) + +- ^ ProjectExecTransformer (72) + +- ^ FlushableHashAggregateExecTransformer (71) + +- ^ ProjectExecTransformer (70) + +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (69) + :- ^ InputIteratorTransformer (66) + : +- ColumnarBroadcastExchange (64) + : +- ^ ProjectExecTransformer (62) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (61) + : :- ^ ProjectExecTransformer (53) + : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (52) + : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (39) + : : : :- ^ InputIteratorTransformer (13) + : : : : +- ColumnarExchange (11) + : : : : +- VeloxResizeBatches (10) + : : : : +- ^ ProjectExecTransformer (8) + : : : : +- ^ InputIteratorTransformer (7) + : : : : +- RowToVeloxColumnar (5) + : : : : +- * Filter (4) + : : : : +- VeloxColumnarToRow (3) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) + : : : +- ^ InputIteratorTransformer (38) + : : : +- ColumnarExchange (36) + : : : +- VeloxResizeBatches (35) + : : : +- ^ ProjectExecTransformer (33) + : : : +- ^ InputIteratorTransformer (32) + : : : +- ColumnarUnion (30) + : : : :- ^ ProjectExecTransformer (20) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (19) + : : : : :- ^ FilterExecTransformer (15) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (14) + : : : : +- ^ InputIteratorTransformer (18) + : : : : +- ReusedExchange (16) + : : : +- ^ ProjectExecTransformer (28) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (27) + : : : :- ^ FilterExecTransformer (23) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (22) + : : : +- ^ InputIteratorTransformer (26) + : : : +- ReusedExchange (24) + : : +- ^ InputIteratorTransformer (51) + : : +- ColumnarExchange (49) + : : +- VeloxResizeBatches (48) + : : +- ^ ProjectExecTransformer (46) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (45) + : : :- ^ FilterExecTransformer (41) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (40) + : : +- ^ InputIteratorTransformer (44) + : : +- ReusedExchange (42) + : +- ^ InputIteratorTransformer (60) + : +- ColumnarBroadcastExchange (58) + : +- ^ ProjectExecTransformer (56) + : +- ^ FilterExecTransformer (55) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (54) + +- ^ FilterExecTransformer (68) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (67) (1) FileSourceScanExecTransformer parquet spark_catalog.default.customer @@ -66,33 +69,49 @@ Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (2) +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Arguments: false + +(3) VeloxColumnarToRow +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(4) Filter [codegen id : 1] +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Condition : (((isnotnull(c_customer_sk#1) AND isnotnull(c_current_addr_sk#3)) AND isnotnull(c_current_cdemo_sk#2)) AND might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) + +(5) RowToVeloxColumnar +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(6) InputAdapter +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(7) InputIteratorTransformer Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -Arguments: (((isnotnull(c_customer_sk#1) AND isnotnull(c_current_addr_sk#3)) AND isnotnull(c_current_cdemo_sk#2)) AND velox_might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) -(3) ProjectExecTransformer +(8) ProjectExecTransformer Output [4]: [hash(c_customer_sk#1, 42) AS hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(4) WholeStageCodegenTransformer (3) +(9) WholeStageCodegenTransformer (3) Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: hashpartitioning(c_customer_sk#1, 1), ENSURE_REQUIREMENTS, [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [2]: [ws_bill_customer_sk#6, ws_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] @@ -100,34 +119,34 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#7), dynamicpruningexpression(ws_sol PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [2]: [ws_bill_customer_sk#6, ws_sold_date_sk#7] Arguments: isnotnull(ws_bill_customer_sk#6) -(11) ReusedExchange [Reuses operator id: 94] +(16) ReusedExchange [Reuses operator id: 98] Output [1]: [d_date_sk#9] -(12) InputAdapter +(17) InputAdapter Input [1]: [d_date_sk#9] -(13) InputIteratorTransformer +(18) InputIteratorTransformer Input [1]: [d_date_sk#9] -(14) BroadcastHashJoinExecTransformer +(19) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#7] Right keys [1]: [d_date_sk#9] Join type: Inner Join condition: None -(15) ProjectExecTransformer +(20) ProjectExecTransformer Output [1]: [ws_bill_customer_sk#6 AS customer_sk#10] Input [3]: [ws_bill_customer_sk#6, ws_sold_date_sk#7, d_date_sk#9] -(16) WholeStageCodegenTransformer (6) +(21) WholeStageCodegenTransformer (6) Input [1]: [customer_sk#10] Arguments: false -(17) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(22) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [2]: [cs_ship_customer_sk#11, cs_sold_date_sk#12] Batched: true Location: InMemoryFileIndex [] @@ -135,71 +154,71 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#12), dynamicpruningexpression(cs_so PushedFilters: [IsNotNull(cs_ship_customer_sk)] ReadSchema: struct -(18) FilterExecTransformer +(23) FilterExecTransformer Input [2]: [cs_ship_customer_sk#11, cs_sold_date_sk#12] Arguments: isnotnull(cs_ship_customer_sk#11) -(19) ReusedExchange [Reuses operator id: 94] +(24) ReusedExchange [Reuses operator id: 98] Output [1]: [d_date_sk#13] -(20) InputAdapter +(25) InputAdapter Input [1]: [d_date_sk#13] -(21) InputIteratorTransformer +(26) InputIteratorTransformer Input [1]: [d_date_sk#13] -(22) BroadcastHashJoinExecTransformer +(27) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#12] Right keys [1]: [d_date_sk#13] Join type: Inner Join condition: None -(23) ProjectExecTransformer +(28) ProjectExecTransformer Output [1]: [cs_ship_customer_sk#11 AS customer_sk#14] Input [3]: [cs_ship_customer_sk#11, cs_sold_date_sk#12, d_date_sk#13] -(24) WholeStageCodegenTransformer (9) +(29) WholeStageCodegenTransformer (9) Input [1]: [customer_sk#14] Arguments: false -(25) ColumnarUnion +(30) ColumnarUnion Arguments: UnknownPartitioning(0) -(26) InputAdapter +(31) InputAdapter Input [1]: [customer_sk#10] -(27) InputIteratorTransformer +(32) InputIteratorTransformer Input [1]: [customer_sk#10] -(28) ProjectExecTransformer +(33) ProjectExecTransformer Output [2]: [hash(customer_sk#10, 42) AS hash_partition_key#15, customer_sk#10] Input [1]: [customer_sk#10] -(29) WholeStageCodegenTransformer (10) +(34) WholeStageCodegenTransformer (10) Input [2]: [hash_partition_key#15, customer_sk#10] Arguments: false -(30) VeloxResizeBatches +(35) VeloxResizeBatches Input [2]: [hash_partition_key#15, customer_sk#10] Arguments: 1024, 2147483647, 10485760 -(31) ColumnarExchange +(36) ColumnarExchange Input [2]: [hash_partition_key#15, customer_sk#10] Arguments: hashpartitioning(customer_sk#10, 1), ENSURE_REQUIREMENTS, [customer_sk#10], [plan_id=3], [shuffle_writer_type=hash] -(32) InputAdapter +(37) InputAdapter Input [1]: [customer_sk#10] -(33) InputIteratorTransformer +(38) InputIteratorTransformer Input [1]: [customer_sk#10] -(34) ShuffledHashJoinExecTransformer +(39) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [customer_sk#10] Join type: LeftSemi Join condition: None -(35) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(40) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [2]: [ss_customer_sk#16, ss_sold_date_sk#17] Batched: true Location: InMemoryFileIndex [] @@ -207,294 +226,279 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#17), dynamicpruningexpression(ss_so PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct -(36) FilterExecTransformer +(41) FilterExecTransformer Input [2]: [ss_customer_sk#16, ss_sold_date_sk#17] Arguments: isnotnull(ss_customer_sk#16) -(37) ReusedExchange [Reuses operator id: 94] +(42) ReusedExchange [Reuses operator id: 98] Output [1]: [d_date_sk#18] -(38) InputAdapter +(43) InputAdapter Input [1]: [d_date_sk#18] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [1]: [d_date_sk#18] -(40) BroadcastHashJoinExecTransformer +(45) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#17] Right keys [1]: [d_date_sk#18] Join type: Inner Join condition: None -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [2]: [hash(ss_customer_sk#16, 42) AS hash_partition_key#19, ss_customer_sk#16 AS customer_sk#20] Input [3]: [ss_customer_sk#16, ss_sold_date_sk#17, d_date_sk#18] -(42) WholeStageCodegenTransformer (13) +(47) WholeStageCodegenTransformer (13) Input [2]: [hash_partition_key#19, customer_sk#20] Arguments: false -(43) VeloxResizeBatches +(48) VeloxResizeBatches Input [2]: [hash_partition_key#19, customer_sk#20] Arguments: 1024, 2147483647, 10485760 -(44) ColumnarExchange +(49) ColumnarExchange Input [2]: [hash_partition_key#19, customer_sk#20] Arguments: hashpartitioning(customer_sk#20, 1), ENSURE_REQUIREMENTS, [customer_sk#20], [plan_id=4], [shuffle_writer_type=hash] -(45) InputAdapter +(50) InputAdapter Input [1]: [customer_sk#20] -(46) InputIteratorTransformer +(51) InputIteratorTransformer Input [1]: [customer_sk#20] -(47) ShuffledHashJoinExecTransformer +(52) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [customer_sk#20] Join type: LeftSemi Join condition: None -(48) ProjectExecTransformer +(53) ProjectExecTransformer Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(49) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(54) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#21, ca_county#22] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [2]: [ca_address_sk#21, ca_county#22] Arguments: (ca_county#22 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#21)) -(51) ProjectExecTransformer +(56) ProjectExecTransformer Output [1]: [ca_address_sk#21] Input [2]: [ca_address_sk#21, ca_county#22] -(52) WholeStageCodegenTransformer (14) +(57) WholeStageCodegenTransformer (14) Input [1]: [ca_address_sk#21] Arguments: false -(53) ColumnarBroadcastExchange +(58) ColumnarBroadcastExchange Input [1]: [ca_address_sk#21] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(54) InputAdapter +(59) InputAdapter Input [1]: [ca_address_sk#21] -(55) InputIteratorTransformer +(60) InputIteratorTransformer Input [1]: [ca_address_sk#21] -(56) BroadcastHashJoinExecTransformer +(61) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#3] Right keys [1]: [ca_address_sk#21] Join type: Inner Join condition: None -(57) ProjectExecTransformer +(62) ProjectExecTransformer Output [1]: [c_current_cdemo_sk#2] Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#21] -(58) WholeStageCodegenTransformer (15) +(63) WholeStageCodegenTransformer (15) Input [1]: [c_current_cdemo_sk#2] Arguments: false -(59) ColumnarBroadcastExchange +(64) ColumnarBroadcastExchange Input [1]: [c_current_cdemo_sk#2] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(60) InputAdapter +(65) InputAdapter Input [1]: [c_current_cdemo_sk#2] -(61) InputIteratorTransformer +(66) InputIteratorTransformer Input [1]: [c_current_cdemo_sk#2] -(62) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(67) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [9]: [cd_demo_sk#23, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct -(63) FilterExecTransformer +(68) FilterExecTransformer Input [9]: [cd_demo_sk#23, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Arguments: isnotnull(cd_demo_sk#23) -(64) BroadcastHashJoinExecTransformer +(69) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#2] Right keys [1]: [cd_demo_sk#23] Join type: Inner Join condition: None -(65) ProjectExecTransformer +(70) ProjectExecTransformer Output [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#23, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] -(66) FlushableHashAggregateExecTransformer +(71) FlushableHashAggregateExecTransformer Input [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Keys [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Functions [1]: [partial_count(1)] Aggregate Attributes [1]: [count#32] Results [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] -(67) ProjectExecTransformer +(72) ProjectExecTransformer Output [10]: [hash(cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, 42) AS hash_partition_key#34, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] -(68) WholeStageCodegenTransformer (16) +(73) WholeStageCodegenTransformer (16) Input [10]: [hash_partition_key#34, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] Arguments: false -(69) VeloxResizeBatches +(74) VeloxResizeBatches Input [10]: [hash_partition_key#34, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] Arguments: 1024, 2147483647, 10485760 -(70) ColumnarExchange +(75) ColumnarExchange Input [10]: [hash_partition_key#34, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] Arguments: hashpartitioning(cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, 1), ENSURE_REQUIREMENTS, [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33], [plan_id=7], [shuffle_writer_type=hash] -(71) InputAdapter +(76) InputAdapter Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] -(72) InputIteratorTransformer +(77) InputIteratorTransformer Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] -(73) RegularHashAggregateExecTransformer +(78) RegularHashAggregateExecTransformer Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#33] Keys [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31] Functions [1]: [count(1)] Aggregate Attributes [1]: [count(1)#35] Results [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count(1)#35] -(74) ProjectExecTransformer +(79) ProjectExecTransformer Output [14]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, count(1)#35 AS cnt1#36, cd_purchase_estimate#27, count(1)#35 AS cnt2#37, cd_credit_rating#28, count(1)#35 AS cnt3#38, cd_dep_count#29, count(1)#35 AS cnt4#39, cd_dep_employed_count#30, count(1)#35 AS cnt5#40, cd_dep_college_count#31, count(1)#35 AS cnt6#41] Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count(1)#35] -(75) WholeStageCodegenTransformer (17) +(80) WholeStageCodegenTransformer (17) Input [14]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cnt1#36, cd_purchase_estimate#27, cnt2#37, cd_credit_rating#28, cnt3#38, cd_dep_count#29, cnt4#39, cd_dep_employed_count#30, cnt5#40, cd_dep_college_count#31, cnt6#41] Arguments: false -(76) TakeOrderedAndProjectExecTransformer +(81) TakeOrderedAndProjectExecTransformer Input [14]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cnt1#36, cd_purchase_estimate#27, cnt2#37, cd_credit_rating#28, cnt3#38, cd_dep_count#29, cnt4#39, cd_dep_employed_count#30, cnt5#40, cd_dep_college_count#31, cnt6#41] Arguments: 100, [cd_gender#24 ASC NULLS FIRST, cd_marital_status#25 ASC NULLS FIRST, cd_education_status#26 ASC NULLS FIRST, cd_purchase_estimate#27 ASC NULLS FIRST, cd_credit_rating#28 ASC NULLS FIRST, cd_dep_count#29 ASC NULLS FIRST, cd_dep_employed_count#30 ASC NULLS FIRST, cd_dep_college_count#31 ASC NULLS FIRST], [cd_gender#24, cd_marital_status#25, cd_education_status#26, cnt1#36, cd_purchase_estimate#27, cnt2#37, cd_credit_rating#28, cnt3#38, cd_dep_count#29, cnt4#39, cd_dep_employed_count#30, cnt5#40, cd_dep_college_count#31, cnt6#41], 0 -(77) VeloxColumnarToRow +(82) VeloxColumnarToRow Input [14]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cnt1#36, cd_purchase_estimate#27, cnt2#37, cd_credit_rating#28, cnt3#38, cd_dep_count#29, cnt4#39, cd_dep_employed_count#30, cnt5#40, cd_dep_college_count#31, cnt6#41] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (89) -+- ^ RegularHashAggregateExecTransformer (87) - +- ^ InputIteratorTransformer (86) - +- ColumnarExchange (84) - +- VeloxResizeBatches (83) - +- ^ FlushableHashAggregateExecTransformer (81) - +- ^ ProjectExecTransformer (80) - +- ^ FilterExecTransformer (79) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (78) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#4, [id=#1] +ObjectHashAggregate (93) ++- VeloxColumnarToRow (92) + +- ColumnarExchange (91) + +- VeloxResizeBatches (90) + +- RowToVeloxColumnar (89) + +- ObjectHashAggregate (88) + +- VeloxColumnarToRow (87) + +- ^ ProjectExecTransformer (85) + +- ^ FilterExecTransformer (84) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (83) -(78) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(83) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#21, ca_county#22] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(79) FilterExecTransformer +(84) FilterExecTransformer Input [2]: [ca_address_sk#21, ca_county#22] Arguments: (ca_county#22 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#21)) -(80) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#21, 42) AS _pre_1#42] +(85) ProjectExecTransformer +Output [1]: [ca_address_sk#21] Input [2]: [ca_address_sk#21, ca_county#22] -(81) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#42] +(86) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#21] +Arguments: false + +(87) VeloxColumnarToRow +Input [1]: [ca_address_sk#21] + +(88) ObjectHashAggregate +Input [1]: [ca_address_sk#21] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#42, 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [buf#43] -Results [1]: [buf#44] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [buf#42] +Results [1]: [buf#43] -(82) WholeStageCodegenTransformer (1) -Input [1]: [buf#44] -Arguments: false +(89) RowToVeloxColumnar +Input [1]: [buf#43] -(83) VeloxResizeBatches -Input [1]: [buf#44] +(90) VeloxResizeBatches +Input [1]: [buf#43] Arguments: 1024, 2147483647, 10485760 -(84) ColumnarExchange -Input [1]: [buf#44] +(91) ColumnarExchange +Input [1]: [buf#43] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8], [shuffle_writer_type=hash] -(85) InputAdapter -Input [1]: [buf#44] - -(86) InputIteratorTransformer -Input [1]: [buf#44] +(92) VeloxColumnarToRow +Input [1]: [buf#43] -(87) RegularHashAggregateExecTransformer -Input [1]: [buf#44] +(93) ObjectHashAggregate +Input [1]: [buf#43] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#45] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#45 AS bloomFilter#46] - -(88) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#46] -Arguments: false - -(89) VeloxColumnarToRow -Input [1]: [bloomFilter#46] - -Subquery:2 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (89) -+- ^ RegularHashAggregateExecTransformer (87) - +- ^ InputIteratorTransformer (86) - +- ColumnarExchange (84) - +- VeloxResizeBatches (83) - +- ^ FlushableHashAggregateExecTransformer (81) - +- ^ ProjectExecTransformer (80) - +- ^ FilterExecTransformer (79) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (78) - +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#44] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#44 AS bloomFilter#45] -Subquery:3 Hosting operator id = 9 Hosting Expression = ws_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (94) -+- ^ ProjectExecTransformer (92) - +- ^ FilterExecTransformer (91) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (90) +Subquery:2 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#7 IN dynamicpruning#8 +ColumnarBroadcastExchange (98) ++- ^ ProjectExecTransformer (96) + +- ^ FilterExecTransformer (95) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (94) -(90) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [3]: [d_date_sk#9, d_year#47, d_moy#48] +(94) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [3]: [d_date_sk#9, d_year#46, d_moy#47] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,7), IsNotNull(d_date_sk)] ReadSchema: struct -(91) FilterExecTransformer -Input [3]: [d_date_sk#9, d_year#47, d_moy#48] -Arguments: (((((isnotnull(d_year#47) AND isnotnull(d_moy#48)) AND (d_year#47 = 2002)) AND (d_moy#48 >= 4)) AND (d_moy#48 <= 7)) AND isnotnull(d_date_sk#9)) +(95) FilterExecTransformer +Input [3]: [d_date_sk#9, d_year#46, d_moy#47] +Arguments: (((((isnotnull(d_year#46) AND isnotnull(d_moy#47)) AND (d_year#46 = 2002)) AND (d_moy#47 >= 4)) AND (d_moy#47 <= 7)) AND isnotnull(d_date_sk#9)) -(92) ProjectExecTransformer +(96) ProjectExecTransformer Output [1]: [d_date_sk#9] -Input [3]: [d_date_sk#9, d_year#47, d_moy#48] +Input [3]: [d_date_sk#9, d_year#46, d_moy#47] -(93) WholeStageCodegenTransformer (4) +(97) WholeStageCodegenTransformer (4) Input [1]: [d_date_sk#9] Arguments: false -(94) ColumnarBroadcastExchange +(98) ColumnarBroadcastExchange Input [1]: [d_date_sk#9] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:4 Hosting operator id = 17 Hosting Expression = cs_sold_date_sk#12 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#12 IN dynamicpruning#8 -Subquery:5 Hosting operator id = 35 Hosting Expression = ss_sold_date_sk#17 IN dynamicpruning#8 +Subquery:4 Hosting operator id = 40 Hosting Expression = ss_sold_date_sk#17 IN dynamicpruning#8 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/simplified.txt index 3b21b6e242a..ab9985e1fa0 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q10.sf100/simplified.txt @@ -27,34 +27,27 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (3) ProjectExecTransformer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - FilterExecTransformer [c_customer_sk,c_current_addr_sk,c_current_cdemo_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] - FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [c_customer_sk,c_current_addr_sk,c_current_cdemo_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_county,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] InputIteratorTransformer InputAdapter ColumnarExchange [customer_sk] #5 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/explain.txt index 186fa676711..306fb9e48e1 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/explain.txt @@ -1,66 +1,70 @@ == Physical Plan == -VeloxColumnarToRow (81) -+- TakeOrderedAndProjectExecTransformer (80) - +- ^ ProjectExecTransformer (78) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (77) - :- ^ ProjectExecTransformer (36) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (35) - : :- ^ ProjectExecTransformer (27) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (26) - : : :- ^ ProjectExecTransformer (19) - : : : +- ^ RegularHashAggregateExecTransformer (18) - : : : +- ^ InputIteratorTransformer (17) - : : : +- ColumnarExchange (15) - : : : +- VeloxResizeBatches (14) - : : : +- ^ ProjectExecTransformer (12) - : : : +- ^ FlushableHashAggregateExecTransformer (11) - : : : +- ^ ProjectExecTransformer (10) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (9) +VeloxColumnarToRow (85) ++- TakeOrderedAndProjectExecTransformer (84) + +- ^ ProjectExecTransformer (82) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (81) + :- ^ ProjectExecTransformer (38) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) + : :- ^ ProjectExecTransformer (29) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (28) + : : :- ^ ProjectExecTransformer (21) + : : : +- ^ RegularHashAggregateExecTransformer (20) + : : : +- ^ InputIteratorTransformer (19) + : : : +- ColumnarExchange (17) + : : : +- VeloxResizeBatches (16) + : : : +- ^ ProjectExecTransformer (14) + : : : +- ^ FlushableHashAggregateExecTransformer (13) + : : : +- ^ ProjectExecTransformer (12) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (11) : : : :- ^ FilterExecTransformer (2) : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : +- ^ InputIteratorTransformer (8) - : : : +- ColumnarBroadcastExchange (6) - : : : +- ^ FilterExecTransformer (4) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (3) - : : +- ^ InputIteratorTransformer (25) - : : +- ColumnarBroadcastExchange (23) - : : +- ^ FilterExecTransformer (21) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (20) - : +- ^ InputIteratorTransformer (34) - : +- ColumnarBroadcastExchange (32) - : +- ^ ProjectExecTransformer (30) - : +- ^ FilterExecTransformer (29) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (28) - +- ^ InputIteratorTransformer (76) - +- ColumnarBroadcastExchange (74) - +- ^ ProjectExecTransformer (72) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (71) - :- ^ ProjectExecTransformer (63) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) - : :- ^ ProjectExecTransformer (55) - : : +- ^ RegularHashAggregateExecTransformer (54) - : : +- ^ InputIteratorTransformer (53) - : : +- ColumnarExchange (51) - : : +- VeloxResizeBatches (50) - : : +- ^ ProjectExecTransformer (48) - : : +- ^ FlushableHashAggregateExecTransformer (47) - : : +- ^ ProjectExecTransformer (46) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (45) - : : :- ^ FilterExecTransformer (38) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (37) - : : +- ^ InputIteratorTransformer (44) - : : +- ColumnarBroadcastExchange (42) - : : +- ^ FilterExecTransformer (40) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (39) - : +- ^ InputIteratorTransformer (61) - : +- ColumnarBroadcastExchange (59) - : +- ^ FilterExecTransformer (57) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (56) - +- ^ InputIteratorTransformer (70) - +- ColumnarBroadcastExchange (68) - +- ^ ProjectExecTransformer (66) - +- ^ FilterExecTransformer (65) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (64) + : : : +- ^ InputIteratorTransformer (10) + : : : +- ColumnarBroadcastExchange (8) + : : : +- RowToVeloxColumnar (7) + : : : +- * Filter (6) + : : : +- VeloxColumnarToRow (5) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (3) + : : +- ^ InputIteratorTransformer (27) + : : +- ColumnarBroadcastExchange (25) + : : +- ^ FilterExecTransformer (23) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (22) + : +- ^ InputIteratorTransformer (36) + : +- ColumnarBroadcastExchange (34) + : +- ^ ProjectExecTransformer (32) + : +- ^ FilterExecTransformer (31) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (30) + +- ^ InputIteratorTransformer (80) + +- ColumnarBroadcastExchange (78) + +- ^ ProjectExecTransformer (76) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (75) + :- ^ ProjectExecTransformer (67) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (66) + : :- ^ ProjectExecTransformer (59) + : : +- ^ RegularHashAggregateExecTransformer (58) + : : +- ^ InputIteratorTransformer (57) + : : +- ColumnarExchange (55) + : : +- VeloxResizeBatches (54) + : : +- ^ ProjectExecTransformer (52) + : : +- ^ FlushableHashAggregateExecTransformer (51) + : : +- ^ ProjectExecTransformer (50) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (49) + : : :- ^ FilterExecTransformer (40) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (39) + : : +- ^ InputIteratorTransformer (48) + : : +- ColumnarBroadcastExchange (46) + : : +- RowToVeloxColumnar (45) + : : +- * Filter (44) + : : +- VeloxColumnarToRow (43) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (41) + : +- ^ InputIteratorTransformer (65) + : +- ColumnarBroadcastExchange (63) + : +- ^ FilterExecTransformer (61) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (60) + +- ^ InputIteratorTransformer (74) + +- ColumnarBroadcastExchange (72) + +- ^ ProjectExecTransformer (70) + +- ^ FilterExecTransformer (69) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (68) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -82,149 +86,155 @@ Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(4) FilterExecTransformer +(4) WholeStageCodegenTransformer (2) Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND velox_might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(d_week_seq#5, 42))) +Arguments: false -(5) WholeStageCodegenTransformer (3) +(5) VeloxColumnarToRow +Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] + +(6) Filter [codegen id : 1] +Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] +Condition : ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(d_week_seq#5, 42))) + +(7) RowToVeloxColumnar Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: false -(6) ColumnarBroadcastExchange +(8) ColumnarBroadcastExchange Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] -(7) InputAdapter +(9) InputAdapter Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -(8) InputIteratorTransformer +(10) InputIteratorTransformer Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -(9) BroadcastHashJoinExecTransformer +(11) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#3] Right keys [1]: [d_date_sk#4] Join type: Inner Join condition: None -(10) ProjectExecTransformer +(12) ProjectExecTransformer Output [9]: [ss_store_sk#1, d_week_seq#5, UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END) AS _pre_1#8, UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END) AS _pre_2#9, UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END) AS _pre_3#10, UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END) AS _pre_4#11, UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END) AS _pre_5#12, UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END) AS _pre_6#13, UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END) AS _pre_7#14] Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_week_seq#5, d_day_name#6] -(11) FlushableHashAggregateExecTransformer +(13) FlushableHashAggregateExecTransformer Input [9]: [ss_store_sk#1, d_week_seq#5, _pre_1#8, _pre_2#9, _pre_3#10, _pre_4#11, _pre_5#12, _pre_6#13, _pre_7#14] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [partial_sum(_pre_1#8), partial_sum(_pre_2#9), partial_sum(_pre_3#10), partial_sum(_pre_4#11), partial_sum(_pre_5#12), partial_sum(_pre_6#13), partial_sum(_pre_7#14)] Aggregate Attributes [7]: [sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21] Results [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(12) ProjectExecTransformer +(14) ProjectExecTransformer Output [10]: [hash(d_week_seq#5, ss_store_sk#1, 42) AS hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(13) WholeStageCodegenTransformer (4) +(15) WholeStageCodegenTransformer (3) Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: false -(14) VeloxResizeBatches +(16) VeloxResizeBatches Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: 1024, 2147483647, 10485760 -(15) ColumnarExchange +(17) ColumnarExchange Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 1), ENSURE_REQUIREMENTS, [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28], [plan_id=3], [shuffle_writer_type=hash] -(16) InputAdapter +(18) InputAdapter Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(17) InputIteratorTransformer +(19) InputIteratorTransformer Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(18) RegularHashAggregateExecTransformer +(20) RegularHashAggregateExecTransformer Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] Results [9]: [d_week_seq#5, ss_store_sk#1, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] -(19) ProjectExecTransformer +(21) ProjectExecTransformer Output [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30,17,2) AS sun_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31,17,2) AS mon_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32,17,2) AS tue_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33,17,2) AS wed_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34,17,2) AS thu_sales#41, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35,17,2) AS fri_sales#42, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36,17,2) AS sat_sales#43] Input [9]: [d_week_seq#5, ss_store_sk#1, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] -(20) FileSourceScanExecTransformer parquet spark_catalog.default.store +(22) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct -(21) FilterExecTransformer +(23) FilterExecTransformer Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: (isnotnull(s_store_sk#44) AND isnotnull(s_store_id#45)) -(22) WholeStageCodegenTransformer (5) +(24) WholeStageCodegenTransformer (4) Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: false -(23) ColumnarBroadcastExchange +(25) ColumnarBroadcastExchange Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] -(24) InputAdapter +(26) InputAdapter Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] -(25) InputIteratorTransformer +(27) InputIteratorTransformer Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] -(26) BroadcastHashJoinExecTransformer +(28) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#1] Right keys [1]: [s_store_sk#44] Join type: Inner Join condition: None -(27) ProjectExecTransformer +(29) ProjectExecTransformer Output [10]: [d_week_seq#5, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_id#45, s_store_name#46] Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_sk#44, s_store_id#45, s_store_name#46] -(28) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(30) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#47, d_week_seq#48] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1185), LessThanOrEqual(d_month_seq,1196), IsNotNull(d_week_seq)] ReadSchema: struct -(29) FilterExecTransformer +(31) FilterExecTransformer Input [2]: [d_month_seq#47, d_week_seq#48] Arguments: (((isnotnull(d_month_seq#47) AND (d_month_seq#47 >= 1185)) AND (d_month_seq#47 <= 1196)) AND isnotnull(d_week_seq#48)) -(30) ProjectExecTransformer +(32) ProjectExecTransformer Output [1]: [d_week_seq#48] Input [2]: [d_month_seq#47, d_week_seq#48] -(31) WholeStageCodegenTransformer (6) +(33) WholeStageCodegenTransformer (5) Input [1]: [d_week_seq#48] Arguments: false -(32) ColumnarBroadcastExchange +(34) ColumnarBroadcastExchange Input [1]: [d_week_seq#48] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(33) InputAdapter +(35) InputAdapter Input [1]: [d_week_seq#48] -(34) InputIteratorTransformer +(36) InputIteratorTransformer Input [1]: [d_week_seq#48] -(35) BroadcastHashJoinExecTransformer +(37) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#5] Right keys [1]: [d_week_seq#48] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(38) ProjectExecTransformer Output [10]: [s_store_name#46 AS s_store_name1#49, d_week_seq#5 AS d_week_seq1#50, s_store_id#45 AS s_store_id1#51, sun_sales#37 AS sun_sales1#52, mon_sales#38 AS mon_sales1#53, tue_sales#39 AS tue_sales1#54, wed_sales#40 AS wed_sales1#55, thu_sales#41 AS thu_sales1#56, fri_sales#42 AS fri_sales1#57, sat_sales#43 AS sat_sales1#58] Input [11]: [d_week_seq#5, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_id#45, s_store_name#46, d_week_seq#48] -(37) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(39) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [3]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61] Batched: true Location: InMemoryFileIndex [] @@ -232,350 +242,326 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#61)] PushedFilters: [IsNotNull(ss_store_sk)] ReadSchema: struct -(38) FilterExecTransformer +(40) FilterExecTransformer Input [3]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61] Arguments: isnotnull(ss_store_sk#59) -(39) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(41) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(40) FilterExecTransformer +(42) WholeStageCodegenTransformer (7) Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -Arguments: ((isnotnull(d_date_sk#62) AND isnotnull(d_week_seq#63)) AND velox_might_contain(Subquery scalar-subquery#65, [id=#6], xxhash64(d_week_seq#63, 42))) +Arguments: false -(41) WholeStageCodegenTransformer (9) +(43) VeloxColumnarToRow +Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] + +(44) Filter [codegen id : 2] +Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] +Condition : ((isnotnull(d_date_sk#62) AND isnotnull(d_week_seq#63)) AND might_contain(Subquery scalar-subquery#65, [id=#6], xxhash64(d_week_seq#63, 42))) + +(45) RowToVeloxColumnar Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -Arguments: false -(42) ColumnarBroadcastExchange +(46) ColumnarBroadcastExchange Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] -(43) InputAdapter +(47) InputAdapter Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -(44) InputIteratorTransformer +(48) InputIteratorTransformer Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -(45) BroadcastHashJoinExecTransformer +(49) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#61] Right keys [1]: [d_date_sk#62] Join type: Inner Join condition: None -(46) ProjectExecTransformer +(50) ProjectExecTransformer Output [8]: [ss_store_sk#59, d_week_seq#63, UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END) AS _pre_8#66, UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END) AS _pre_9#67, UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END) AS _pre_10#68, UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END) AS _pre_11#69, UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END) AS _pre_12#70, UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END) AS _pre_13#71] Input [6]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61, d_date_sk#62, d_week_seq#63, d_day_name#64] -(47) FlushableHashAggregateExecTransformer +(51) FlushableHashAggregateExecTransformer Input [8]: [ss_store_sk#59, d_week_seq#63, _pre_8#66, _pre_9#67, _pre_10#68, _pre_11#69, _pre_12#70, _pre_13#71] Keys [2]: [d_week_seq#63, ss_store_sk#59] Functions [6]: [partial_sum(_pre_8#66), partial_sum(_pre_9#67), partial_sum(_pre_10#68), partial_sum(_pre_11#69), partial_sum(_pre_12#70), partial_sum(_pre_13#71)] Aggregate Attributes [6]: [sum#72, sum#73, sum#74, sum#75, sum#76, sum#77] Results [8]: [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] -(48) ProjectExecTransformer +(52) ProjectExecTransformer Output [9]: [hash(d_week_seq#63, ss_store_sk#59, 42) AS hash_partition_key#84, d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] Input [8]: [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] -(49) WholeStageCodegenTransformer (10) +(53) WholeStageCodegenTransformer (8) Input [9]: [hash_partition_key#84, d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] Arguments: false -(50) VeloxResizeBatches +(54) VeloxResizeBatches Input [9]: [hash_partition_key#84, d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] Arguments: 1024, 2147483647, 10485760 -(51) ColumnarExchange +(55) ColumnarExchange Input [9]: [hash_partition_key#84, d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] Arguments: hashpartitioning(d_week_seq#63, ss_store_sk#59, 1), ENSURE_REQUIREMENTS, [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83], [plan_id=8], [shuffle_writer_type=hash] -(52) InputAdapter +(56) InputAdapter Input [8]: [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] -(53) InputIteratorTransformer +(57) InputIteratorTransformer Input [8]: [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] -(54) RegularHashAggregateExecTransformer +(58) RegularHashAggregateExecTransformer Input [8]: [d_week_seq#63, ss_store_sk#59, sum#78, sum#79, sum#80, sum#81, sum#82, sum#83] Keys [2]: [d_week_seq#63, ss_store_sk#59] Functions [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))] Aggregate Attributes [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] Results [8]: [d_week_seq#63, ss_store_sk#59, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] -(55) ProjectExecTransformer +(59) ProjectExecTransformer Output [8]: [d_week_seq#63, ss_store_sk#59, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30,17,2) AS sun_sales#85, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31,17,2) AS mon_sales#86, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33,17,2) AS wed_sales#87, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34,17,2) AS thu_sales#88, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35,17,2) AS fri_sales#89, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36,17,2) AS sat_sales#90] Input [8]: [d_week_seq#63, ss_store_sk#59, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] -(56) FileSourceScanExecTransformer parquet spark_catalog.default.store +(60) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [2]: [s_store_sk#91, s_store_id#92] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct -(57) FilterExecTransformer +(61) FilterExecTransformer Input [2]: [s_store_sk#91, s_store_id#92] Arguments: (isnotnull(s_store_sk#91) AND isnotnull(s_store_id#92)) -(58) WholeStageCodegenTransformer (11) +(62) WholeStageCodegenTransformer (9) Input [2]: [s_store_sk#91, s_store_id#92] Arguments: false -(59) ColumnarBroadcastExchange +(63) ColumnarBroadcastExchange Input [2]: [s_store_sk#91, s_store_id#92] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] -(60) InputAdapter +(64) InputAdapter Input [2]: [s_store_sk#91, s_store_id#92] -(61) InputIteratorTransformer +(65) InputIteratorTransformer Input [2]: [s_store_sk#91, s_store_id#92] -(62) BroadcastHashJoinExecTransformer +(66) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#59] Right keys [1]: [s_store_sk#91] Join type: Inner Join condition: None -(63) ProjectExecTransformer +(67) ProjectExecTransformer Output [8]: [d_week_seq#63, sun_sales#85, mon_sales#86, wed_sales#87, thu_sales#88, fri_sales#89, sat_sales#90, s_store_id#92] Input [10]: [d_week_seq#63, ss_store_sk#59, sun_sales#85, mon_sales#86, wed_sales#87, thu_sales#88, fri_sales#89, sat_sales#90, s_store_sk#91, s_store_id#92] -(64) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(68) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#93, d_week_seq#94] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1197), LessThanOrEqual(d_month_seq,1208), IsNotNull(d_week_seq)] ReadSchema: struct -(65) FilterExecTransformer +(69) FilterExecTransformer Input [2]: [d_month_seq#93, d_week_seq#94] Arguments: (((isnotnull(d_month_seq#93) AND (d_month_seq#93 >= 1197)) AND (d_month_seq#93 <= 1208)) AND isnotnull(d_week_seq#94)) -(66) ProjectExecTransformer +(70) ProjectExecTransformer Output [1]: [d_week_seq#94] Input [2]: [d_month_seq#93, d_week_seq#94] -(67) WholeStageCodegenTransformer (12) +(71) WholeStageCodegenTransformer (10) Input [1]: [d_week_seq#94] Arguments: false -(68) ColumnarBroadcastExchange +(72) ColumnarBroadcastExchange Input [1]: [d_week_seq#94] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -(69) InputAdapter +(73) InputAdapter Input [1]: [d_week_seq#94] -(70) InputIteratorTransformer +(74) InputIteratorTransformer Input [1]: [d_week_seq#94] -(71) BroadcastHashJoinExecTransformer +(75) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#63] Right keys [1]: [d_week_seq#94] Join type: Inner Join condition: None -(72) ProjectExecTransformer +(76) ProjectExecTransformer Output [8]: [d_week_seq#63 AS d_week_seq2#95, s_store_id#92 AS s_store_id2#96, sun_sales#85 AS sun_sales2#97, mon_sales#86 AS mon_sales2#98, wed_sales#87 AS wed_sales2#99, thu_sales#88 AS thu_sales2#100, fri_sales#89 AS fri_sales2#101, sat_sales#90 AS sat_sales2#102] Input [9]: [d_week_seq#63, sun_sales#85, mon_sales#86, wed_sales#87, thu_sales#88, fri_sales#89, sat_sales#90, s_store_id#92, d_week_seq#94] -(73) WholeStageCodegenTransformer (13) +(77) WholeStageCodegenTransformer (11) Input [8]: [d_week_seq2#95, s_store_id2#96, sun_sales2#97, mon_sales2#98, wed_sales2#99, thu_sales2#100, fri_sales2#101, sat_sales2#102] Arguments: false -(74) ColumnarBroadcastExchange +(78) ColumnarBroadcastExchange Input [8]: [d_week_seq2#95, s_store_id2#96, sun_sales2#97, mon_sales2#98, wed_sales2#99, thu_sales2#100, fri_sales2#101, sat_sales2#102] Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [plan_id=11] -(75) InputAdapter +(79) InputAdapter Input [8]: [d_week_seq2#95, s_store_id2#96, sun_sales2#97, mon_sales2#98, wed_sales2#99, thu_sales2#100, fri_sales2#101, sat_sales2#102] -(76) InputIteratorTransformer +(80) InputIteratorTransformer Input [8]: [d_week_seq2#95, s_store_id2#96, sun_sales2#97, mon_sales2#98, wed_sales2#99, thu_sales2#100, fri_sales2#101, sat_sales2#102] -(77) BroadcastHashJoinExecTransformer +(81) BroadcastHashJoinExecTransformer Left keys [2]: [s_store_id1#51, d_week_seq1#50] Right keys [2]: [s_store_id2#96, (d_week_seq2#95 - 52)] Join type: Inner Join condition: None -(78) ProjectExecTransformer +(82) ProjectExecTransformer Output [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1#52 / sun_sales2#97) AS (sun_sales1 / sun_sales2)#103, (mon_sales1#53 / mon_sales2#98) AS (mon_sales1 / mon_sales2)#104, (tue_sales1#54 / tue_sales1#54) AS (tue_sales1 / tue_sales1)#105, (wed_sales1#55 / wed_sales2#99) AS (wed_sales1 / wed_sales2)#106, (thu_sales1#56 / thu_sales2#100) AS (thu_sales1 / thu_sales2)#107, (fri_sales1#57 / fri_sales2#101) AS (fri_sales1 / fri_sales2)#108, (sat_sales1#58 / sat_sales2#102) AS (sat_sales1 / sat_sales2)#109] Input [18]: [s_store_name1#49, d_week_seq1#50, s_store_id1#51, sun_sales1#52, mon_sales1#53, tue_sales1#54, wed_sales1#55, thu_sales1#56, fri_sales1#57, sat_sales1#58, d_week_seq2#95, s_store_id2#96, sun_sales2#97, mon_sales2#98, wed_sales2#99, thu_sales2#100, fri_sales2#101, sat_sales2#102] -(79) WholeStageCodegenTransformer (14) +(83) WholeStageCodegenTransformer (12) Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#103, (mon_sales1 / mon_sales2)#104, (tue_sales1 / tue_sales1)#105, (wed_sales1 / wed_sales2)#106, (thu_sales1 / thu_sales2)#107, (fri_sales1 / fri_sales2)#108, (sat_sales1 / sat_sales2)#109] Arguments: false -(80) TakeOrderedAndProjectExecTransformer +(84) TakeOrderedAndProjectExecTransformer Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#103, (mon_sales1 / mon_sales2)#104, (tue_sales1 / tue_sales1)#105, (wed_sales1 / wed_sales2)#106, (thu_sales1 / thu_sales2)#107, (fri_sales1 / fri_sales2)#108, (sat_sales1 / sat_sales2)#109] Arguments: 100, [s_store_name1#49 ASC NULLS FIRST, s_store_id1#51 ASC NULLS FIRST, d_week_seq1#50 ASC NULLS FIRST], [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#103, (mon_sales1 / mon_sales2)#104, (tue_sales1 / tue_sales1)#105, (wed_sales1 / wed_sales2)#106, (thu_sales1 / thu_sales2)#107, (fri_sales1 / fri_sales2)#108, (sat_sales1 / sat_sales2)#109], 0 -(81) VeloxColumnarToRow +(85) VeloxColumnarToRow Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#103, (mon_sales1 / mon_sales2)#104, (tue_sales1 / tue_sales1)#105, (wed_sales1 / wed_sales2)#106, (thu_sales1 / thu_sales2)#107, (fri_sales1 / fri_sales2)#108, (sat_sales1 / sat_sales2)#109] ===== Subqueries ===== -Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (93) -+- ^ RegularHashAggregateExecTransformer (91) - +- ^ InputIteratorTransformer (90) - +- ColumnarExchange (88) - +- VeloxResizeBatches (87) - +- ^ FlushableHashAggregateExecTransformer (85) - +- ^ ProjectExecTransformer (84) - +- ^ FilterExecTransformer (83) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) +Subquery:1 Hosting operator id = 6 Hosting Expression = Subquery scalar-subquery#7, [id=#1] +ObjectHashAggregate (96) ++- VeloxColumnarToRow (95) + +- ColumnarExchange (94) + +- VeloxResizeBatches (93) + +- RowToVeloxColumnar (92) + +- ObjectHashAggregate (91) + +- VeloxColumnarToRow (90) + +- ^ ProjectExecTransformer (88) + +- ^ FilterExecTransformer (87) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (86) -(82) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(86) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#47, d_week_seq#48] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1185), LessThanOrEqual(d_month_seq,1196), IsNotNull(d_week_seq)] ReadSchema: struct -(83) FilterExecTransformer +(87) FilterExecTransformer Input [2]: [d_month_seq#47, d_week_seq#48] Arguments: (((isnotnull(d_month_seq#47) AND (d_month_seq#47 >= 1185)) AND (d_month_seq#47 <= 1196)) AND isnotnull(d_week_seq#48)) -(84) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#48, 42) AS _pre_14#110] +(88) ProjectExecTransformer +Output [1]: [d_week_seq#48] Input [2]: [d_month_seq#47, d_week_seq#48] -(85) FlushableHashAggregateExecTransformer -Input [1]: [_pre_14#110] +(89) WholeStageCodegenTransformer (1) +Input [1]: [d_week_seq#48] +Arguments: false + +(90) VeloxColumnarToRow +Input [1]: [d_week_seq#48] + +(91) ObjectHashAggregate +Input [1]: [d_week_seq#48] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_14#110, 335, 8990, 0, 0)] -Aggregate Attributes [1]: [buf#111] -Results [1]: [buf#112] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [buf#110] +Results [1]: [buf#111] -(86) WholeStageCodegenTransformer (1) -Input [1]: [buf#112] -Arguments: false +(92) RowToVeloxColumnar +Input [1]: [buf#111] -(87) VeloxResizeBatches -Input [1]: [buf#112] +(93) VeloxResizeBatches +Input [1]: [buf#111] Arguments: 1024, 2147483647, 10485760 -(88) ColumnarExchange -Input [1]: [buf#112] +(94) ColumnarExchange +Input [1]: [buf#111] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(89) InputAdapter -Input [1]: [buf#112] +(95) VeloxColumnarToRow +Input [1]: [buf#111] -(90) InputIteratorTransformer -Input [1]: [buf#112] - -(91) RegularHashAggregateExecTransformer -Input [1]: [buf#112] +(96) ObjectHashAggregate +Input [1]: [buf#111] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#113] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#113 AS bloomFilter#114] - -(92) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#114] -Arguments: false - -(93) VeloxColumnarToRow -Input [1]: [bloomFilter#114] - -Subquery:2 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (93) -+- ^ RegularHashAggregateExecTransformer (91) - +- ^ InputIteratorTransformer (90) - +- ColumnarExchange (88) - +- VeloxResizeBatches (87) - +- ^ FlushableHashAggregateExecTransformer (85) - +- ^ ProjectExecTransformer (84) - +- ^ FilterExecTransformer (83) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) - - -Subquery:3 Hosting operator id = 40 Hosting Expression = Subquery scalar-subquery#65, [id=#6] -VeloxColumnarToRow (105) -+- ^ RegularHashAggregateExecTransformer (103) - +- ^ InputIteratorTransformer (102) - +- ColumnarExchange (100) - +- VeloxResizeBatches (99) - +- ^ FlushableHashAggregateExecTransformer (97) - +- ^ ProjectExecTransformer (96) - +- ^ FilterExecTransformer (95) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (94) - - -(94) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#112] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#112 AS bloomFilter#113] + +Subquery:2 Hosting operator id = 44 Hosting Expression = Subquery scalar-subquery#65, [id=#6] +ObjectHashAggregate (107) ++- VeloxColumnarToRow (106) + +- ColumnarExchange (105) + +- VeloxResizeBatches (104) + +- RowToVeloxColumnar (103) + +- ObjectHashAggregate (102) + +- VeloxColumnarToRow (101) + +- ^ ProjectExecTransformer (99) + +- ^ FilterExecTransformer (98) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (97) + + +(97) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#93, d_week_seq#94] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1197), LessThanOrEqual(d_month_seq,1208), IsNotNull(d_week_seq)] ReadSchema: struct -(95) FilterExecTransformer +(98) FilterExecTransformer Input [2]: [d_month_seq#93, d_week_seq#94] Arguments: (((isnotnull(d_month_seq#93) AND (d_month_seq#93 >= 1197)) AND (d_month_seq#93 <= 1208)) AND isnotnull(d_week_seq#94)) -(96) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#94, 42) AS _pre_15#115] +(99) ProjectExecTransformer +Output [1]: [d_week_seq#94] Input [2]: [d_month_seq#93, d_week_seq#94] -(97) FlushableHashAggregateExecTransformer -Input [1]: [_pre_15#115] +(100) WholeStageCodegenTransformer (6) +Input [1]: [d_week_seq#94] +Arguments: false + +(101) VeloxColumnarToRow +Input [1]: [d_week_seq#94] + +(102) ObjectHashAggregate +Input [1]: [d_week_seq#94] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_15#115, 335, 8990, 0, 0)] -Aggregate Attributes [1]: [buf#116] -Results [1]: [buf#117] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [buf#114] +Results [1]: [buf#115] -(98) WholeStageCodegenTransformer (7) -Input [1]: [buf#117] -Arguments: false +(103) RowToVeloxColumnar +Input [1]: [buf#115] -(99) VeloxResizeBatches -Input [1]: [buf#117] +(104) VeloxResizeBatches +Input [1]: [buf#115] Arguments: 1024, 2147483647, 10485760 -(100) ColumnarExchange -Input [1]: [buf#117] +(105) ColumnarExchange +Input [1]: [buf#115] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13], [shuffle_writer_type=hash] -(101) InputAdapter -Input [1]: [buf#117] - -(102) InputIteratorTransformer -Input [1]: [buf#117] +(106) VeloxColumnarToRow +Input [1]: [buf#115] -(103) RegularHashAggregateExecTransformer -Input [1]: [buf#117] +(107) ObjectHashAggregate +Input [1]: [buf#115] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)#118] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)#118 AS bloomFilter#119] - -(104) WholeStageCodegenTransformer (8) -Input [1]: [bloomFilter#119] -Arguments: false - -(105) VeloxColumnarToRow -Input [1]: [bloomFilter#119] - -Subquery:4 Hosting operator id = 39 Hosting Expression = Subquery scalar-subquery#65, [id=#6] -VeloxColumnarToRow (105) -+- ^ RegularHashAggregateExecTransformer (103) - +- ^ InputIteratorTransformer (102) - +- ColumnarExchange (100) - +- VeloxResizeBatches (99) - +- ^ FlushableHashAggregateExecTransformer (97) - +- ^ ProjectExecTransformer (96) - +- ^ FilterExecTransformer (95) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (94) - +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)#116] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#94, 42), 335, 8990, 0, 0)#116 AS bloomFilter#117] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/simplified.txt index 75ebadb2c9e..f4a180f7d6f 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/q59.sf100/simplified.txt @@ -1,6 +1,6 @@ VeloxColumnarToRow TakeOrderedAndProjectExecTransformer [s_store_name1,s_store_id1,d_week_seq1,(sun_sales1 / sun_sales2),(mon_sales1 / mon_sales2),(tue_sales1 / tue_sales1),(wed_sales1 / wed_sales2),(thu_sales1 / thu_sales2),(fri_sales1 / fri_sales2),(sat_sales1 / sat_sales2)] - WholeStageCodegenTransformer (14) + WholeStageCodegenTransformer (12) ProjectExecTransformer [s_store_name1,s_store_id1,d_week_seq1,sun_sales1,sun_sales2,mon_sales1,mon_sales2,tue_sales1,wed_sales1,wed_sales2,thu_sales1,thu_sales2,fri_sales1,fri_sales2,sat_sales1,sat_sales2] BroadcastHashJoinExecTransformer [s_store_id1,d_week_seq1,s_store_id2,d_week_seq2] ProjectExecTransformer [s_store_name,d_week_seq,s_store_id,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales] @@ -13,7 +13,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] #1 VeloxResizeBatches - WholeStageCodegenTransformer (4) + WholeStageCodegenTransformer (3) ProjectExecTransformer [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,ss_store_sk,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [ss_store_sk,d_week_seq,d_day_name,ss_sales_price] @@ -23,52 +23,42 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #2 - WholeStageCodegenTransformer (3) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [d_date_sk,d_week_seq] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #3 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #1 + InputAdapter VeloxColumnarToRow WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #4 - WholeStageCodegenTransformer (5) + WholeStageCodegenTransformer (4) FilterExecTransformer [s_store_sk,s_store_id] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id,s_store_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (6) + WholeStageCodegenTransformer (5) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #6 - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [d_week_seq,s_store_id,sun_sales,mon_sales,wed_sales,thu_sales,fri_sales,sat_sales] BroadcastHashJoinExecTransformer [d_week_seq,d_week_seq] ProjectExecTransformer [d_week_seq,sun_sales,mon_sales,wed_sales,thu_sales,fri_sales,sat_sales,s_store_id] @@ -79,7 +69,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum] #7 VeloxResizeBatches - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (8) ProjectExecTransformer [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,ss_store_sk,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [ss_store_sk,d_week_seq,d_day_name,ss_sales_price] @@ -89,45 +79,35 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (9) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (8) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (7) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [d_date_sk,d_week_seq] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #9 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (6) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #2 + InputAdapter VeloxColumnarToRow - WholeStageCodegenTransformer (8) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (7) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] + WholeStageCodegenTransformer (7) + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (9) FilterExecTransformer [s_store_sk,s_store_id] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #11 - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (10) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/explain.txt index a2f7bb3df10..123475d9101 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/explain.txt @@ -1,66 +1,69 @@ == Physical Plan == -VeloxColumnarToRow (82) -+- TakeOrderedAndProjectExecTransformer (81) - +- ^ ProjectExecTransformer (79) - +- ^ RegularHashAggregateExecTransformer (78) - +- ^ InputIteratorTransformer (77) - +- ColumnarExchange (75) - +- VeloxResizeBatches (74) - +- ^ ProjectExecTransformer (72) - +- ^ FlushableHashAggregateExecTransformer (71) - +- ^ ProjectExecTransformer (70) - +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (69) - :- ^ InputIteratorTransformer (60) - : +- ColumnarExchange (58) - : +- VeloxResizeBatches (57) - : +- ^ ProjectExecTransformer (55) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (54) - : :- ^ ProjectExecTransformer (46) - : : +- ^ FilterExecTransformer (45) - : : +- ^ ShuffledHashJoinExecTransformer ExistenceJoin(exists#1) BuildRight (44) - : : :- ^ ShuffledHashJoinExecTransformer ExistenceJoin(exists#2) BuildRight (32) - : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (20) - : : : : :- ^ InputIteratorTransformer (8) - : : : : : +- ColumnarExchange (6) - : : : : : +- VeloxResizeBatches (5) - : : : : : +- ^ ProjectExecTransformer (3) - : : : : : +- ^ FilterExecTransformer (2) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) - : : : : +- ^ InputIteratorTransformer (19) - : : : : +- ColumnarExchange (17) - : : : : +- VeloxResizeBatches (16) - : : : : +- ^ ProjectExecTransformer (14) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13) - : : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (9) - : : : : +- ^ InputIteratorTransformer (12) - : : : : +- ReusedExchange (10) - : : : +- ^ InputIteratorTransformer (31) - : : : +- ColumnarExchange (29) - : : : +- VeloxResizeBatches (28) - : : : +- ^ ProjectExecTransformer (26) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (25) - : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (21) - : : : +- ^ InputIteratorTransformer (24) - : : : +- ReusedExchange (22) - : : +- ^ InputIteratorTransformer (43) - : : +- ColumnarExchange (41) - : : +- VeloxResizeBatches (40) - : : +- ^ ProjectExecTransformer (38) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) - : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (33) - : : +- ^ InputIteratorTransformer (36) - : : +- ReusedExchange (34) - : +- ^ InputIteratorTransformer (53) - : +- ColumnarBroadcastExchange (51) - : +- ^ ProjectExecTransformer (49) - : +- ^ FilterExecTransformer (48) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (47) - +- ^ InputIteratorTransformer (68) - +- ColumnarExchange (66) - +- VeloxResizeBatches (65) - +- ^ ProjectExecTransformer (63) - +- ^ FilterExecTransformer (62) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (61) +VeloxColumnarToRow (87) ++- TakeOrderedAndProjectExecTransformer (86) + +- ^ ProjectExecTransformer (84) + +- ^ RegularHashAggregateExecTransformer (83) + +- ^ InputIteratorTransformer (82) + +- ColumnarExchange (80) + +- VeloxResizeBatches (79) + +- ^ ProjectExecTransformer (77) + +- ^ FlushableHashAggregateExecTransformer (76) + +- ^ ProjectExecTransformer (75) + +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (74) + :- ^ InputIteratorTransformer (65) + : +- ColumnarExchange (63) + : +- VeloxResizeBatches (62) + : +- ^ ProjectExecTransformer (60) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (59) + : :- ^ ProjectExecTransformer (51) + : : +- ^ FilterExecTransformer (50) + : : +- ^ ShuffledHashJoinExecTransformer ExistenceJoin(exists#1) BuildRight (49) + : : :- ^ ShuffledHashJoinExecTransformer ExistenceJoin(exists#2) BuildRight (37) + : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (25) + : : : : :- ^ InputIteratorTransformer (13) + : : : : : +- ColumnarExchange (11) + : : : : : +- VeloxResizeBatches (10) + : : : : : +- ^ ProjectExecTransformer (8) + : : : : : +- ^ InputIteratorTransformer (7) + : : : : : +- RowToVeloxColumnar (5) + : : : : : +- * Filter (4) + : : : : : +- VeloxColumnarToRow (3) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) + : : : : +- ^ InputIteratorTransformer (24) + : : : : +- ColumnarExchange (22) + : : : : +- VeloxResizeBatches (21) + : : : : +- ^ ProjectExecTransformer (19) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) + : : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (14) + : : : : +- ^ InputIteratorTransformer (17) + : : : : +- ReusedExchange (15) + : : : +- ^ InputIteratorTransformer (36) + : : : +- ColumnarExchange (34) + : : : +- VeloxResizeBatches (33) + : : : +- ^ ProjectExecTransformer (31) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (30) + : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (26) + : : : +- ^ InputIteratorTransformer (29) + : : : +- ReusedExchange (27) + : : +- ^ InputIteratorTransformer (48) + : : +- ColumnarExchange (46) + : : +- VeloxResizeBatches (45) + : : +- ^ ProjectExecTransformer (43) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (42) + : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (38) + : : +- ^ InputIteratorTransformer (41) + : : +- ReusedExchange (39) + : +- ^ InputIteratorTransformer (58) + : +- ColumnarBroadcastExchange (56) + : +- ^ ProjectExecTransformer (54) + : +- ^ FilterExecTransformer (53) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (52) + +- ^ InputIteratorTransformer (73) + +- ColumnarExchange (71) + +- VeloxResizeBatches (70) + +- ^ ProjectExecTransformer (68) + +- ^ FilterExecTransformer (67) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (66) (1) FileSourceScanExecTransformer parquet spark_catalog.default.customer @@ -70,453 +73,454 @@ Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (2) +Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] +Arguments: false + +(3) VeloxColumnarToRow +Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] + +(4) Filter [codegen id : 1] +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)) AND might_contain(Subquery scalar-subquery#6, [id=#1], xxhash64(c_current_addr_sk#5, 42))) + +(5) RowToVeloxColumnar +Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] + +(6) InputAdapter Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] -Arguments: ((isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4)) AND velox_might_contain(Subquery scalar-subquery#6, [id=#1], xxhash64(c_current_addr_sk#5, 42))) -(3) ProjectExecTransformer +(7) InputIteratorTransformer +Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] + +(8) ProjectExecTransformer Output [4]: [hash(c_customer_sk#3, 42) AS hash_partition_key#7, c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] -(4) WholeStageCodegenTransformer (3) +(9) WholeStageCodegenTransformer (3) Input [4]: [hash_partition_key#7, c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [4]: [hash_partition_key#7, c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [4]: [hash_partition_key#7, c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Arguments: hashpartitioning(c_customer_sk#3, 1), ENSURE_REQUIREMENTS, [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [2]: [ss_customer_sk#8, ss_sold_date_sk#9] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ss_sold_date_sk#9), dynamicpruningexpression(ss_sold_date_sk#9 IN dynamicpruning#10)] ReadSchema: struct -(10) ReusedExchange [Reuses operator id: 99] +(15) ReusedExchange [Reuses operator id: 103] Output [1]: [d_date_sk#11] -(11) InputAdapter +(16) InputAdapter Input [1]: [d_date_sk#11] -(12) InputIteratorTransformer +(17) InputIteratorTransformer Input [1]: [d_date_sk#11] -(13) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#9] Right keys [1]: [d_date_sk#11] Join type: Inner Join condition: None -(14) ProjectExecTransformer +(19) ProjectExecTransformer Output [2]: [hash(ss_customer_sk#8, 42) AS hash_partition_key#12, ss_customer_sk#8] Input [3]: [ss_customer_sk#8, ss_sold_date_sk#9, d_date_sk#11] -(15) WholeStageCodegenTransformer (6) +(20) WholeStageCodegenTransformer (6) Input [2]: [hash_partition_key#12, ss_customer_sk#8] Arguments: false -(16) VeloxResizeBatches +(21) VeloxResizeBatches Input [2]: [hash_partition_key#12, ss_customer_sk#8] Arguments: 1024, 2147483647, 10485760 -(17) ColumnarExchange +(22) ColumnarExchange Input [2]: [hash_partition_key#12, ss_customer_sk#8] Arguments: hashpartitioning(ss_customer_sk#8, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#8], [plan_id=3], [shuffle_writer_type=hash] -(18) InputAdapter +(23) InputAdapter Input [1]: [ss_customer_sk#8] -(19) InputIteratorTransformer +(24) InputIteratorTransformer Input [1]: [ss_customer_sk#8] -(20) ShuffledHashJoinExecTransformer +(25) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#3] Right keys [1]: [ss_customer_sk#8] Join type: LeftSemi Join condition: None -(21) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(26) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [2]: [ws_bill_customer_sk#13, ws_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ws_sold_date_sk#14), dynamicpruningexpression(ws_sold_date_sk#14 IN dynamicpruning#10)] ReadSchema: struct -(22) ReusedExchange [Reuses operator id: 99] +(27) ReusedExchange [Reuses operator id: 103] Output [1]: [d_date_sk#15] -(23) InputAdapter +(28) InputAdapter Input [1]: [d_date_sk#15] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [1]: [d_date_sk#15] -(25) BroadcastHashJoinExecTransformer +(30) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#14] Right keys [1]: [d_date_sk#15] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [2]: [hash(ws_bill_customer_sk#13, 42) AS hash_partition_key#16, ws_bill_customer_sk#13] Input [3]: [ws_bill_customer_sk#13, ws_sold_date_sk#14, d_date_sk#15] -(27) WholeStageCodegenTransformer (9) +(32) WholeStageCodegenTransformer (9) Input [2]: [hash_partition_key#16, ws_bill_customer_sk#13] Arguments: false -(28) VeloxResizeBatches +(33) VeloxResizeBatches Input [2]: [hash_partition_key#16, ws_bill_customer_sk#13] Arguments: 1024, 2147483647, 10485760 -(29) ColumnarExchange +(34) ColumnarExchange Input [2]: [hash_partition_key#16, ws_bill_customer_sk#13] Arguments: hashpartitioning(ws_bill_customer_sk#13, 1), ENSURE_REQUIREMENTS, [ws_bill_customer_sk#13], [plan_id=4], [shuffle_writer_type=hash] -(30) InputAdapter +(35) InputAdapter Input [1]: [ws_bill_customer_sk#13] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [1]: [ws_bill_customer_sk#13] -(32) ShuffledHashJoinExecTransformer +(37) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#3] Right keys [1]: [ws_bill_customer_sk#13] Join type: ExistenceJoin(exists#2) Join condition: None -(33) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(38) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [2]: [cs_ship_customer_sk#17, cs_sold_date_sk#18] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(cs_sold_date_sk#18), dynamicpruningexpression(cs_sold_date_sk#18 IN dynamicpruning#10)] ReadSchema: struct -(34) ReusedExchange [Reuses operator id: 99] +(39) ReusedExchange [Reuses operator id: 103] Output [1]: [d_date_sk#19] -(35) InputAdapter +(40) InputAdapter Input [1]: [d_date_sk#19] -(36) InputIteratorTransformer +(41) InputIteratorTransformer Input [1]: [d_date_sk#19] -(37) BroadcastHashJoinExecTransformer +(42) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#18] Right keys [1]: [d_date_sk#19] Join type: Inner Join condition: None -(38) ProjectExecTransformer +(43) ProjectExecTransformer Output [2]: [hash(cs_ship_customer_sk#17, 42) AS hash_partition_key#20, cs_ship_customer_sk#17] Input [3]: [cs_ship_customer_sk#17, cs_sold_date_sk#18, d_date_sk#19] -(39) WholeStageCodegenTransformer (12) +(44) WholeStageCodegenTransformer (12) Input [2]: [hash_partition_key#20, cs_ship_customer_sk#17] Arguments: false -(40) VeloxResizeBatches +(45) VeloxResizeBatches Input [2]: [hash_partition_key#20, cs_ship_customer_sk#17] Arguments: 1024, 2147483647, 10485760 -(41) ColumnarExchange +(46) ColumnarExchange Input [2]: [hash_partition_key#20, cs_ship_customer_sk#17] Arguments: hashpartitioning(cs_ship_customer_sk#17, 1), ENSURE_REQUIREMENTS, [cs_ship_customer_sk#17], [plan_id=5], [shuffle_writer_type=hash] -(42) InputAdapter +(47) InputAdapter Input [1]: [cs_ship_customer_sk#17] -(43) InputIteratorTransformer +(48) InputIteratorTransformer Input [1]: [cs_ship_customer_sk#17] -(44) ShuffledHashJoinExecTransformer +(49) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#3] Right keys [1]: [cs_ship_customer_sk#17] Join type: ExistenceJoin(exists#1) Join condition: None -(45) FilterExecTransformer +(50) FilterExecTransformer Input [5]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5, exists#2, exists#1] Arguments: (exists#2 OR exists#1) -(46) ProjectExecTransformer +(51) ProjectExecTransformer 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] -(47) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(52) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#21, ca_county#22] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Jefferson County,La Porte County,Rush County,Toole County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(48) FilterExecTransformer +(53) FilterExecTransformer Input [2]: [ca_address_sk#21, ca_county#22] Arguments: (ca_county#22 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#21)) -(49) ProjectExecTransformer +(54) ProjectExecTransformer Output [1]: [ca_address_sk#21] Input [2]: [ca_address_sk#21, ca_county#22] -(50) WholeStageCodegenTransformer (13) +(55) WholeStageCodegenTransformer (13) Input [1]: [ca_address_sk#21] Arguments: false -(51) ColumnarBroadcastExchange +(56) ColumnarBroadcastExchange Input [1]: [ca_address_sk#21] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(52) InputAdapter +(57) InputAdapter Input [1]: [ca_address_sk#21] -(53) InputIteratorTransformer +(58) InputIteratorTransformer Input [1]: [ca_address_sk#21] -(54) BroadcastHashJoinExecTransformer +(59) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#5] Right keys [1]: [ca_address_sk#21] Join type: Inner Join condition: None -(55) ProjectExecTransformer +(60) ProjectExecTransformer Output [2]: [hash(c_current_cdemo_sk#4, 42) AS hash_partition_key#23, c_current_cdemo_sk#4] Input [3]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#21] -(56) WholeStageCodegenTransformer (14) +(61) WholeStageCodegenTransformer (14) Input [2]: [hash_partition_key#23, c_current_cdemo_sk#4] Arguments: false -(57) VeloxResizeBatches +(62) VeloxResizeBatches Input [2]: [hash_partition_key#23, c_current_cdemo_sk#4] Arguments: 1024, 2147483647, 10485760 -(58) ColumnarExchange +(63) ColumnarExchange Input [2]: [hash_partition_key#23, c_current_cdemo_sk#4] Arguments: hashpartitioning(c_current_cdemo_sk#4, 1), ENSURE_REQUIREMENTS, [c_current_cdemo_sk#4], [plan_id=7], [shuffle_writer_type=hash] -(59) InputAdapter +(64) InputAdapter Input [1]: [c_current_cdemo_sk#4] -(60) InputIteratorTransformer +(65) InputIteratorTransformer Input [1]: [c_current_cdemo_sk#4] -(61) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(66) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct -(62) FilterExecTransformer +(67) FilterExecTransformer Input [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Arguments: isnotnull(cd_demo_sk#24) -(63) ProjectExecTransformer +(68) ProjectExecTransformer Output [10]: [hash(cd_demo_sk#24, 42) AS hash_partition_key#33, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Input [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] -(64) WholeStageCodegenTransformer (15) +(69) WholeStageCodegenTransformer (15) Input [10]: [hash_partition_key#33, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Arguments: false -(65) VeloxResizeBatches +(70) VeloxResizeBatches Input [10]: [hash_partition_key#33, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Arguments: 1024, 2147483647, 10485760 -(66) ColumnarExchange +(71) ColumnarExchange Input [10]: [hash_partition_key#33, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Arguments: hashpartitioning(cd_demo_sk#24, 1), ENSURE_REQUIREMENTS, [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32], [plan_id=8], [shuffle_writer_type=hash] -(67) InputAdapter +(72) InputAdapter Input [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] -(68) InputIteratorTransformer +(73) InputIteratorTransformer Input [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] -(69) ShuffledHashJoinExecTransformer +(74) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#4] Right keys [1]: [cd_demo_sk#24] Join type: Inner Join condition: None -(70) ProjectExecTransformer +(75) ProjectExecTransformer Output [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Input [10]: [c_current_cdemo_sk#4, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] -(71) FlushableHashAggregateExecTransformer +(76) FlushableHashAggregateExecTransformer Input [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Keys [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Functions [1]: [partial_count(1)] Aggregate Attributes [1]: [count#34] Results [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] -(72) ProjectExecTransformer +(77) ProjectExecTransformer Output [10]: [hash(cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, 42) AS hash_partition_key#36, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] -(73) WholeStageCodegenTransformer (16) +(78) WholeStageCodegenTransformer (16) Input [10]: [hash_partition_key#36, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] Arguments: false -(74) VeloxResizeBatches +(79) VeloxResizeBatches Input [10]: [hash_partition_key#36, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] Arguments: 1024, 2147483647, 10485760 -(75) ColumnarExchange +(80) ColumnarExchange Input [10]: [hash_partition_key#36, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] Arguments: hashpartitioning(cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, 1), ENSURE_REQUIREMENTS, [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35], [plan_id=9], [shuffle_writer_type=hash] -(76) InputAdapter +(81) InputAdapter Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] -(77) InputIteratorTransformer +(82) InputIteratorTransformer Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] -(78) RegularHashAggregateExecTransformer +(83) RegularHashAggregateExecTransformer Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#35] Keys [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32] Functions [1]: [count(1)] Aggregate Attributes [1]: [count(1)#37] Results [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count(1)#37] -(79) ProjectExecTransformer +(84) ProjectExecTransformer Output [14]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, count(1)#37 AS cnt1#38, cd_purchase_estimate#28, count(1)#37 AS cnt2#39, cd_credit_rating#29, count(1)#37 AS cnt3#40, cd_dep_count#30, count(1)#37 AS cnt4#41, cd_dep_employed_count#31, count(1)#37 AS cnt5#42, cd_dep_college_count#32, count(1)#37 AS cnt6#43] Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count(1)#37] -(80) WholeStageCodegenTransformer (17) +(85) WholeStageCodegenTransformer (17) Input [14]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#38, cd_purchase_estimate#28, cnt2#39, cd_credit_rating#29, cnt3#40, cd_dep_count#30, cnt4#41, cd_dep_employed_count#31, cnt5#42, cd_dep_college_count#32, cnt6#43] Arguments: false -(81) TakeOrderedAndProjectExecTransformer +(86) TakeOrderedAndProjectExecTransformer Input [14]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#38, cd_purchase_estimate#28, cnt2#39, cd_credit_rating#29, cnt3#40, cd_dep_count#30, cnt4#41, cd_dep_employed_count#31, cnt5#42, cd_dep_college_count#32, cnt6#43] Arguments: 100, [cd_gender#25 ASC NULLS FIRST, cd_marital_status#26 ASC NULLS FIRST, cd_education_status#27 ASC NULLS FIRST, cd_purchase_estimate#28 ASC NULLS FIRST, cd_credit_rating#29 ASC NULLS FIRST, cd_dep_count#30 ASC NULLS FIRST, cd_dep_employed_count#31 ASC NULLS FIRST, cd_dep_college_count#32 ASC NULLS FIRST], [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#38, cd_purchase_estimate#28, cnt2#39, cd_credit_rating#29, cnt3#40, cd_dep_count#30, cnt4#41, cd_dep_employed_count#31, cnt5#42, cd_dep_college_count#32, cnt6#43], 0 -(82) VeloxColumnarToRow +(87) VeloxColumnarToRow Input [14]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#38, cd_purchase_estimate#28, cnt2#39, cd_credit_rating#29, cnt3#40, cd_dep_count#30, cnt4#41, cd_dep_employed_count#31, cnt5#42, cd_dep_college_count#32, cnt6#43] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#6, [id=#1] -VeloxColumnarToRow (94) -+- ^ RegularHashAggregateExecTransformer (92) - +- ^ InputIteratorTransformer (91) - +- ColumnarExchange (89) - +- VeloxResizeBatches (88) - +- ^ FlushableHashAggregateExecTransformer (86) - +- ^ ProjectExecTransformer (85) - +- ^ FilterExecTransformer (84) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (83) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#6, [id=#1] +ObjectHashAggregate (98) ++- VeloxColumnarToRow (97) + +- ColumnarExchange (96) + +- VeloxResizeBatches (95) + +- RowToVeloxColumnar (94) + +- ObjectHashAggregate (93) + +- VeloxColumnarToRow (92) + +- ^ ProjectExecTransformer (90) + +- ^ FilterExecTransformer (89) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (88) -(83) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(88) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#21, ca_county#22] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Jefferson County,La Porte County,Rush County,Toole County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(84) FilterExecTransformer +(89) FilterExecTransformer Input [2]: [ca_address_sk#21, ca_county#22] Arguments: (ca_county#22 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#21)) -(85) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#21, 42) AS _pre_1#44] +(90) ProjectExecTransformer +Output [1]: [ca_address_sk#21] Input [2]: [ca_address_sk#21, ca_county#22] -(86) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#44] +(91) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#21] +Arguments: false + +(92) VeloxColumnarToRow +Input [1]: [ca_address_sk#21] + +(93) ObjectHashAggregate +Input [1]: [ca_address_sk#21] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#44, 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [buf#45] -Results [1]: [buf#46] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [buf#44] +Results [1]: [buf#45] -(87) WholeStageCodegenTransformer (1) -Input [1]: [buf#46] -Arguments: false +(94) RowToVeloxColumnar +Input [1]: [buf#45] -(88) VeloxResizeBatches -Input [1]: [buf#46] +(95) VeloxResizeBatches +Input [1]: [buf#45] Arguments: 1024, 2147483647, 10485760 -(89) ColumnarExchange -Input [1]: [buf#46] +(96) ColumnarExchange +Input [1]: [buf#45] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] -(90) InputAdapter -Input [1]: [buf#46] +(97) VeloxColumnarToRow +Input [1]: [buf#45] -(91) InputIteratorTransformer -Input [1]: [buf#46] - -(92) RegularHashAggregateExecTransformer -Input [1]: [buf#46] +(98) ObjectHashAggregate +Input [1]: [buf#45] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#47] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#47 AS bloomFilter#48] - -(93) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#48] -Arguments: false - -(94) VeloxColumnarToRow -Input [1]: [bloomFilter#48] - -Subquery:2 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#6, [id=#1] -VeloxColumnarToRow (94) -+- ^ RegularHashAggregateExecTransformer (92) - +- ^ InputIteratorTransformer (91) - +- ColumnarExchange (89) - +- VeloxResizeBatches (88) - +- ^ FlushableHashAggregateExecTransformer (86) - +- ^ ProjectExecTransformer (85) - +- ^ FilterExecTransformer (84) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (83) - +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#46] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 57765, 0, 0)#46 AS bloomFilter#47] -Subquery:3 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10 -ColumnarBroadcastExchange (99) -+- ^ ProjectExecTransformer (97) - +- ^ FilterExecTransformer (96) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (95) +Subquery:2 Hosting operator id = 14 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10 +ColumnarBroadcastExchange (103) ++- ^ ProjectExecTransformer (101) + +- ^ FilterExecTransformer (100) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (99) -(95) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [3]: [d_date_sk#11, d_year#49, d_moy#50] +(99) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [3]: [d_date_sk#11, d_year#48, d_moy#49] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] 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 -(96) FilterExecTransformer -Input [3]: [d_date_sk#11, d_year#49, d_moy#50] -Arguments: (((((isnotnull(d_year#49) AND isnotnull(d_moy#50)) AND (d_year#49 = 2002)) AND (d_moy#50 >= 1)) AND (d_moy#50 <= 4)) AND isnotnull(d_date_sk#11)) +(100) FilterExecTransformer +Input [3]: [d_date_sk#11, d_year#48, d_moy#49] +Arguments: (((((isnotnull(d_year#48) AND isnotnull(d_moy#49)) AND (d_year#48 = 2002)) AND (d_moy#49 >= 1)) AND (d_moy#49 <= 4)) AND isnotnull(d_date_sk#11)) -(97) ProjectExecTransformer +(101) ProjectExecTransformer Output [1]: [d_date_sk#11] -Input [3]: [d_date_sk#11, d_year#49, d_moy#50] +Input [3]: [d_date_sk#11, d_year#48, d_moy#49] -(98) WholeStageCodegenTransformer (4) +(102) WholeStageCodegenTransformer (4) Input [1]: [d_date_sk#11] Arguments: false -(99) ColumnarBroadcastExchange +(103) ColumnarBroadcastExchange Input [1]: [d_date_sk#11] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] -Subquery:4 Hosting operator id = 21 Hosting Expression = ws_sold_date_sk#14 IN dynamicpruning#10 +Subquery:3 Hosting operator id = 26 Hosting Expression = ws_sold_date_sk#14 IN dynamicpruning#10 -Subquery:5 Hosting operator id = 33 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#10 +Subquery:4 Hosting operator id = 38 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#10 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/simplified.txt index b8d0a6721b1..8c5820692f3 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q10.sf100/simplified.txt @@ -30,34 +30,27 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (3) ProjectExecTransformer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - FilterExecTransformer [c_current_addr_sk,c_current_cdemo_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] - FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [c_current_addr_sk,c_current_cdemo_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_county,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] InputIteratorTransformer InputAdapter ColumnarExchange [ss_customer_sk] #5 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt index c451d901705..b52fbe4e626 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt @@ -1,50 +1,53 @@ == Physical Plan == -VeloxColumnarToRow (59) -+- ^ ProjectExecTransformer (57) - +- ^ RegularHashAggregateExecTransformer (56) - +- ^ RegularHashAggregateExecTransformer (55) - +- ^ RegularHashAggregateExecTransformer (54) - +- ^ RegularHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51) - :- ^ ProjectExecTransformer (43) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (42) - : :- ^ ProjectExecTransformer (34) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (33) - : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (25) - : : : :- ^ ProjectExecTransformer (17) - : : : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (16) - : : : : :- ^ InputIteratorTransformer (8) - : : : : : +- ColumnarExchange (6) - : : : : : +- VeloxResizeBatches (5) - : : : : : +- ^ ProjectExecTransformer (3) - : : : : : +- ^ FilterExecTransformer (2) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (1) - : : : : +- ^ InputIteratorTransformer (15) - : : : : +- ColumnarExchange (13) - : : : : +- VeloxResizeBatches (12) - : : : : +- ^ ProjectExecTransformer (10) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (9) - : : : +- ^ InputIteratorTransformer (24) - : : : +- ColumnarExchange (22) - : : : +- VeloxResizeBatches (21) - : : : +- ^ ProjectExecTransformer (19) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (18) - : : +- ^ InputIteratorTransformer (32) - : : +- ColumnarBroadcastExchange (30) - : : +- ^ ProjectExecTransformer (28) - : : +- ^ FilterExecTransformer (27) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (26) - : +- ^ InputIteratorTransformer (41) - : +- ColumnarBroadcastExchange (39) - : +- ^ ProjectExecTransformer (37) - : +- ^ FilterExecTransformer (36) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.call_center (35) - +- ^ InputIteratorTransformer (50) - +- ColumnarBroadcastExchange (48) - +- ^ ProjectExecTransformer (46) - +- ^ FilterExecTransformer (45) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (44) +VeloxColumnarToRow (64) ++- ^ ProjectExecTransformer (62) + +- ^ RegularHashAggregateExecTransformer (61) + +- ^ RegularHashAggregateExecTransformer (60) + +- ^ RegularHashAggregateExecTransformer (59) + +- ^ RegularHashAggregateExecTransformer (58) + +- ^ ProjectExecTransformer (57) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (56) + :- ^ ProjectExecTransformer (48) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (47) + : :- ^ ProjectExecTransformer (39) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (38) + : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (30) + : : : :- ^ ProjectExecTransformer (22) + : : : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (21) + : : : : :- ^ InputIteratorTransformer (13) + : : : : : +- ColumnarExchange (11) + : : : : : +- VeloxResizeBatches (10) + : : : : : +- ^ ProjectExecTransformer (8) + : : : : : +- ^ InputIteratorTransformer (7) + : : : : : +- RowToVeloxColumnar (5) + : : : : : +- * Filter (4) + : : : : : +- VeloxColumnarToRow (3) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (1) + : : : : +- ^ InputIteratorTransformer (20) + : : : : +- ColumnarExchange (18) + : : : : +- VeloxResizeBatches (17) + : : : : +- ^ ProjectExecTransformer (15) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (14) + : : : +- ^ InputIteratorTransformer (29) + : : : +- ColumnarExchange (27) + : : : +- VeloxResizeBatches (26) + : : : +- ^ ProjectExecTransformer (24) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (23) + : : +- ^ InputIteratorTransformer (37) + : : +- ColumnarBroadcastExchange (35) + : : +- ^ ProjectExecTransformer (33) + : : +- ^ FilterExecTransformer (32) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (31) + : +- ^ InputIteratorTransformer (46) + : +- ColumnarBroadcastExchange (44) + : +- ^ ProjectExecTransformer (42) + : +- ^ FilterExecTransformer (41) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.call_center (40) + +- ^ InputIteratorTransformer (55) + +- ColumnarBroadcastExchange (53) + +- ^ ProjectExecTransformer (51) + +- ^ FilterExecTransformer (50) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (49) (1) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales @@ -54,494 +57,465 @@ Location: CatalogFileIndex [{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_ship_date_sk), IsNotNull(cs_ship_addr_sk), IsNotNull(cs_call_center_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (4) +Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] +Arguments: false + +(3) VeloxColumnarToRow +Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] + +(4) Filter [codegen id : 1] +Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] +Condition : (((((isnotnull(cs_ship_date_sk#1) AND isnotnull(cs_ship_addr_sk#2)) AND isnotnull(cs_call_center_sk#3)) AND might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(cs_ship_addr_sk#2, 42))) AND might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(cs_call_center_sk#3, 42))) AND might_contain(Subquery scalar-subquery#11, [id=#3], xxhash64(cs_ship_date_sk#1, 42))) + +(5) RowToVeloxColumnar Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] -Arguments: (((((isnotnull(cs_ship_date_sk#1) AND isnotnull(cs_ship_addr_sk#2)) AND isnotnull(cs_call_center_sk#3)) AND velox_might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(cs_ship_addr_sk#2, 42))) AND velox_might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(cs_call_center_sk#3, 42))) AND velox_might_contain(Subquery scalar-subquery#11, [id=#3], xxhash64(cs_ship_date_sk#1, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] + +(7) InputIteratorTransformer +Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] + +(8) ProjectExecTransformer Output [8]: [hash(cs_order_number#5, 42) AS hash_partition_key#12, cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cs_sold_date_sk#8] -(4) WholeStageCodegenTransformer (7) +(9) WholeStageCodegenTransformer (5) Input [8]: [hash_partition_key#12, cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [8]: [hash_partition_key#12, cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [8]: [hash_partition_key#12, cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Arguments: hashpartitioning(cs_order_number#5, 1), ENSURE_REQUIREMENTS, [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7], [plan_id=4], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [3]: [cs_warehouse_sk#13, cs_order_number#14, cs_sold_date_sk#15] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_sales] ReadSchema: struct -(10) ProjectExecTransformer +(15) ProjectExecTransformer Output [3]: [hash(cs_order_number#14, 42) AS hash_partition_key#16, cs_warehouse_sk#13, cs_order_number#14] Input [3]: [cs_warehouse_sk#13, cs_order_number#14, cs_sold_date_sk#15] -(11) WholeStageCodegenTransformer (8) +(16) WholeStageCodegenTransformer (6) Input [3]: [hash_partition_key#16, cs_warehouse_sk#13, cs_order_number#14] Arguments: false -(12) VeloxResizeBatches +(17) VeloxResizeBatches Input [3]: [hash_partition_key#16, cs_warehouse_sk#13, cs_order_number#14] Arguments: 1024, 2147483647, 10485760 -(13) ColumnarExchange +(18) ColumnarExchange Input [3]: [hash_partition_key#16, cs_warehouse_sk#13, cs_order_number#14] Arguments: hashpartitioning(cs_order_number#14, 1), ENSURE_REQUIREMENTS, [cs_warehouse_sk#13, cs_order_number#14], [plan_id=5], [shuffle_writer_type=hash] -(14) InputAdapter +(19) InputAdapter Input [2]: [cs_warehouse_sk#13, cs_order_number#14] -(15) InputIteratorTransformer +(20) InputIteratorTransformer Input [2]: [cs_warehouse_sk#13, cs_order_number#14] -(16) ShuffledHashJoinExecTransformer +(21) ShuffledHashJoinExecTransformer Left keys [1]: [cs_order_number#5] Right keys [1]: [cs_order_number#14] Join type: LeftSemi Join condition: NOT (cs_warehouse_sk#4 = cs_warehouse_sk#13) -(17) ProjectExecTransformer +(22) ProjectExecTransformer Output [6]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -(18) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(23) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [2]: [cr_order_number#17, cr_returned_date_sk#18] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] ReadSchema: struct -(19) ProjectExecTransformer +(24) ProjectExecTransformer Output [2]: [hash(cr_order_number#17, 42) AS hash_partition_key#19, cr_order_number#17] Input [2]: [cr_order_number#17, cr_returned_date_sk#18] -(20) WholeStageCodegenTransformer (9) +(25) WholeStageCodegenTransformer (7) Input [2]: [hash_partition_key#19, cr_order_number#17] Arguments: false -(21) VeloxResizeBatches +(26) VeloxResizeBatches Input [2]: [hash_partition_key#19, cr_order_number#17] Arguments: 1024, 2147483647, 10485760 -(22) ColumnarExchange +(27) ColumnarExchange Input [2]: [hash_partition_key#19, cr_order_number#17] Arguments: hashpartitioning(cr_order_number#17, 1), ENSURE_REQUIREMENTS, [cr_order_number#17], [plan_id=6], [shuffle_writer_type=hash] -(23) InputAdapter +(28) InputAdapter Input [1]: [cr_order_number#17] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [1]: [cr_order_number#17] -(25) ShuffledHashJoinExecTransformer +(30) ShuffledHashJoinExecTransformer Left keys [1]: [cs_order_number#5] Right keys [1]: [cr_order_number#17] Join type: LeftAnti Join condition: None -(26) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(31) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,GA), IsNotNull(ca_address_sk)] ReadSchema: struct -(27) FilterExecTransformer +(32) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_state#21] Arguments: ((isnotnull(ca_state#21) AND (ca_state#21 = GA)) AND isnotnull(ca_address_sk#20)) -(28) ProjectExecTransformer +(33) ProjectExecTransformer Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_state#21] -(29) WholeStageCodegenTransformer (10) +(34) WholeStageCodegenTransformer (8) Input [1]: [ca_address_sk#20] Arguments: false -(30) ColumnarBroadcastExchange +(35) ColumnarBroadcastExchange Input [1]: [ca_address_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(31) InputAdapter +(36) InputAdapter Input [1]: [ca_address_sk#20] -(32) InputIteratorTransformer +(37) InputIteratorTransformer Input [1]: [ca_address_sk#20] -(33) BroadcastHashJoinExecTransformer +(38) BroadcastHashJoinExecTransformer Left keys [1]: [cs_ship_addr_sk#2] Right keys [1]: [ca_address_sk#20] Join type: Inner Join condition: None -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [5]: [cs_ship_date_sk#1, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, ca_address_sk#20] -(35) FileSourceScanExecTransformer parquet spark_catalog.default.call_center +(40) FileSourceScanExecTransformer parquet spark_catalog.default.call_center Output [2]: [cc_call_center_sk#22, cc_county#23] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_county), EqualTo(cc_county,Williamson County), IsNotNull(cc_call_center_sk)] ReadSchema: struct -(36) FilterExecTransformer +(41) FilterExecTransformer Input [2]: [cc_call_center_sk#22, cc_county#23] Arguments: ((isnotnull(cc_county#23) AND (cc_county#23 = Williamson County)) AND isnotnull(cc_call_center_sk#22)) -(37) ProjectExecTransformer +(42) ProjectExecTransformer Output [1]: [cc_call_center_sk#22] Input [2]: [cc_call_center_sk#22, cc_county#23] -(38) WholeStageCodegenTransformer (11) +(43) WholeStageCodegenTransformer (9) Input [1]: [cc_call_center_sk#22] Arguments: false -(39) ColumnarBroadcastExchange +(44) ColumnarBroadcastExchange Input [1]: [cc_call_center_sk#22] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -(40) InputAdapter +(45) InputAdapter Input [1]: [cc_call_center_sk#22] -(41) InputIteratorTransformer +(46) InputIteratorTransformer Input [1]: [cc_call_center_sk#22] -(42) BroadcastHashJoinExecTransformer +(47) BroadcastHashJoinExecTransformer Left keys [1]: [cs_call_center_sk#3] Right keys [1]: [cc_call_center_sk#22] Join type: Inner Join condition: None -(43) ProjectExecTransformer +(48) ProjectExecTransformer Output [4]: [cs_ship_date_sk#1, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [6]: [cs_ship_date_sk#1, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cc_call_center_sk#22] -(44) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(49) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#24, d_date#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2002-02-01), LessThanOrEqual(d_date,2002-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(45) FilterExecTransformer +(50) FilterExecTransformer Input [2]: [d_date_sk#24, d_date#25] Arguments: (((isnotnull(d_date#25) AND (d_date#25 >= 2002-02-01)) AND (d_date#25 <= 2002-04-02)) AND isnotnull(d_date_sk#24)) -(46) ProjectExecTransformer +(51) ProjectExecTransformer Output [1]: [d_date_sk#24] Input [2]: [d_date_sk#24, d_date#25] -(47) WholeStageCodegenTransformer (12) +(52) WholeStageCodegenTransformer (10) Input [1]: [d_date_sk#24] Arguments: false -(48) ColumnarBroadcastExchange +(53) ColumnarBroadcastExchange Input [1]: [d_date_sk#24] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -(49) InputAdapter +(54) InputAdapter Input [1]: [d_date_sk#24] -(50) InputIteratorTransformer +(55) InputIteratorTransformer Input [1]: [d_date_sk#24] -(51) BroadcastHashJoinExecTransformer +(56) BroadcastHashJoinExecTransformer Left keys [1]: [cs_ship_date_sk#1] Right keys [1]: [d_date_sk#24] Join type: Inner Join condition: None -(52) ProjectExecTransformer +(57) ProjectExecTransformer Output [3]: [cs_order_number#5, UnscaledValue(cs_ext_ship_cost#6) AS _pre_1#26, UnscaledValue(cs_net_profit#7) AS _pre_2#27] Input [5]: [cs_ship_date_sk#1, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, d_date_sk#24] -(53) RegularHashAggregateExecTransformer +(58) RegularHashAggregateExecTransformer Input [3]: [cs_order_number#5, _pre_1#26, _pre_2#27] Keys [1]: [cs_order_number#5] Functions [2]: [partial_sum(_pre_1#26), partial_sum(_pre_2#27)] Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29] Results [3]: [cs_order_number#5, sum#30, sum#31] -(54) RegularHashAggregateExecTransformer +(59) RegularHashAggregateExecTransformer Input [3]: [cs_order_number#5, sum#30, sum#31] Keys [1]: [cs_order_number#5] Functions [2]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(UnscaledValue(cs_net_profit#7))] Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29] Results [3]: [cs_order_number#5, sum#30, sum#31] -(55) RegularHashAggregateExecTransformer +(60) RegularHashAggregateExecTransformer Input [3]: [cs_order_number#5, sum#30, sum#31] Keys: [] Functions [3]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(UnscaledValue(cs_net_profit#7)), partial_count(distinct cs_order_number#5)] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29, count(cs_order_number#5)#32] Results [3]: [sum#30, sum#31, count#33] -(56) RegularHashAggregateExecTransformer +(61) RegularHashAggregateExecTransformer Input [3]: [sum#30, sum#31, count#33] Keys: [] Functions [3]: [sum(UnscaledValue(cs_ext_ship_cost#6)), sum(UnscaledValue(cs_net_profit#7)), count(distinct cs_order_number#5)] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29, count(cs_order_number#5)#32] Results [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29, count(cs_order_number#5)#32] -(57) ProjectExecTransformer +(62) ProjectExecTransformer Output [3]: [count(cs_order_number#5)#32 AS order count #34, MakeDecimal(sum(UnscaledValue(cs_ext_ship_cost#6))#28,17,2) AS total shipping cost #35, MakeDecimal(sum(UnscaledValue(cs_net_profit#7))#29,17,2) AS total net profit #36] Input [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, sum(UnscaledValue(cs_net_profit#7))#29, count(cs_order_number#5)#32] -(58) WholeStageCodegenTransformer (13) +(63) WholeStageCodegenTransformer (11) Input [3]: [order count #34, total shipping cost #35, total net profit #36] Arguments: false -(59) VeloxColumnarToRow +(64) VeloxColumnarToRow Input [3]: [order count #34, total shipping cost #35, total net profit #36] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (71) -+- ^ RegularHashAggregateExecTransformer (69) - +- ^ InputIteratorTransformer (68) - +- ColumnarExchange (66) - +- VeloxResizeBatches (65) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ FilterExecTransformer (61) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (60) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#9, [id=#1] +ObjectHashAggregate (75) ++- VeloxColumnarToRow (74) + +- ColumnarExchange (73) + +- VeloxResizeBatches (72) + +- RowToVeloxColumnar (71) + +- ObjectHashAggregate (70) + +- VeloxColumnarToRow (69) + +- ^ ProjectExecTransformer (67) + +- ^ FilterExecTransformer (66) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (65) -(60) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(65) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,GA), IsNotNull(ca_address_sk)] ReadSchema: struct -(61) FilterExecTransformer +(66) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_state#21] Arguments: ((isnotnull(ca_state#21) AND (ca_state#21 = GA)) AND isnotnull(ca_address_sk#20)) -(62) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#20, 42) AS _pre_3#37] +(67) ProjectExecTransformer +Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_state#21] -(63) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#37] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#37, 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [buf#38] -Results [1]: [buf#39] - -(64) WholeStageCodegenTransformer (1) -Input [1]: [buf#39] +(68) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#20] Arguments: false -(65) VeloxResizeBatches -Input [1]: [buf#39] -Arguments: 1024, 2147483647, 10485760 - -(66) ColumnarExchange -Input [1]: [buf#39] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] - -(67) InputAdapter -Input [1]: [buf#39] - -(68) InputIteratorTransformer -Input [1]: [buf#39] +(69) VeloxColumnarToRow +Input [1]: [ca_address_sk#20] -(69) RegularHashAggregateExecTransformer -Input [1]: [buf#39] +(70) ObjectHashAggregate +Input [1]: [ca_address_sk#20] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#40] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#40 AS bloomFilter#41] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [buf#37] +Results [1]: [buf#38] -(70) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#41] -Arguments: false +(71) RowToVeloxColumnar +Input [1]: [buf#38] -(71) VeloxColumnarToRow -Input [1]: [bloomFilter#41] +(72) VeloxResizeBatches +Input [1]: [buf#38] +Arguments: 1024, 2147483647, 10485760 -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (83) -+- ^ RegularHashAggregateExecTransformer (81) - +- ^ InputIteratorTransformer (80) - +- ColumnarExchange (78) - +- VeloxResizeBatches (77) - +- ^ FlushableHashAggregateExecTransformer (75) - +- ^ ProjectExecTransformer (74) - +- ^ FilterExecTransformer (73) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.call_center (72) +(73) ColumnarExchange +Input [1]: [buf#38] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] +(74) VeloxColumnarToRow +Input [1]: [buf#38] -(72) FileSourceScanExecTransformer parquet spark_catalog.default.call_center +(75) ObjectHashAggregate +Input [1]: [buf#38] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#39] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#39 AS bloomFilter#40] + +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#10, [id=#2] +ObjectHashAggregate (86) ++- VeloxColumnarToRow (85) + +- ColumnarExchange (84) + +- VeloxResizeBatches (83) + +- RowToVeloxColumnar (82) + +- ObjectHashAggregate (81) + +- VeloxColumnarToRow (80) + +- ^ ProjectExecTransformer (78) + +- ^ FilterExecTransformer (77) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.call_center (76) + + +(76) FileSourceScanExecTransformer parquet spark_catalog.default.call_center Output [2]: [cc_call_center_sk#22, cc_county#23] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_county), EqualTo(cc_county,Williamson County), IsNotNull(cc_call_center_sk)] ReadSchema: struct -(73) FilterExecTransformer +(77) FilterExecTransformer Input [2]: [cc_call_center_sk#22, cc_county#23] Arguments: ((isnotnull(cc_county#23) AND (cc_county#23 = Williamson County)) AND isnotnull(cc_call_center_sk#22)) -(74) ProjectExecTransformer -Output [1]: [xxhash64(cc_call_center_sk#22, 42) AS _pre_4#42] +(78) ProjectExecTransformer +Output [1]: [cc_call_center_sk#22] Input [2]: [cc_call_center_sk#22, cc_county#23] -(75) FlushableHashAggregateExecTransformer -Input [1]: [_pre_4#42] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_4#42, 4, 144, 0, 0)] -Aggregate Attributes [1]: [buf#43] -Results [1]: [buf#44] - -(76) WholeStageCodegenTransformer (3) -Input [1]: [buf#44] +(79) WholeStageCodegenTransformer (2) +Input [1]: [cc_call_center_sk#22] Arguments: false -(77) VeloxResizeBatches -Input [1]: [buf#44] -Arguments: 1024, 2147483647, 10485760 - -(78) ColumnarExchange -Input [1]: [buf#44] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] - -(79) InputAdapter -Input [1]: [buf#44] - -(80) InputIteratorTransformer -Input [1]: [buf#44] +(80) VeloxColumnarToRow +Input [1]: [cc_call_center_sk#22] -(81) RegularHashAggregateExecTransformer -Input [1]: [buf#44] +(81) ObjectHashAggregate +Input [1]: [cc_call_center_sk#22] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)#45] -Results [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)#45 AS bloomFilter#46] +Functions [1]: [partial_bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [buf#41] +Results [1]: [buf#42] -(82) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#46] -Arguments: false +(82) RowToVeloxColumnar +Input [1]: [buf#42] -(83) VeloxColumnarToRow -Input [1]: [bloomFilter#46] +(83) VeloxResizeBatches +Input [1]: [buf#42] +Arguments: 1024, 2147483647, 10485760 -Subquery:3 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#11, [id=#3] -VeloxColumnarToRow (95) -+- ^ RegularHashAggregateExecTransformer (93) - +- ^ InputIteratorTransformer (92) - +- ColumnarExchange (90) - +- VeloxResizeBatches (89) - +- ^ FlushableHashAggregateExecTransformer (87) - +- ^ ProjectExecTransformer (86) - +- ^ FilterExecTransformer (85) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (84) +(84) ColumnarExchange +Input [1]: [buf#42] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] +(85) VeloxColumnarToRow +Input [1]: [buf#42] -(84) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(86) ObjectHashAggregate +Input [1]: [buf#42] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)#43] +Results [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 144, 0, 0)#43 AS bloomFilter#44] + +Subquery:3 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#11, [id=#3] +ObjectHashAggregate (97) ++- VeloxColumnarToRow (96) + +- ColumnarExchange (95) + +- VeloxResizeBatches (94) + +- RowToVeloxColumnar (93) + +- ObjectHashAggregate (92) + +- VeloxColumnarToRow (91) + +- ^ ProjectExecTransformer (89) + +- ^ FilterExecTransformer (88) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) + + +(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#24, d_date#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2002-02-01), LessThanOrEqual(d_date,2002-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(85) FilterExecTransformer +(88) FilterExecTransformer Input [2]: [d_date_sk#24, d_date#25] Arguments: (((isnotnull(d_date#25) AND (d_date#25 >= 2002-02-01)) AND (d_date#25 <= 2002-04-02)) AND isnotnull(d_date_sk#24)) -(86) ProjectExecTransformer -Output [1]: [xxhash64(d_date_sk#24, 42) AS _pre_5#47] +(89) ProjectExecTransformer +Output [1]: [d_date_sk#24] Input [2]: [d_date_sk#24, d_date#25] -(87) FlushableHashAggregateExecTransformer -Input [1]: [_pre_5#47] +(90) WholeStageCodegenTransformer (3) +Input [1]: [d_date_sk#24] +Arguments: false + +(91) VeloxColumnarToRow +Input [1]: [d_date_sk#24] + +(92) ObjectHashAggregate +Input [1]: [d_date_sk#24] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_5#47, 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [buf#48] -Results [1]: [buf#49] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [buf#45] +Results [1]: [buf#46] -(88) WholeStageCodegenTransformer (5) -Input [1]: [buf#49] -Arguments: false +(93) RowToVeloxColumnar +Input [1]: [buf#46] -(89) VeloxResizeBatches -Input [1]: [buf#49] +(94) VeloxResizeBatches +Input [1]: [buf#46] Arguments: 1024, 2147483647, 10485760 -(90) ColumnarExchange -Input [1]: [buf#49] +(95) ColumnarExchange +Input [1]: [buf#46] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(91) InputAdapter -Input [1]: [buf#49] +(96) VeloxColumnarToRow +Input [1]: [buf#46] -(92) InputIteratorTransformer -Input [1]: [buf#49] - -(93) RegularHashAggregateExecTransformer -Input [1]: [buf#49] +(97) ObjectHashAggregate +Input [1]: [buf#46] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#50] -Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#50 AS bloomFilter#51] - -(94) WholeStageCodegenTransformer (6) -Input [1]: [bloomFilter#51] -Arguments: false - -(95) VeloxColumnarToRow -Input [1]: [bloomFilter#51] - -Subquery:4 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (71) -+- ^ RegularHashAggregateExecTransformer (69) - +- ^ InputIteratorTransformer (68) - +- ColumnarExchange (66) - +- VeloxResizeBatches (65) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ FilterExecTransformer (61) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (60) - - -Subquery:5 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (83) -+- ^ RegularHashAggregateExecTransformer (81) - +- ^ InputIteratorTransformer (80) - +- ColumnarExchange (78) - +- VeloxResizeBatches (77) - +- ^ FlushableHashAggregateExecTransformer (75) - +- ^ ProjectExecTransformer (74) - +- ^ FilterExecTransformer (73) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.call_center (72) - - -Subquery:6 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#11, [id=#3] -VeloxColumnarToRow (95) -+- ^ RegularHashAggregateExecTransformer (93) - +- ^ InputIteratorTransformer (92) - +- ColumnarExchange (90) - +- VeloxResizeBatches (89) - +- ^ FlushableHashAggregateExecTransformer (87) - +- ^ ProjectExecTransformer (86) - +- ^ FilterExecTransformer (85) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (84) - +Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#47] +Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#47 AS bloomFilter#48] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt index b74f007b5fe..bdbea03e494 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt @@ -1,5 +1,5 @@ VeloxColumnarToRow - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [count(cs_order_number),sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit))] RegularHashAggregateExecTransformer [sum,sum,count] [sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count] RegularHashAggregateExecTransformer [cs_order_number] [sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count,sum,sum,count] @@ -18,120 +18,85 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [cs_order_number,cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk,cs_warehouse_sk,cs_ext_ship_cost,cs_net_profit] #1 VeloxResizeBatches - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (5) ProjectExecTransformer [cs_order_number,cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk,cs_warehouse_sk,cs_ext_ship_cost,cs_net_profit] - FilterExecTransformer [cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #2 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(cc_call_center_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [cc_call_center_sk] - FilterExecTransformer [cc_county,cc_call_center_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.call_center [cc_call_center_sk,cc_county] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk,cs_warehouse_sk,cs_order_number,cs_ext_ship_cost,cs_net_profit,cs_sold_date_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #2 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(cc_call_center_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_state,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(cc_call_center_sk, 42), 4, 144, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #3 VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [cc_call_center_sk] - FilterExecTransformer [cc_county,cc_call_center_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.call_center [cc_call_center_sk,cc_county] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [cc_call_center_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [cc_call_center_sk] + FilterExecTransformer [cc_county,cc_call_center_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.call_center [cc_call_center_sk,cc_county] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + RowToVeloxColumnar + ObjectHashAggregate [d_date_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_ship_date_sk,cs_ship_addr_sk,cs_call_center_sk,cs_warehouse_sk,cs_order_number,cs_ext_ship_cost,cs_net_profit,cs_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarExchange [cs_order_number,cs_warehouse_sk] #5 VeloxResizeBatches - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (6) ProjectExecTransformer [cs_order_number,cs_warehouse_sk] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_warehouse_sk,cs_order_number,cs_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarExchange [cr_order_number] #6 VeloxResizeBatches - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (7) ProjectExecTransformer [cr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns [cr_order_number,cr_returned_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #7 - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (8) ProjectExecTransformer [ca_address_sk] FilterExecTransformer [ca_state,ca_address_sk] FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (9) ProjectExecTransformer [cc_call_center_sk] FilterExecTransformer [cc_county,cc_call_center_sk] FileSourceScanExecTransformer parquet spark_catalog.default.call_center [cc_call_center_sk,cc_county] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (10) ProjectExecTransformer [d_date_sk] FilterExecTransformer [d_date,d_date_sk] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/explain.txt index 8d95cd4ac26..6aa02631720 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/explain.txt @@ -1,65 +1,69 @@ == Physical Plan == -VeloxColumnarToRow (84) -+- ^ SortExecTransformer (82) - +- ^ InputIteratorTransformer (81) - +- ColumnarExchange (79) - +- VeloxResizeBatches (78) - +- ^ ProjectExecTransformer (76) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (75) - :- ^ ProjectExecTransformer (35) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (34) - : :- ^ ProjectExecTransformer (26) - : : +- ^ RegularHashAggregateExecTransformer (25) - : : +- ^ InputIteratorTransformer (24) - : : +- ColumnarExchange (22) - : : +- VeloxResizeBatches (21) - : : +- ^ ProjectExecTransformer (19) - : : +- ^ FlushableHashAggregateExecTransformer (18) - : : +- ^ ProjectExecTransformer (17) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (16) +VeloxColumnarToRow (88) ++- ^ SortExecTransformer (86) + +- ^ InputIteratorTransformer (85) + +- ColumnarExchange (83) + +- VeloxResizeBatches (82) + +- ^ ProjectExecTransformer (80) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (79) + :- ^ ProjectExecTransformer (37) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (36) + : :- ^ ProjectExecTransformer (28) + : : +- ^ RegularHashAggregateExecTransformer (27) + : : +- ^ InputIteratorTransformer (26) + : : +- ColumnarExchange (24) + : : +- VeloxResizeBatches (23) + : : +- ^ ProjectExecTransformer (21) + : : +- ^ FlushableHashAggregateExecTransformer (20) + : : +- ^ ProjectExecTransformer (19) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) : : :- ^ InputIteratorTransformer (9) : : : +- ColumnarUnion (7) : : : :- ^ ProjectExecTransformer (2) : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (1) : : : +- ^ ProjectExecTransformer (5) : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (4) - : : +- ^ InputIteratorTransformer (15) - : : +- ColumnarBroadcastExchange (13) - : : +- ^ FilterExecTransformer (11) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (10) - : +- ^ InputIteratorTransformer (33) - : +- ColumnarBroadcastExchange (31) - : +- ^ ProjectExecTransformer (29) - : +- ^ FilterExecTransformer (28) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (27) - +- ^ InputIteratorTransformer (74) - +- ColumnarBroadcastExchange (72) - +- ^ ProjectExecTransformer (70) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (69) - :- ^ ProjectExecTransformer (61) - : +- ^ RegularHashAggregateExecTransformer (60) - : +- ^ InputIteratorTransformer (59) - : +- ColumnarExchange (57) - : +- VeloxResizeBatches (56) - : +- ^ ProjectExecTransformer (54) - : +- ^ FlushableHashAggregateExecTransformer (53) - : +- ^ ProjectExecTransformer (52) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51) - : :- ^ InputIteratorTransformer (44) - : : +- ColumnarUnion (42) - : : :- ^ ProjectExecTransformer (37) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (36) - : : +- ^ ProjectExecTransformer (40) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (39) - : +- ^ InputIteratorTransformer (50) - : +- ColumnarBroadcastExchange (48) - : +- ^ FilterExecTransformer (46) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (45) - +- ^ InputIteratorTransformer (68) - +- ColumnarBroadcastExchange (66) - +- ^ ProjectExecTransformer (64) - +- ^ FilterExecTransformer (63) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (62) + : : +- ^ InputIteratorTransformer (17) + : : +- ColumnarBroadcastExchange (15) + : : +- RowToVeloxColumnar (14) + : : +- * Filter (13) + : : +- VeloxColumnarToRow (12) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (10) + : +- ^ InputIteratorTransformer (35) + : +- ColumnarBroadcastExchange (33) + : +- ^ ProjectExecTransformer (31) + : +- ^ FilterExecTransformer (30) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (29) + +- ^ InputIteratorTransformer (78) + +- ColumnarBroadcastExchange (76) + +- ^ ProjectExecTransformer (74) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (73) + :- ^ ProjectExecTransformer (65) + : +- ^ RegularHashAggregateExecTransformer (64) + : +- ^ InputIteratorTransformer (63) + : +- ColumnarExchange (61) + : +- VeloxResizeBatches (60) + : +- ^ ProjectExecTransformer (58) + : +- ^ FlushableHashAggregateExecTransformer (57) + : +- ^ ProjectExecTransformer (56) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (55) + : :- ^ InputIteratorTransformer (46) + : : +- ColumnarUnion (44) + : : :- ^ ProjectExecTransformer (39) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (38) + : : +- ^ ProjectExecTransformer (42) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (41) + : +- ^ InputIteratorTransformer (54) + : +- ColumnarBroadcastExchange (52) + : +- RowToVeloxColumnar (51) + : +- * Filter (50) + : +- VeloxColumnarToRow (49) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (47) + +- ^ InputIteratorTransformer (72) + +- ColumnarBroadcastExchange (70) + +- ^ ProjectExecTransformer (68) + +- ^ FilterExecTransformer (67) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (66) (1) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales @@ -108,475 +112,457 @@ Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(11) FilterExecTransformer +(11) WholeStageCodegenTransformer (4) Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -Arguments: ((isnotnull(d_date_sk#9) AND isnotnull(d_week_seq#10)) AND velox_might_contain(Subquery scalar-subquery#12, [id=#1], xxhash64(d_week_seq#10, 42))) +Arguments: false -(12) WholeStageCodegenTransformer (5) +(12) VeloxColumnarToRow +Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] + +(13) Filter [codegen id : 1] +Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] +Condition : ((isnotnull(d_date_sk#9) AND isnotnull(d_week_seq#10)) AND might_contain(Subquery scalar-subquery#12, [id=#1], xxhash64(d_week_seq#10, 42))) + +(14) RowToVeloxColumnar Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -Arguments: false -(13) ColumnarBroadcastExchange +(15) ColumnarBroadcastExchange Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] -(14) InputAdapter +(16) InputAdapter Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -(15) InputIteratorTransformer +(17) InputIteratorTransformer Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -(16) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [sold_date_sk#3] Right keys [1]: [d_date_sk#9] Join type: Inner Join condition: None -(17) ProjectExecTransformer +(19) ProjectExecTransformer Output [8]: [d_week_seq#10, UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END) AS _pre_1#13, UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END) AS _pre_2#14, UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END) AS _pre_3#15, UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END) AS _pre_4#16, UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END) AS _pre_5#17, UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END) AS _pre_6#18, UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END) AS _pre_7#19] Input [5]: [sold_date_sk#3, sales_price#4, d_date_sk#9, d_week_seq#10, d_day_name#11] -(18) FlushableHashAggregateExecTransformer +(20) FlushableHashAggregateExecTransformer Input [8]: [d_week_seq#10, _pre_1#13, _pre_2#14, _pre_3#15, _pre_4#16, _pre_5#17, _pre_6#18, _pre_7#19] Keys [1]: [d_week_seq#10] Functions [7]: [partial_sum(_pre_1#13), partial_sum(_pre_2#14), partial_sum(_pre_3#15), partial_sum(_pre_4#16), partial_sum(_pre_5#17), partial_sum(_pre_6#18), partial_sum(_pre_7#19)] Aggregate Attributes [7]: [sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26] Results [8]: [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] -(19) ProjectExecTransformer +(21) ProjectExecTransformer Output [9]: [hash(d_week_seq#10, 42) AS hash_partition_key#34, d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] Input [8]: [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] -(20) WholeStageCodegenTransformer (6) +(22) WholeStageCodegenTransformer (5) Input [9]: [hash_partition_key#34, d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] Arguments: false -(21) VeloxResizeBatches +(23) VeloxResizeBatches Input [9]: [hash_partition_key#34, d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] Arguments: 1024, 2147483647, 10485760 -(22) ColumnarExchange +(24) ColumnarExchange Input [9]: [hash_partition_key#34, d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] Arguments: hashpartitioning(d_week_seq#10, 1), ENSURE_REQUIREMENTS, [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33], [plan_id=3], [shuffle_writer_type=hash] -(23) InputAdapter +(25) InputAdapter Input [8]: [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] -(24) InputIteratorTransformer +(26) InputIteratorTransformer Input [8]: [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] -(25) RegularHashAggregateExecTransformer +(27) RegularHashAggregateExecTransformer Input [8]: [d_week_seq#10, sum#27, sum#28, sum#29, sum#30, sum#31, sum#32, sum#33] Keys [1]: [d_week_seq#10] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))] Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#41] Results [8]: [d_week_seq#10, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#41] -(26) ProjectExecTransformer +(28) ProjectExecTransformer Output [8]: [d_week_seq#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#35,17,2) AS sun_sales#42, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#36,17,2) AS mon_sales#43, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#37,17,2) AS tue_sales#44, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#38,17,2) AS wed_sales#45, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#39,17,2) AS thu_sales#46, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#40,17,2) AS fri_sales#47, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#41,17,2) AS sat_sales#48] Input [8]: [d_week_seq#10, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#41] -(27) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(29) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_week_seq#49, d_year#50] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_week_seq)] ReadSchema: struct -(28) FilterExecTransformer +(30) FilterExecTransformer Input [2]: [d_week_seq#49, d_year#50] Arguments: ((isnotnull(d_year#50) AND (d_year#50 = 2001)) AND isnotnull(d_week_seq#49)) -(29) ProjectExecTransformer +(31) ProjectExecTransformer Output [1]: [d_week_seq#49] Input [2]: [d_week_seq#49, d_year#50] -(30) WholeStageCodegenTransformer (7) +(32) WholeStageCodegenTransformer (6) Input [1]: [d_week_seq#49] Arguments: false -(31) ColumnarBroadcastExchange +(33) ColumnarBroadcastExchange Input [1]: [d_week_seq#49] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] -(32) InputAdapter +(34) InputAdapter Input [1]: [d_week_seq#49] -(33) InputIteratorTransformer +(35) InputIteratorTransformer Input [1]: [d_week_seq#49] -(34) BroadcastHashJoinExecTransformer +(36) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#10] Right keys [1]: [d_week_seq#49] Join type: Inner Join condition: None -(35) ProjectExecTransformer +(37) ProjectExecTransformer Output [8]: [d_week_seq#10 AS d_week_seq1#51, sun_sales#42 AS sun_sales1#52, mon_sales#43 AS mon_sales1#53, tue_sales#44 AS tue_sales1#54, wed_sales#45 AS wed_sales1#55, thu_sales#46 AS thu_sales1#56, fri_sales#47 AS fri_sales1#57, sat_sales#48 AS sat_sales1#58] Input [9]: [d_week_seq#10, sun_sales#42, mon_sales#43, tue_sales#44, wed_sales#45, thu_sales#46, fri_sales#47, sat_sales#48, d_week_seq#49] -(36) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(38) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [2]: [ws_ext_sales_price#59, ws_sold_date_sk#60] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ws_sold_date_sk#60)] ReadSchema: struct -(37) ProjectExecTransformer +(39) ProjectExecTransformer Output [2]: [ws_sold_date_sk#60 AS sold_date_sk#61, ws_ext_sales_price#59 AS sales_price#62] Input [2]: [ws_ext_sales_price#59, ws_sold_date_sk#60] -(38) WholeStageCodegenTransformer (8) +(40) WholeStageCodegenTransformer (7) Input [2]: [sold_date_sk#61, sales_price#62] Arguments: false -(39) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(41) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [2]: [cs_ext_sales_price#63, cs_sold_date_sk#64] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(cs_sold_date_sk#64)] ReadSchema: struct -(40) ProjectExecTransformer +(42) ProjectExecTransformer Output [2]: [cs_sold_date_sk#64 AS sold_date_sk#65, cs_ext_sales_price#63 AS sales_price#66] Input [2]: [cs_ext_sales_price#63, cs_sold_date_sk#64] -(41) WholeStageCodegenTransformer (9) +(43) WholeStageCodegenTransformer (8) Input [2]: [sold_date_sk#65, sales_price#66] Arguments: false -(42) ColumnarUnion +(44) ColumnarUnion Arguments: UnknownPartitioning(0) -(43) InputAdapter +(45) InputAdapter Input [2]: [sold_date_sk#61, sales_price#62] -(44) InputIteratorTransformer +(46) InputIteratorTransformer Input [2]: [sold_date_sk#61, sales_price#62] -(45) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(47) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(46) FilterExecTransformer +(48) WholeStageCodegenTransformer (10) Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] -Arguments: ((isnotnull(d_date_sk#67) AND isnotnull(d_week_seq#68)) AND velox_might_contain(Subquery scalar-subquery#70, [id=#5], xxhash64(d_week_seq#68, 42))) +Arguments: false -(47) WholeStageCodegenTransformer (12) +(49) VeloxColumnarToRow +Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] + +(50) Filter [codegen id : 2] +Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] +Condition : ((isnotnull(d_date_sk#67) AND isnotnull(d_week_seq#68)) AND might_contain(Subquery scalar-subquery#70, [id=#5], xxhash64(d_week_seq#68, 42))) + +(51) RowToVeloxColumnar Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] -Arguments: false -(48) ColumnarBroadcastExchange +(52) ColumnarBroadcastExchange Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] -(49) InputAdapter +(53) InputAdapter Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] -(50) InputIteratorTransformer +(54) InputIteratorTransformer Input [3]: [d_date_sk#67, d_week_seq#68, d_day_name#69] -(51) BroadcastHashJoinExecTransformer +(55) BroadcastHashJoinExecTransformer Left keys [1]: [sold_date_sk#61] Right keys [1]: [d_date_sk#67] Join type: Inner Join condition: None -(52) ProjectExecTransformer +(56) ProjectExecTransformer Output [8]: [d_week_seq#68, UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END) AS _pre_8#71, UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END) AS _pre_9#72, UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END) AS _pre_10#73, UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END) AS _pre_11#74, UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END) AS _pre_12#75, UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END) AS _pre_13#76, UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END) AS _pre_14#77] Input [5]: [sold_date_sk#61, sales_price#62, d_date_sk#67, d_week_seq#68, d_day_name#69] -(53) FlushableHashAggregateExecTransformer +(57) FlushableHashAggregateExecTransformer Input [8]: [d_week_seq#68, _pre_8#71, _pre_9#72, _pre_10#73, _pre_11#74, _pre_12#75, _pre_13#76, _pre_14#77] Keys [1]: [d_week_seq#68] Functions [7]: [partial_sum(_pre_8#71), partial_sum(_pre_9#72), partial_sum(_pre_10#73), partial_sum(_pre_11#74), partial_sum(_pre_12#75), partial_sum(_pre_13#76), partial_sum(_pre_14#77)] Aggregate Attributes [7]: [sum#78, sum#79, sum#80, sum#81, sum#82, sum#83, sum#84] Results [8]: [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] -(54) ProjectExecTransformer +(58) ProjectExecTransformer Output [9]: [hash(d_week_seq#68, 42) AS hash_partition_key#92, d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] Input [8]: [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] -(55) WholeStageCodegenTransformer (13) +(59) WholeStageCodegenTransformer (11) Input [9]: [hash_partition_key#92, d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] Arguments: false -(56) VeloxResizeBatches +(60) VeloxResizeBatches Input [9]: [hash_partition_key#92, d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] Arguments: 1024, 2147483647, 10485760 -(57) ColumnarExchange +(61) ColumnarExchange Input [9]: [hash_partition_key#92, d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] Arguments: hashpartitioning(d_week_seq#68, 1), ENSURE_REQUIREMENTS, [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91], [plan_id=7], [shuffle_writer_type=hash] -(58) InputAdapter +(62) InputAdapter Input [8]: [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] -(59) InputIteratorTransformer +(63) InputIteratorTransformer Input [8]: [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] -(60) RegularHashAggregateExecTransformer +(64) RegularHashAggregateExecTransformer Input [8]: [d_week_seq#68, sum#85, sum#86, sum#87, sum#88, sum#89, sum#90, sum#91] Keys [1]: [d_week_seq#68] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END)), sum(UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END))] Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END))#41] Results [8]: [d_week_seq#68, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END))#41] -(61) ProjectExecTransformer +(65) ProjectExecTransformer Output [8]: [d_week_seq#68, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END))#35,17,2) AS sun_sales#93, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END))#36,17,2) AS mon_sales#94, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END))#37,17,2) AS tue_sales#95, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END))#38,17,2) AS wed_sales#96, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END))#39,17,2) AS thu_sales#97, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END))#40,17,2) AS fri_sales#98, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END))#41,17,2) AS sat_sales#99] Input [8]: [d_week_seq#68, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Sunday ) THEN sales_price#62 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Monday ) THEN sales_price#62 END))#36, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Tuesday ) THEN sales_price#62 END))#37, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Wednesday) THEN sales_price#62 END))#38, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Thursday ) THEN sales_price#62 END))#39, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Friday ) THEN sales_price#62 END))#40, sum(UnscaledValue(CASE WHEN (d_day_name#69 = Saturday ) THEN sales_price#62 END))#41] -(62) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(66) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_week_seq#100, d_year#101] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_week_seq)] ReadSchema: struct -(63) FilterExecTransformer +(67) FilterExecTransformer Input [2]: [d_week_seq#100, d_year#101] Arguments: ((isnotnull(d_year#101) AND (d_year#101 = 2002)) AND isnotnull(d_week_seq#100)) -(64) ProjectExecTransformer +(68) ProjectExecTransformer Output [1]: [d_week_seq#100] Input [2]: [d_week_seq#100, d_year#101] -(65) WholeStageCodegenTransformer (14) +(69) WholeStageCodegenTransformer (12) Input [1]: [d_week_seq#100] Arguments: false -(66) ColumnarBroadcastExchange +(70) ColumnarBroadcastExchange Input [1]: [d_week_seq#100] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -(67) InputAdapter +(71) InputAdapter Input [1]: [d_week_seq#100] -(68) InputIteratorTransformer +(72) InputIteratorTransformer Input [1]: [d_week_seq#100] -(69) BroadcastHashJoinExecTransformer +(73) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#68] Right keys [1]: [d_week_seq#100] Join type: Inner Join condition: None -(70) ProjectExecTransformer +(74) ProjectExecTransformer Output [8]: [d_week_seq#68 AS d_week_seq2#102, sun_sales#93 AS sun_sales2#103, mon_sales#94 AS mon_sales2#104, tue_sales#95 AS tue_sales2#105, wed_sales#96 AS wed_sales2#106, thu_sales#97 AS thu_sales2#107, fri_sales#98 AS fri_sales2#108, sat_sales#99 AS sat_sales2#109] Input [9]: [d_week_seq#68, sun_sales#93, mon_sales#94, tue_sales#95, wed_sales#96, thu_sales#97, fri_sales#98, sat_sales#99, d_week_seq#100] -(71) WholeStageCodegenTransformer (15) +(75) WholeStageCodegenTransformer (13) Input [8]: [d_week_seq2#102, sun_sales2#103, mon_sales2#104, tue_sales2#105, wed_sales2#106, thu_sales2#107, fri_sales2#108, sat_sales2#109] Arguments: false -(72) ColumnarBroadcastExchange +(76) ColumnarBroadcastExchange Input [8]: [d_week_seq2#102, sun_sales2#103, mon_sales2#104, tue_sales2#105, wed_sales2#106, thu_sales2#107, fri_sales2#108, sat_sales2#109] Arguments: HashedRelationBroadcastMode(List(cast((input[0, int, true] - 53) as bigint)),false), [plan_id=9] -(73) InputAdapter +(77) InputAdapter Input [8]: [d_week_seq2#102, sun_sales2#103, mon_sales2#104, tue_sales2#105, wed_sales2#106, thu_sales2#107, fri_sales2#108, sat_sales2#109] -(74) InputIteratorTransformer +(78) InputIteratorTransformer Input [8]: [d_week_seq2#102, sun_sales2#103, mon_sales2#104, tue_sales2#105, wed_sales2#106, thu_sales2#107, fri_sales2#108, sat_sales2#109] -(75) BroadcastHashJoinExecTransformer +(79) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq1#51] Right keys [1]: [(d_week_seq2#102 - 53)] Join type: Inner Join condition: None -(76) ProjectExecTransformer +(80) ProjectExecTransformer Output [8]: [d_week_seq1#51, round((sun_sales1#52 / sun_sales2#103), 2) AS round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1#53 / mon_sales2#104), 2) AS round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1#54 / tue_sales2#105), 2) AS round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1#55 / wed_sales2#106), 2) AS round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1#56 / thu_sales2#107), 2) AS round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1#57 / fri_sales2#108), 2) AS round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1#58 / sat_sales2#109), 2) AS round((sat_sales1 / sat_sales2), 2)#116] Input [16]: [d_week_seq1#51, sun_sales1#52, mon_sales1#53, tue_sales1#54, wed_sales1#55, thu_sales1#56, fri_sales1#57, sat_sales1#58, d_week_seq2#102, sun_sales2#103, mon_sales2#104, tue_sales2#105, wed_sales2#106, thu_sales2#107, fri_sales2#108, sat_sales2#109] -(77) WholeStageCodegenTransformer (16) +(81) WholeStageCodegenTransformer (14) Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] Arguments: false -(78) VeloxResizeBatches +(82) VeloxResizeBatches Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] Arguments: 1024, 2147483647, 10485760 -(79) ColumnarExchange +(83) ColumnarExchange Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] Arguments: rangepartitioning(d_week_seq1#51 ASC NULLS FIRST, 1), ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] -(80) InputAdapter +(84) InputAdapter Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] -(81) InputIteratorTransformer +(85) InputIteratorTransformer Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] -(82) SortExecTransformer +(86) SortExecTransformer Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] Arguments: [d_week_seq1#51 ASC NULLS FIRST], true, 0 -(83) WholeStageCodegenTransformer (17) +(87) WholeStageCodegenTransformer (15) Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] Arguments: false -(84) VeloxColumnarToRow +(88) VeloxColumnarToRow Input [8]: [d_week_seq1#51, round((sun_sales1 / sun_sales2), 2)#110, round((mon_sales1 / mon_sales2), 2)#111, round((tue_sales1 / tue_sales2), 2)#112, round((wed_sales1 / wed_sales2), 2)#113, round((thu_sales1 / thu_sales2), 2)#114, round((fri_sales1 / fri_sales2), 2)#115, round((sat_sales1 / sat_sales2), 2)#116] ===== Subqueries ===== -Subquery:1 Hosting operator id = 11 Hosting Expression = Subquery scalar-subquery#12, [id=#1] -VeloxColumnarToRow (96) -+- ^ RegularHashAggregateExecTransformer (94) - +- ^ InputIteratorTransformer (93) - +- ColumnarExchange (91) - +- VeloxResizeBatches (90) - +- ^ FlushableHashAggregateExecTransformer (88) - +- ^ ProjectExecTransformer (87) - +- ^ FilterExecTransformer (86) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (85) +Subquery:1 Hosting operator id = 13 Hosting Expression = Subquery scalar-subquery#12, [id=#1] +ObjectHashAggregate (99) ++- VeloxColumnarToRow (98) + +- ColumnarExchange (97) + +- VeloxResizeBatches (96) + +- RowToVeloxColumnar (95) + +- ObjectHashAggregate (94) + +- VeloxColumnarToRow (93) + +- ^ ProjectExecTransformer (91) + +- ^ FilterExecTransformer (90) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (89) -(85) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(89) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_week_seq#49, d_year#50] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_week_seq)] ReadSchema: struct -(86) FilterExecTransformer +(90) FilterExecTransformer Input [2]: [d_week_seq#49, d_year#50] Arguments: ((isnotnull(d_year#50) AND (d_year#50 = 2001)) AND isnotnull(d_week_seq#49)) -(87) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#49, 42) AS _pre_15#117] +(91) ProjectExecTransformer +Output [1]: [d_week_seq#49] Input [2]: [d_week_seq#49, d_year#50] -(88) FlushableHashAggregateExecTransformer -Input [1]: [_pre_15#117] +(92) WholeStageCodegenTransformer (3) +Input [1]: [d_week_seq#49] +Arguments: false + +(93) VeloxColumnarToRow +Input [1]: [d_week_seq#49] + +(94) ObjectHashAggregate +Input [1]: [d_week_seq#49] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_15#117, 362, 9656, 0, 0)] -Aggregate Attributes [1]: [buf#118] -Results [1]: [buf#119] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)] +Aggregate Attributes [1]: [buf#117] +Results [1]: [buf#118] -(89) WholeStageCodegenTransformer (3) -Input [1]: [buf#119] -Arguments: false +(95) RowToVeloxColumnar +Input [1]: [buf#118] -(90) VeloxResizeBatches -Input [1]: [buf#119] +(96) VeloxResizeBatches +Input [1]: [buf#118] Arguments: 1024, 2147483647, 10485760 -(91) ColumnarExchange -Input [1]: [buf#119] +(97) ColumnarExchange +Input [1]: [buf#118] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] -(92) InputAdapter -Input [1]: [buf#119] +(98) VeloxColumnarToRow +Input [1]: [buf#118] -(93) InputIteratorTransformer -Input [1]: [buf#119] - -(94) RegularHashAggregateExecTransformer -Input [1]: [buf#119] +(99) ObjectHashAggregate +Input [1]: [buf#118] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)#120] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)#120 AS bloomFilter#121] - -(95) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#121] -Arguments: false - -(96) VeloxColumnarToRow -Input [1]: [bloomFilter#121] - -Subquery:2 Hosting operator id = 10 Hosting Expression = Subquery scalar-subquery#12, [id=#1] -VeloxColumnarToRow (96) -+- ^ RegularHashAggregateExecTransformer (94) - +- ^ InputIteratorTransformer (93) - +- ColumnarExchange (91) - +- VeloxResizeBatches (90) - +- ^ FlushableHashAggregateExecTransformer (88) - +- ^ ProjectExecTransformer (87) - +- ^ FilterExecTransformer (86) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (85) - - -Subquery:3 Hosting operator id = 46 Hosting Expression = Subquery scalar-subquery#70, [id=#5] -VeloxColumnarToRow (108) -+- ^ RegularHashAggregateExecTransformer (106) - +- ^ InputIteratorTransformer (105) - +- ColumnarExchange (103) - +- VeloxResizeBatches (102) - +- ^ FlushableHashAggregateExecTransformer (100) - +- ^ ProjectExecTransformer (99) - +- ^ FilterExecTransformer (98) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (97) - - -(97) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)#119] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#49, 42), 362, 9656, 0, 0)#119 AS bloomFilter#120] + +Subquery:2 Hosting operator id = 50 Hosting Expression = Subquery scalar-subquery#70, [id=#5] +ObjectHashAggregate (110) ++- VeloxColumnarToRow (109) + +- ColumnarExchange (108) + +- VeloxResizeBatches (107) + +- RowToVeloxColumnar (106) + +- ObjectHashAggregate (105) + +- VeloxColumnarToRow (104) + +- ^ ProjectExecTransformer (102) + +- ^ FilterExecTransformer (101) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (100) + + +(100) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_week_seq#100, d_year#101] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_week_seq)] ReadSchema: struct -(98) FilterExecTransformer +(101) FilterExecTransformer Input [2]: [d_week_seq#100, d_year#101] Arguments: ((isnotnull(d_year#101) AND (d_year#101 = 2002)) AND isnotnull(d_week_seq#100)) -(99) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#100, 42) AS _pre_16#122] +(102) ProjectExecTransformer +Output [1]: [d_week_seq#100] Input [2]: [d_week_seq#100, d_year#101] -(100) FlushableHashAggregateExecTransformer -Input [1]: [_pre_16#122] +(103) WholeStageCodegenTransformer (9) +Input [1]: [d_week_seq#100] +Arguments: false + +(104) VeloxColumnarToRow +Input [1]: [d_week_seq#100] + +(105) ObjectHashAggregate +Input [1]: [d_week_seq#100] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_16#122, 362, 9656, 0, 0)] -Aggregate Attributes [1]: [buf#123] -Results [1]: [buf#124] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)] +Aggregate Attributes [1]: [buf#121] +Results [1]: [buf#122] -(101) WholeStageCodegenTransformer (10) -Input [1]: [buf#124] -Arguments: false +(106) RowToVeloxColumnar +Input [1]: [buf#122] -(102) VeloxResizeBatches -Input [1]: [buf#124] +(107) VeloxResizeBatches +Input [1]: [buf#122] Arguments: 1024, 2147483647, 10485760 -(103) ColumnarExchange -Input [1]: [buf#124] +(108) ColumnarExchange +Input [1]: [buf#122] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(104) InputAdapter -Input [1]: [buf#124] - -(105) InputIteratorTransformer -Input [1]: [buf#124] +(109) VeloxColumnarToRow +Input [1]: [buf#122] -(106) RegularHashAggregateExecTransformer -Input [1]: [buf#124] +(110) ObjectHashAggregate +Input [1]: [buf#122] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)#125] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)#125 AS bloomFilter#126] - -(107) WholeStageCodegenTransformer (11) -Input [1]: [bloomFilter#126] -Arguments: false - -(108) VeloxColumnarToRow -Input [1]: [bloomFilter#126] - -Subquery:4 Hosting operator id = 45 Hosting Expression = Subquery scalar-subquery#70, [id=#5] -VeloxColumnarToRow (108) -+- ^ RegularHashAggregateExecTransformer (106) - +- ^ InputIteratorTransformer (105) - +- ColumnarExchange (103) - +- VeloxResizeBatches (102) - +- ^ FlushableHashAggregateExecTransformer (100) - +- ^ ProjectExecTransformer (99) - +- ^ FilterExecTransformer (98) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (97) - +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)#123] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#100, 42), 362, 9656, 0, 0)#123 AS bloomFilter#124] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/simplified.txt index bd236bab90c..b63f67e1ffe 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q2.sf100/simplified.txt @@ -1,11 +1,11 @@ VeloxColumnarToRow - WholeStageCodegenTransformer (17) + WholeStageCodegenTransformer (15) SortExecTransformer [d_week_seq1] InputIteratorTransformer InputAdapter ColumnarExchange [d_week_seq1] #1 VeloxResizeBatches - WholeStageCodegenTransformer (16) + WholeStageCodegenTransformer (14) ProjectExecTransformer [d_week_seq1,sun_sales1,sun_sales2,mon_sales1,mon_sales2,tue_sales1,tue_sales2,wed_sales1,wed_sales2,thu_sales1,thu_sales2,fri_sales1,fri_sales2,sat_sales1,sat_sales2] BroadcastHashJoinExecTransformer [d_week_seq1,d_week_seq2] ProjectExecTransformer [d_week_seq,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales] @@ -16,7 +16,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,sum,sum,sum,sum,sum,sum,sum] #2 VeloxResizeBatches - WholeStageCodegenTransformer (6) + WholeStageCodegenTransformer (5) ProjectExecTransformer [d_week_seq,sum,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [d_week_seq,d_day_name,sales_price] @@ -33,46 +33,36 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #3 - WholeStageCodegenTransformer (5) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [d_date_sk,d_week_seq] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #4 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (3) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_year,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #1 + InputAdapter VeloxColumnarToRow WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_year,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (6) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_year,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #6 - WholeStageCodegenTransformer (15) + WholeStageCodegenTransformer (13) ProjectExecTransformer [d_week_seq,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales] BroadcastHashJoinExecTransformer [d_week_seq,d_week_seq] ProjectExecTransformer [d_week_seq,sum(UnscaledValue(CASE WHEN (d_day_name = Sunday ) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Monday ) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Tuesday ) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Wednesday) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Thursday ) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Friday ) THEN sales_price END)),sum(UnscaledValue(CASE WHEN (d_day_name = Saturday ) THEN sales_price END))] @@ -81,7 +71,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,sum,sum,sum,sum,sum,sum,sum] #7 VeloxResizeBatches - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [d_week_seq,sum,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [d_week_seq,d_day_name,sales_price] @@ -89,48 +79,38 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (7) ProjectExecTransformer [ws_sold_date_sk,ws_ext_sales_price] FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_ext_sales_price,ws_sold_date_sk] - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (8) ProjectExecTransformer [cs_sold_date_sk,cs_ext_sales_price] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_ext_sales_price,cs_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (12) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (11) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (10) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [d_date_sk,d_week_seq] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #9 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (9) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_year,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #2 + InputAdapter VeloxColumnarToRow - WholeStageCodegenTransformer (11) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 362, 9656, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (10) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_year,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] + WholeStageCodegenTransformer (10) + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (14) + WholeStageCodegenTransformer (12) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_year,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_week_seq,d_year] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/explain.txt index ea9dc22011d..d08bd77eb0c 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/explain.txt @@ -1,63 +1,66 @@ == Physical Plan == -VeloxColumnarToRow (78) -+- ^ FilterExecTransformer (76) - +- ^ RegularHashAggregateExecTransformer (75) - +- ^ InputIteratorTransformer (74) - +- ColumnarExchange (72) - +- VeloxResizeBatches (71) - +- ^ ProjectExecTransformer (69) - +- ^ FlushableHashAggregateExecTransformer (68) - +- ^ ProjectExecTransformer (67) - +- ^ RegularHashAggregateExecTransformer (66) - +- ^ InputIteratorTransformer (65) - +- ColumnarExchange (63) - +- VeloxResizeBatches (62) - +- ^ ProjectExecTransformer (60) - +- ^ FlushableHashAggregateExecTransformer (59) - +- ^ ProjectExecTransformer (58) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) - :- ^ ProjectExecTransformer (41) - : +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (40) - : :- ^ InputIteratorTransformer (31) - : : +- ColumnarExchange (29) - : : +- VeloxResizeBatches (28) - : : +- ^ ProjectExecTransformer (26) - : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (25) - : : :- ^ InputIteratorTransformer (16) - : : : +- ColumnarExchange (14) - : : : +- VeloxResizeBatches (13) - : : : +- ^ ProjectExecTransformer (11) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (10) - : : : :- ^ ProjectExecTransformer (3) - : : : : +- ^ FilterExecTransformer (2) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : +- ^ InputIteratorTransformer (9) - : : : +- ColumnarBroadcastExchange (7) - : : : +- ^ FilterExecTransformer (5) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (4) - : : +- ^ InputIteratorTransformer (24) - : : +- ColumnarExchange (22) - : : +- VeloxResizeBatches (21) - : : +- ^ ProjectExecTransformer (19) - : : +- ^ FilterExecTransformer (18) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (17) - : +- ^ InputIteratorTransformer (39) - : +- ColumnarExchange (37) - : +- VeloxResizeBatches (36) - : +- ^ ProjectExecTransformer (34) - : +- ^ FilterExecTransformer (33) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (32) - +- ^ InputIteratorTransformer (56) - +- ColumnarBroadcastExchange (54) - +- ^ ProjectExecTransformer (52) - +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (51) - :- ^ InputIteratorTransformer (48) - : +- ColumnarBroadcastExchange (46) - : +- ^ ProjectExecTransformer (44) - : +- ^ FilterExecTransformer (43) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (42) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (49) +VeloxColumnarToRow (83) ++- ^ FilterExecTransformer (81) + +- ^ RegularHashAggregateExecTransformer (80) + +- ^ InputIteratorTransformer (79) + +- ColumnarExchange (77) + +- VeloxResizeBatches (76) + +- ^ ProjectExecTransformer (74) + +- ^ FlushableHashAggregateExecTransformer (73) + +- ^ ProjectExecTransformer (72) + +- ^ RegularHashAggregateExecTransformer (71) + +- ^ InputIteratorTransformer (70) + +- ColumnarExchange (68) + +- VeloxResizeBatches (67) + +- ^ ProjectExecTransformer (65) + +- ^ FlushableHashAggregateExecTransformer (64) + +- ^ ProjectExecTransformer (63) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) + :- ^ ProjectExecTransformer (46) + : +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (45) + : :- ^ InputIteratorTransformer (36) + : : +- ColumnarExchange (34) + : : +- VeloxResizeBatches (33) + : : +- ^ ProjectExecTransformer (31) + : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (30) + : : :- ^ InputIteratorTransformer (21) + : : : +- ColumnarExchange (19) + : : : +- VeloxResizeBatches (18) + : : : +- ^ ProjectExecTransformer (16) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (15) + : : : :- ^ ProjectExecTransformer (8) + : : : : +- ^ InputIteratorTransformer (7) + : : : : +- RowToVeloxColumnar (5) + : : : : +- * Filter (4) + : : : : +- VeloxColumnarToRow (3) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : +- ^ InputIteratorTransformer (14) + : : : +- ColumnarBroadcastExchange (12) + : : : +- ^ FilterExecTransformer (10) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (9) + : : +- ^ InputIteratorTransformer (29) + : : +- ColumnarExchange (27) + : : +- VeloxResizeBatches (26) + : : +- ^ ProjectExecTransformer (24) + : : +- ^ FilterExecTransformer (23) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (22) + : +- ^ InputIteratorTransformer (44) + : +- ColumnarExchange (42) + : +- VeloxResizeBatches (41) + : +- ^ ProjectExecTransformer (39) + : +- ^ FilterExecTransformer (38) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (37) + +- ^ InputIteratorTransformer (61) + +- ColumnarBroadcastExchange (59) + +- ^ ProjectExecTransformer (57) + +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (56) + :- ^ InputIteratorTransformer (53) + : +- ColumnarBroadcastExchange (51) + : +- ^ ProjectExecTransformer (49) + : +- ^ FilterExecTransformer (48) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (47) + +- ^ FilterExecTransformer (55) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (54) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -67,777 +70,778 @@ Location: CatalogFileIndex [{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (13) +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] +Arguments: false + +(3) VeloxColumnarToRow +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(4) Filter [codegen id : 1] +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] +Condition : ((((isnotnull(ss_ticket_number#4) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_customer_sk#2)) AND might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(ss_store_sk#3, 42))) + +(5) RowToVeloxColumnar +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(6) InputAdapter Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] -Arguments: ((((isnotnull(ss_ticket_number#4) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_customer_sk#2)) AND velox_might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(ss_store_sk#3, 42))) -(3) ProjectExecTransformer +(7) InputIteratorTransformer +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(8) ProjectExecTransformer Output [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5] Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] -(4) FileSourceScanExecTransformer parquet spark_catalog.default.item +(9) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_color), EqualTo(i_color,pale ), IsNotNull(i_item_sk)] ReadSchema: struct -(5) FilterExecTransformer +(10) FilterExecTransformer Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: ((isnotnull(i_color#11) AND (i_color#11 = pale )) AND isnotnull(i_item_sk#8)) -(6) WholeStageCodegenTransformer (14) +(11) WholeStageCodegenTransformer (14) Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: false -(7) ColumnarBroadcastExchange +(12) ColumnarBroadcastExchange Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] -(8) InputAdapter +(13) InputAdapter Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(9) InputIteratorTransformer +(14) InputIteratorTransformer Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(10) BroadcastHashJoinExecTransformer +(15) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#8] Join type: Inner Join condition: None -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [11]: [hash(ss_customer_sk#2, 42) AS hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(12) WholeStageCodegenTransformer (15) +(17) WholeStageCodegenTransformer (15) Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: hashpartitioning(ss_customer_sk#2, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13], [plan_id=3], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(17) FileSourceScanExecTransformer parquet spark_catalog.default.customer +(22) FileSourceScanExecTransformer parquet spark_catalog.default.customer Output [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_birth_country)] ReadSchema: struct -(18) FilterExecTransformer +(23) FilterExecTransformer Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: (isnotnull(c_customer_sk#15) AND isnotnull(c_birth_country#18)) -(19) ProjectExecTransformer +(24) ProjectExecTransformer Output [5]: [hash(c_customer_sk#15, 42) AS hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(20) WholeStageCodegenTransformer (16) +(25) WholeStageCodegenTransformer (16) Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: false -(21) VeloxResizeBatches +(26) VeloxResizeBatches Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: 1024, 2147483647, 10485760 -(22) ColumnarExchange +(27) ColumnarExchange Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: hashpartitioning(c_customer_sk#15, 1), ENSURE_REQUIREMENTS, [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18], [plan_id=4], [shuffle_writer_type=hash] -(23) InputAdapter +(28) InputAdapter Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(25) ShuffledHashJoinExecTransformer +(30) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#2] Right keys [1]: [c_customer_sk#15] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [13]: [hash(ss_ticket_number#4, ss_item_sk#1, 42) AS hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(27) WholeStageCodegenTransformer (17) +(32) WholeStageCodegenTransformer (17) Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: false -(28) VeloxResizeBatches +(33) VeloxResizeBatches Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: 1024, 2147483647, 10485760 -(29) ColumnarExchange +(34) ColumnarExchange Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18], [plan_id=5], [shuffle_writer_type=hash] -(30) InputAdapter +(35) InputAdapter Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] -(32) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(37) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct -(33) FilterExecTransformer +(38) FilterExecTransformer Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] Arguments: (isnotnull(sr_ticket_number#22) AND isnotnull(sr_item_sk#21)) -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [3]: [hash(sr_ticket_number#22, sr_item_sk#21, 42) AS hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] -(35) WholeStageCodegenTransformer (18) +(40) WholeStageCodegenTransformer (18) Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: false -(36) VeloxResizeBatches +(41) VeloxResizeBatches Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: 1024, 2147483647, 10485760 -(37) ColumnarExchange +(42) ColumnarExchange Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: hashpartitioning(sr_ticket_number#22, sr_item_sk#21, 1), ENSURE_REQUIREMENTS, [sr_item_sk#21, sr_ticket_number#22], [plan_id=6], [shuffle_writer_type=hash] -(38) InputAdapter +(43) InputAdapter Input [2]: [sr_item_sk#21, sr_ticket_number#22] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [2]: [sr_item_sk#21, sr_ticket_number#22] -(40) ShuffledHashJoinExecTransformer +(45) ShuffledHashJoinExecTransformer Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] Right keys [2]: [sr_ticket_number#22, sr_item_sk#21] Join type: Inner Join condition: None -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [10]: [ss_store_sk#3, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Input [14]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18, sr_item_sk#21, sr_ticket_number#22] -(42) FileSourceScanExecTransformer parquet spark_catalog.default.store +(47) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(43) FilterExecTransformer +(48) FilterExecTransformer Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] Arguments: (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) -(44) ProjectExecTransformer +(49) ProjectExecTransformer Output [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] -(45) WholeStageCodegenTransformer (19) +(50) WholeStageCodegenTransformer (19) Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Arguments: false -(46) ColumnarBroadcastExchange +(51) ColumnarBroadcastExchange Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Arguments: HashedRelationBroadcastMode(List(input[3, string, true]),false), [plan_id=7] -(47) InputAdapter +(52) InputAdapter Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -(48) InputIteratorTransformer +(53) InputIteratorTransformer Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -(49) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(54) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_state#30, ca_zip#31, ca_country#32] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [3]: [ca_state#30, ca_zip#31, ca_country#32] Arguments: (isnotnull(ca_country#32) AND isnotnull(ca_zip#31)) -(51) BroadcastHashJoinExecTransformer +(56) BroadcastHashJoinExecTransformer Left keys [1]: [s_zip#29] Right keys [1]: [ca_zip#31] Join type: Inner Join condition: None -(52) ProjectExecTransformer +(57) ProjectExecTransformer Output [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Input [7]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29, ca_state#30, ca_zip#31, ca_country#32] -(53) WholeStageCodegenTransformer (20) +(58) WholeStageCodegenTransformer (20) Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Arguments: false -(54) ColumnarBroadcastExchange +(59) ColumnarBroadcastExchange Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Arguments: HashedRelationBroadcastMode(List(input[0, int, true], upper(input[4, string, true])),false), [plan_id=8] -(55) InputAdapter +(60) InputAdapter Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(57) BroadcastHashJoinExecTransformer +(62) BroadcastHashJoinExecTransformer Left keys [2]: [ss_store_sk#3, c_birth_country#18] Right keys [2]: [s_store_sk#25, upper(ca_country#32)] Join type: Inner Join condition: None -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [11]: [s_store_name#26, s_state#28, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, ca_state#30, UnscaledValue(ss_net_paid#5) AS _pre_1#33] Input [15]: [ss_store_sk#3, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18, s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(59) FlushableHashAggregateExecTransformer +(64) FlushableHashAggregateExecTransformer Input [11]: [s_store_name#26, s_state#28, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, ca_state#30, _pre_1#33] Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10] Functions [1]: [partial_sum(_pre_1#33)] Aggregate Attributes [1]: [sum#34] Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(60) ProjectExecTransformer +(65) ProjectExecTransformer Output [12]: [hash(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, 42) AS hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(61) WholeStageCodegenTransformer (21) +(66) WholeStageCodegenTransformer (21) Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: false -(62) VeloxResizeBatches +(67) VeloxResizeBatches Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: 1024, 2147483647, 10485760 -(63) ColumnarExchange +(68) ColumnarExchange Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, 1), ENSURE_REQUIREMENTS, [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35], [plan_id=9], [shuffle_writer_type=hash] -(64) InputAdapter +(69) InputAdapter Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(65) InputIteratorTransformer +(70) InputIteratorTransformer Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(66) RegularHashAggregateExecTransformer +(71) RegularHashAggregateExecTransformer Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#37] Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum(UnscaledValue(ss_net_paid#5))#37] -(67) ProjectExecTransformer +(72) ProjectExecTransformer Output [4]: [c_last_name#17, c_first_name#16, s_store_name#26, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#37,17,2) AS netpaid#38] Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum(UnscaledValue(ss_net_paid#5))#37] -(68) FlushableHashAggregateExecTransformer +(73) FlushableHashAggregateExecTransformer Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, netpaid#38] Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] Functions [1]: [partial_sum(netpaid#38)] Aggregate Attributes [2]: [sum#39, isEmpty#40] Results [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(69) ProjectExecTransformer +(74) ProjectExecTransformer Output [6]: [hash(c_last_name#17, c_first_name#16, s_store_name#26, 42) AS hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(70) WholeStageCodegenTransformer (22) +(75) WholeStageCodegenTransformer (22) Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: false -(71) VeloxResizeBatches +(76) VeloxResizeBatches Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: 1024, 2147483647, 10485760 -(72) ColumnarExchange +(77) ColumnarExchange Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, 1), ENSURE_REQUIREMENTS, [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42], [plan_id=10], [shuffle_writer_type=hash] -(73) InputAdapter +(78) InputAdapter Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(74) InputIteratorTransformer +(79) InputIteratorTransformer Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(75) RegularHashAggregateExecTransformer +(80) RegularHashAggregateExecTransformer Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] Functions [1]: [sum(netpaid#38)] Aggregate Attributes [1]: [sum(netpaid#38)#44] Results [4]: [c_last_name#17, c_first_name#16, s_store_name#26, sum(netpaid#38)#44 AS paid#45] -(76) FilterExecTransformer +(81) FilterExecTransformer Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] Arguments: (isnotnull(paid#45) AND (cast(paid#45 as decimal(33,8)) > cast(Subquery scalar-subquery#46, [id=#11] as decimal(33,8)))) -(77) WholeStageCodegenTransformer (23) +(82) WholeStageCodegenTransformer (23) Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] Arguments: false -(78) VeloxColumnarToRow +(83) VeloxColumnarToRow Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] ===== Subqueries ===== -Subquery:1 Hosting operator id = 76 Hosting Expression = Subquery scalar-subquery#46, [id=#11] -VeloxColumnarToRow (153) -+- ^ ProjectExecTransformer (151) - +- ^ RegularHashAggregateExecTransformer (150) - +- ^ ProjectExecTransformer (149) - +- ^ RegularHashAggregateExecTransformer (148) - +- ^ InputIteratorTransformer (147) - +- ColumnarExchange (145) - +- VeloxResizeBatches (144) - +- ^ ProjectExecTransformer (142) - +- ^ FlushableHashAggregateExecTransformer (141) - +- ^ ProjectExecTransformer (140) - +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (139) - :- ^ InputIteratorTransformer (130) - : +- ColumnarExchange (128) - : +- VeloxResizeBatches (127) - : +- ^ ProjectExecTransformer (125) - : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (124) - : :- ^ InputIteratorTransformer (120) - : : +- ColumnarExchange (118) - : : +- VeloxResizeBatches (117) - : : +- ^ ProjectExecTransformer (115) - : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (114) - : : :- ^ InputIteratorTransformer (110) - : : : +- ColumnarExchange (108) - : : : +- VeloxResizeBatches (107) - : : : +- ^ ProjectExecTransformer (105) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (104) - : : : :- ^ InputIteratorTransformer (95) - : : : : +- ColumnarExchange (93) - : : : : +- VeloxResizeBatches (92) - : : : : +- ^ ProjectExecTransformer (90) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (89) - : : : : :- ^ ProjectExecTransformer (81) - : : : : : +- ^ FilterExecTransformer (80) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (79) - : : : : +- ^ InputIteratorTransformer (88) - : : : : +- ColumnarBroadcastExchange (86) - : : : : +- ^ ProjectExecTransformer (84) - : : : : +- ^ FilterExecTransformer (83) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (82) - : : : +- ^ InputIteratorTransformer (103) - : : : +- ColumnarExchange (101) - : : : +- VeloxResizeBatches (100) - : : : +- ^ ProjectExecTransformer (98) - : : : +- ^ FilterExecTransformer (97) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (96) - : : +- ^ InputIteratorTransformer (113) - : : +- ReusedExchange (111) - : +- ^ InputIteratorTransformer (123) - : +- ReusedExchange (121) - +- ^ InputIteratorTransformer (138) - +- ColumnarExchange (136) - +- VeloxResizeBatches (135) - +- ^ ProjectExecTransformer (133) - +- ^ FilterExecTransformer (132) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (131) - - -(79) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +Subquery:1 Hosting operator id = 81 Hosting Expression = Subquery scalar-subquery#46, [id=#11] +VeloxColumnarToRow (158) ++- ^ ProjectExecTransformer (156) + +- ^ RegularHashAggregateExecTransformer (155) + +- ^ ProjectExecTransformer (154) + +- ^ RegularHashAggregateExecTransformer (153) + +- ^ InputIteratorTransformer (152) + +- ColumnarExchange (150) + +- VeloxResizeBatches (149) + +- ^ ProjectExecTransformer (147) + +- ^ FlushableHashAggregateExecTransformer (146) + +- ^ ProjectExecTransformer (145) + +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (144) + :- ^ InputIteratorTransformer (135) + : +- ColumnarExchange (133) + : +- VeloxResizeBatches (132) + : +- ^ ProjectExecTransformer (130) + : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (129) + : :- ^ InputIteratorTransformer (125) + : : +- ColumnarExchange (123) + : : +- VeloxResizeBatches (122) + : : +- ^ ProjectExecTransformer (120) + : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (119) + : : :- ^ InputIteratorTransformer (115) + : : : +- ColumnarExchange (113) + : : : +- VeloxResizeBatches (112) + : : : +- ^ ProjectExecTransformer (110) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (109) + : : : :- ^ InputIteratorTransformer (100) + : : : : +- ColumnarExchange (98) + : : : : +- VeloxResizeBatches (97) + : : : : +- ^ ProjectExecTransformer (95) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (94) + : : : : :- ^ ProjectExecTransformer (86) + : : : : : +- ^ FilterExecTransformer (85) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (84) + : : : : +- ^ InputIteratorTransformer (93) + : : : : +- ColumnarBroadcastExchange (91) + : : : : +- ^ ProjectExecTransformer (89) + : : : : +- ^ FilterExecTransformer (88) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (87) + : : : +- ^ InputIteratorTransformer (108) + : : : +- ColumnarExchange (106) + : : : +- VeloxResizeBatches (105) + : : : +- ^ ProjectExecTransformer (103) + : : : +- ^ FilterExecTransformer (102) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (101) + : : +- ^ InputIteratorTransformer (118) + : : +- ReusedExchange (116) + : +- ^ InputIteratorTransformer (128) + : +- ReusedExchange (126) + +- ^ InputIteratorTransformer (143) + +- ColumnarExchange (141) + +- VeloxResizeBatches (140) + +- ^ ProjectExecTransformer (138) + +- ^ FilterExecTransformer (137) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (136) + + +(84) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct -(80) FilterExecTransformer +(85) FilterExecTransformer Input [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] Arguments: (((isnotnull(ss_ticket_number#50) AND isnotnull(ss_item_sk#47)) AND isnotnull(ss_store_sk#49)) AND isnotnull(ss_customer_sk#48)) -(81) ProjectExecTransformer +(86) ProjectExecTransformer Output [5]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51] Input [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] -(82) FileSourceScanExecTransformer parquet spark_catalog.default.store +(87) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(83) FilterExecTransformer +(88) FilterExecTransformer Input [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] Arguments: (((isnotnull(s_market_id#55) AND (s_market_id#55 = 8)) AND isnotnull(s_store_sk#53)) AND isnotnull(s_zip#57)) -(84) ProjectExecTransformer +(89) ProjectExecTransformer Output [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Input [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] -(85) WholeStageCodegenTransformer (1) +(90) WholeStageCodegenTransformer (1) Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Arguments: false -(86) ColumnarBroadcastExchange +(91) ColumnarBroadcastExchange Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] -(87) InputAdapter +(92) InputAdapter Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(88) InputIteratorTransformer +(93) InputIteratorTransformer Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(89) BroadcastHashJoinExecTransformer +(94) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#49] Right keys [1]: [s_store_sk#53] Join type: Inner Join condition: None -(90) ProjectExecTransformer +(95) ProjectExecTransformer Output [8]: [hash(ss_item_sk#47, 42) AS hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Input [9]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(91) WholeStageCodegenTransformer (2) +(96) WholeStageCodegenTransformer (2) Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: false -(92) VeloxResizeBatches +(97) VeloxResizeBatches Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: 1024, 2147483647, 10485760 -(93) ColumnarExchange +(98) ColumnarExchange Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: hashpartitioning(ss_item_sk#47, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57], [plan_id=13], [shuffle_writer_type=hash] -(94) InputAdapter +(99) InputAdapter Input [7]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] -(95) InputIteratorTransformer +(100) InputIteratorTransformer Input [7]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] -(96) FileSourceScanExecTransformer parquet spark_catalog.default.item +(101) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct -(97) FilterExecTransformer +(102) FilterExecTransformer Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: isnotnull(i_item_sk#59) -(98) ProjectExecTransformer +(103) ProjectExecTransformer Output [7]: [hash(i_item_sk#59, 42) AS hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(99) WholeStageCodegenTransformer (3) +(104) WholeStageCodegenTransformer (3) Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: false -(100) VeloxResizeBatches +(105) VeloxResizeBatches Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: 1024, 2147483647, 10485760 -(101) ColumnarExchange +(106) ColumnarExchange Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: hashpartitioning(i_item_sk#59, 1), ENSURE_REQUIREMENTS, [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64], [plan_id=14], [shuffle_writer_type=hash] -(102) InputAdapter +(107) InputAdapter Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(103) InputIteratorTransformer +(108) InputIteratorTransformer Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(104) ShuffledHashJoinExecTransformer +(109) ShuffledHashJoinExecTransformer Left keys [1]: [ss_item_sk#47] Right keys [1]: [i_item_sk#59] Join type: Inner Join condition: None -(105) ProjectExecTransformer +(110) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#48, 42) AS hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Input [13]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(106) WholeStageCodegenTransformer (4) +(111) WholeStageCodegenTransformer (4) Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: false -(107) VeloxResizeBatches +(112) VeloxResizeBatches Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: 1024, 2147483647, 10485760 -(108) ColumnarExchange +(113) ColumnarExchange Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: hashpartitioning(ss_customer_sk#48, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64], [plan_id=15], [shuffle_writer_type=hash] -(109) InputAdapter +(114) InputAdapter Input [12]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(110) InputIteratorTransformer +(115) InputIteratorTransformer Input [12]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(111) ReusedExchange [Reuses operator id: 22] +(116) ReusedExchange [Reuses operator id: 27] Output [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(112) InputAdapter +(117) InputAdapter Input [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(113) InputIteratorTransformer +(118) InputIteratorTransformer Input [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(114) ShuffledHashJoinExecTransformer +(119) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#48] Right keys [1]: [c_customer_sk#67] Join type: Inner Join condition: None -(115) ProjectExecTransformer +(120) ProjectExecTransformer Output [15]: [hash(ss_ticket_number#50, ss_item_sk#47, 42) AS hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Input [16]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(116) WholeStageCodegenTransformer (6) +(121) WholeStageCodegenTransformer (6) Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: false -(117) VeloxResizeBatches +(122) VeloxResizeBatches Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: 1024, 2147483647, 10485760 -(118) ColumnarExchange +(123) ColumnarExchange Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: hashpartitioning(ss_ticket_number#50, ss_item_sk#47, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70], [plan_id=16], [shuffle_writer_type=hash] -(119) InputAdapter +(124) InputAdapter Input [14]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(120) InputIteratorTransformer +(125) InputIteratorTransformer Input [14]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(121) ReusedExchange [Reuses operator id: 37] +(126) ReusedExchange [Reuses operator id: 42] Output [2]: [sr_item_sk#72, sr_ticket_number#73] -(122) InputAdapter +(127) InputAdapter Input [2]: [sr_item_sk#72, sr_ticket_number#73] -(123) InputIteratorTransformer +(128) InputIteratorTransformer Input [2]: [sr_item_sk#72, sr_ticket_number#73] -(124) ShuffledHashJoinExecTransformer +(129) ShuffledHashJoinExecTransformer Left keys [2]: [ss_ticket_number#50, ss_item_sk#47] Right keys [2]: [sr_ticket_number#73, sr_item_sk#72] Join type: Inner Join condition: None -(125) ProjectExecTransformer +(130) ProjectExecTransformer Output [13]: [hash(c_birth_country#70, s_zip#57, 42) AS hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Input [16]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70, sr_item_sk#72, sr_ticket_number#73] -(126) WholeStageCodegenTransformer (8) +(131) WholeStageCodegenTransformer (8) Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: false -(127) VeloxResizeBatches +(132) VeloxResizeBatches Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: 1024, 2147483647, 10485760 -(128) ColumnarExchange +(133) ColumnarExchange Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: hashpartitioning(c_birth_country#70, s_zip#57, 1), ENSURE_REQUIREMENTS, [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70], [plan_id=17], [shuffle_writer_type=hash] -(129) InputAdapter +(134) InputAdapter Input [12]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(130) InputIteratorTransformer +(135) InputIteratorTransformer Input [12]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(131) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(136) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_state#75, ca_zip#76, ca_country#77] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct -(132) FilterExecTransformer +(137) FilterExecTransformer Input [3]: [ca_state#75, ca_zip#76, ca_country#77] Arguments: (isnotnull(ca_country#77) AND isnotnull(ca_zip#76)) -(133) ProjectExecTransformer +(138) ProjectExecTransformer Output [4]: [hash(upper(ca_country#77), ca_zip#76, 42) AS hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(134) WholeStageCodegenTransformer (9) +(139) WholeStageCodegenTransformer (9) Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: false -(135) VeloxResizeBatches +(140) VeloxResizeBatches Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: 1024, 2147483647, 10485760 -(136) ColumnarExchange +(141) ColumnarExchange Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: hashpartitioning(upper(ca_country#77), ca_zip#76, 1), ENSURE_REQUIREMENTS, [ca_state#75, ca_zip#76, ca_country#77], [plan_id=18], [shuffle_writer_type=hash] -(137) InputAdapter +(142) InputAdapter Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(138) InputIteratorTransformer +(143) InputIteratorTransformer Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(139) ShuffledHashJoinExecTransformer +(144) ShuffledHashJoinExecTransformer Left keys [2]: [c_birth_country#70, s_zip#57] Right keys [2]: [upper(ca_country#77), ca_zip#76] Join type: Inner Join condition: None -(140) ProjectExecTransformer +(145) ProjectExecTransformer Output [11]: [s_store_name#54, s_state#56, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, ca_state#75, UnscaledValue(ss_net_paid#51) AS _pre_2#79] Input [15]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70, ca_state#75, ca_zip#76, ca_country#77] -(141) FlushableHashAggregateExecTransformer +(146) FlushableHashAggregateExecTransformer Input [11]: [s_store_name#54, s_state#56, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, ca_state#75, _pre_2#79] Keys [10]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61] Functions [1]: [partial_sum(_pre_2#79)] Aggregate Attributes [1]: [sum#80] Results [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(142) ProjectExecTransformer +(147) ProjectExecTransformer Output [12]: [hash(c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, 42) AS hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(143) WholeStageCodegenTransformer (10) +(148) WholeStageCodegenTransformer (10) Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: false -(144) VeloxResizeBatches +(149) VeloxResizeBatches Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: 1024, 2147483647, 10485760 -(145) ColumnarExchange +(150) ColumnarExchange Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: hashpartitioning(c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, 1), ENSURE_REQUIREMENTS, [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81], [plan_id=19], [shuffle_writer_type=hash] -(146) InputAdapter +(151) InputAdapter Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(147) InputIteratorTransformer +(152) InputIteratorTransformer Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(148) RegularHashAggregateExecTransformer +(153) RegularHashAggregateExecTransformer Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Keys [10]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61] Functions [1]: [sum(UnscaledValue(ss_net_paid#51))] Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#51))#37] Results [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum(UnscaledValue(ss_net_paid#51))#37] -(149) ProjectExecTransformer +(154) ProjectExecTransformer Output [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#51))#37,17,2) AS netpaid#83] Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum(UnscaledValue(ss_net_paid#51))#37] -(150) RegularHashAggregateExecTransformer +(155) RegularHashAggregateExecTransformer Input [1]: [netpaid#83] Keys: [] Functions [1]: [avg(netpaid#83)] Aggregate Attributes [1]: [avg(netpaid#83)#84] Results [1]: [avg(netpaid#83)#84] -(151) ProjectExecTransformer +(156) ProjectExecTransformer Output [1]: [(0.05 * avg(netpaid#83)#84) AS (0.05 * avg(netpaid))#85] Input [1]: [avg(netpaid#83)#84] -(152) WholeStageCodegenTransformer (11) +(157) WholeStageCodegenTransformer (11) Input [1]: [(0.05 * avg(netpaid))#85] Arguments: false -(153) VeloxColumnarToRow +(158) VeloxColumnarToRow Input [1]: [(0.05 * avg(netpaid))#85] -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (165) -+- ^ RegularHashAggregateExecTransformer (163) - +- ^ InputIteratorTransformer (162) - +- ColumnarExchange (160) - +- VeloxResizeBatches (159) - +- ^ FlushableHashAggregateExecTransformer (157) - +- ^ ProjectExecTransformer (156) - +- ^ FilterExecTransformer (155) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (154) +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#7, [id=#1] +ObjectHashAggregate (169) ++- VeloxColumnarToRow (168) + +- ColumnarExchange (167) + +- VeloxResizeBatches (166) + +- RowToVeloxColumnar (165) + +- ObjectHashAggregate (164) + +- VeloxColumnarToRow (163) + +- ^ ProjectExecTransformer (161) + +- ^ FilterExecTransformer (160) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (159) -(154) FileSourceScanExecTransformer parquet spark_catalog.default.store +(159) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#25, s_market_id#27, s_zip#29] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(155) FilterExecTransformer +(160) FilterExecTransformer Input [3]: [s_store_sk#25, s_market_id#27, s_zip#29] Arguments: (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) -(156) ProjectExecTransformer -Output [1]: [xxhash64(s_store_sk#25, 42) AS _pre_3#86] +(161) ProjectExecTransformer +Output [1]: [s_store_sk#25] Input [3]: [s_store_sk#25, s_market_id#27, s_zip#29] -(157) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#86] +(162) WholeStageCodegenTransformer (12) +Input [1]: [s_store_sk#25] +Arguments: false + +(163) VeloxColumnarToRow +Input [1]: [s_store_sk#25] + +(164) ObjectHashAggregate +Input [1]: [s_store_sk#25] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#86, 40, 1250, 0, 0)] -Aggregate Attributes [1]: [buf#87] -Results [1]: [buf#88] +Functions [1]: [partial_bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] +Aggregate Attributes [1]: [buf#86] +Results [1]: [buf#87] -(158) WholeStageCodegenTransformer (12) -Input [1]: [buf#88] -Arguments: false +(165) RowToVeloxColumnar +Input [1]: [buf#87] -(159) VeloxResizeBatches -Input [1]: [buf#88] +(166) VeloxResizeBatches +Input [1]: [buf#87] Arguments: 1024, 2147483647, 10485760 -(160) ColumnarExchange -Input [1]: [buf#88] +(167) ColumnarExchange +Input [1]: [buf#87] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=20], [shuffle_writer_type=hash] -(161) InputAdapter -Input [1]: [buf#88] - -(162) InputIteratorTransformer -Input [1]: [buf#88] +(168) VeloxColumnarToRow +Input [1]: [buf#87] -(163) RegularHashAggregateExecTransformer -Input [1]: [buf#88] +(169) ObjectHashAggregate +Input [1]: [buf#87] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#89] -Results [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#89 AS bloomFilter#90] - -(164) WholeStageCodegenTransformer (13) -Input [1]: [bloomFilter#90] -Arguments: false - -(165) VeloxColumnarToRow -Input [1]: [bloomFilter#90] - -Subquery:3 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (165) -+- ^ RegularHashAggregateExecTransformer (163) - +- ^ InputIteratorTransformer (162) - +- ColumnarExchange (160) - +- VeloxResizeBatches (159) - +- ^ FlushableHashAggregateExecTransformer (157) - +- ^ ProjectExecTransformer (156) - +- ^ FilterExecTransformer (155) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (154) - +Functions [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#88] +Results [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#88 AS bloomFilter#89] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/simplified.txt index 36186a035b0..0b8a38c8ebc 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24a.sf100/simplified.txt @@ -113,34 +113,27 @@ VeloxColumnarToRow ProjectExecTransformer [ss_customer_sk,ss_item_sk,ss_store_sk,ss_ticket_number,ss_net_paid,i_current_price,i_size,i_color,i_units,i_manager_id] BroadcastHashJoinExecTransformer [ss_item_sk,i_item_sk] ProjectExecTransformer [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid] - FilterExecTransformer [ss_ticket_number,ss_item_sk,ss_store_sk,ss_customer_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (13) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #5 - VeloxResizeBatches - WholeStageCodegenTransformer (12) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [s_store_sk] - FilterExecTransformer [s_market_id,s_store_sk,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid,ss_sold_date_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (13) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_ticket_number,ss_item_sk,ss_store_sk,ss_customer_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #5 VeloxResizeBatches - WholeStageCodegenTransformer (12) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [s_store_sk] - FilterExecTransformer [s_market_id,s_store_sk,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] + RowToVeloxColumnar + ObjectHashAggregate [s_store_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (12) + ProjectExecTransformer [s_store_sk] + FilterExecTransformer [s_market_id,s_store_sk,s_zip] + FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (13) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid,ss_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #6 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/explain.txt index fd3d6998ba1..ff1604266ef 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/explain.txt @@ -1,63 +1,66 @@ == Physical Plan == -VeloxColumnarToRow (78) -+- ^ FilterExecTransformer (76) - +- ^ RegularHashAggregateExecTransformer (75) - +- ^ InputIteratorTransformer (74) - +- ColumnarExchange (72) - +- VeloxResizeBatches (71) - +- ^ ProjectExecTransformer (69) - +- ^ FlushableHashAggregateExecTransformer (68) - +- ^ ProjectExecTransformer (67) - +- ^ RegularHashAggregateExecTransformer (66) - +- ^ InputIteratorTransformer (65) - +- ColumnarExchange (63) - +- VeloxResizeBatches (62) - +- ^ ProjectExecTransformer (60) - +- ^ FlushableHashAggregateExecTransformer (59) - +- ^ ProjectExecTransformer (58) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) - :- ^ ProjectExecTransformer (41) - : +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (40) - : :- ^ InputIteratorTransformer (31) - : : +- ColumnarExchange (29) - : : +- VeloxResizeBatches (28) - : : +- ^ ProjectExecTransformer (26) - : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (25) - : : :- ^ InputIteratorTransformer (16) - : : : +- ColumnarExchange (14) - : : : +- VeloxResizeBatches (13) - : : : +- ^ ProjectExecTransformer (11) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (10) - : : : :- ^ ProjectExecTransformer (3) - : : : : +- ^ FilterExecTransformer (2) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : +- ^ InputIteratorTransformer (9) - : : : +- ColumnarBroadcastExchange (7) - : : : +- ^ FilterExecTransformer (5) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (4) - : : +- ^ InputIteratorTransformer (24) - : : +- ColumnarExchange (22) - : : +- VeloxResizeBatches (21) - : : +- ^ ProjectExecTransformer (19) - : : +- ^ FilterExecTransformer (18) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (17) - : +- ^ InputIteratorTransformer (39) - : +- ColumnarExchange (37) - : +- VeloxResizeBatches (36) - : +- ^ ProjectExecTransformer (34) - : +- ^ FilterExecTransformer (33) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (32) - +- ^ InputIteratorTransformer (56) - +- ColumnarBroadcastExchange (54) - +- ^ ProjectExecTransformer (52) - +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (51) - :- ^ InputIteratorTransformer (48) - : +- ColumnarBroadcastExchange (46) - : +- ^ ProjectExecTransformer (44) - : +- ^ FilterExecTransformer (43) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (42) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (49) +VeloxColumnarToRow (83) ++- ^ FilterExecTransformer (81) + +- ^ RegularHashAggregateExecTransformer (80) + +- ^ InputIteratorTransformer (79) + +- ColumnarExchange (77) + +- VeloxResizeBatches (76) + +- ^ ProjectExecTransformer (74) + +- ^ FlushableHashAggregateExecTransformer (73) + +- ^ ProjectExecTransformer (72) + +- ^ RegularHashAggregateExecTransformer (71) + +- ^ InputIteratorTransformer (70) + +- ColumnarExchange (68) + +- VeloxResizeBatches (67) + +- ^ ProjectExecTransformer (65) + +- ^ FlushableHashAggregateExecTransformer (64) + +- ^ ProjectExecTransformer (63) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) + :- ^ ProjectExecTransformer (46) + : +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (45) + : :- ^ InputIteratorTransformer (36) + : : +- ColumnarExchange (34) + : : +- VeloxResizeBatches (33) + : : +- ^ ProjectExecTransformer (31) + : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (30) + : : :- ^ InputIteratorTransformer (21) + : : : +- ColumnarExchange (19) + : : : +- VeloxResizeBatches (18) + : : : +- ^ ProjectExecTransformer (16) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (15) + : : : :- ^ ProjectExecTransformer (8) + : : : : +- ^ InputIteratorTransformer (7) + : : : : +- RowToVeloxColumnar (5) + : : : : +- * Filter (4) + : : : : +- VeloxColumnarToRow (3) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : +- ^ InputIteratorTransformer (14) + : : : +- ColumnarBroadcastExchange (12) + : : : +- ^ FilterExecTransformer (10) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (9) + : : +- ^ InputIteratorTransformer (29) + : : +- ColumnarExchange (27) + : : +- VeloxResizeBatches (26) + : : +- ^ ProjectExecTransformer (24) + : : +- ^ FilterExecTransformer (23) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (22) + : +- ^ InputIteratorTransformer (44) + : +- ColumnarExchange (42) + : +- VeloxResizeBatches (41) + : +- ^ ProjectExecTransformer (39) + : +- ^ FilterExecTransformer (38) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (37) + +- ^ InputIteratorTransformer (61) + +- ColumnarBroadcastExchange (59) + +- ^ ProjectExecTransformer (57) + +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (56) + :- ^ InputIteratorTransformer (53) + : +- ColumnarBroadcastExchange (51) + : +- ^ ProjectExecTransformer (49) + : +- ^ FilterExecTransformer (48) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (47) + +- ^ FilterExecTransformer (55) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (54) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -67,777 +70,778 @@ Location: CatalogFileIndex [{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (13) +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] +Arguments: false + +(3) VeloxColumnarToRow +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(4) Filter [codegen id : 1] +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] +Condition : ((((isnotnull(ss_ticket_number#4) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_customer_sk#2)) AND might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(ss_store_sk#3, 42))) + +(5) RowToVeloxColumnar +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(6) InputAdapter Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] -Arguments: ((((isnotnull(ss_ticket_number#4) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_customer_sk#2)) AND velox_might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(ss_store_sk#3, 42))) -(3) ProjectExecTransformer +(7) InputIteratorTransformer +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] + +(8) ProjectExecTransformer Output [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5] Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] -(4) FileSourceScanExecTransformer parquet spark_catalog.default.item +(9) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_color), EqualTo(i_color,chiffon ), IsNotNull(i_item_sk)] ReadSchema: struct -(5) FilterExecTransformer +(10) FilterExecTransformer Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: ((isnotnull(i_color#11) AND (i_color#11 = chiffon )) AND isnotnull(i_item_sk#8)) -(6) WholeStageCodegenTransformer (14) +(11) WholeStageCodegenTransformer (14) Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: false -(7) ColumnarBroadcastExchange +(12) ColumnarBroadcastExchange Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] -(8) InputAdapter +(13) InputAdapter Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(9) InputIteratorTransformer +(14) InputIteratorTransformer Input [6]: [i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(10) BroadcastHashJoinExecTransformer +(15) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#8] Join type: Inner Join condition: None -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [11]: [hash(ss_customer_sk#2, 42) AS hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_item_sk#8, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(12) WholeStageCodegenTransformer (15) +(17) WholeStageCodegenTransformer (15) Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [11]: [hash_partition_key#14, ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] Arguments: hashpartitioning(ss_customer_sk#2, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13], [plan_id=3], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13] -(17) FileSourceScanExecTransformer parquet spark_catalog.default.customer +(22) FileSourceScanExecTransformer parquet spark_catalog.default.customer Output [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_birth_country)] ReadSchema: struct -(18) FilterExecTransformer +(23) FilterExecTransformer Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: (isnotnull(c_customer_sk#15) AND isnotnull(c_birth_country#18)) -(19) ProjectExecTransformer +(24) ProjectExecTransformer Output [5]: [hash(c_customer_sk#15, 42) AS hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(20) WholeStageCodegenTransformer (16) +(25) WholeStageCodegenTransformer (16) Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: false -(21) VeloxResizeBatches +(26) VeloxResizeBatches Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: 1024, 2147483647, 10485760 -(22) ColumnarExchange +(27) ColumnarExchange Input [5]: [hash_partition_key#19, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: hashpartitioning(c_customer_sk#15, 1), ENSURE_REQUIREMENTS, [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18], [plan_id=4], [shuffle_writer_type=hash] -(23) InputAdapter +(28) InputAdapter Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(25) ShuffledHashJoinExecTransformer +(30) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#2] Right keys [1]: [c_customer_sk#15] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [13]: [hash(ss_ticket_number#4, ss_item_sk#1, 42) AS hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -(27) WholeStageCodegenTransformer (17) +(32) WholeStageCodegenTransformer (17) Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: false -(28) VeloxResizeBatches +(33) VeloxResizeBatches Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: 1024, 2147483647, 10485760 -(29) ColumnarExchange +(34) ColumnarExchange Input [13]: [hash_partition_key#20, ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18], [plan_id=5], [shuffle_writer_type=hash] -(30) InputAdapter +(35) InputAdapter Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] -(32) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(37) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct -(33) FilterExecTransformer +(38) FilterExecTransformer Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] Arguments: (isnotnull(sr_ticket_number#22) AND isnotnull(sr_item_sk#21)) -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [3]: [hash(sr_ticket_number#22, sr_item_sk#21, 42) AS hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] -(35) WholeStageCodegenTransformer (18) +(40) WholeStageCodegenTransformer (18) Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: false -(36) VeloxResizeBatches +(41) VeloxResizeBatches Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: 1024, 2147483647, 10485760 -(37) ColumnarExchange +(42) ColumnarExchange Input [3]: [hash_partition_key#24, sr_item_sk#21, sr_ticket_number#22] Arguments: hashpartitioning(sr_ticket_number#22, sr_item_sk#21, 1), ENSURE_REQUIREMENTS, [sr_item_sk#21, sr_ticket_number#22], [plan_id=6], [shuffle_writer_type=hash] -(38) InputAdapter +(43) InputAdapter Input [2]: [sr_item_sk#21, sr_ticket_number#22] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [2]: [sr_item_sk#21, sr_ticket_number#22] -(40) ShuffledHashJoinExecTransformer +(45) ShuffledHashJoinExecTransformer Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] Right keys [2]: [sr_ticket_number#22, sr_item_sk#21] Join type: Inner Join condition: None -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [10]: [ss_store_sk#3, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18] Input [14]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18, sr_item_sk#21, sr_ticket_number#22] -(42) FileSourceScanExecTransformer parquet spark_catalog.default.store +(47) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(43) FilterExecTransformer +(48) FilterExecTransformer Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] Arguments: (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) -(44) ProjectExecTransformer +(49) ProjectExecTransformer Output [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] -(45) WholeStageCodegenTransformer (19) +(50) WholeStageCodegenTransformer (19) Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Arguments: false -(46) ColumnarBroadcastExchange +(51) ColumnarBroadcastExchange Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] Arguments: HashedRelationBroadcastMode(List(input[3, string, true]),false), [plan_id=7] -(47) InputAdapter +(52) InputAdapter Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -(48) InputIteratorTransformer +(53) InputIteratorTransformer Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -(49) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(54) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_state#30, ca_zip#31, ca_country#32] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [3]: [ca_state#30, ca_zip#31, ca_country#32] Arguments: (isnotnull(ca_country#32) AND isnotnull(ca_zip#31)) -(51) BroadcastHashJoinExecTransformer +(56) BroadcastHashJoinExecTransformer Left keys [1]: [s_zip#29] Right keys [1]: [ca_zip#31] Join type: Inner Join condition: None -(52) ProjectExecTransformer +(57) ProjectExecTransformer Output [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Input [7]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29, ca_state#30, ca_zip#31, ca_country#32] -(53) WholeStageCodegenTransformer (20) +(58) WholeStageCodegenTransformer (20) Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Arguments: false -(54) ColumnarBroadcastExchange +(59) ColumnarBroadcastExchange Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] Arguments: HashedRelationBroadcastMode(List(input[0, int, true], upper(input[4, string, true])),false), [plan_id=8] -(55) InputAdapter +(60) InputAdapter Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(57) BroadcastHashJoinExecTransformer +(62) BroadcastHashJoinExecTransformer Left keys [2]: [ss_store_sk#3, c_birth_country#18] Right keys [2]: [s_store_sk#25, upper(ca_country#32)] Join type: Inner Join condition: None -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [11]: [s_store_name#26, s_state#28, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, ca_state#30, UnscaledValue(ss_net_paid#5) AS _pre_1#33] Input [15]: [ss_store_sk#3, ss_net_paid#5, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, c_birth_country#18, s_store_sk#25, s_store_name#26, s_state#28, ca_state#30, ca_country#32] -(59) FlushableHashAggregateExecTransformer +(64) FlushableHashAggregateExecTransformer Input [11]: [s_store_name#26, s_state#28, i_current_price#9, i_size#10, i_color#11, i_units#12, i_manager_id#13, c_first_name#16, c_last_name#17, ca_state#30, _pre_1#33] Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10] Functions [1]: [partial_sum(_pre_1#33)] Aggregate Attributes [1]: [sum#34] Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(60) ProjectExecTransformer +(65) ProjectExecTransformer Output [12]: [hash(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, 42) AS hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(61) WholeStageCodegenTransformer (21) +(66) WholeStageCodegenTransformer (21) Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: false -(62) VeloxResizeBatches +(67) VeloxResizeBatches Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: 1024, 2147483647, 10485760 -(63) ColumnarExchange +(68) ColumnarExchange Input [12]: [hash_partition_key#36, c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, 1), ENSURE_REQUIREMENTS, [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35], [plan_id=9], [shuffle_writer_type=hash] -(64) InputAdapter +(69) InputAdapter Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(65) InputIteratorTransformer +(70) InputIteratorTransformer Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] -(66) RegularHashAggregateExecTransformer +(71) RegularHashAggregateExecTransformer Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum#35] Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#37] Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum(UnscaledValue(ss_net_paid#5))#37] -(67) ProjectExecTransformer +(72) ProjectExecTransformer Output [4]: [c_last_name#17, c_first_name#16, s_store_name#26, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#37,17,2) AS netpaid#38] Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#30, s_state#28, i_color#11, i_current_price#9, i_manager_id#13, i_units#12, i_size#10, sum(UnscaledValue(ss_net_paid#5))#37] -(68) FlushableHashAggregateExecTransformer +(73) FlushableHashAggregateExecTransformer Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, netpaid#38] Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] Functions [1]: [partial_sum(netpaid#38)] Aggregate Attributes [2]: [sum#39, isEmpty#40] Results [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(69) ProjectExecTransformer +(74) ProjectExecTransformer Output [6]: [hash(c_last_name#17, c_first_name#16, s_store_name#26, 42) AS hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(70) WholeStageCodegenTransformer (22) +(75) WholeStageCodegenTransformer (22) Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: false -(71) VeloxResizeBatches +(76) VeloxResizeBatches Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: 1024, 2147483647, 10485760 -(72) ColumnarExchange +(77) ColumnarExchange Input [6]: [hash_partition_key#43, c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, 1), ENSURE_REQUIREMENTS, [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42], [plan_id=10], [shuffle_writer_type=hash] -(73) InputAdapter +(78) InputAdapter Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(74) InputIteratorTransformer +(79) InputIteratorTransformer Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] -(75) RegularHashAggregateExecTransformer +(80) RegularHashAggregateExecTransformer Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#41, isEmpty#42] Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] Functions [1]: [sum(netpaid#38)] Aggregate Attributes [1]: [sum(netpaid#38)#44] Results [4]: [c_last_name#17, c_first_name#16, s_store_name#26, sum(netpaid#38)#44 AS paid#45] -(76) FilterExecTransformer +(81) FilterExecTransformer Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] Arguments: (isnotnull(paid#45) AND (cast(paid#45 as decimal(33,8)) > cast(Subquery scalar-subquery#46, [id=#11] as decimal(33,8)))) -(77) WholeStageCodegenTransformer (23) +(82) WholeStageCodegenTransformer (23) Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] Arguments: false -(78) VeloxColumnarToRow +(83) VeloxColumnarToRow Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#45] ===== Subqueries ===== -Subquery:1 Hosting operator id = 76 Hosting Expression = Subquery scalar-subquery#46, [id=#11] -VeloxColumnarToRow (153) -+- ^ ProjectExecTransformer (151) - +- ^ RegularHashAggregateExecTransformer (150) - +- ^ ProjectExecTransformer (149) - +- ^ RegularHashAggregateExecTransformer (148) - +- ^ InputIteratorTransformer (147) - +- ColumnarExchange (145) - +- VeloxResizeBatches (144) - +- ^ ProjectExecTransformer (142) - +- ^ FlushableHashAggregateExecTransformer (141) - +- ^ ProjectExecTransformer (140) - +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (139) - :- ^ InputIteratorTransformer (130) - : +- ColumnarExchange (128) - : +- VeloxResizeBatches (127) - : +- ^ ProjectExecTransformer (125) - : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (124) - : :- ^ InputIteratorTransformer (120) - : : +- ColumnarExchange (118) - : : +- VeloxResizeBatches (117) - : : +- ^ ProjectExecTransformer (115) - : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (114) - : : :- ^ InputIteratorTransformer (110) - : : : +- ColumnarExchange (108) - : : : +- VeloxResizeBatches (107) - : : : +- ^ ProjectExecTransformer (105) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (104) - : : : :- ^ InputIteratorTransformer (95) - : : : : +- ColumnarExchange (93) - : : : : +- VeloxResizeBatches (92) - : : : : +- ^ ProjectExecTransformer (90) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (89) - : : : : :- ^ ProjectExecTransformer (81) - : : : : : +- ^ FilterExecTransformer (80) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (79) - : : : : +- ^ InputIteratorTransformer (88) - : : : : +- ColumnarBroadcastExchange (86) - : : : : +- ^ ProjectExecTransformer (84) - : : : : +- ^ FilterExecTransformer (83) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (82) - : : : +- ^ InputIteratorTransformer (103) - : : : +- ColumnarExchange (101) - : : : +- VeloxResizeBatches (100) - : : : +- ^ ProjectExecTransformer (98) - : : : +- ^ FilterExecTransformer (97) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (96) - : : +- ^ InputIteratorTransformer (113) - : : +- ReusedExchange (111) - : +- ^ InputIteratorTransformer (123) - : +- ReusedExchange (121) - +- ^ InputIteratorTransformer (138) - +- ColumnarExchange (136) - +- VeloxResizeBatches (135) - +- ^ ProjectExecTransformer (133) - +- ^ FilterExecTransformer (132) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (131) - - -(79) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +Subquery:1 Hosting operator id = 81 Hosting Expression = Subquery scalar-subquery#46, [id=#11] +VeloxColumnarToRow (158) ++- ^ ProjectExecTransformer (156) + +- ^ RegularHashAggregateExecTransformer (155) + +- ^ ProjectExecTransformer (154) + +- ^ RegularHashAggregateExecTransformer (153) + +- ^ InputIteratorTransformer (152) + +- ColumnarExchange (150) + +- VeloxResizeBatches (149) + +- ^ ProjectExecTransformer (147) + +- ^ FlushableHashAggregateExecTransformer (146) + +- ^ ProjectExecTransformer (145) + +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (144) + :- ^ InputIteratorTransformer (135) + : +- ColumnarExchange (133) + : +- VeloxResizeBatches (132) + : +- ^ ProjectExecTransformer (130) + : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (129) + : :- ^ InputIteratorTransformer (125) + : : +- ColumnarExchange (123) + : : +- VeloxResizeBatches (122) + : : +- ^ ProjectExecTransformer (120) + : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (119) + : : :- ^ InputIteratorTransformer (115) + : : : +- ColumnarExchange (113) + : : : +- VeloxResizeBatches (112) + : : : +- ^ ProjectExecTransformer (110) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (109) + : : : :- ^ InputIteratorTransformer (100) + : : : : +- ColumnarExchange (98) + : : : : +- VeloxResizeBatches (97) + : : : : +- ^ ProjectExecTransformer (95) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (94) + : : : : :- ^ ProjectExecTransformer (86) + : : : : : +- ^ FilterExecTransformer (85) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (84) + : : : : +- ^ InputIteratorTransformer (93) + : : : : +- ColumnarBroadcastExchange (91) + : : : : +- ^ ProjectExecTransformer (89) + : : : : +- ^ FilterExecTransformer (88) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (87) + : : : +- ^ InputIteratorTransformer (108) + : : : +- ColumnarExchange (106) + : : : +- VeloxResizeBatches (105) + : : : +- ^ ProjectExecTransformer (103) + : : : +- ^ FilterExecTransformer (102) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (101) + : : +- ^ InputIteratorTransformer (118) + : : +- ReusedExchange (116) + : +- ^ InputIteratorTransformer (128) + : +- ReusedExchange (126) + +- ^ InputIteratorTransformer (143) + +- ColumnarExchange (141) + +- VeloxResizeBatches (140) + +- ^ ProjectExecTransformer (138) + +- ^ FilterExecTransformer (137) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (136) + + +(84) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct -(80) FilterExecTransformer +(85) FilterExecTransformer Input [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] Arguments: (((isnotnull(ss_ticket_number#50) AND isnotnull(ss_item_sk#47)) AND isnotnull(ss_store_sk#49)) AND isnotnull(ss_customer_sk#48)) -(81) ProjectExecTransformer +(86) ProjectExecTransformer Output [5]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51] Input [6]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, ss_sold_date_sk#52] -(82) FileSourceScanExecTransformer parquet spark_catalog.default.store +(87) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(83) FilterExecTransformer +(88) FilterExecTransformer Input [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] Arguments: (((isnotnull(s_market_id#55) AND (s_market_id#55 = 8)) AND isnotnull(s_store_sk#53)) AND isnotnull(s_zip#57)) -(84) ProjectExecTransformer +(89) ProjectExecTransformer Output [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Input [5]: [s_store_sk#53, s_store_name#54, s_market_id#55, s_state#56, s_zip#57] -(85) WholeStageCodegenTransformer (1) +(90) WholeStageCodegenTransformer (1) Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Arguments: false -(86) ColumnarBroadcastExchange +(91) ColumnarBroadcastExchange Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] -(87) InputAdapter +(92) InputAdapter Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(88) InputIteratorTransformer +(93) InputIteratorTransformer Input [4]: [s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(89) BroadcastHashJoinExecTransformer +(94) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#49] Right keys [1]: [s_store_sk#53] Join type: Inner Join condition: None -(90) ProjectExecTransformer +(95) ProjectExecTransformer Output [8]: [hash(ss_item_sk#47, 42) AS hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Input [9]: [ss_item_sk#47, ss_customer_sk#48, ss_store_sk#49, ss_ticket_number#50, ss_net_paid#51, s_store_sk#53, s_store_name#54, s_state#56, s_zip#57] -(91) WholeStageCodegenTransformer (2) +(96) WholeStageCodegenTransformer (2) Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: false -(92) VeloxResizeBatches +(97) VeloxResizeBatches Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: 1024, 2147483647, 10485760 -(93) ColumnarExchange +(98) ColumnarExchange Input [8]: [hash_partition_key#58, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] Arguments: hashpartitioning(ss_item_sk#47, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57], [plan_id=13], [shuffle_writer_type=hash] -(94) InputAdapter +(99) InputAdapter Input [7]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] -(95) InputIteratorTransformer +(100) InputIteratorTransformer Input [7]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57] -(96) FileSourceScanExecTransformer parquet spark_catalog.default.item +(101) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct -(97) FilterExecTransformer +(102) FilterExecTransformer Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: isnotnull(i_item_sk#59) -(98) ProjectExecTransformer +(103) ProjectExecTransformer Output [7]: [hash(i_item_sk#59, 42) AS hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(99) WholeStageCodegenTransformer (3) +(104) WholeStageCodegenTransformer (3) Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: false -(100) VeloxResizeBatches +(105) VeloxResizeBatches Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: 1024, 2147483647, 10485760 -(101) ColumnarExchange +(106) ColumnarExchange Input [7]: [hash_partition_key#65, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: hashpartitioning(i_item_sk#59, 1), ENSURE_REQUIREMENTS, [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64], [plan_id=14], [shuffle_writer_type=hash] -(102) InputAdapter +(107) InputAdapter Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(103) InputIteratorTransformer +(108) InputIteratorTransformer Input [6]: [i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(104) ShuffledHashJoinExecTransformer +(109) ShuffledHashJoinExecTransformer Left keys [1]: [ss_item_sk#47] Right keys [1]: [i_item_sk#59] Join type: Inner Join condition: None -(105) ProjectExecTransformer +(110) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#48, 42) AS hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Input [13]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_item_sk#59, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(106) WholeStageCodegenTransformer (4) +(111) WholeStageCodegenTransformer (4) Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: false -(107) VeloxResizeBatches +(112) VeloxResizeBatches Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: 1024, 2147483647, 10485760 -(108) ColumnarExchange +(113) ColumnarExchange Input [13]: [hash_partition_key#66, ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] Arguments: hashpartitioning(ss_customer_sk#48, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64], [plan_id=15], [shuffle_writer_type=hash] -(109) InputAdapter +(114) InputAdapter Input [12]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(110) InputIteratorTransformer +(115) InputIteratorTransformer Input [12]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64] -(111) ReusedExchange [Reuses operator id: 22] +(116) ReusedExchange [Reuses operator id: 27] Output [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(112) InputAdapter +(117) InputAdapter Input [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(113) InputIteratorTransformer +(118) InputIteratorTransformer Input [4]: [c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(114) ShuffledHashJoinExecTransformer +(119) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#48] Right keys [1]: [c_customer_sk#67] Join type: Inner Join condition: None -(115) ProjectExecTransformer +(120) ProjectExecTransformer Output [15]: [hash(ss_ticket_number#50, ss_item_sk#47, 42) AS hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Input [16]: [ss_item_sk#47, ss_customer_sk#48, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_customer_sk#67, c_first_name#68, c_last_name#69, c_birth_country#70] -(116) WholeStageCodegenTransformer (6) +(121) WholeStageCodegenTransformer (6) Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: false -(117) VeloxResizeBatches +(122) VeloxResizeBatches Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: 1024, 2147483647, 10485760 -(118) ColumnarExchange +(123) ColumnarExchange Input [15]: [hash_partition_key#71, ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: hashpartitioning(ss_ticket_number#50, ss_item_sk#47, 1), ENSURE_REQUIREMENTS, [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70], [plan_id=16], [shuffle_writer_type=hash] -(119) InputAdapter +(124) InputAdapter Input [14]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(120) InputIteratorTransformer +(125) InputIteratorTransformer Input [14]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(121) ReusedExchange [Reuses operator id: 37] +(126) ReusedExchange [Reuses operator id: 42] Output [2]: [sr_item_sk#72, sr_ticket_number#73] -(122) InputAdapter +(127) InputAdapter Input [2]: [sr_item_sk#72, sr_ticket_number#73] -(123) InputIteratorTransformer +(128) InputIteratorTransformer Input [2]: [sr_item_sk#72, sr_ticket_number#73] -(124) ShuffledHashJoinExecTransformer +(129) ShuffledHashJoinExecTransformer Left keys [2]: [ss_ticket_number#50, ss_item_sk#47] Right keys [2]: [sr_ticket_number#73, sr_item_sk#72] Join type: Inner Join condition: None -(125) ProjectExecTransformer +(130) ProjectExecTransformer Output [13]: [hash(c_birth_country#70, s_zip#57, 42) AS hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Input [16]: [ss_item_sk#47, ss_ticket_number#50, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70, sr_item_sk#72, sr_ticket_number#73] -(126) WholeStageCodegenTransformer (8) +(131) WholeStageCodegenTransformer (8) Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: false -(127) VeloxResizeBatches +(132) VeloxResizeBatches Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: 1024, 2147483647, 10485760 -(128) ColumnarExchange +(133) ColumnarExchange Input [13]: [hash_partition_key#74, ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] Arguments: hashpartitioning(c_birth_country#70, s_zip#57, 1), ENSURE_REQUIREMENTS, [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70], [plan_id=17], [shuffle_writer_type=hash] -(129) InputAdapter +(134) InputAdapter Input [12]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(130) InputIteratorTransformer +(135) InputIteratorTransformer Input [12]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70] -(131) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(136) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_state#75, ca_zip#76, ca_country#77] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct -(132) FilterExecTransformer +(137) FilterExecTransformer Input [3]: [ca_state#75, ca_zip#76, ca_country#77] Arguments: (isnotnull(ca_country#77) AND isnotnull(ca_zip#76)) -(133) ProjectExecTransformer +(138) ProjectExecTransformer Output [4]: [hash(upper(ca_country#77), ca_zip#76, 42) AS hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(134) WholeStageCodegenTransformer (9) +(139) WholeStageCodegenTransformer (9) Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: false -(135) VeloxResizeBatches +(140) VeloxResizeBatches Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: 1024, 2147483647, 10485760 -(136) ColumnarExchange +(141) ColumnarExchange Input [4]: [hash_partition_key#78, ca_state#75, ca_zip#76, ca_country#77] Arguments: hashpartitioning(upper(ca_country#77), ca_zip#76, 1), ENSURE_REQUIREMENTS, [ca_state#75, ca_zip#76, ca_country#77], [plan_id=18], [shuffle_writer_type=hash] -(137) InputAdapter +(142) InputAdapter Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(138) InputIteratorTransformer +(143) InputIteratorTransformer Input [3]: [ca_state#75, ca_zip#76, ca_country#77] -(139) ShuffledHashJoinExecTransformer +(144) ShuffledHashJoinExecTransformer Left keys [2]: [c_birth_country#70, s_zip#57] Right keys [2]: [upper(ca_country#77), ca_zip#76] Join type: Inner Join condition: None -(140) ProjectExecTransformer +(145) ProjectExecTransformer Output [11]: [s_store_name#54, s_state#56, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, ca_state#75, UnscaledValue(ss_net_paid#51) AS _pre_2#79] Input [15]: [ss_net_paid#51, s_store_name#54, s_state#56, s_zip#57, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, c_birth_country#70, ca_state#75, ca_zip#76, ca_country#77] -(141) FlushableHashAggregateExecTransformer +(146) FlushableHashAggregateExecTransformer Input [11]: [s_store_name#54, s_state#56, i_current_price#60, i_size#61, i_color#62, i_units#63, i_manager_id#64, c_first_name#68, c_last_name#69, ca_state#75, _pre_2#79] Keys [10]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61] Functions [1]: [partial_sum(_pre_2#79)] Aggregate Attributes [1]: [sum#80] Results [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(142) ProjectExecTransformer +(147) ProjectExecTransformer Output [12]: [hash(c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, 42) AS hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(143) WholeStageCodegenTransformer (10) +(148) WholeStageCodegenTransformer (10) Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: false -(144) VeloxResizeBatches +(149) VeloxResizeBatches Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: 1024, 2147483647, 10485760 -(145) ColumnarExchange +(150) ColumnarExchange Input [12]: [hash_partition_key#82, c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Arguments: hashpartitioning(c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, 1), ENSURE_REQUIREMENTS, [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81], [plan_id=19], [shuffle_writer_type=hash] -(146) InputAdapter +(151) InputAdapter Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(147) InputIteratorTransformer +(152) InputIteratorTransformer Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] -(148) RegularHashAggregateExecTransformer +(153) RegularHashAggregateExecTransformer Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum#81] Keys [10]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61] Functions [1]: [sum(UnscaledValue(ss_net_paid#51))] Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#51))#37] Results [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum(UnscaledValue(ss_net_paid#51))#37] -(149) ProjectExecTransformer +(154) ProjectExecTransformer Output [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#51))#37,17,2) AS netpaid#83] Input [11]: [c_last_name#69, c_first_name#68, s_store_name#54, ca_state#75, s_state#56, i_color#62, i_current_price#60, i_manager_id#64, i_units#63, i_size#61, sum(UnscaledValue(ss_net_paid#51))#37] -(150) RegularHashAggregateExecTransformer +(155) RegularHashAggregateExecTransformer Input [1]: [netpaid#83] Keys: [] Functions [1]: [avg(netpaid#83)] Aggregate Attributes [1]: [avg(netpaid#83)#84] Results [1]: [avg(netpaid#83)#84] -(151) ProjectExecTransformer +(156) ProjectExecTransformer Output [1]: [(0.05 * avg(netpaid#83)#84) AS (0.05 * avg(netpaid))#85] Input [1]: [avg(netpaid#83)#84] -(152) WholeStageCodegenTransformer (11) +(157) WholeStageCodegenTransformer (11) Input [1]: [(0.05 * avg(netpaid))#85] Arguments: false -(153) VeloxColumnarToRow +(158) VeloxColumnarToRow Input [1]: [(0.05 * avg(netpaid))#85] -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (165) -+- ^ RegularHashAggregateExecTransformer (163) - +- ^ InputIteratorTransformer (162) - +- ColumnarExchange (160) - +- VeloxResizeBatches (159) - +- ^ FlushableHashAggregateExecTransformer (157) - +- ^ ProjectExecTransformer (156) - +- ^ FilterExecTransformer (155) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (154) +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#7, [id=#1] +ObjectHashAggregate (169) ++- VeloxColumnarToRow (168) + +- ColumnarExchange (167) + +- VeloxResizeBatches (166) + +- RowToVeloxColumnar (165) + +- ObjectHashAggregate (164) + +- VeloxColumnarToRow (163) + +- ^ ProjectExecTransformer (161) + +- ^ FilterExecTransformer (160) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (159) -(154) FileSourceScanExecTransformer parquet spark_catalog.default.store +(159) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#25, s_market_id#27, s_zip#29] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct -(155) FilterExecTransformer +(160) FilterExecTransformer Input [3]: [s_store_sk#25, s_market_id#27, s_zip#29] Arguments: (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) -(156) ProjectExecTransformer -Output [1]: [xxhash64(s_store_sk#25, 42) AS _pre_3#86] +(161) ProjectExecTransformer +Output [1]: [s_store_sk#25] Input [3]: [s_store_sk#25, s_market_id#27, s_zip#29] -(157) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#86] +(162) WholeStageCodegenTransformer (12) +Input [1]: [s_store_sk#25] +Arguments: false + +(163) VeloxColumnarToRow +Input [1]: [s_store_sk#25] + +(164) ObjectHashAggregate +Input [1]: [s_store_sk#25] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#86, 40, 1250, 0, 0)] -Aggregate Attributes [1]: [buf#87] -Results [1]: [buf#88] +Functions [1]: [partial_bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] +Aggregate Attributes [1]: [buf#86] +Results [1]: [buf#87] -(158) WholeStageCodegenTransformer (12) -Input [1]: [buf#88] -Arguments: false +(165) RowToVeloxColumnar +Input [1]: [buf#87] -(159) VeloxResizeBatches -Input [1]: [buf#88] +(166) VeloxResizeBatches +Input [1]: [buf#87] Arguments: 1024, 2147483647, 10485760 -(160) ColumnarExchange -Input [1]: [buf#88] +(167) ColumnarExchange +Input [1]: [buf#87] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=20], [shuffle_writer_type=hash] -(161) InputAdapter -Input [1]: [buf#88] - -(162) InputIteratorTransformer -Input [1]: [buf#88] +(168) VeloxColumnarToRow +Input [1]: [buf#87] -(163) RegularHashAggregateExecTransformer -Input [1]: [buf#88] +(169) ObjectHashAggregate +Input [1]: [buf#87] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#89] -Results [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#89 AS bloomFilter#90] - -(164) WholeStageCodegenTransformer (13) -Input [1]: [bloomFilter#90] -Arguments: false - -(165) VeloxColumnarToRow -Input [1]: [bloomFilter#90] - -Subquery:3 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (165) -+- ^ RegularHashAggregateExecTransformer (163) - +- ^ InputIteratorTransformer (162) - +- ColumnarExchange (160) - +- VeloxResizeBatches (159) - +- ^ FlushableHashAggregateExecTransformer (157) - +- ^ ProjectExecTransformer (156) - +- ^ FilterExecTransformer (155) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (154) - +Functions [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#88] +Results [1]: [bloom_filter_agg(xxhash64(s_store_sk#25, 42), 40, 1250, 0, 0)#88 AS bloomFilter#89] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/simplified.txt index 36186a035b0..0b8a38c8ebc 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q24b.sf100/simplified.txt @@ -113,34 +113,27 @@ VeloxColumnarToRow ProjectExecTransformer [ss_customer_sk,ss_item_sk,ss_store_sk,ss_ticket_number,ss_net_paid,i_current_price,i_size,i_color,i_units,i_manager_id] BroadcastHashJoinExecTransformer [ss_item_sk,i_item_sk] ProjectExecTransformer [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid] - FilterExecTransformer [ss_ticket_number,ss_item_sk,ss_store_sk,ss_customer_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (13) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #5 - VeloxResizeBatches - WholeStageCodegenTransformer (12) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [s_store_sk] - FilterExecTransformer [s_market_id,s_store_sk,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid,ss_sold_date_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (13) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_ticket_number,ss_item_sk,ss_store_sk,ss_customer_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(s_store_sk, 42), 40, 1250, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #5 VeloxResizeBatches - WholeStageCodegenTransformer (12) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [s_store_sk] - FilterExecTransformer [s_market_id,s_store_sk,s_zip] - FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] + RowToVeloxColumnar + ObjectHashAggregate [s_store_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (12) + ProjectExecTransformer [s_store_sk] + FilterExecTransformer [s_market_id,s_store_sk,s_zip] + FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_market_id,s_zip] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (13) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ticket_number,ss_net_paid,ss_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #6 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/explain.txt index b8d87682078..85e6545c207 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/explain.txt @@ -1,42 +1,45 @@ == Physical Plan == -VeloxColumnarToRow (49) -+- ^ ProjectExecTransformer (47) - +- ^ RegularHashAggregateExecTransformer (46) - +- ^ InputIteratorTransformer (45) - +- ColumnarExchange (43) - +- VeloxResizeBatches (42) - +- ^ FlushableHashAggregateExecTransformer (40) - +- ^ ProjectExecTransformer (39) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (38) - :- ^ ProjectExecTransformer (34) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (33) - : :- ^ InputIteratorTransformer (30) - : : +- ColumnarBroadcastExchange (28) - : : +- ^ ProjectExecTransformer (26) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (25) +VeloxColumnarToRow (54) ++- ^ ProjectExecTransformer (52) + +- ^ RegularHashAggregateExecTransformer (51) + +- ^ InputIteratorTransformer (50) + +- ColumnarExchange (48) + +- VeloxResizeBatches (47) + +- ^ FlushableHashAggregateExecTransformer (45) + +- ^ ProjectExecTransformer (44) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (43) + :- ^ ProjectExecTransformer (39) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (38) + : :- ^ InputIteratorTransformer (35) + : : +- ColumnarBroadcastExchange (33) + : : +- ^ ProjectExecTransformer (31) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (30) : : :- ^ InputIteratorTransformer (7) : : : +- ColumnarBroadcastExchange (5) : : : +- ^ ProjectExecTransformer (3) : : : +- ^ FilterExecTransformer (2) : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (1) - : : +- ^ FilterExecTransformer (24) - : : +- ^ ProjectExecTransformer (23) - : : +- ^ RegularHashAggregateExecTransformer (22) - : : +- ^ InputIteratorTransformer (21) - : : +- ColumnarExchange (19) - : : +- VeloxResizeBatches (18) - : : +- ^ ProjectExecTransformer (16) - : : +- ^ FlushableHashAggregateExecTransformer (15) - : : +- ^ ProjectExecTransformer (14) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13) - : : :- ^ FilterExecTransformer (9) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (8) - : : +- ^ InputIteratorTransformer (12) - : : +- ReusedExchange (10) - : +- ^ FilterExecTransformer (32) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (31) - +- ^ InputIteratorTransformer (37) - +- ReusedExchange (35) + : : +- ^ FilterExecTransformer (29) + : : +- ^ ProjectExecTransformer (28) + : : +- ^ RegularHashAggregateExecTransformer (27) + : : +- ^ InputIteratorTransformer (26) + : : +- ColumnarExchange (24) + : : +- VeloxResizeBatches (23) + : : +- ^ ProjectExecTransformer (21) + : : +- ^ FlushableHashAggregateExecTransformer (20) + : : +- ^ ProjectExecTransformer (19) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) + : : :- ^ InputIteratorTransformer (14) + : : : +- RowToVeloxColumnar (12) + : : : +- * Filter (11) + : : : +- VeloxColumnarToRow (10) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (8) + : : +- ^ InputIteratorTransformer (17) + : : +- ReusedExchange (15) + : +- ^ FilterExecTransformer (37) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (36) + +- ^ InputIteratorTransformer (42) + +- ReusedExchange (40) (1) FileSourceScanExecTransformer parquet spark_catalog.default.item @@ -76,98 +79,114 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#5), dynamicpruningexpression(cs_sol PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct -(9) FilterExecTransformer +(9) WholeStageCodegenTransformer (4) +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] +Arguments: false + +(10) VeloxColumnarToRow +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] + +(11) Filter [codegen id : 1] +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] +Condition : (isnotnull(cs_item_sk#3) AND might_contain(Subquery scalar-subquery#7, [id=#2], xxhash64(cs_item_sk#3, 42))) + +(12) RowToVeloxColumnar +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] + +(13) InputAdapter +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] + +(14) InputIteratorTransformer Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] -Arguments: (isnotnull(cs_item_sk#3) AND velox_might_contain(Subquery scalar-subquery#7, [id=#2], xxhash64(cs_item_sk#3, 42))) -(10) ReusedExchange [Reuses operator id: 66] +(15) ReusedExchange [Reuses operator id: 70] Output [1]: [d_date_sk#8] -(11) InputAdapter +(16) InputAdapter Input [1]: [d_date_sk#8] -(12) InputIteratorTransformer +(17) InputIteratorTransformer Input [1]: [d_date_sk#8] -(13) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#5] Right keys [1]: [d_date_sk#8] Join type: Inner Join condition: None -(14) ProjectExecTransformer +(19) ProjectExecTransformer Output [2]: [cs_item_sk#3, UnscaledValue(cs_ext_discount_amt#4) AS _pre_1#9] Input [4]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5, d_date_sk#8] -(15) FlushableHashAggregateExecTransformer +(20) FlushableHashAggregateExecTransformer Input [2]: [cs_item_sk#3, _pre_1#9] Keys [1]: [cs_item_sk#3] Functions [1]: [partial_avg(_pre_1#9)] Aggregate Attributes [2]: [sum#10, count#11] Results [3]: [cs_item_sk#3, sum#12, count#13] -(16) ProjectExecTransformer +(21) ProjectExecTransformer Output [4]: [hash(cs_item_sk#3, 42) AS hash_partition_key#14, cs_item_sk#3, sum#12, count#13] Input [3]: [cs_item_sk#3, sum#12, count#13] -(17) WholeStageCodegenTransformer (6) +(22) WholeStageCodegenTransformer (6) Input [4]: [hash_partition_key#14, cs_item_sk#3, sum#12, count#13] Arguments: false -(18) VeloxResizeBatches +(23) VeloxResizeBatches Input [4]: [hash_partition_key#14, cs_item_sk#3, sum#12, count#13] Arguments: 1024, 2147483647, 10485760 -(19) ColumnarExchange +(24) ColumnarExchange Input [4]: [hash_partition_key#14, cs_item_sk#3, sum#12, count#13] Arguments: hashpartitioning(cs_item_sk#3, 1), ENSURE_REQUIREMENTS, [cs_item_sk#3, sum#12, count#13], [plan_id=3], [shuffle_writer_type=hash] -(20) InputAdapter +(25) InputAdapter Input [3]: [cs_item_sk#3, sum#12, count#13] -(21) InputIteratorTransformer +(26) InputIteratorTransformer Input [3]: [cs_item_sk#3, sum#12, count#13] -(22) RegularHashAggregateExecTransformer +(27) RegularHashAggregateExecTransformer Input [3]: [cs_item_sk#3, sum#12, count#13] Keys [1]: [cs_item_sk#3] Functions [1]: [avg(UnscaledValue(cs_ext_discount_amt#4))] Aggregate Attributes [1]: [avg(UnscaledValue(cs_ext_discount_amt#4))#15] Results [2]: [cs_item_sk#3, avg(UnscaledValue(cs_ext_discount_amt#4))#15] -(23) ProjectExecTransformer +(28) ProjectExecTransformer Output [2]: [(1.3 * cast((avg(UnscaledValue(cs_ext_discount_amt#4))#15 / 100.0) as decimal(11,6))) AS (1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#3] Input [2]: [cs_item_sk#3, avg(UnscaledValue(cs_ext_discount_amt#4))#15] -(24) FilterExecTransformer +(29) FilterExecTransformer Input [2]: [(1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#3] Arguments: isnotnull((1.3 * avg(cs_ext_discount_amt))#16) -(25) BroadcastHashJoinExecTransformer +(30) BroadcastHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [cs_item_sk#3] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16] Input [3]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#3] -(27) WholeStageCodegenTransformer (7) +(32) WholeStageCodegenTransformer (7) Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16] Arguments: false -(28) ColumnarBroadcastExchange +(33) ColumnarBroadcastExchange Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] -(29) InputAdapter +(34) InputAdapter Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16] -(31) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(36) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [3]: [cs_item_sk#17, cs_ext_discount_amt#18, cs_sold_date_sk#19] Batched: true Location: InMemoryFileIndex [] @@ -175,192 +194,177 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#19), dynamicpruningexpression(cs_so PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_ext_discount_amt)] ReadSchema: struct -(32) FilterExecTransformer +(37) FilterExecTransformer Input [3]: [cs_item_sk#17, cs_ext_discount_amt#18, cs_sold_date_sk#19] Arguments: (isnotnull(cs_item_sk#17) AND isnotnull(cs_ext_discount_amt#18)) -(33) BroadcastHashJoinExecTransformer +(38) BroadcastHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [cs_item_sk#17] Join type: Inner Join condition: (cast(cs_ext_discount_amt#18 as decimal(14,7)) > (1.3 * avg(cs_ext_discount_amt))#16) -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [2]: [cs_ext_discount_amt#18, cs_sold_date_sk#19] Input [5]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#17, cs_ext_discount_amt#18, cs_sold_date_sk#19] -(35) ReusedExchange [Reuses operator id: 66] +(40) ReusedExchange [Reuses operator id: 70] Output [1]: [d_date_sk#20] -(36) InputAdapter +(41) InputAdapter Input [1]: [d_date_sk#20] -(37) InputIteratorTransformer +(42) InputIteratorTransformer Input [1]: [d_date_sk#20] -(38) BroadcastHashJoinExecTransformer +(43) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#19] Right keys [1]: [d_date_sk#20] Join type: Inner Join condition: None -(39) ProjectExecTransformer +(44) ProjectExecTransformer Output [1]: [UnscaledValue(cs_ext_discount_amt#18) AS _pre_2#21] Input [3]: [cs_ext_discount_amt#18, cs_sold_date_sk#19, d_date_sk#20] -(40) FlushableHashAggregateExecTransformer +(45) FlushableHashAggregateExecTransformer Input [1]: [_pre_2#21] Keys: [] Functions [1]: [partial_sum(_pre_2#21)] Aggregate Attributes [1]: [sum#22] Results [1]: [sum#23] -(41) WholeStageCodegenTransformer (10) +(46) WholeStageCodegenTransformer (10) Input [1]: [sum#23] Arguments: false -(42) VeloxResizeBatches +(47) VeloxResizeBatches Input [1]: [sum#23] Arguments: 1024, 2147483647, 10485760 -(43) ColumnarExchange +(48) ColumnarExchange Input [1]: [sum#23] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5], [shuffle_writer_type=hash] -(44) InputAdapter +(49) InputAdapter Input [1]: [sum#23] -(45) InputIteratorTransformer +(50) InputIteratorTransformer Input [1]: [sum#23] -(46) RegularHashAggregateExecTransformer +(51) RegularHashAggregateExecTransformer Input [1]: [sum#23] Keys: [] Functions [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))] Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))#24] Results [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))#24] -(47) ProjectExecTransformer +(52) ProjectExecTransformer Output [1]: [MakeDecimal(sum(UnscaledValue(cs_ext_discount_amt#18))#24,17,2) AS excess discount amount#25] Input [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))#24] -(48) WholeStageCodegenTransformer (11) +(53) WholeStageCodegenTransformer (11) Input [1]: [excess discount amount#25] Arguments: false -(49) VeloxColumnarToRow +(54) VeloxColumnarToRow Input [1]: [excess discount amount#25] ===== Subqueries ===== -Subquery:1 Hosting operator id = 9 Hosting Expression = Subquery scalar-subquery#7, [id=#2] -VeloxColumnarToRow (61) -+- ^ RegularHashAggregateExecTransformer (59) - +- ^ InputIteratorTransformer (58) - +- ColumnarExchange (56) - +- VeloxResizeBatches (55) - +- ^ FlushableHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ FilterExecTransformer (51) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (50) +Subquery:1 Hosting operator id = 11 Hosting Expression = Subquery scalar-subquery#7, [id=#2] +ObjectHashAggregate (65) ++- VeloxColumnarToRow (64) + +- ColumnarExchange (63) + +- VeloxResizeBatches (62) + +- RowToVeloxColumnar (61) + +- ObjectHashAggregate (60) + +- VeloxColumnarToRow (59) + +- ^ ProjectExecTransformer (57) + +- ^ FilterExecTransformer (56) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (55) -(50) FileSourceScanExecTransformer parquet spark_catalog.default.item +(55) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#1, i_manufact_id#2] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manufact_id), EqualTo(i_manufact_id,977), IsNotNull(i_item_sk)] ReadSchema: struct -(51) FilterExecTransformer +(56) FilterExecTransformer Input [2]: [i_item_sk#1, i_manufact_id#2] Arguments: ((isnotnull(i_manufact_id#2) AND (i_manufact_id#2 = 977)) AND isnotnull(i_item_sk#1)) -(52) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#1, 42) AS _pre_3#26] +(57) ProjectExecTransformer +Output [1]: [i_item_sk#1] Input [2]: [i_item_sk#1, i_manufact_id#2] -(53) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#26] +(58) WholeStageCodegenTransformer (2) +Input [1]: [i_item_sk#1] +Arguments: false + +(59) VeloxColumnarToRow +Input [1]: [i_item_sk#1] + +(60) ObjectHashAggregate +Input [1]: [i_item_sk#1] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#26, 199, 5556, 0, 0)] -Aggregate Attributes [1]: [buf#27] -Results [1]: [buf#28] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] +Aggregate Attributes [1]: [buf#26] +Results [1]: [buf#27] -(54) WholeStageCodegenTransformer (2) -Input [1]: [buf#28] -Arguments: false +(61) RowToVeloxColumnar +Input [1]: [buf#27] -(55) VeloxResizeBatches -Input [1]: [buf#28] +(62) VeloxResizeBatches +Input [1]: [buf#27] Arguments: 1024, 2147483647, 10485760 -(56) ColumnarExchange -Input [1]: [buf#28] +(63) ColumnarExchange +Input [1]: [buf#27] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6], [shuffle_writer_type=hash] -(57) InputAdapter -Input [1]: [buf#28] - -(58) InputIteratorTransformer -Input [1]: [buf#28] +(64) VeloxColumnarToRow +Input [1]: [buf#27] -(59) RegularHashAggregateExecTransformer -Input [1]: [buf#28] +(65) ObjectHashAggregate +Input [1]: [buf#27] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#29] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#29 AS bloomFilter#30] - -(60) WholeStageCodegenTransformer (3) -Input [1]: [bloomFilter#30] -Arguments: false - -(61) VeloxColumnarToRow -Input [1]: [bloomFilter#30] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#28] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#28 AS bloomFilter#29] Subquery:2 Hosting operator id = 8 Hosting Expression = cs_sold_date_sk#5 IN dynamicpruning#6 -ColumnarBroadcastExchange (66) -+- ^ ProjectExecTransformer (64) - +- ^ FilterExecTransformer (63) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (62) +ColumnarBroadcastExchange (70) ++- ^ ProjectExecTransformer (68) + +- ^ FilterExecTransformer (67) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (66) -(62) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#8, d_date#31] +(66) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [2]: [d_date_sk#8, d_date#30] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-01-27), LessThanOrEqual(d_date,2000-04-26), IsNotNull(d_date_sk)] ReadSchema: struct -(63) FilterExecTransformer -Input [2]: [d_date_sk#8, d_date#31] -Arguments: (((isnotnull(d_date#31) AND (d_date#31 >= 2000-01-27)) AND (d_date#31 <= 2000-04-26)) AND isnotnull(d_date_sk#8)) +(67) FilterExecTransformer +Input [2]: [d_date_sk#8, d_date#30] +Arguments: (((isnotnull(d_date#30) AND (d_date#30 >= 2000-01-27)) AND (d_date#30 <= 2000-04-26)) AND isnotnull(d_date_sk#8)) -(64) ProjectExecTransformer +(68) ProjectExecTransformer Output [1]: [d_date_sk#8] -Input [2]: [d_date_sk#8, d_date#31] +Input [2]: [d_date_sk#8, d_date#30] -(65) WholeStageCodegenTransformer (4) +(69) WholeStageCodegenTransformer (3) Input [1]: [d_date_sk#8] Arguments: false -(66) ColumnarBroadcastExchange +(70) ColumnarBroadcastExchange Input [1]: [d_date_sk#8] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:3 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#7, [id=#2] -VeloxColumnarToRow (61) -+- ^ RegularHashAggregateExecTransformer (59) - +- ^ InputIteratorTransformer (58) - +- ColumnarExchange (56) - +- VeloxResizeBatches (55) - +- ^ FlushableHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ FilterExecTransformer (51) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (50) - - -Subquery:4 Hosting operator id = 31 Hosting Expression = cs_sold_date_sk#19 IN dynamicpruning#6 +Subquery:3 Hosting operator id = 36 Hosting Expression = cs_sold_date_sk#19 IN dynamicpruning#6 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/simplified.txt index 543c719fb48..6e47623f6ba 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q32.sf100/simplified.txt @@ -37,40 +37,33 @@ VeloxColumnarToRow FlushableHashAggregateExecTransformer [cs_item_sk,_pre_x] [sum,count,sum,count,sum,count] ProjectExecTransformer [cs_item_sk,cs_ext_discount_amt] BroadcastHashJoinExecTransformer [cs_sold_date_sk,d_date_sk] - FilterExecTransformer [cs_item_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (3) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (2) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_item_sk,cs_ext_discount_amt,cs_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (4) - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (3) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [cs_item_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (2) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_manufact_id,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_item_sk,cs_ext_discount_amt,cs_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #5 + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] InputIteratorTransformer InputAdapter ReusedExchange [d_date_sk] #5 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/explain.txt index 3677e28900b..0d997bad807 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/explain.txt @@ -1,14 +1,14 @@ == Physical Plan == -VeloxColumnarToRow (43) -+- TakeOrderedAndProjectExecTransformer (42) - +- ^ RegularHashAggregateExecTransformer (40) - +- ^ InputIteratorTransformer (39) - +- ColumnarExchange (37) - +- VeloxResizeBatches (36) - +- ^ ProjectExecTransformer (34) - +- ^ FlushableHashAggregateExecTransformer (33) - +- ^ ProjectExecTransformer (32) - +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (31) +VeloxColumnarToRow (48) ++- TakeOrderedAndProjectExecTransformer (47) + +- ^ RegularHashAggregateExecTransformer (45) + +- ^ InputIteratorTransformer (44) + +- ColumnarExchange (42) + +- VeloxResizeBatches (41) + +- ^ ProjectExecTransformer (39) + +- ^ FlushableHashAggregateExecTransformer (38) + +- ^ ProjectExecTransformer (37) + +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (36) :- ^ InputIteratorTransformer (22) : +- ColumnarExchange (20) : +- VeloxResizeBatches (19) @@ -26,12 +26,15 @@ VeloxColumnarToRow (43) : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.inventory (8) : +- ^ InputIteratorTransformer (15) : +- ReusedExchange (13) - +- ^ InputIteratorTransformer (30) - +- ColumnarExchange (28) - +- VeloxResizeBatches (27) - +- ^ ProjectExecTransformer (25) - +- ^ FilterExecTransformer (24) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (23) + +- ^ InputIteratorTransformer (35) + +- ColumnarExchange (33) + +- VeloxResizeBatches (32) + +- ^ ProjectExecTransformer (30) + +- ^ InputIteratorTransformer (29) + +- RowToVeloxColumnar (27) + +- * Filter (26) + +- VeloxColumnarToRow (25) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (23) (1) FileSourceScanExecTransformer parquet spark_catalog.default.item @@ -89,7 +92,7 @@ Join condition: None Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8] Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_item_sk#6, inv_date_sk#8] -(13) ReusedExchange [Reuses operator id: 48] +(13) ReusedExchange [Reuses operator id: 53] Output [1]: [d_date_sk#10] (14) InputAdapter @@ -133,197 +136,198 @@ Location: CatalogFileIndex [{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct -(24) FilterExecTransformer +(24) WholeStageCodegenTransformer (6) +Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] +Arguments: false + +(25) VeloxColumnarToRow +Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] + +(26) Filter [codegen id : 1] +Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] +Condition : (isnotnull(cs_item_sk#12) AND might_contain(Subquery scalar-subquery#14, [id=#3], xxhash64(cs_item_sk#12, 42))) + +(27) RowToVeloxColumnar Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] -Arguments: (isnotnull(cs_item_sk#12) AND velox_might_contain(Subquery scalar-subquery#14, [id=#3], xxhash64(cs_item_sk#12, 42))) -(25) ProjectExecTransformer +(28) InputAdapter +Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] + +(29) InputIteratorTransformer +Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] + +(30) ProjectExecTransformer Output [2]: [hash(cs_item_sk#12, 42) AS hash_partition_key#15, cs_item_sk#12] Input [2]: [cs_item_sk#12, cs_sold_date_sk#13] -(26) WholeStageCodegenTransformer (7) +(31) WholeStageCodegenTransformer (7) Input [2]: [hash_partition_key#15, cs_item_sk#12] Arguments: false -(27) VeloxResizeBatches +(32) VeloxResizeBatches Input [2]: [hash_partition_key#15, cs_item_sk#12] Arguments: 1024, 2147483647, 10485760 -(28) ColumnarExchange +(33) ColumnarExchange Input [2]: [hash_partition_key#15, cs_item_sk#12] Arguments: hashpartitioning(cs_item_sk#12, 1), ENSURE_REQUIREMENTS, [cs_item_sk#12], [plan_id=4], [shuffle_writer_type=hash] -(29) InputAdapter +(34) InputAdapter Input [1]: [cs_item_sk#12] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [1]: [cs_item_sk#12] -(31) ShuffledHashJoinExecTransformer +(36) ShuffledHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [cs_item_sk#12] Join type: Inner Join condition: None -(32) ProjectExecTransformer +(37) ProjectExecTransformer Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, cs_item_sk#12] -(33) FlushableHashAggregateExecTransformer +(38) FlushableHashAggregateExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Functions: [] Aggregate Attributes: [] Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [4]: [hash(i_item_id#2, i_item_desc#3, i_current_price#4, 42) AS hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(35) WholeStageCodegenTransformer (8) +(40) WholeStageCodegenTransformer (8) Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: false -(36) VeloxResizeBatches +(41) VeloxResizeBatches Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: 1024, 2147483647, 10485760 -(37) ColumnarExchange +(42) ColumnarExchange Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 1), ENSURE_REQUIREMENTS, [i_item_id#2, i_item_desc#3, i_current_price#4], [plan_id=5], [shuffle_writer_type=hash] -(38) InputAdapter +(43) InputAdapter Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(40) RegularHashAggregateExecTransformer +(45) RegularHashAggregateExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Functions: [] Aggregate Attributes: [] Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(41) WholeStageCodegenTransformer (9) +(46) WholeStageCodegenTransformer (9) Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: false -(42) TakeOrderedAndProjectExecTransformer +(47) TakeOrderedAndProjectExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: 100, [i_item_id#2 ASC NULLS FIRST], [i_item_id#2, i_item_desc#3, i_current_price#4], 0 -(43) VeloxColumnarToRow +(48) VeloxColumnarToRow Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] ===== Subqueries ===== Subquery:1 Hosting operator id = 8 Hosting Expression = inv_date_sk#8 IN dynamicpruning#9 -ColumnarBroadcastExchange (48) -+- ^ ProjectExecTransformer (46) - +- ^ FilterExecTransformer (45) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (44) +ColumnarBroadcastExchange (53) ++- ^ ProjectExecTransformer (51) + +- ^ FilterExecTransformer (50) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (49) -(44) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(49) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#10, d_date#17] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-01), LessThanOrEqual(d_date,2000-04-01), IsNotNull(d_date_sk)] ReadSchema: struct -(45) FilterExecTransformer +(50) FilterExecTransformer Input [2]: [d_date_sk#10, d_date#17] Arguments: (((isnotnull(d_date#17) AND (d_date#17 >= 2000-02-01)) AND (d_date#17 <= 2000-04-01)) AND isnotnull(d_date_sk#10)) -(46) ProjectExecTransformer +(51) ProjectExecTransformer Output [1]: [d_date_sk#10] Input [2]: [d_date_sk#10, d_date#17] -(47) WholeStageCodegenTransformer (2) +(52) WholeStageCodegenTransformer (2) Input [1]: [d_date_sk#10] Arguments: false -(48) ColumnarBroadcastExchange +(53) ColumnarBroadcastExchange Input [1]: [d_date_sk#10] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -Subquery:2 Hosting operator id = 24 Hosting Expression = Subquery scalar-subquery#14, [id=#3] -VeloxColumnarToRow (60) -+- ^ RegularHashAggregateExecTransformer (58) - +- ^ InputIteratorTransformer (57) - +- ColumnarExchange (55) - +- VeloxResizeBatches (54) - +- ^ FlushableHashAggregateExecTransformer (52) - +- ^ ProjectExecTransformer (51) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (49) +Subquery:2 Hosting operator id = 26 Hosting Expression = Subquery scalar-subquery#14, [id=#3] +ObjectHashAggregate (64) ++- VeloxColumnarToRow (63) + +- ColumnarExchange (62) + +- VeloxResizeBatches (61) + +- RowToVeloxColumnar (60) + +- ObjectHashAggregate (59) + +- VeloxColumnarToRow (58) + +- ^ ProjectExecTransformer (56) + +- ^ FilterExecTransformer (55) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (54) -(49) FileSourceScanExecTransformer parquet spark_catalog.default.item +(54) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,68.00), LessThanOrEqual(i_current_price,98.00), In(i_manufact_id, [677,694,808,940]), IsNotNull(i_item_sk)] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] Arguments: ((((isnotnull(i_current_price#4) AND (i_current_price#4 >= 68.00)) AND (i_current_price#4 <= 98.00)) AND i_manufact_id#5 IN (677,940,694,808)) AND isnotnull(i_item_sk#1)) -(51) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#1, 42) AS _pre_1#18] +(56) ProjectExecTransformer +Output [1]: [i_item_sk#1] Input [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] -(52) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#18] +(57) WholeStageCodegenTransformer (5) +Input [1]: [i_item_sk#1] +Arguments: false + +(58) VeloxColumnarToRow +Input [1]: [i_item_sk#1] + +(59) ObjectHashAggregate +Input [1]: [i_item_sk#1] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#18, 239, 6582, 0, 0)] -Aggregate Attributes [1]: [buf#19] -Results [1]: [buf#20] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] +Aggregate Attributes [1]: [buf#18] +Results [1]: [buf#19] -(53) WholeStageCodegenTransformer (5) -Input [1]: [buf#20] -Arguments: false +(60) RowToVeloxColumnar +Input [1]: [buf#19] -(54) VeloxResizeBatches -Input [1]: [buf#20] +(61) VeloxResizeBatches +Input [1]: [buf#19] Arguments: 1024, 2147483647, 10485760 -(55) ColumnarExchange -Input [1]: [buf#20] +(62) ColumnarExchange +Input [1]: [buf#19] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7], [shuffle_writer_type=hash] -(56) InputAdapter -Input [1]: [buf#20] +(63) VeloxColumnarToRow +Input [1]: [buf#19] -(57) InputIteratorTransformer -Input [1]: [buf#20] - -(58) RegularHashAggregateExecTransformer -Input [1]: [buf#20] +(64) ObjectHashAggregate +Input [1]: [buf#19] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#21] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#21 AS bloomFilter#22] - -(59) WholeStageCodegenTransformer (6) -Input [1]: [bloomFilter#22] -Arguments: false - -(60) VeloxColumnarToRow -Input [1]: [bloomFilter#22] - -Subquery:3 Hosting operator id = 23 Hosting Expression = Subquery scalar-subquery#14, [id=#3] -VeloxColumnarToRow (60) -+- ^ RegularHashAggregateExecTransformer (58) - +- ^ InputIteratorTransformer (57) - +- ColumnarExchange (55) - +- VeloxResizeBatches (54) - +- ^ FlushableHashAggregateExecTransformer (52) - +- ^ ProjectExecTransformer (51) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (49) - +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#20] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#20 AS bloomFilter#21] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/simplified.txt index 9a875280509..e2e88ca02ff 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q37.sf100/simplified.txt @@ -45,31 +45,24 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (7) ProjectExecTransformer [cs_item_sk] - FilterExecTransformer [cs_item_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_item_sk,cs_sold_date_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [cs_item_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (5) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (6) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_item_sk,cs_sold_date_sk] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/explain.txt index 6496ea6b1e8..6fa102a99cf 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/explain.txt @@ -1,43 +1,46 @@ == Physical Plan == -VeloxColumnarToRow (51) -+- TakeOrderedAndProjectExecTransformer (50) - +- ^ RegularHashAggregateExecTransformer (48) - +- ^ InputIteratorTransformer (47) - +- ColumnarExchange (45) - +- VeloxResizeBatches (44) - +- ^ ProjectExecTransformer (42) - +- ^ FlushableHashAggregateExecTransformer (41) - +- ^ ProjectExecTransformer (40) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (39) - :- ^ ProjectExecTransformer (32) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (31) - : :- ^ ProjectExecTransformer (27) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (26) - : : :- ^ ProjectExecTransformer (18) - : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (17) - : : : :- ^ InputIteratorTransformer (8) - : : : : +- ColumnarExchange (6) - : : : : +- VeloxResizeBatches (5) - : : : : +- ^ ProjectExecTransformer (3) - : : : : +- ^ FilterExecTransformer (2) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (1) - : : : +- ^ InputIteratorTransformer (16) - : : : +- ColumnarExchange (14) - : : : +- VeloxResizeBatches (13) - : : : +- ^ ProjectExecTransformer (11) - : : : +- ^ FilterExecTransformer (10) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (9) - : : +- ^ InputIteratorTransformer (25) - : : +- ColumnarBroadcastExchange (23) - : : +- ^ ProjectExecTransformer (21) - : : +- ^ FilterExecTransformer (20) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (19) - : +- ^ InputIteratorTransformer (30) - : +- ReusedExchange (28) - +- ^ InputIteratorTransformer (38) - +- ColumnarBroadcastExchange (36) - +- ^ FilterExecTransformer (34) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.warehouse (33) +VeloxColumnarToRow (56) ++- TakeOrderedAndProjectExecTransformer (55) + +- ^ RegularHashAggregateExecTransformer (53) + +- ^ InputIteratorTransformer (52) + +- ColumnarExchange (50) + +- VeloxResizeBatches (49) + +- ^ ProjectExecTransformer (47) + +- ^ FlushableHashAggregateExecTransformer (46) + +- ^ ProjectExecTransformer (45) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (44) + :- ^ ProjectExecTransformer (37) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (36) + : :- ^ ProjectExecTransformer (32) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (31) + : : :- ^ ProjectExecTransformer (23) + : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (22) + : : : :- ^ InputIteratorTransformer (13) + : : : : +- ColumnarExchange (11) + : : : : +- VeloxResizeBatches (10) + : : : : +- ^ ProjectExecTransformer (8) + : : : : +- ^ InputIteratorTransformer (7) + : : : : +- RowToVeloxColumnar (5) + : : : : +- * Filter (4) + : : : : +- VeloxColumnarToRow (3) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (1) + : : : +- ^ InputIteratorTransformer (21) + : : : +- ColumnarExchange (19) + : : : +- VeloxResizeBatches (18) + : : : +- ^ ProjectExecTransformer (16) + : : : +- ^ FilterExecTransformer (15) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (14) + : : +- ^ InputIteratorTransformer (30) + : : +- ColumnarBroadcastExchange (28) + : : +- ^ ProjectExecTransformer (26) + : : +- ^ FilterExecTransformer (25) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (24) + : +- ^ InputIteratorTransformer (35) + : +- ReusedExchange (33) + +- ^ InputIteratorTransformer (43) + +- ColumnarBroadcastExchange (41) + +- ^ FilterExecTransformer (39) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.warehouse (38) (1) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales @@ -48,318 +51,319 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#5), dynamicpruningexpression(cs_sol PushedFilters: [IsNotNull(cs_warehouse_sk), IsNotNull(cs_item_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (3) +Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] +Arguments: false + +(3) VeloxColumnarToRow +Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] + +(4) Filter [codegen id : 1] +Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] +Condition : ((isnotnull(cs_warehouse_sk#1) AND isnotnull(cs_item_sk#2)) AND might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(cs_item_sk#2, 42))) + +(5) RowToVeloxColumnar Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] -Arguments: ((isnotnull(cs_warehouse_sk#1) AND isnotnull(cs_item_sk#2)) AND velox_might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(cs_item_sk#2, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] + +(7) InputIteratorTransformer +Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] + +(8) ProjectExecTransformer Output [6]: [hash(cs_order_number#3, cs_item_sk#2, 42) AS hash_partition_key#8, cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] -(4) WholeStageCodegenTransformer (4) +(9) WholeStageCodegenTransformer (4) Input [6]: [hash_partition_key#8, cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [6]: [hash_partition_key#8, cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [6]: [hash_partition_key#8, cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] Arguments: hashpartitioning(cs_order_number#3, cs_item_sk#2, 1), ENSURE_REQUIREMENTS, [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(14) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [4]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11, cr_returned_date_sk#12] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [4]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11, cr_returned_date_sk#12] Arguments: (isnotnull(cr_order_number#10) AND isnotnull(cr_item_sk#9)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [4]: [hash(cr_order_number#10, cr_item_sk#9, 42) AS hash_partition_key#13, cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] Input [4]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11, cr_returned_date_sk#12] -(12) WholeStageCodegenTransformer (5) +(17) WholeStageCodegenTransformer (5) Input [4]: [hash_partition_key#13, cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [4]: [hash_partition_key#13, cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [4]: [hash_partition_key#13, cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] Arguments: hashpartitioning(cr_order_number#10, cr_item_sk#9, 1), ENSURE_REQUIREMENTS, [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11], [plan_id=3], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [3]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [3]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] -(17) ShuffledHashJoinExecTransformer +(22) ShuffledHashJoinExecTransformer Left keys [2]: [cs_order_number#3, cs_item_sk#2] Right keys [2]: [cr_order_number#10, cr_item_sk#9] Join type: LeftOuter Join condition: None -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11] Input [8]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5, cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] -(19) FileSourceScanExecTransformer parquet spark_catalog.default.item +(24) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [3]: [i_item_sk#14, i_item_id#15, i_current_price#16] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,0.99), LessThanOrEqual(i_current_price,1.49), IsNotNull(i_item_sk)] ReadSchema: struct -(20) FilterExecTransformer +(25) FilterExecTransformer Input [3]: [i_item_sk#14, i_item_id#15, i_current_price#16] Arguments: (((isnotnull(i_current_price#16) AND (i_current_price#16 >= 0.99)) AND (i_current_price#16 <= 1.49)) AND isnotnull(i_item_sk#14)) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [2]: [i_item_sk#14, i_item_id#15] Input [3]: [i_item_sk#14, i_item_id#15, i_current_price#16] -(22) WholeStageCodegenTransformer (6) +(27) WholeStageCodegenTransformer (6) Input [2]: [i_item_sk#14, i_item_id#15] Arguments: false -(23) ColumnarBroadcastExchange +(28) ColumnarBroadcastExchange Input [2]: [i_item_sk#14, i_item_id#15] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] -(24) InputAdapter +(29) InputAdapter Input [2]: [i_item_sk#14, i_item_id#15] -(25) InputIteratorTransformer +(30) InputIteratorTransformer Input [2]: [i_item_sk#14, i_item_id#15] -(26) BroadcastHashJoinExecTransformer +(31) BroadcastHashJoinExecTransformer Left keys [1]: [cs_item_sk#2] Right keys [1]: [i_item_sk#14] Join type: Inner Join condition: None -(27) ProjectExecTransformer +(32) ProjectExecTransformer Output [5]: [cs_warehouse_sk#1, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11, i_item_id#15] Input [7]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11, i_item_sk#14, i_item_id#15] -(28) ReusedExchange [Reuses operator id: 67] +(33) ReusedExchange [Reuses operator id: 71] Output [2]: [d_date_sk#17, d_date#18] -(29) InputAdapter +(34) InputAdapter Input [2]: [d_date_sk#17, d_date#18] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [2]: [d_date_sk#17, d_date#18] -(31) BroadcastHashJoinExecTransformer +(36) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#5] Right keys [1]: [d_date_sk#17] Join type: Inner Join condition: None -(32) ProjectExecTransformer +(37) ProjectExecTransformer Output [5]: [cs_warehouse_sk#1, cs_sales_price#4, cr_refunded_cash#11, i_item_id#15, d_date#18] Input [7]: [cs_warehouse_sk#1, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11, i_item_id#15, d_date_sk#17, d_date#18] -(33) FileSourceScanExecTransformer parquet spark_catalog.default.warehouse +(38) FileSourceScanExecTransformer parquet spark_catalog.default.warehouse Output [2]: [w_warehouse_sk#19, w_state#20] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct -(34) FilterExecTransformer +(39) FilterExecTransformer Input [2]: [w_warehouse_sk#19, w_state#20] Arguments: isnotnull(w_warehouse_sk#19) -(35) WholeStageCodegenTransformer (8) +(40) WholeStageCodegenTransformer (8) Input [2]: [w_warehouse_sk#19, w_state#20] Arguments: false -(36) ColumnarBroadcastExchange +(41) ColumnarBroadcastExchange Input [2]: [w_warehouse_sk#19, w_state#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] -(37) InputAdapter +(42) InputAdapter Input [2]: [w_warehouse_sk#19, w_state#20] -(38) InputIteratorTransformer +(43) InputIteratorTransformer Input [2]: [w_warehouse_sk#19, w_state#20] -(39) BroadcastHashJoinExecTransformer +(44) BroadcastHashJoinExecTransformer Left keys [1]: [cs_warehouse_sk#1] Right keys [1]: [w_warehouse_sk#19] Join type: Inner Join condition: None -(40) ProjectExecTransformer +(45) ProjectExecTransformer Output [4]: [w_state#20, i_item_id#15, CASE WHEN (d_date#18 < 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END AS _pre_1#21, CASE WHEN (d_date#18 >= 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END AS _pre_2#22] Input [7]: [cs_warehouse_sk#1, cs_sales_price#4, cr_refunded_cash#11, i_item_id#15, d_date#18, w_warehouse_sk#19, w_state#20] -(41) FlushableHashAggregateExecTransformer +(46) FlushableHashAggregateExecTransformer Input [4]: [w_state#20, i_item_id#15, _pre_1#21, _pre_2#22] Keys [2]: [w_state#20, i_item_id#15] Functions [2]: [partial_sum(_pre_1#21), partial_sum(_pre_2#22)] Aggregate Attributes [4]: [sum#23, isEmpty#24, sum#25, isEmpty#26] Results [6]: [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] -(42) ProjectExecTransformer +(47) ProjectExecTransformer Output [7]: [hash(w_state#20, i_item_id#15, 42) AS hash_partition_key#31, w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] Input [6]: [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] -(43) WholeStageCodegenTransformer (9) +(48) WholeStageCodegenTransformer (9) Input [7]: [hash_partition_key#31, w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] Arguments: false -(44) VeloxResizeBatches +(49) VeloxResizeBatches Input [7]: [hash_partition_key#31, w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] Arguments: 1024, 2147483647, 10485760 -(45) ColumnarExchange +(50) ColumnarExchange Input [7]: [hash_partition_key#31, w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] Arguments: hashpartitioning(w_state#20, i_item_id#15, 1), ENSURE_REQUIREMENTS, [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30], [plan_id=6], [shuffle_writer_type=hash] -(46) InputAdapter +(51) InputAdapter Input [6]: [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] -(47) InputIteratorTransformer +(52) InputIteratorTransformer Input [6]: [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] -(48) RegularHashAggregateExecTransformer +(53) RegularHashAggregateExecTransformer Input [6]: [w_state#20, i_item_id#15, sum#27, isEmpty#28, sum#29, isEmpty#30] Keys [2]: [w_state#20, i_item_id#15] Functions [2]: [sum(CASE WHEN (d_date#18 < 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END), sum(CASE WHEN (d_date#18 >= 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END)] Aggregate Attributes [2]: [sum(CASE WHEN (d_date#18 < 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END)#32, sum(CASE WHEN (d_date#18 >= 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END)#33] Results [4]: [w_state#20, i_item_id#15, sum(CASE WHEN (d_date#18 < 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END)#32 AS sales_before#34, sum(CASE WHEN (d_date#18 >= 2000-03-11) THEN (cs_sales_price#4 - coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00)) ELSE 0.00 END)#33 AS sales_after#35] -(49) WholeStageCodegenTransformer (10) +(54) WholeStageCodegenTransformer (10) Input [4]: [w_state#20, i_item_id#15, sales_before#34, sales_after#35] Arguments: false -(50) TakeOrderedAndProjectExecTransformer +(55) TakeOrderedAndProjectExecTransformer Input [4]: [w_state#20, i_item_id#15, sales_before#34, sales_after#35] Arguments: 100, [w_state#20 ASC NULLS FIRST, i_item_id#15 ASC NULLS FIRST], [w_state#20, i_item_id#15, sales_before#34, sales_after#35], 0 -(51) VeloxColumnarToRow +(56) VeloxColumnarToRow Input [4]: [w_state#20, i_item_id#15, sales_before#34, sales_after#35] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (63) -+- ^ RegularHashAggregateExecTransformer (61) - +- ^ InputIteratorTransformer (60) - +- ColumnarExchange (58) - +- VeloxResizeBatches (57) - +- ^ FlushableHashAggregateExecTransformer (55) - +- ^ ProjectExecTransformer (54) - +- ^ FilterExecTransformer (53) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (52) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#7, [id=#1] +ObjectHashAggregate (67) ++- VeloxColumnarToRow (66) + +- ColumnarExchange (65) + +- VeloxResizeBatches (64) + +- RowToVeloxColumnar (63) + +- ObjectHashAggregate (62) + +- VeloxColumnarToRow (61) + +- ^ ProjectExecTransformer (59) + +- ^ FilterExecTransformer (58) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (57) -(52) FileSourceScanExecTransformer parquet spark_catalog.default.item +(57) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#14, i_current_price#16] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,0.99), LessThanOrEqual(i_current_price,1.49), IsNotNull(i_item_sk)] ReadSchema: struct -(53) FilterExecTransformer +(58) FilterExecTransformer Input [2]: [i_item_sk#14, i_current_price#16] Arguments: (((isnotnull(i_current_price#16) AND (i_current_price#16 >= 0.99)) AND (i_current_price#16 <= 1.49)) AND isnotnull(i_item_sk#14)) -(54) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#14, 42) AS _pre_3#36] +(59) ProjectExecTransformer +Output [1]: [i_item_sk#14] Input [2]: [i_item_sk#14, i_current_price#16] -(55) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#36] +(60) WholeStageCodegenTransformer (1) +Input [1]: [i_item_sk#14] +Arguments: false + +(61) VeloxColumnarToRow +Input [1]: [i_item_sk#14] + +(62) ObjectHashAggregate +Input [1]: [i_item_sk#14] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#36, 1019, 24988, 0, 0)] -Aggregate Attributes [1]: [buf#37] -Results [1]: [buf#38] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)] +Aggregate Attributes [1]: [buf#36] +Results [1]: [buf#37] -(56) WholeStageCodegenTransformer (1) -Input [1]: [buf#38] -Arguments: false +(63) RowToVeloxColumnar +Input [1]: [buf#37] -(57) VeloxResizeBatches -Input [1]: [buf#38] +(64) VeloxResizeBatches +Input [1]: [buf#37] Arguments: 1024, 2147483647, 10485760 -(58) ColumnarExchange -Input [1]: [buf#38] +(65) ColumnarExchange +Input [1]: [buf#37] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7], [shuffle_writer_type=hash] -(59) InputAdapter -Input [1]: [buf#38] - -(60) InputIteratorTransformer -Input [1]: [buf#38] +(66) VeloxColumnarToRow +Input [1]: [buf#37] -(61) RegularHashAggregateExecTransformer -Input [1]: [buf#38] +(67) ObjectHashAggregate +Input [1]: [buf#37] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)#39] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)#39 AS bloomFilter#40] - -(62) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#40] -Arguments: false - -(63) VeloxColumnarToRow -Input [1]: [bloomFilter#40] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)#38] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#14, 42), 1019, 24988, 0, 0)#38 AS bloomFilter#39] Subquery:2 Hosting operator id = 1 Hosting Expression = cs_sold_date_sk#5 IN dynamicpruning#6 -ColumnarBroadcastExchange (67) -+- ^ FilterExecTransformer (65) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (64) +ColumnarBroadcastExchange (71) ++- ^ FilterExecTransformer (69) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (68) -(64) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(68) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#17, d_date#18] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-10), LessThanOrEqual(d_date,2000-04-10), IsNotNull(d_date_sk)] ReadSchema: struct -(65) FilterExecTransformer +(69) FilterExecTransformer Input [2]: [d_date_sk#17, d_date#18] Arguments: (((isnotnull(d_date#18) AND (d_date#18 >= 2000-02-10)) AND (d_date#18 <= 2000-04-10)) AND isnotnull(d_date_sk#17)) -(66) WholeStageCodegenTransformer (3) +(70) WholeStageCodegenTransformer (2) Input [2]: [d_date_sk#17, d_date#18] Arguments: false -(67) ColumnarBroadcastExchange +(71) ColumnarBroadcastExchange Input [2]: [d_date_sk#17, d_date#18] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] -Subquery:3 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (63) -+- ^ RegularHashAggregateExecTransformer (61) - +- ^ InputIteratorTransformer (60) - +- ColumnarExchange (58) - +- VeloxResizeBatches (57) - +- ^ FlushableHashAggregateExecTransformer (55) - +- ^ ProjectExecTransformer (54) - +- ^ FilterExecTransformer (53) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (52) - - diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/simplified.txt index f74238d8977..ab89da706ce 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q40.sf100/simplified.txt @@ -23,39 +23,32 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (4) ProjectExecTransformer [cs_order_number,cs_item_sk,cs_warehouse_sk,cs_sales_price,cs_sold_date_sk] - FilterExecTransformer [cs_warehouse_sk,cs_item_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1019, 24988, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_warehouse_sk,cs_item_sk,cs_order_number,cs_sales_price,cs_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #3 - WholeStageCodegenTransformer (3) - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1019, 24988, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [cs_warehouse_sk,cs_item_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 1019, 24988, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_warehouse_sk,cs_item_sk,cs_order_number,cs_sales_price,cs_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #3 + WholeStageCodegenTransformer (2) + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] InputIteratorTransformer InputAdapter ColumnarExchange [cr_order_number,cr_item_sk,cr_refunded_cash] #5 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/explain.txt index ec9b7208a3b..848c64d4c25 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/explain.txt @@ -1,66 +1,70 @@ == Physical Plan == -VeloxColumnarToRow (81) -+- TakeOrderedAndProjectExecTransformer (80) - +- ^ ProjectExecTransformer (78) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (77) - :- ^ ProjectExecTransformer (36) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (35) - : :- ^ ProjectExecTransformer (27) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (26) - : : :- ^ ProjectExecTransformer (19) - : : : +- ^ RegularHashAggregateExecTransformer (18) - : : : +- ^ InputIteratorTransformer (17) - : : : +- ColumnarExchange (15) - : : : +- VeloxResizeBatches (14) - : : : +- ^ ProjectExecTransformer (12) - : : : +- ^ FlushableHashAggregateExecTransformer (11) - : : : +- ^ ProjectExecTransformer (10) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (9) +VeloxColumnarToRow (85) ++- TakeOrderedAndProjectExecTransformer (84) + +- ^ ProjectExecTransformer (82) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (81) + :- ^ ProjectExecTransformer (38) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) + : :- ^ ProjectExecTransformer (29) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (28) + : : :- ^ ProjectExecTransformer (21) + : : : +- ^ RegularHashAggregateExecTransformer (20) + : : : +- ^ InputIteratorTransformer (19) + : : : +- ColumnarExchange (17) + : : : +- VeloxResizeBatches (16) + : : : +- ^ ProjectExecTransformer (14) + : : : +- ^ FlushableHashAggregateExecTransformer (13) + : : : +- ^ ProjectExecTransformer (12) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (11) : : : :- ^ FilterExecTransformer (2) : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : +- ^ InputIteratorTransformer (8) - : : : +- ColumnarBroadcastExchange (6) - : : : +- ^ FilterExecTransformer (4) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (3) - : : +- ^ InputIteratorTransformer (25) - : : +- ColumnarBroadcastExchange (23) - : : +- ^ FilterExecTransformer (21) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (20) - : +- ^ InputIteratorTransformer (34) - : +- ColumnarBroadcastExchange (32) - : +- ^ ProjectExecTransformer (30) - : +- ^ FilterExecTransformer (29) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (28) - +- ^ InputIteratorTransformer (76) - +- ColumnarBroadcastExchange (74) - +- ^ ProjectExecTransformer (72) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (71) - :- ^ ProjectExecTransformer (63) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) - : :- ^ ProjectExecTransformer (55) - : : +- ^ RegularHashAggregateExecTransformer (54) - : : +- ^ InputIteratorTransformer (53) - : : +- ColumnarExchange (51) - : : +- VeloxResizeBatches (50) - : : +- ^ ProjectExecTransformer (48) - : : +- ^ FlushableHashAggregateExecTransformer (47) - : : +- ^ ProjectExecTransformer (46) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (45) - : : :- ^ FilterExecTransformer (38) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (37) - : : +- ^ InputIteratorTransformer (44) - : : +- ColumnarBroadcastExchange (42) - : : +- ^ FilterExecTransformer (40) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (39) - : +- ^ InputIteratorTransformer (61) - : +- ColumnarBroadcastExchange (59) - : +- ^ FilterExecTransformer (57) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (56) - +- ^ InputIteratorTransformer (70) - +- ColumnarBroadcastExchange (68) - +- ^ ProjectExecTransformer (66) - +- ^ FilterExecTransformer (65) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (64) + : : : +- ^ InputIteratorTransformer (10) + : : : +- ColumnarBroadcastExchange (8) + : : : +- RowToVeloxColumnar (7) + : : : +- * Filter (6) + : : : +- VeloxColumnarToRow (5) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (3) + : : +- ^ InputIteratorTransformer (27) + : : +- ColumnarBroadcastExchange (25) + : : +- ^ FilterExecTransformer (23) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (22) + : +- ^ InputIteratorTransformer (36) + : +- ColumnarBroadcastExchange (34) + : +- ^ ProjectExecTransformer (32) + : +- ^ FilterExecTransformer (31) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (30) + +- ^ InputIteratorTransformer (80) + +- ColumnarBroadcastExchange (78) + +- ^ ProjectExecTransformer (76) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (75) + :- ^ ProjectExecTransformer (67) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (66) + : :- ^ ProjectExecTransformer (59) + : : +- ^ RegularHashAggregateExecTransformer (58) + : : +- ^ InputIteratorTransformer (57) + : : +- ColumnarExchange (55) + : : +- VeloxResizeBatches (54) + : : +- ^ ProjectExecTransformer (52) + : : +- ^ FlushableHashAggregateExecTransformer (51) + : : +- ^ ProjectExecTransformer (50) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (49) + : : :- ^ FilterExecTransformer (40) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (39) + : : +- ^ InputIteratorTransformer (48) + : : +- ColumnarBroadcastExchange (46) + : : +- RowToVeloxColumnar (45) + : : +- * Filter (44) + : : +- VeloxColumnarToRow (43) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (41) + : +- ^ InputIteratorTransformer (65) + : +- ColumnarBroadcastExchange (63) + : +- ^ FilterExecTransformer (61) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (60) + +- ^ InputIteratorTransformer (74) + +- ColumnarBroadcastExchange (72) + +- ^ ProjectExecTransformer (70) + +- ^ FilterExecTransformer (69) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (68) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -82,149 +86,155 @@ Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(4) FilterExecTransformer +(4) WholeStageCodegenTransformer (2) Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND velox_might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(d_week_seq#5, 42))) +Arguments: false -(5) WholeStageCodegenTransformer (3) +(5) VeloxColumnarToRow +Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] + +(6) Filter [codegen id : 1] +Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] +Condition : ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND might_contain(Subquery scalar-subquery#7, [id=#1], xxhash64(d_week_seq#5, 42))) + +(7) RowToVeloxColumnar Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: false -(6) ColumnarBroadcastExchange +(8) ColumnarBroadcastExchange Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] -(7) InputAdapter +(9) InputAdapter Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -(8) InputIteratorTransformer +(10) InputIteratorTransformer Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -(9) BroadcastHashJoinExecTransformer +(11) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#3] Right keys [1]: [d_date_sk#4] Join type: Inner Join condition: None -(10) ProjectExecTransformer +(12) ProjectExecTransformer Output [9]: [ss_store_sk#1, d_week_seq#5, UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END) AS _pre_1#8, UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END) AS _pre_2#9, UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END) AS _pre_3#10, UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END) AS _pre_4#11, UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END) AS _pre_5#12, UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END) AS _pre_6#13, UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END) AS _pre_7#14] Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_week_seq#5, d_day_name#6] -(11) FlushableHashAggregateExecTransformer +(13) FlushableHashAggregateExecTransformer Input [9]: [ss_store_sk#1, d_week_seq#5, _pre_1#8, _pre_2#9, _pre_3#10, _pre_4#11, _pre_5#12, _pre_6#13, _pre_7#14] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [partial_sum(_pre_1#8), partial_sum(_pre_2#9), partial_sum(_pre_3#10), partial_sum(_pre_4#11), partial_sum(_pre_5#12), partial_sum(_pre_6#13), partial_sum(_pre_7#14)] Aggregate Attributes [7]: [sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21] Results [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(12) ProjectExecTransformer +(14) ProjectExecTransformer Output [10]: [hash(d_week_seq#5, ss_store_sk#1, 42) AS hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(13) WholeStageCodegenTransformer (4) +(15) WholeStageCodegenTransformer (3) Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: false -(14) VeloxResizeBatches +(16) VeloxResizeBatches Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: 1024, 2147483647, 10485760 -(15) ColumnarExchange +(17) ColumnarExchange Input [10]: [hash_partition_key#29, d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 1), ENSURE_REQUIREMENTS, [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28], [plan_id=3], [shuffle_writer_type=hash] -(16) InputAdapter +(18) InputAdapter Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(17) InputIteratorTransformer +(19) InputIteratorTransformer Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -(18) RegularHashAggregateExecTransformer +(20) RegularHashAggregateExecTransformer Input [9]: [d_week_seq#5, ss_store_sk#1, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] Results [9]: [d_week_seq#5, ss_store_sk#1, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] -(19) ProjectExecTransformer +(21) ProjectExecTransformer Output [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30,17,2) AS sun_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31,17,2) AS mon_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32,17,2) AS tue_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33,17,2) AS wed_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34,17,2) AS thu_sales#41, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35,17,2) AS fri_sales#42, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36,17,2) AS sat_sales#43] Input [9]: [d_week_seq#5, ss_store_sk#1, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#36] -(20) FileSourceScanExecTransformer parquet spark_catalog.default.store +(22) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct -(21) FilterExecTransformer +(23) FilterExecTransformer Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: (isnotnull(s_store_sk#44) AND isnotnull(s_store_id#45)) -(22) WholeStageCodegenTransformer (5) +(24) WholeStageCodegenTransformer (4) Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: false -(23) ColumnarBroadcastExchange +(25) ColumnarBroadcastExchange Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] -(24) InputAdapter +(26) InputAdapter Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] -(25) InputIteratorTransformer +(27) InputIteratorTransformer Input [3]: [s_store_sk#44, s_store_id#45, s_store_name#46] -(26) BroadcastHashJoinExecTransformer +(28) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#1] Right keys [1]: [s_store_sk#44] Join type: Inner Join condition: None -(27) ProjectExecTransformer +(29) ProjectExecTransformer Output [10]: [d_week_seq#5, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_id#45, s_store_name#46] Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_sk#44, s_store_id#45, s_store_name#46] -(28) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(30) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#47, d_week_seq#48] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_week_seq)] ReadSchema: struct -(29) FilterExecTransformer +(31) FilterExecTransformer Input [2]: [d_month_seq#47, d_week_seq#48] Arguments: (((isnotnull(d_month_seq#47) AND (d_month_seq#47 >= 1212)) AND (d_month_seq#47 <= 1223)) AND isnotnull(d_week_seq#48)) -(30) ProjectExecTransformer +(32) ProjectExecTransformer Output [1]: [d_week_seq#48] Input [2]: [d_month_seq#47, d_week_seq#48] -(31) WholeStageCodegenTransformer (6) +(33) WholeStageCodegenTransformer (5) Input [1]: [d_week_seq#48] Arguments: false -(32) ColumnarBroadcastExchange +(34) ColumnarBroadcastExchange Input [1]: [d_week_seq#48] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(33) InputAdapter +(35) InputAdapter Input [1]: [d_week_seq#48] -(34) InputIteratorTransformer +(36) InputIteratorTransformer Input [1]: [d_week_seq#48] -(35) BroadcastHashJoinExecTransformer +(37) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#5] Right keys [1]: [d_week_seq#48] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(38) ProjectExecTransformer Output [10]: [s_store_name#46 AS s_store_name1#49, d_week_seq#5 AS d_week_seq1#50, s_store_id#45 AS s_store_id1#51, sun_sales#37 AS sun_sales1#52, mon_sales#38 AS mon_sales1#53, tue_sales#39 AS tue_sales1#54, wed_sales#40 AS wed_sales1#55, thu_sales#41 AS thu_sales1#56, fri_sales#42 AS fri_sales1#57, sat_sales#43 AS sat_sales1#58] Input [11]: [d_week_seq#5, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, s_store_id#45, s_store_name#46, d_week_seq#48] -(37) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(39) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [3]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61] Batched: true Location: InMemoryFileIndex [] @@ -232,350 +242,326 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#61)] PushedFilters: [IsNotNull(ss_store_sk)] ReadSchema: struct -(38) FilterExecTransformer +(40) FilterExecTransformer Input [3]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61] Arguments: isnotnull(ss_store_sk#59) -(39) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(41) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)] ReadSchema: struct -(40) FilterExecTransformer +(42) WholeStageCodegenTransformer (7) Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -Arguments: ((isnotnull(d_date_sk#62) AND isnotnull(d_week_seq#63)) AND velox_might_contain(Subquery scalar-subquery#65, [id=#6], xxhash64(d_week_seq#63, 42))) +Arguments: false -(41) WholeStageCodegenTransformer (9) +(43) VeloxColumnarToRow +Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] + +(44) Filter [codegen id : 2] +Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] +Condition : ((isnotnull(d_date_sk#62) AND isnotnull(d_week_seq#63)) AND might_contain(Subquery scalar-subquery#65, [id=#6], xxhash64(d_week_seq#63, 42))) + +(45) RowToVeloxColumnar Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -Arguments: false -(42) ColumnarBroadcastExchange +(46) ColumnarBroadcastExchange Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] -(43) InputAdapter +(47) InputAdapter Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -(44) InputIteratorTransformer +(48) InputIteratorTransformer Input [3]: [d_date_sk#62, d_week_seq#63, d_day_name#64] -(45) BroadcastHashJoinExecTransformer +(49) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#61] Right keys [1]: [d_date_sk#62] Join type: Inner Join condition: None -(46) ProjectExecTransformer +(50) ProjectExecTransformer Output [9]: [ss_store_sk#59, d_week_seq#63, UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END) AS _pre_8#66, UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END) AS _pre_9#67, UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END) AS _pre_10#68, UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END) AS _pre_11#69, UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END) AS _pre_12#70, UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END) AS _pre_13#71, UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END) AS _pre_14#72] Input [6]: [ss_store_sk#59, ss_sales_price#60, ss_sold_date_sk#61, d_date_sk#62, d_week_seq#63, d_day_name#64] -(47) FlushableHashAggregateExecTransformer +(51) FlushableHashAggregateExecTransformer Input [9]: [ss_store_sk#59, d_week_seq#63, _pre_8#66, _pre_9#67, _pre_10#68, _pre_11#69, _pre_12#70, _pre_13#71, _pre_14#72] Keys [2]: [d_week_seq#63, ss_store_sk#59] Functions [7]: [partial_sum(_pre_8#66), partial_sum(_pre_9#67), partial_sum(_pre_10#68), partial_sum(_pre_11#69), partial_sum(_pre_12#70), partial_sum(_pre_13#71), partial_sum(_pre_14#72)] Aggregate Attributes [7]: [sum#73, sum#74, sum#75, sum#76, sum#77, sum#78, sum#79] Results [9]: [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] -(48) ProjectExecTransformer +(52) ProjectExecTransformer Output [10]: [hash(d_week_seq#63, ss_store_sk#59, 42) AS hash_partition_key#87, d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] Input [9]: [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] -(49) WholeStageCodegenTransformer (10) +(53) WholeStageCodegenTransformer (8) Input [10]: [hash_partition_key#87, d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] Arguments: false -(50) VeloxResizeBatches +(54) VeloxResizeBatches Input [10]: [hash_partition_key#87, d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] Arguments: 1024, 2147483647, 10485760 -(51) ColumnarExchange +(55) ColumnarExchange Input [10]: [hash_partition_key#87, d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] Arguments: hashpartitioning(d_week_seq#63, ss_store_sk#59, 1), ENSURE_REQUIREMENTS, [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86], [plan_id=8], [shuffle_writer_type=hash] -(52) InputAdapter +(56) InputAdapter Input [9]: [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] -(53) InputIteratorTransformer +(57) InputIteratorTransformer Input [9]: [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] -(54) RegularHashAggregateExecTransformer +(58) RegularHashAggregateExecTransformer Input [9]: [d_week_seq#63, ss_store_sk#59, sum#80, sum#81, sum#82, sum#83, sum#84, sum#85, sum#86] Keys [2]: [d_week_seq#63, ss_store_sk#59] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END)), sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))] Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] Results [9]: [d_week_seq#63, ss_store_sk#59, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] -(55) ProjectExecTransformer +(59) ProjectExecTransformer Output [9]: [d_week_seq#63, ss_store_sk#59, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30,17,2) AS sun_sales#88, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31,17,2) AS mon_sales#89, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END))#32,17,2) AS tue_sales#90, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33,17,2) AS wed_sales#91, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34,17,2) AS thu_sales#92, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35,17,2) AS fri_sales#93, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36,17,2) AS sat_sales#94] Input [9]: [d_week_seq#63, ss_store_sk#59, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Sunday ) THEN ss_sales_price#60 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Monday ) THEN ss_sales_price#60 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Tuesday ) THEN ss_sales_price#60 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Wednesday) THEN ss_sales_price#60 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Thursday ) THEN ss_sales_price#60 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Friday ) THEN ss_sales_price#60 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#64 = Saturday ) THEN ss_sales_price#60 END))#36] -(56) FileSourceScanExecTransformer parquet spark_catalog.default.store +(60) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [2]: [s_store_sk#95, s_store_id#96] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct -(57) FilterExecTransformer +(61) FilterExecTransformer Input [2]: [s_store_sk#95, s_store_id#96] Arguments: (isnotnull(s_store_sk#95) AND isnotnull(s_store_id#96)) -(58) WholeStageCodegenTransformer (11) +(62) WholeStageCodegenTransformer (9) Input [2]: [s_store_sk#95, s_store_id#96] Arguments: false -(59) ColumnarBroadcastExchange +(63) ColumnarBroadcastExchange Input [2]: [s_store_sk#95, s_store_id#96] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] -(60) InputAdapter +(64) InputAdapter Input [2]: [s_store_sk#95, s_store_id#96] -(61) InputIteratorTransformer +(65) InputIteratorTransformer Input [2]: [s_store_sk#95, s_store_id#96] -(62) BroadcastHashJoinExecTransformer +(66) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#59] Right keys [1]: [s_store_sk#95] Join type: Inner Join condition: None -(63) ProjectExecTransformer +(67) ProjectExecTransformer Output [9]: [d_week_seq#63, sun_sales#88, mon_sales#89, tue_sales#90, wed_sales#91, thu_sales#92, fri_sales#93, sat_sales#94, s_store_id#96] Input [11]: [d_week_seq#63, ss_store_sk#59, sun_sales#88, mon_sales#89, tue_sales#90, wed_sales#91, thu_sales#92, fri_sales#93, sat_sales#94, s_store_sk#95, s_store_id#96] -(64) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(68) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#97, d_week_seq#98] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1224), LessThanOrEqual(d_month_seq,1235), IsNotNull(d_week_seq)] ReadSchema: struct -(65) FilterExecTransformer +(69) FilterExecTransformer Input [2]: [d_month_seq#97, d_week_seq#98] Arguments: (((isnotnull(d_month_seq#97) AND (d_month_seq#97 >= 1224)) AND (d_month_seq#97 <= 1235)) AND isnotnull(d_week_seq#98)) -(66) ProjectExecTransformer +(70) ProjectExecTransformer Output [1]: [d_week_seq#98] Input [2]: [d_month_seq#97, d_week_seq#98] -(67) WholeStageCodegenTransformer (12) +(71) WholeStageCodegenTransformer (10) Input [1]: [d_week_seq#98] Arguments: false -(68) ColumnarBroadcastExchange +(72) ColumnarBroadcastExchange Input [1]: [d_week_seq#98] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -(69) InputAdapter +(73) InputAdapter Input [1]: [d_week_seq#98] -(70) InputIteratorTransformer +(74) InputIteratorTransformer Input [1]: [d_week_seq#98] -(71) BroadcastHashJoinExecTransformer +(75) BroadcastHashJoinExecTransformer Left keys [1]: [d_week_seq#63] Right keys [1]: [d_week_seq#98] Join type: Inner Join condition: None -(72) ProjectExecTransformer +(76) ProjectExecTransformer Output [9]: [d_week_seq#63 AS d_week_seq2#99, s_store_id#96 AS s_store_id2#100, sun_sales#88 AS sun_sales2#101, mon_sales#89 AS mon_sales2#102, tue_sales#90 AS tue_sales2#103, wed_sales#91 AS wed_sales2#104, thu_sales#92 AS thu_sales2#105, fri_sales#93 AS fri_sales2#106, sat_sales#94 AS sat_sales2#107] Input [10]: [d_week_seq#63, sun_sales#88, mon_sales#89, tue_sales#90, wed_sales#91, thu_sales#92, fri_sales#93, sat_sales#94, s_store_id#96, d_week_seq#98] -(73) WholeStageCodegenTransformer (13) +(77) WholeStageCodegenTransformer (11) Input [9]: [d_week_seq2#99, s_store_id2#100, sun_sales2#101, mon_sales2#102, tue_sales2#103, wed_sales2#104, thu_sales2#105, fri_sales2#106, sat_sales2#107] Arguments: false -(74) ColumnarBroadcastExchange +(78) ColumnarBroadcastExchange Input [9]: [d_week_seq2#99, s_store_id2#100, sun_sales2#101, mon_sales2#102, tue_sales2#103, wed_sales2#104, thu_sales2#105, fri_sales2#106, sat_sales2#107] Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [plan_id=11] -(75) InputAdapter +(79) InputAdapter Input [9]: [d_week_seq2#99, s_store_id2#100, sun_sales2#101, mon_sales2#102, tue_sales2#103, wed_sales2#104, thu_sales2#105, fri_sales2#106, sat_sales2#107] -(76) InputIteratorTransformer +(80) InputIteratorTransformer Input [9]: [d_week_seq2#99, s_store_id2#100, sun_sales2#101, mon_sales2#102, tue_sales2#103, wed_sales2#104, thu_sales2#105, fri_sales2#106, sat_sales2#107] -(77) BroadcastHashJoinExecTransformer +(81) BroadcastHashJoinExecTransformer Left keys [2]: [s_store_id1#51, d_week_seq1#50] Right keys [2]: [s_store_id2#100, (d_week_seq2#99 - 52)] Join type: Inner Join condition: None -(78) ProjectExecTransformer +(82) ProjectExecTransformer Output [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1#52 / sun_sales2#101) AS (sun_sales1 / sun_sales2)#108, (mon_sales1#53 / mon_sales2#102) AS (mon_sales1 / mon_sales2)#109, (tue_sales1#54 / tue_sales2#103) AS (tue_sales1 / tue_sales2)#110, (wed_sales1#55 / wed_sales2#104) AS (wed_sales1 / wed_sales2)#111, (thu_sales1#56 / thu_sales2#105) AS (thu_sales1 / thu_sales2)#112, (fri_sales1#57 / fri_sales2#106) AS (fri_sales1 / fri_sales2)#113, (sat_sales1#58 / sat_sales2#107) AS (sat_sales1 / sat_sales2)#114] Input [19]: [s_store_name1#49, d_week_seq1#50, s_store_id1#51, sun_sales1#52, mon_sales1#53, tue_sales1#54, wed_sales1#55, thu_sales1#56, fri_sales1#57, sat_sales1#58, d_week_seq2#99, s_store_id2#100, sun_sales2#101, mon_sales2#102, tue_sales2#103, wed_sales2#104, thu_sales2#105, fri_sales2#106, sat_sales2#107] -(79) WholeStageCodegenTransformer (14) +(83) WholeStageCodegenTransformer (12) Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#108, (mon_sales1 / mon_sales2)#109, (tue_sales1 / tue_sales2)#110, (wed_sales1 / wed_sales2)#111, (thu_sales1 / thu_sales2)#112, (fri_sales1 / fri_sales2)#113, (sat_sales1 / sat_sales2)#114] Arguments: false -(80) TakeOrderedAndProjectExecTransformer +(84) TakeOrderedAndProjectExecTransformer Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#108, (mon_sales1 / mon_sales2)#109, (tue_sales1 / tue_sales2)#110, (wed_sales1 / wed_sales2)#111, (thu_sales1 / thu_sales2)#112, (fri_sales1 / fri_sales2)#113, (sat_sales1 / sat_sales2)#114] Arguments: 100, [s_store_name1#49 ASC NULLS FIRST, s_store_id1#51 ASC NULLS FIRST, d_week_seq1#50 ASC NULLS FIRST], [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#108, (mon_sales1 / mon_sales2)#109, (tue_sales1 / tue_sales2)#110, (wed_sales1 / wed_sales2)#111, (thu_sales1 / thu_sales2)#112, (fri_sales1 / fri_sales2)#113, (sat_sales1 / sat_sales2)#114], 0 -(81) VeloxColumnarToRow +(85) VeloxColumnarToRow Input [10]: [s_store_name1#49, s_store_id1#51, d_week_seq1#50, (sun_sales1 / sun_sales2)#108, (mon_sales1 / mon_sales2)#109, (tue_sales1 / tue_sales2)#110, (wed_sales1 / wed_sales2)#111, (thu_sales1 / thu_sales2)#112, (fri_sales1 / fri_sales2)#113, (sat_sales1 / sat_sales2)#114] ===== Subqueries ===== -Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (93) -+- ^ RegularHashAggregateExecTransformer (91) - +- ^ InputIteratorTransformer (90) - +- ColumnarExchange (88) - +- VeloxResizeBatches (87) - +- ^ FlushableHashAggregateExecTransformer (85) - +- ^ ProjectExecTransformer (84) - +- ^ FilterExecTransformer (83) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) +Subquery:1 Hosting operator id = 6 Hosting Expression = Subquery scalar-subquery#7, [id=#1] +ObjectHashAggregate (96) ++- VeloxColumnarToRow (95) + +- ColumnarExchange (94) + +- VeloxResizeBatches (93) + +- RowToVeloxColumnar (92) + +- ObjectHashAggregate (91) + +- VeloxColumnarToRow (90) + +- ^ ProjectExecTransformer (88) + +- ^ FilterExecTransformer (87) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (86) -(82) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(86) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#47, d_week_seq#48] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_week_seq)] ReadSchema: struct -(83) FilterExecTransformer +(87) FilterExecTransformer Input [2]: [d_month_seq#47, d_week_seq#48] Arguments: (((isnotnull(d_month_seq#47) AND (d_month_seq#47 >= 1212)) AND (d_month_seq#47 <= 1223)) AND isnotnull(d_week_seq#48)) -(84) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#48, 42) AS _pre_15#115] +(88) ProjectExecTransformer +Output [1]: [d_week_seq#48] Input [2]: [d_month_seq#47, d_week_seq#48] -(85) FlushableHashAggregateExecTransformer -Input [1]: [_pre_15#115] +(89) WholeStageCodegenTransformer (1) +Input [1]: [d_week_seq#48] +Arguments: false + +(90) VeloxColumnarToRow +Input [1]: [d_week_seq#48] + +(91) ObjectHashAggregate +Input [1]: [d_week_seq#48] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_15#115, 335, 8990, 0, 0)] -Aggregate Attributes [1]: [buf#116] -Results [1]: [buf#117] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [buf#115] +Results [1]: [buf#116] -(86) WholeStageCodegenTransformer (1) -Input [1]: [buf#117] -Arguments: false +(92) RowToVeloxColumnar +Input [1]: [buf#116] -(87) VeloxResizeBatches -Input [1]: [buf#117] +(93) VeloxResizeBatches +Input [1]: [buf#116] Arguments: 1024, 2147483647, 10485760 -(88) ColumnarExchange -Input [1]: [buf#117] +(94) ColumnarExchange +Input [1]: [buf#116] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(89) InputAdapter -Input [1]: [buf#117] +(95) VeloxColumnarToRow +Input [1]: [buf#116] -(90) InputIteratorTransformer -Input [1]: [buf#117] - -(91) RegularHashAggregateExecTransformer -Input [1]: [buf#117] +(96) ObjectHashAggregate +Input [1]: [buf#116] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#118] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#118 AS bloomFilter#119] - -(92) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#119] -Arguments: false - -(93) VeloxColumnarToRow -Input [1]: [bloomFilter#119] - -Subquery:2 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7, [id=#1] -VeloxColumnarToRow (93) -+- ^ RegularHashAggregateExecTransformer (91) - +- ^ InputIteratorTransformer (90) - +- ColumnarExchange (88) - +- VeloxResizeBatches (87) - +- ^ FlushableHashAggregateExecTransformer (85) - +- ^ ProjectExecTransformer (84) - +- ^ FilterExecTransformer (83) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) - - -Subquery:3 Hosting operator id = 40 Hosting Expression = Subquery scalar-subquery#65, [id=#6] -VeloxColumnarToRow (105) -+- ^ RegularHashAggregateExecTransformer (103) - +- ^ InputIteratorTransformer (102) - +- ColumnarExchange (100) - +- VeloxResizeBatches (99) - +- ^ FlushableHashAggregateExecTransformer (97) - +- ^ ProjectExecTransformer (96) - +- ^ FilterExecTransformer (95) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (94) - - -(94) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#117] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#48, 42), 335, 8990, 0, 0)#117 AS bloomFilter#118] + +Subquery:2 Hosting operator id = 44 Hosting Expression = Subquery scalar-subquery#65, [id=#6] +ObjectHashAggregate (107) ++- VeloxColumnarToRow (106) + +- ColumnarExchange (105) + +- VeloxResizeBatches (104) + +- RowToVeloxColumnar (103) + +- ObjectHashAggregate (102) + +- VeloxColumnarToRow (101) + +- ^ ProjectExecTransformer (99) + +- ^ FilterExecTransformer (98) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (97) + + +(97) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_month_seq#97, d_week_seq#98] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1224), LessThanOrEqual(d_month_seq,1235), IsNotNull(d_week_seq)] ReadSchema: struct -(95) FilterExecTransformer +(98) FilterExecTransformer Input [2]: [d_month_seq#97, d_week_seq#98] Arguments: (((isnotnull(d_month_seq#97) AND (d_month_seq#97 >= 1224)) AND (d_month_seq#97 <= 1235)) AND isnotnull(d_week_seq#98)) -(96) ProjectExecTransformer -Output [1]: [xxhash64(d_week_seq#98, 42) AS _pre_16#120] +(99) ProjectExecTransformer +Output [1]: [d_week_seq#98] Input [2]: [d_month_seq#97, d_week_seq#98] -(97) FlushableHashAggregateExecTransformer -Input [1]: [_pre_16#120] +(100) WholeStageCodegenTransformer (6) +Input [1]: [d_week_seq#98] +Arguments: false + +(101) VeloxColumnarToRow +Input [1]: [d_week_seq#98] + +(102) ObjectHashAggregate +Input [1]: [d_week_seq#98] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_16#120, 335, 8990, 0, 0)] -Aggregate Attributes [1]: [buf#121] -Results [1]: [buf#122] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [buf#119] +Results [1]: [buf#120] -(98) WholeStageCodegenTransformer (7) -Input [1]: [buf#122] -Arguments: false +(103) RowToVeloxColumnar +Input [1]: [buf#120] -(99) VeloxResizeBatches -Input [1]: [buf#122] +(104) VeloxResizeBatches +Input [1]: [buf#120] Arguments: 1024, 2147483647, 10485760 -(100) ColumnarExchange -Input [1]: [buf#122] +(105) ColumnarExchange +Input [1]: [buf#120] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13], [shuffle_writer_type=hash] -(101) InputAdapter -Input [1]: [buf#122] - -(102) InputIteratorTransformer -Input [1]: [buf#122] +(106) VeloxColumnarToRow +Input [1]: [buf#120] -(103) RegularHashAggregateExecTransformer -Input [1]: [buf#122] +(107) ObjectHashAggregate +Input [1]: [buf#120] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)#123] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)#123 AS bloomFilter#124] - -(104) WholeStageCodegenTransformer (8) -Input [1]: [bloomFilter#124] -Arguments: false - -(105) VeloxColumnarToRow -Input [1]: [bloomFilter#124] - -Subquery:4 Hosting operator id = 39 Hosting Expression = Subquery scalar-subquery#65, [id=#6] -VeloxColumnarToRow (105) -+- ^ RegularHashAggregateExecTransformer (103) - +- ^ InputIteratorTransformer (102) - +- ColumnarExchange (100) - +- VeloxResizeBatches (99) - +- ^ FlushableHashAggregateExecTransformer (97) - +- ^ ProjectExecTransformer (96) - +- ^ FilterExecTransformer (95) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (94) - +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)#121] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#98, 42), 335, 8990, 0, 0)#121 AS bloomFilter#122] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/simplified.txt index e4acf654b52..dc095537641 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q59.sf100/simplified.txt @@ -1,6 +1,6 @@ VeloxColumnarToRow TakeOrderedAndProjectExecTransformer [s_store_name1,s_store_id1,d_week_seq1,(sun_sales1 / sun_sales2),(mon_sales1 / mon_sales2),(tue_sales1 / tue_sales2),(wed_sales1 / wed_sales2),(thu_sales1 / thu_sales2),(fri_sales1 / fri_sales2),(sat_sales1 / sat_sales2)] - WholeStageCodegenTransformer (14) + WholeStageCodegenTransformer (12) ProjectExecTransformer [s_store_name1,s_store_id1,d_week_seq1,sun_sales1,sun_sales2,mon_sales1,mon_sales2,tue_sales1,tue_sales2,wed_sales1,wed_sales2,thu_sales1,thu_sales2,fri_sales1,fri_sales2,sat_sales1,sat_sales2] BroadcastHashJoinExecTransformer [s_store_id1,d_week_seq1,s_store_id2,d_week_seq2] ProjectExecTransformer [s_store_name,d_week_seq,s_store_id,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales] @@ -13,7 +13,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] #1 VeloxResizeBatches - WholeStageCodegenTransformer (4) + WholeStageCodegenTransformer (3) ProjectExecTransformer [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,ss_store_sk,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [ss_store_sk,d_week_seq,d_day_name,ss_sales_price] @@ -23,52 +23,42 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #2 - WholeStageCodegenTransformer (3) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [d_date_sk,d_week_seq] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #3 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #1 + InputAdapter VeloxColumnarToRow WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #4 - WholeStageCodegenTransformer (5) + WholeStageCodegenTransformer (4) FilterExecTransformer [s_store_sk,s_store_id] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id,s_store_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (6) + WholeStageCodegenTransformer (5) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #6 - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [d_week_seq,s_store_id,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales] BroadcastHashJoinExecTransformer [d_week_seq,d_week_seq] ProjectExecTransformer [d_week_seq,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales,s_store_id] @@ -79,7 +69,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] #7 VeloxResizeBatches - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (8) ProjectExecTransformer [d_week_seq,ss_store_sk,sum,sum,sum,sum,sum,sum,sum] FlushableHashAggregateExecTransformer [d_week_seq,ss_store_sk,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x,_pre_x] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum] ProjectExecTransformer [ss_store_sk,d_week_seq,d_day_name,ss_sales_price] @@ -89,45 +79,35 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (9) - FilterExecTransformer [d_date_sk,d_week_seq] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (8) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (7) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [d_date_sk,d_week_seq] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf] + VeloxColumnarToRow + ColumnarExchange #9 + VeloxResizeBatches + RowToVeloxColumnar + ObjectHashAggregate [d_week_seq] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (6) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] - Subquery #2 + InputAdapter VeloxColumnarToRow - WholeStageCodegenTransformer (8) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_week_seq, 42), 335, 8990, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #9 - VeloxResizeBatches - WholeStageCodegenTransformer (7) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_week_seq] - FilterExecTransformer [d_month_seq,d_week_seq] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] + WholeStageCodegenTransformer (7) + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_week_seq,d_day_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (9) FilterExecTransformer [s_store_sk,s_store_id] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #11 - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (10) ProjectExecTransformer [d_week_seq] FilterExecTransformer [d_month_seq,d_week_seq] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_month_seq,d_week_seq] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/explain.txt index 3f394fa8ad4..87bec61d589 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/explain.txt @@ -1,261 +1,267 @@ == Physical Plan == -VeloxColumnarToRow (343) -+- ^ SortExecTransformer (341) - +- ^ InputIteratorTransformer (340) - +- ColumnarExchange (338) - +- VeloxResizeBatches (337) - +- ^ ProjectExecTransformer (335) - +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (334) - :- ^ InputIteratorTransformer (201) - : +- ColumnarExchange (199) - : +- VeloxResizeBatches (198) - : +- ^ ProjectExecTransformer (196) - : +- ^ RegularHashAggregateExecTransformer (195) - : +- ^ InputIteratorTransformer (194) - : +- ColumnarExchange (192) - : +- VeloxResizeBatches (191) - : +- ^ ProjectExecTransformer (189) - : +- ^ FlushableHashAggregateExecTransformer (188) - : +- ^ ProjectExecTransformer (187) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (186) - : :- ^ ProjectExecTransformer (178) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (177) - : : :- ^ ProjectExecTransformer (173) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (172) - : : : :- ^ ProjectExecTransformer (165) - : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (164) - : : : : :- ^ InputIteratorTransformer (160) - : : : : : +- ColumnarExchange (158) - : : : : : +- VeloxResizeBatches (157) - : : : : : +- ^ ProjectExecTransformer (155) - : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (154) - : : : : : :- ^ InputIteratorTransformer (145) - : : : : : : +- ColumnarExchange (143) - : : : : : : +- VeloxResizeBatches (142) - : : : : : : +- ^ ProjectExecTransformer (140) - : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (139) - : : : : : : :- ^ ProjectExecTransformer (135) - : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (134) - : : : : : : : :- ^ ProjectExecTransformer (127) - : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (126) - : : : : : : : : :- ^ ProjectExecTransformer (119) - : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (118) - : : : : : : : : : :- ^ InputIteratorTransformer (114) - : : : : : : : : : : +- ColumnarExchange (112) - : : : : : : : : : : +- VeloxResizeBatches (111) - : : : : : : : : : : +- ^ ProjectExecTransformer (109) - : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (108) - : : : : : : : : : : :- ^ InputIteratorTransformer (99) - : : : : : : : : : : : +- ColumnarExchange (97) - : : : : : : : : : : : +- VeloxResizeBatches (96) - : : : : : : : : : : : +- ^ ProjectExecTransformer (94) - : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (93) - : : : : : : : : : : : :- ^ ProjectExecTransformer (89) - : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (88) - : : : : : : : : : : : : :- ^ ProjectExecTransformer (81) - : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (80) - : : : : : : : : : : : : : :- ^ InputIteratorTransformer (71) - : : : : : : : : : : : : : : +- ColumnarExchange (69) - : : : : : : : : : : : : : : +- VeloxResizeBatches (68) - : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (66) - : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (65) - : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (58) - : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) - : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (53) - : : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (52) - : : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (18) - : : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (17) - : : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (8) - : : : : : : : : : : : : : : : : : : +- ColumnarExchange (6) - : : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (5) - : : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (3) - : : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (2) - : : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (16) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (14) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (13) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (11) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (10) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (9) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (51) - : : : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (49) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (47) - : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (46) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (45) - : : : : : : : : : : : : : : : : +- ^ RegularHashAggregateExecTransformer (44) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (43) - : : : : : : : : : : : : : : : : +- ColumnarExchange (41) - : : : : : : : : : : : : : : : : +- VeloxResizeBatches (40) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (38) - : : : : : : : : : : : : : : : : +- ^ FlushableHashAggregateExecTransformer (37) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (36) - : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (35) - : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (26) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (24) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (23) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (21) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (20) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (19) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (34) - : : : : : : : : : : : : : : : : +- ColumnarExchange (32) - : : : : : : : : : : : : : : : : +- VeloxResizeBatches (31) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (29) - : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (28) - : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (27) - : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (56) - : : : : : : : : : : : : : : : +- ReusedExchange (54) - : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (64) - : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (62) - : : : : : : : : : : : : : : +- ^ FilterExecTransformer (60) - : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (59) - : : : : : : : : : : : : : +- ^ InputIteratorTransformer (79) - : : : : : : : : : : : : : +- ColumnarExchange (77) - : : : : : : : : : : : : : +- VeloxResizeBatches (76) - : : : : : : : : : : : : : +- ^ ProjectExecTransformer (74) - : : : : : : : : : : : : : +- ^ FilterExecTransformer (73) - : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (72) - : : : : : : : : : : : : +- ^ InputIteratorTransformer (87) - : : : : : : : : : : : : +- ColumnarBroadcastExchange (85) - : : : : : : : : : : : : +- ^ FilterExecTransformer (83) - : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) - : : : : : : : : : : : +- ^ InputIteratorTransformer (92) - : : : : : : : : : : : +- ReusedExchange (90) - : : : : : : : : : : +- ^ InputIteratorTransformer (107) - : : : : : : : : : : +- ColumnarExchange (105) - : : : : : : : : : : +- VeloxResizeBatches (104) - : : : : : : : : : : +- ^ ProjectExecTransformer (102) - : : : : : : : : : : +- ^ FilterExecTransformer (101) - : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (100) - : : : : : : : : : +- ^ InputIteratorTransformer (117) - : : : : : : : : : +- ReusedExchange (115) - : : : : : : : : +- ^ InputIteratorTransformer (125) - : : : : : : : : +- ColumnarBroadcastExchange (123) - : : : : : : : : +- ^ FilterExecTransformer (121) - : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (120) - : : : : : : : +- ^ InputIteratorTransformer (133) - : : : : : : : +- ColumnarBroadcastExchange (131) - : : : : : : : +- ^ FilterExecTransformer (129) - : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics (128) - : : : : : : +- ^ InputIteratorTransformer (138) - : : : : : : +- ReusedExchange (136) - : : : : : +- ^ InputIteratorTransformer (153) - : : : : : +- ColumnarExchange (151) - : : : : : +- VeloxResizeBatches (150) - : : : : : +- ^ ProjectExecTransformer (148) - : : : : : +- ^ FilterExecTransformer (147) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (146) - : : : : +- ^ InputIteratorTransformer (163) - : : : : +- ReusedExchange (161) - : : : +- ^ InputIteratorTransformer (171) - : : : +- ColumnarBroadcastExchange (169) - : : : +- ^ FilterExecTransformer (167) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.income_band (166) - : : +- ^ InputIteratorTransformer (176) - : : +- ReusedExchange (174) - : +- ^ InputIteratorTransformer (185) - : +- ColumnarBroadcastExchange (183) - : +- ^ ProjectExecTransformer (181) - : +- ^ FilterExecTransformer (180) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (179) - +- ^ InputIteratorTransformer (333) - +- ColumnarExchange (331) - +- VeloxResizeBatches (330) - +- ^ ProjectExecTransformer (328) - +- ^ RegularHashAggregateExecTransformer (327) - +- ^ InputIteratorTransformer (326) - +- ColumnarExchange (324) - +- VeloxResizeBatches (323) - +- ^ ProjectExecTransformer (321) - +- ^ FlushableHashAggregateExecTransformer (320) - +- ^ ProjectExecTransformer (319) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (318) - :- ^ ProjectExecTransformer (314) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (313) - : :- ^ ProjectExecTransformer (309) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (308) - : : :- ^ ProjectExecTransformer (304) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (303) - : : : :- ^ InputIteratorTransformer (299) - : : : : +- ColumnarExchange (297) - : : : : +- VeloxResizeBatches (296) - : : : : +- ^ ProjectExecTransformer (294) - : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (293) - : : : : :- ^ InputIteratorTransformer (289) - : : : : : +- ColumnarExchange (287) - : : : : : +- VeloxResizeBatches (286) - : : : : : +- ^ ProjectExecTransformer (284) - : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) - : : : : : :- ^ ProjectExecTransformer (279) - : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (278) - : : : : : : :- ^ ProjectExecTransformer (274) - : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (273) - : : : : : : : :- ^ ProjectExecTransformer (269) - : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (268) - : : : : : : : : :- ^ InputIteratorTransformer (264) - : : : : : : : : : +- ColumnarExchange (262) - : : : : : : : : : +- VeloxResizeBatches (261) - : : : : : : : : : +- ^ ProjectExecTransformer (259) - : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (258) - : : : : : : : : : :- ^ InputIteratorTransformer (254) - : : : : : : : : : : +- ColumnarExchange (252) - : : : : : : : : : : +- VeloxResizeBatches (251) - : : : : : : : : : : +- ^ ProjectExecTransformer (249) - : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (248) - : : : : : : : : : : :- ^ ProjectExecTransformer (244) - : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (243) - : : : : : : : : : : : :- ^ ProjectExecTransformer (239) - : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (238) - : : : : : : : : : : : : :- ^ InputIteratorTransformer (234) - : : : : : : : : : : : : : +- ColumnarExchange (232) - : : : : : : : : : : : : : +- VeloxResizeBatches (231) - : : : : : : : : : : : : : +- ^ ProjectExecTransformer (229) - : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (228) - : : : : : : : : : : : : : :- ^ ProjectExecTransformer (224) - : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (223) - : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (219) - : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (218) - : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (214) - : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (213) - : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (209) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (207) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (206) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (204) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (203) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (202) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (212) - : : : : : : : : : : : : : : : : +- ReusedExchange (210) - : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (217) - : : : : : : : : : : : : : : : +- ReusedExchange (215) - : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (222) - : : : : : : : : : : : : : : +- ReusedExchange (220) - : : : : : : : : : : : : : +- ^ InputIteratorTransformer (227) - : : : : : : : : : : : : : +- ReusedExchange (225) - : : : : : : : : : : : : +- ^ InputIteratorTransformer (237) - : : : : : : : : : : : : +- ReusedExchange (235) - : : : : : : : : : : : +- ^ InputIteratorTransformer (242) - : : : : : : : : : : : +- ReusedExchange (240) - : : : : : : : : : : +- ^ InputIteratorTransformer (247) - : : : : : : : : : : +- ReusedExchange (245) - : : : : : : : : : +- ^ InputIteratorTransformer (257) - : : : : : : : : : +- ReusedExchange (255) - : : : : : : : : +- ^ InputIteratorTransformer (267) - : : : : : : : : +- ReusedExchange (265) - : : : : : : : +- ^ InputIteratorTransformer (272) - : : : : : : : +- ReusedExchange (270) - : : : : : : +- ^ InputIteratorTransformer (277) - : : : : : : +- ReusedExchange (275) - : : : : : +- ^ InputIteratorTransformer (282) - : : : : : +- ReusedExchange (280) - : : : : +- ^ InputIteratorTransformer (292) - : : : : +- ReusedExchange (290) - : : : +- ^ InputIteratorTransformer (302) - : : : +- ReusedExchange (300) - : : +- ^ InputIteratorTransformer (307) - : : +- ReusedExchange (305) - : +- ^ InputIteratorTransformer (312) - : +- ReusedExchange (310) - +- ^ InputIteratorTransformer (317) - +- ReusedExchange (315) +VeloxColumnarToRow (353) ++- ^ SortExecTransformer (351) + +- ^ InputIteratorTransformer (350) + +- ColumnarExchange (348) + +- VeloxResizeBatches (347) + +- ^ ProjectExecTransformer (345) + +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (344) + :- ^ InputIteratorTransformer (206) + : +- ColumnarExchange (204) + : +- VeloxResizeBatches (203) + : +- ^ ProjectExecTransformer (201) + : +- ^ RegularHashAggregateExecTransformer (200) + : +- ^ InputIteratorTransformer (199) + : +- ColumnarExchange (197) + : +- VeloxResizeBatches (196) + : +- ^ ProjectExecTransformer (194) + : +- ^ FlushableHashAggregateExecTransformer (193) + : +- ^ ProjectExecTransformer (192) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (191) + : :- ^ ProjectExecTransformer (183) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (182) + : : :- ^ ProjectExecTransformer (178) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (177) + : : : :- ^ ProjectExecTransformer (170) + : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (169) + : : : : :- ^ InputIteratorTransformer (165) + : : : : : +- ColumnarExchange (163) + : : : : : +- VeloxResizeBatches (162) + : : : : : +- ^ ProjectExecTransformer (160) + : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (159) + : : : : : :- ^ InputIteratorTransformer (150) + : : : : : : +- ColumnarExchange (148) + : : : : : : +- VeloxResizeBatches (147) + : : : : : : +- ^ ProjectExecTransformer (145) + : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (144) + : : : : : : :- ^ ProjectExecTransformer (140) + : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (139) + : : : : : : : :- ^ ProjectExecTransformer (132) + : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (131) + : : : : : : : : :- ^ ProjectExecTransformer (124) + : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (123) + : : : : : : : : : :- ^ InputIteratorTransformer (119) + : : : : : : : : : : +- ColumnarExchange (117) + : : : : : : : : : : +- VeloxResizeBatches (116) + : : : : : : : : : : +- ^ ProjectExecTransformer (114) + : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (113) + : : : : : : : : : : :- ^ InputIteratorTransformer (104) + : : : : : : : : : : : +- ColumnarExchange (102) + : : : : : : : : : : : +- VeloxResizeBatches (101) + : : : : : : : : : : : +- ^ ProjectExecTransformer (99) + : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (98) + : : : : : : : : : : : :- ^ ProjectExecTransformer (94) + : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (93) + : : : : : : : : : : : : :- ^ ProjectExecTransformer (86) + : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (85) + : : : : : : : : : : : : : :- ^ InputIteratorTransformer (76) + : : : : : : : : : : : : : : +- ColumnarExchange (74) + : : : : : : : : : : : : : : +- VeloxResizeBatches (73) + : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (71) + : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (70) + : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (63) + : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) + : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (58) + : : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) + : : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (23) + : : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (22) + : : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (13) + : : : : : : : : : : : : : : : : : : +- ColumnarExchange (11) + : : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (10) + : : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (8) + : : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (7) + : : : : : : : : : : : : : : : : : : +- RowToVeloxColumnar (5) + : : : : : : : : : : : : : : : : : : +- * Filter (4) + : : : : : : : : : : : : : : : : : : +- VeloxColumnarToRow (3) + : : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (21) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (19) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (18) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (16) + : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (15) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (14) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (56) + : : : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (54) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (52) + : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (51) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (50) + : : : : : : : : : : : : : : : : +- ^ RegularHashAggregateExecTransformer (49) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (48) + : : : : : : : : : : : : : : : : +- ColumnarExchange (46) + : : : : : : : : : : : : : : : : +- VeloxResizeBatches (45) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (43) + : : : : : : : : : : : : : : : : +- ^ FlushableHashAggregateExecTransformer (42) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (41) + : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (40) + : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (31) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (29) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (28) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (26) + : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (25) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (24) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (39) + : : : : : : : : : : : : : : : : +- ColumnarExchange (37) + : : : : : : : : : : : : : : : : +- VeloxResizeBatches (36) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (34) + : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (33) + : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (32) + : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (61) + : : : : : : : : : : : : : : : +- ReusedExchange (59) + : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (69) + : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (67) + : : : : : : : : : : : : : : +- ^ FilterExecTransformer (65) + : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (64) + : : : : : : : : : : : : : +- ^ InputIteratorTransformer (84) + : : : : : : : : : : : : : +- ColumnarExchange (82) + : : : : : : : : : : : : : +- VeloxResizeBatches (81) + : : : : : : : : : : : : : +- ^ ProjectExecTransformer (79) + : : : : : : : : : : : : : +- ^ FilterExecTransformer (78) + : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (77) + : : : : : : : : : : : : +- ^ InputIteratorTransformer (92) + : : : : : : : : : : : : +- ColumnarBroadcastExchange (90) + : : : : : : : : : : : : +- ^ FilterExecTransformer (88) + : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) + : : : : : : : : : : : +- ^ InputIteratorTransformer (97) + : : : : : : : : : : : +- ReusedExchange (95) + : : : : : : : : : : +- ^ InputIteratorTransformer (112) + : : : : : : : : : : +- ColumnarExchange (110) + : : : : : : : : : : +- VeloxResizeBatches (109) + : : : : : : : : : : +- ^ ProjectExecTransformer (107) + : : : : : : : : : : +- ^ FilterExecTransformer (106) + : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (105) + : : : : : : : : : +- ^ InputIteratorTransformer (122) + : : : : : : : : : +- ReusedExchange (120) + : : : : : : : : +- ^ InputIteratorTransformer (130) + : : : : : : : : +- ColumnarBroadcastExchange (128) + : : : : : : : : +- ^ FilterExecTransformer (126) + : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (125) + : : : : : : : +- ^ InputIteratorTransformer (138) + : : : : : : : +- ColumnarBroadcastExchange (136) + : : : : : : : +- ^ FilterExecTransformer (134) + : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics (133) + : : : : : : +- ^ InputIteratorTransformer (143) + : : : : : : +- ReusedExchange (141) + : : : : : +- ^ InputIteratorTransformer (158) + : : : : : +- ColumnarExchange (156) + : : : : : +- VeloxResizeBatches (155) + : : : : : +- ^ ProjectExecTransformer (153) + : : : : : +- ^ FilterExecTransformer (152) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (151) + : : : : +- ^ InputIteratorTransformer (168) + : : : : +- ReusedExchange (166) + : : : +- ^ InputIteratorTransformer (176) + : : : +- ColumnarBroadcastExchange (174) + : : : +- ^ FilterExecTransformer (172) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.income_band (171) + : : +- ^ InputIteratorTransformer (181) + : : +- ReusedExchange (179) + : +- ^ InputIteratorTransformer (190) + : +- ColumnarBroadcastExchange (188) + : +- ^ ProjectExecTransformer (186) + : +- ^ FilterExecTransformer (185) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (184) + +- ^ InputIteratorTransformer (343) + +- ColumnarExchange (341) + +- VeloxResizeBatches (340) + +- ^ ProjectExecTransformer (338) + +- ^ RegularHashAggregateExecTransformer (337) + +- ^ InputIteratorTransformer (336) + +- ColumnarExchange (334) + +- VeloxResizeBatches (333) + +- ^ ProjectExecTransformer (331) + +- ^ FlushableHashAggregateExecTransformer (330) + +- ^ ProjectExecTransformer (329) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (328) + :- ^ ProjectExecTransformer (324) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (323) + : :- ^ ProjectExecTransformer (319) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (318) + : : :- ^ ProjectExecTransformer (314) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (313) + : : : :- ^ InputIteratorTransformer (309) + : : : : +- ColumnarExchange (307) + : : : : +- VeloxResizeBatches (306) + : : : : +- ^ ProjectExecTransformer (304) + : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (303) + : : : : :- ^ InputIteratorTransformer (299) + : : : : : +- ColumnarExchange (297) + : : : : : +- VeloxResizeBatches (296) + : : : : : +- ^ ProjectExecTransformer (294) + : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (293) + : : : : : :- ^ ProjectExecTransformer (289) + : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (288) + : : : : : : :- ^ ProjectExecTransformer (284) + : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) + : : : : : : : :- ^ ProjectExecTransformer (279) + : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (278) + : : : : : : : : :- ^ InputIteratorTransformer (274) + : : : : : : : : : +- ColumnarExchange (272) + : : : : : : : : : +- VeloxResizeBatches (271) + : : : : : : : : : +- ^ ProjectExecTransformer (269) + : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (268) + : : : : : : : : : :- ^ InputIteratorTransformer (264) + : : : : : : : : : : +- ColumnarExchange (262) + : : : : : : : : : : +- VeloxResizeBatches (261) + : : : : : : : : : : +- ^ ProjectExecTransformer (259) + : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (258) + : : : : : : : : : : :- ^ ProjectExecTransformer (254) + : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (253) + : : : : : : : : : : : :- ^ ProjectExecTransformer (249) + : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (248) + : : : : : : : : : : : : :- ^ InputIteratorTransformer (244) + : : : : : : : : : : : : : +- ColumnarExchange (242) + : : : : : : : : : : : : : +- VeloxResizeBatches (241) + : : : : : : : : : : : : : +- ^ ProjectExecTransformer (239) + : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (238) + : : : : : : : : : : : : : :- ^ ProjectExecTransformer (234) + : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (233) + : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (229) + : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (228) + : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (224) + : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (223) + : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (219) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (217) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (216) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (214) + : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (213) + : : : : : : : : : : : : : : : : : +- RowToVeloxColumnar (211) + : : : : : : : : : : : : : : : : : +- * Filter (210) + : : : : : : : : : : : : : : : : : +- VeloxColumnarToRow (209) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (207) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (222) + : : : : : : : : : : : : : : : : +- ReusedExchange (220) + : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (227) + : : : : : : : : : : : : : : : +- ReusedExchange (225) + : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (232) + : : : : : : : : : : : : : : +- ReusedExchange (230) + : : : : : : : : : : : : : +- ^ InputIteratorTransformer (237) + : : : : : : : : : : : : : +- ReusedExchange (235) + : : : : : : : : : : : : +- ^ InputIteratorTransformer (247) + : : : : : : : : : : : : +- ReusedExchange (245) + : : : : : : : : : : : +- ^ InputIteratorTransformer (252) + : : : : : : : : : : : +- ReusedExchange (250) + : : : : : : : : : : +- ^ InputIteratorTransformer (257) + : : : : : : : : : : +- ReusedExchange (255) + : : : : : : : : : +- ^ InputIteratorTransformer (267) + : : : : : : : : : +- ReusedExchange (265) + : : : : : : : : +- ^ InputIteratorTransformer (277) + : : : : : : : : +- ReusedExchange (275) + : : : : : : : +- ^ InputIteratorTransformer (282) + : : : : : : : +- ReusedExchange (280) + : : : : : : +- ^ InputIteratorTransformer (287) + : : : : : : +- ReusedExchange (285) + : : : : : +- ^ InputIteratorTransformer (292) + : : : : : +- ReusedExchange (290) + : : : : +- ^ InputIteratorTransformer (302) + : : : : +- ReusedExchange (300) + : : : +- ^ InputIteratorTransformer (312) + : : : +- ReusedExchange (310) + : : +- ^ InputIteratorTransformer (317) + : : +- ReusedExchange (315) + : +- ^ InputIteratorTransformer (322) + : +- ReusedExchange (320) + +- ^ InputIteratorTransformer (327) + +- ReusedExchange (325) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -266,829 +272,845 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#12), dynamicpruningexpression(ss_so PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (3) +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] +Arguments: false + +(3) VeloxColumnarToRow +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(4) Filter [codegen id : 1] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] +Condition : ((((((((isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#8)) AND isnotnull(ss_store_sk#6)) AND isnotnull(ss_customer_sk#2)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_promo_sk#7)) AND isnotnull(ss_hdemo_sk#4)) AND isnotnull(ss_addr_sk#5)) AND might_contain(Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#1, 42))) + +(5) RowToVeloxColumnar +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(6) InputAdapter +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(7) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -Arguments: ((((((((isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#8)) AND isnotnull(ss_store_sk#6)) AND isnotnull(ss_customer_sk#2)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_promo_sk#7)) AND isnotnull(ss_hdemo_sk#4)) AND isnotnull(ss_addr_sk#5)) AND velox_might_contain(Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#1, 42))) -(3) ProjectExecTransformer +(8) ProjectExecTransformer Output [13]: [hash(ss_item_sk#1, ss_ticket_number#8, 42) AS hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(4) WholeStageCodegenTransformer (4) +(9) WholeStageCodegenTransformer (4) Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#8, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] Arguments: (isnotnull(sr_item_sk#16) AND isnotnull(sr_ticket_number#17)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [3]: [hash(sr_item_sk#16, sr_ticket_number#17, 42) AS hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Input [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] -(12) WholeStageCodegenTransformer (5) +(17) WholeStageCodegenTransformer (5) Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: hashpartitioning(sr_item_sk#16, sr_ticket_number#17, 1), ENSURE_REQUIREMENTS, [sr_item_sk#16, sr_ticket_number#17], [plan_id=3], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [2]: [sr_item_sk#16, sr_ticket_number#17] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [2]: [sr_item_sk#16, sr_ticket_number#17] -(17) ShuffledHashJoinExecTransformer +(22) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#1, ss_ticket_number#8] Right keys [2]: [sr_item_sk#16, sr_ticket_number#17] Join type: Inner Join condition: None -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, sr_item_sk#16, sr_ticket_number#17] -(19) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(24) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_order_number)] ReadSchema: struct -(20) FilterExecTransformer +(25) FilterExecTransformer Input [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] Arguments: (isnotnull(cs_item_sk#20) AND isnotnull(cs_order_number#21)) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [4]: [hash(cs_item_sk#20, cs_order_number#21, 42) AS hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Input [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] -(22) WholeStageCodegenTransformer (6) +(27) WholeStageCodegenTransformer (6) Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: false -(23) VeloxResizeBatches +(28) VeloxResizeBatches Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: 1024, 2147483647, 10485760 -(24) ColumnarExchange +(29) ColumnarExchange Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: hashpartitioning(cs_item_sk#20, cs_order_number#21, 1), ENSURE_REQUIREMENTS, [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22], [plan_id=4], [shuffle_writer_type=hash] -(25) InputAdapter +(30) InputAdapter Input [3]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] -(26) InputIteratorTransformer +(31) InputIteratorTransformer Input [3]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] -(27) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(32) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct -(28) FilterExecTransformer +(33) FilterExecTransformer Input [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] Arguments: (isnotnull(cr_item_sk#25) AND isnotnull(cr_order_number#26)) -(29) ProjectExecTransformer +(34) ProjectExecTransformer Output [6]: [hash(cr_item_sk#25, cr_order_number#26, 42) AS hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Input [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] -(30) WholeStageCodegenTransformer (7) +(35) WholeStageCodegenTransformer (7) Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: false -(31) VeloxResizeBatches +(36) VeloxResizeBatches Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: 1024, 2147483647, 10485760 -(32) ColumnarExchange +(37) ColumnarExchange Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: hashpartitioning(cr_item_sk#25, cr_order_number#26, 1), ENSURE_REQUIREMENTS, [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29], [plan_id=5], [shuffle_writer_type=hash] -(33) InputAdapter +(38) InputAdapter Input [5]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(34) InputIteratorTransformer +(39) InputIteratorTransformer Input [5]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(35) ShuffledHashJoinExecTransformer +(40) ShuffledHashJoinExecTransformer Left keys [2]: [cs_item_sk#20, cs_order_number#21] Right keys [2]: [cr_item_sk#25, cr_order_number#26] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(41) ProjectExecTransformer Output [3]: [cs_item_sk#20, UnscaledValue(cs_ext_list_price#22) AS _pre_1#32, ((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29) AS _pre_2#33] Input [8]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(37) FlushableHashAggregateExecTransformer +(42) FlushableHashAggregateExecTransformer Input [3]: [cs_item_sk#20, _pre_1#32, _pre_2#33] Keys [1]: [cs_item_sk#20] Functions [2]: [partial_sum(_pre_1#32), partial_sum(_pre_2#33)] Aggregate Attributes [3]: [sum#34, sum#35, isEmpty#36] Results [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(38) ProjectExecTransformer +(43) ProjectExecTransformer Output [5]: [hash(cs_item_sk#20, 42) AS hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(39) WholeStageCodegenTransformer (8) +(44) WholeStageCodegenTransformer (8) Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: false -(40) VeloxResizeBatches +(45) VeloxResizeBatches Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: 1024, 2147483647, 10485760 -(41) ColumnarExchange +(46) ColumnarExchange Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: hashpartitioning(cs_item_sk#20, 1), ENSURE_REQUIREMENTS, [cs_item_sk#20, sum#37, sum#38, isEmpty#39], [plan_id=6], [shuffle_writer_type=hash] -(42) InputAdapter +(47) InputAdapter Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(43) InputIteratorTransformer +(48) InputIteratorTransformer Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(44) RegularHashAggregateExecTransformer +(49) RegularHashAggregateExecTransformer Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] Keys [1]: [cs_item_sk#20] Functions [2]: [sum(UnscaledValue(cs_ext_list_price#22)), sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))] Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] Results [3]: [cs_item_sk#20, sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] -(45) ProjectExecTransformer +(50) ProjectExecTransformer Output [3]: [cs_item_sk#20, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#22))#41,17,2) AS sale#43, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42 AS refund#44] Input [3]: [cs_item_sk#20, sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] -(46) FilterExecTransformer +(51) FilterExecTransformer Input [3]: [cs_item_sk#20, sale#43, refund#44] Arguments: ((isnotnull(sale#43) AND isnotnull(refund#44)) AND (cast(sale#43 as decimal(21,2)) > (2 * refund#44))) -(47) ProjectExecTransformer +(52) ProjectExecTransformer Output [1]: [cs_item_sk#20] Input [3]: [cs_item_sk#20, sale#43, refund#44] -(48) WholeStageCodegenTransformer (9) +(53) WholeStageCodegenTransformer (9) Input [1]: [cs_item_sk#20] Arguments: false -(49) ColumnarBroadcastExchange +(54) ColumnarBroadcastExchange Input [1]: [cs_item_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(50) InputAdapter +(55) InputAdapter Input [1]: [cs_item_sk#20] -(51) InputIteratorTransformer +(56) InputIteratorTransformer Input [1]: [cs_item_sk#20] -(52) BroadcastHashJoinExecTransformer +(57) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [cs_item_sk#20] Join type: Inner Join condition: None -(53) ProjectExecTransformer +(58) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, cs_item_sk#20] -(54) ReusedExchange [Reuses operator id: 359] +(59) ReusedExchange [Reuses operator id: 368] Output [2]: [d_date_sk#45, d_year#46] -(55) InputAdapter +(60) InputAdapter Input [2]: [d_date_sk#45, d_year#46] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [2]: [d_date_sk#45, d_year#46] -(57) BroadcastHashJoinExecTransformer +(62) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#12] Right keys [1]: [d_date_sk#45] Join type: Inner Join condition: None -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46] Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, d_date_sk#45, d_year#46] -(59) FileSourceScanExecTransformer parquet spark_catalog.default.store +(64) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_name), IsNotNull(s_zip)] ReadSchema: struct -(60) FilterExecTransformer +(65) FilterExecTransformer Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: ((isnotnull(s_store_sk#47) AND isnotnull(s_store_name#48)) AND isnotnull(s_zip#49)) -(61) WholeStageCodegenTransformer (11) +(66) WholeStageCodegenTransformer (11) Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: false -(62) ColumnarBroadcastExchange +(67) ColumnarBroadcastExchange Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] -(63) InputAdapter +(68) InputAdapter Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] -(64) InputIteratorTransformer +(69) InputIteratorTransformer Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] -(65) BroadcastHashJoinExecTransformer +(70) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#6] Right keys [1]: [s_store_sk#47] Join type: Inner Join condition: None -(66) ProjectExecTransformer +(71) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#2, 42) AS hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_sk#47, s_store_name#48, s_zip#49] -(67) WholeStageCodegenTransformer (12) +(72) WholeStageCodegenTransformer (12) Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: false -(68) VeloxResizeBatches +(73) VeloxResizeBatches Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: 1024, 2147483647, 10485760 -(69) ColumnarExchange +(74) ColumnarExchange Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: hashpartitioning(ss_customer_sk#2, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49], [plan_id=9], [shuffle_writer_type=hash] -(70) InputAdapter +(75) InputAdapter Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] -(71) InputIteratorTransformer +(76) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] -(72) FileSourceScanExecTransformer parquet spark_catalog.default.customer +(77) FileSourceScanExecTransformer parquet spark_catalog.default.customer Output [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_first_sales_date_sk), IsNotNull(c_first_shipto_date_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_hdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct -(73) FilterExecTransformer +(78) FilterExecTransformer Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: (((((isnotnull(c_customer_sk#51) AND isnotnull(c_first_sales_date_sk#56)) AND isnotnull(c_first_shipto_date_sk#55)) AND isnotnull(c_current_cdemo_sk#52)) AND isnotnull(c_current_hdemo_sk#53)) AND isnotnull(c_current_addr_sk#54)) -(74) ProjectExecTransformer +(79) ProjectExecTransformer Output [7]: [hash(c_customer_sk#51, 42) AS hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(75) WholeStageCodegenTransformer (13) +(80) WholeStageCodegenTransformer (13) Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: false -(76) VeloxResizeBatches +(81) VeloxResizeBatches Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: 1024, 2147483647, 10485760 -(77) ColumnarExchange +(82) ColumnarExchange Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: hashpartitioning(c_customer_sk#51, 1), ENSURE_REQUIREMENTS, [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56], [plan_id=10], [shuffle_writer_type=hash] -(78) InputAdapter +(83) InputAdapter Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(79) InputIteratorTransformer +(84) InputIteratorTransformer Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(80) ShuffledHashJoinExecTransformer +(85) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#2] Right keys [1]: [c_customer_sk#51] Join type: Inner Join condition: None -(81) ProjectExecTransformer +(86) ProjectExecTransformer Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Input [18]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(82) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#58, d_year#59] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct -(83) FilterExecTransformer +(88) FilterExecTransformer Input [2]: [d_date_sk#58, d_year#59] Arguments: isnotnull(d_date_sk#58) -(84) WholeStageCodegenTransformer (14) +(89) WholeStageCodegenTransformer (14) Input [2]: [d_date_sk#58, d_year#59] Arguments: false -(85) ColumnarBroadcastExchange +(90) ColumnarBroadcastExchange Input [2]: [d_date_sk#58, d_year#59] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=11] -(86) InputAdapter +(91) InputAdapter Input [2]: [d_date_sk#58, d_year#59] -(87) InputIteratorTransformer +(92) InputIteratorTransformer Input [2]: [d_date_sk#58, d_year#59] -(88) BroadcastHashJoinExecTransformer +(93) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_sales_date_sk#56] Right keys [1]: [d_date_sk#58] Join type: Inner Join condition: None -(89) ProjectExecTransformer +(94) ProjectExecTransformer Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, d_year#59] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56, d_date_sk#58, d_year#59] -(90) ReusedExchange [Reuses operator id: 85] +(95) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#60, d_year#61] -(91) InputAdapter +(96) InputAdapter Input [2]: [d_date_sk#60, d_year#61] -(92) InputIteratorTransformer +(97) InputIteratorTransformer Input [2]: [d_date_sk#60, d_year#61] -(93) BroadcastHashJoinExecTransformer +(98) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_shipto_date_sk#55] Right keys [1]: [d_date_sk#60] Join type: Inner Join condition: None -(94) ProjectExecTransformer +(99) ProjectExecTransformer Output [17]: [hash(ss_cdemo_sk#3, 42) AS hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, d_year#59, d_date_sk#60, d_year#61] -(95) WholeStageCodegenTransformer (16) +(100) WholeStageCodegenTransformer (16) Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: false -(96) VeloxResizeBatches +(101) VeloxResizeBatches Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: 1024, 2147483647, 10485760 -(97) ColumnarExchange +(102) ColumnarExchange Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: hashpartitioning(ss_cdemo_sk#3, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61], [plan_id=12], [shuffle_writer_type=hash] -(98) InputAdapter +(103) InputAdapter Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] -(99) InputIteratorTransformer +(104) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] -(100) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(105) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [2]: [cd_demo_sk#63, cd_marital_status#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status)] ReadSchema: struct -(101) FilterExecTransformer +(106) FilterExecTransformer Input [2]: [cd_demo_sk#63, cd_marital_status#64] Arguments: (isnotnull(cd_demo_sk#63) AND isnotnull(cd_marital_status#64)) -(102) ProjectExecTransformer +(107) ProjectExecTransformer Output [3]: [hash(cd_demo_sk#63, 42) AS hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(103) WholeStageCodegenTransformer (17) +(108) WholeStageCodegenTransformer (17) Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: false -(104) VeloxResizeBatches +(109) VeloxResizeBatches Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: 1024, 2147483647, 10485760 -(105) ColumnarExchange +(110) ColumnarExchange Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: hashpartitioning(cd_demo_sk#63, 1), ENSURE_REQUIREMENTS, [cd_demo_sk#63, cd_marital_status#64], [plan_id=13], [shuffle_writer_type=hash] -(106) InputAdapter +(111) InputAdapter Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(107) InputIteratorTransformer +(112) InputIteratorTransformer Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(108) ShuffledHashJoinExecTransformer +(113) ShuffledHashJoinExecTransformer Left keys [1]: [ss_cdemo_sk#3] Right keys [1]: [cd_demo_sk#63] Join type: Inner Join condition: None -(109) ProjectExecTransformer +(114) ProjectExecTransformer Output [17]: [hash(c_current_cdemo_sk#52, 42) AS hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_demo_sk#63, cd_marital_status#64] -(110) WholeStageCodegenTransformer (18) +(115) WholeStageCodegenTransformer (18) Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: false -(111) VeloxResizeBatches +(116) VeloxResizeBatches Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: 1024, 2147483647, 10485760 -(112) ColumnarExchange +(117) ColumnarExchange Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: hashpartitioning(c_current_cdemo_sk#52, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64], [plan_id=14], [shuffle_writer_type=hash] -(113) InputAdapter +(118) InputAdapter Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] -(114) InputIteratorTransformer +(119) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] -(115) ReusedExchange [Reuses operator id: 105] +(120) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#67, cd_marital_status#68] -(116) InputAdapter +(121) InputAdapter Input [2]: [cd_demo_sk#67, cd_marital_status#68] -(117) InputIteratorTransformer +(122) InputIteratorTransformer Input [2]: [cd_demo_sk#67, cd_marital_status#68] -(118) ShuffledHashJoinExecTransformer +(123) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#52] Right keys [1]: [cd_demo_sk#67] Join type: Inner Join condition: NOT (cd_marital_status#64 = cd_marital_status#68) -(119) ProjectExecTransformer +(124) ProjectExecTransformer Output [14]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [18]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64, cd_demo_sk#67, cd_marital_status#68] -(120) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(125) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [1]: [p_promo_sk#69] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_promo_sk)] ReadSchema: struct -(121) FilterExecTransformer +(126) FilterExecTransformer Input [1]: [p_promo_sk#69] Arguments: isnotnull(p_promo_sk#69) -(122) WholeStageCodegenTransformer (20) +(127) WholeStageCodegenTransformer (20) Input [1]: [p_promo_sk#69] Arguments: false -(123) ColumnarBroadcastExchange +(128) ColumnarBroadcastExchange Input [1]: [p_promo_sk#69] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -(124) InputAdapter +(129) InputAdapter Input [1]: [p_promo_sk#69] -(125) InputIteratorTransformer +(130) InputIteratorTransformer Input [1]: [p_promo_sk#69] -(126) BroadcastHashJoinExecTransformer +(131) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#7] Right keys [1]: [p_promo_sk#69] Join type: Inner Join condition: None -(127) ProjectExecTransformer +(132) ProjectExecTransformer Output [13]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, p_promo_sk#69] -(128) FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics +(133) FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics Output [2]: [hd_demo_sk#70, hd_income_band_sk#71] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_demo_sk), IsNotNull(hd_income_band_sk)] ReadSchema: struct -(129) FilterExecTransformer +(134) FilterExecTransformer Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: (isnotnull(hd_demo_sk#70) AND isnotnull(hd_income_band_sk#71)) -(130) WholeStageCodegenTransformer (21) +(135) WholeStageCodegenTransformer (21) Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: false -(131) ColumnarBroadcastExchange +(136) ColumnarBroadcastExchange Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=16] -(132) InputAdapter +(137) InputAdapter Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] -(133) InputIteratorTransformer +(138) InputIteratorTransformer Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] -(134) BroadcastHashJoinExecTransformer +(139) BroadcastHashJoinExecTransformer Left keys [1]: [ss_hdemo_sk#4] Right keys [1]: [hd_demo_sk#70] Join type: Inner Join condition: None -(135) ProjectExecTransformer +(140) ProjectExecTransformer Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71] Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_demo_sk#70, hd_income_band_sk#71] -(136) ReusedExchange [Reuses operator id: 131] +(141) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(137) InputAdapter +(142) InputAdapter Input [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(138) InputIteratorTransformer +(143) InputIteratorTransformer Input [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(139) BroadcastHashJoinExecTransformer +(144) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_hdemo_sk#53] Right keys [1]: [hd_demo_sk#72] Join type: Inner Join condition: None -(140) ProjectExecTransformer +(145) ProjectExecTransformer Output [14]: [hash(ss_addr_sk#5, 42) AS hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Input [15]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_demo_sk#72, hd_income_band_sk#73] -(141) WholeStageCodegenTransformer (23) +(146) WholeStageCodegenTransformer (23) Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: false -(142) VeloxResizeBatches +(147) VeloxResizeBatches Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: 1024, 2147483647, 10485760 -(143) ColumnarExchange +(148) ColumnarExchange Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: hashpartitioning(ss_addr_sk#5, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73], [plan_id=17], [shuffle_writer_type=hash] -(144) InputAdapter +(149) InputAdapter Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] -(145) InputIteratorTransformer +(150) InputIteratorTransformer Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] -(146) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(151) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct -(147) FilterExecTransformer +(152) FilterExecTransformer Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: isnotnull(ca_address_sk#75) -(148) ProjectExecTransformer +(153) ProjectExecTransformer Output [6]: [hash(ca_address_sk#75, 42) AS hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(149) WholeStageCodegenTransformer (24) +(154) WholeStageCodegenTransformer (24) Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: false -(150) VeloxResizeBatches +(155) VeloxResizeBatches Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: 1024, 2147483647, 10485760 -(151) ColumnarExchange +(156) ColumnarExchange Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: hashpartitioning(ca_address_sk#75, 1), ENSURE_REQUIREMENTS, [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79], [plan_id=18], [shuffle_writer_type=hash] -(152) InputAdapter +(157) InputAdapter Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(153) InputIteratorTransformer +(158) InputIteratorTransformer Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(154) ShuffledHashJoinExecTransformer +(159) ShuffledHashJoinExecTransformer Left keys [1]: [ss_addr_sk#5] Right keys [1]: [ca_address_sk#75] Join type: Inner Join condition: None -(155) ProjectExecTransformer +(160) ProjectExecTransformer Output [17]: [hash(c_current_addr_sk#54, 42) AS hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Input [18]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(156) WholeStageCodegenTransformer (25) +(161) WholeStageCodegenTransformer (25) Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: false -(157) VeloxResizeBatches +(162) VeloxResizeBatches Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: 1024, 2147483647, 10485760 -(158) ColumnarExchange +(163) ColumnarExchange Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: hashpartitioning(c_current_addr_sk#54, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79], [plan_id=19], [shuffle_writer_type=hash] -(159) InputAdapter +(164) InputAdapter Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(160) InputIteratorTransformer +(165) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(161) ReusedExchange [Reuses operator id: 151] +(166) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(162) InputAdapter +(167) InputAdapter Input [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(163) InputIteratorTransformer +(168) InputIteratorTransformer Input [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(164) ShuffledHashJoinExecTransformer +(169) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#54] Right keys [1]: [ca_address_sk#82] Join type: Inner Join condition: None -(165) ProjectExecTransformer +(170) ProjectExecTransformer Output [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(166) FileSourceScanExecTransformer parquet spark_catalog.default.income_band +(171) FileSourceScanExecTransformer parquet spark_catalog.default.income_band Output [1]: [ib_income_band_sk#87] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/income_band] PushedFilters: [IsNotNull(ib_income_band_sk)] ReadSchema: struct -(167) FilterExecTransformer +(172) FilterExecTransformer Input [1]: [ib_income_band_sk#87] Arguments: isnotnull(ib_income_band_sk#87) -(168) WholeStageCodegenTransformer (27) +(173) WholeStageCodegenTransformer (27) Input [1]: [ib_income_band_sk#87] Arguments: false -(169) ColumnarBroadcastExchange +(174) ColumnarBroadcastExchange Input [1]: [ib_income_band_sk#87] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=20] -(170) InputAdapter +(175) InputAdapter Input [1]: [ib_income_band_sk#87] -(171) InputIteratorTransformer +(176) InputIteratorTransformer Input [1]: [ib_income_band_sk#87] -(172) BroadcastHashJoinExecTransformer +(177) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#71] Right keys [1]: [ib_income_band_sk#87] Join type: Inner Join condition: None -(173) ProjectExecTransformer +(178) ProjectExecTransformer Output [18]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, ib_income_band_sk#87] -(174) ReusedExchange [Reuses operator id: 169] +(179) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#88] -(175) InputAdapter +(180) InputAdapter Input [1]: [ib_income_band_sk#88] -(176) InputIteratorTransformer +(181) InputIteratorTransformer Input [1]: [ib_income_band_sk#88] -(177) BroadcastHashJoinExecTransformer +(182) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#73] Right keys [1]: [ib_income_band_sk#88] Join type: Inner Join condition: None -(178) ProjectExecTransformer +(183) ProjectExecTransformer Output [17]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, ib_income_band_sk#88] -(179) FileSourceScanExecTransformer parquet spark_catalog.default.item +(184) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood ,floral ,indian ,medium ,purple ,spring ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)] ReadSchema: struct -(180) FilterExecTransformer +(185) FilterExecTransformer Input [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] Arguments: ((((((isnotnull(i_current_price#90) AND i_color#91 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#90 >= 64.00)) AND (i_current_price#90 <= 74.00)) AND (i_current_price#90 >= 65.00)) AND (i_current_price#90 <= 79.00)) AND isnotnull(i_item_sk#89)) -(181) ProjectExecTransformer +(186) ProjectExecTransformer Output [2]: [i_item_sk#89, i_product_name#92] Input [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] -(182) WholeStageCodegenTransformer (29) +(187) WholeStageCodegenTransformer (29) Input [2]: [i_item_sk#89, i_product_name#92] Arguments: false -(183) ColumnarBroadcastExchange +(188) ColumnarBroadcastExchange Input [2]: [i_item_sk#89, i_product_name#92] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=21] -(184) InputAdapter +(189) InputAdapter Input [2]: [i_item_sk#89, i_product_name#92] -(185) InputIteratorTransformer +(190) InputIteratorTransformer Input [2]: [i_item_sk#89, i_product_name#92] -(186) BroadcastHashJoinExecTransformer +(191) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#89] Join type: Inner Join condition: None -(187) ProjectExecTransformer +(192) ProjectExecTransformer Output [18]: [d_year#46, d_year#59, d_year#61, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92, UnscaledValue(ss_wholesale_cost#9) AS _pre_3#93, UnscaledValue(ss_list_price#10) AS _pre_4#94, UnscaledValue(ss_coupon_amt#11) AS _pre_5#95] Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92] -(188) FlushableHashAggregateExecTransformer +(193) FlushableHashAggregateExecTransformer Input [18]: [d_year#46, d_year#59, d_year#61, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92, _pre_3#93, _pre_4#94, _pre_5#95] Keys [15]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61] Functions [4]: [partial_count(1), partial_sum(_pre_3#93), partial_sum(_pre_4#94), partial_sum(_pre_5#95)] Aggregate Attributes [4]: [count#96, sum#97, sum#98, sum#99] Results [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(189) ProjectExecTransformer +(194) ProjectExecTransformer Output [20]: [hash(i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, 42) AS hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(190) WholeStageCodegenTransformer (30) +(195) WholeStageCodegenTransformer (30) Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: false -(191) VeloxResizeBatches +(196) VeloxResizeBatches Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: 1024, 2147483647, 10485760 -(192) ColumnarExchange +(197) ColumnarExchange Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: hashpartitioning(i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, 1), ENSURE_REQUIREMENTS, [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103], [plan_id=22], [shuffle_writer_type=hash] -(193) InputAdapter +(198) InputAdapter Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(194) InputIteratorTransformer +(199) InputIteratorTransformer Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(195) RegularHashAggregateExecTransformer +(200) RegularHashAggregateExecTransformer Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Keys [15]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61] Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#9)), sum(UnscaledValue(ss_list_price#10)), sum(UnscaledValue(ss_coupon_amt#11))] Aggregate Attributes [4]: [count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] Results [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] -(196) ProjectExecTransformer +(201) ProjectExecTransformer Output [18]: [hash(i_item_sk#89, s_store_name#48, s_zip#49, 42) AS hash_partition_key#109, i_product_name#92 AS product_name#110, i_item_sk#89 AS item_sk#111, s_store_name#48 AS store_name#112, s_zip#49 AS store_zip#113, ca_street_number#76 AS b_street_number#114, ca_street_name#77 AS b_streen_name#115, ca_city#78 AS b_city#116, ca_zip#79 AS b_zip#117, ca_street_number#83 AS c_street_number#118, ca_street_name#84 AS c_street_name#119, ca_city#85 AS c_city#120, ca_zip#86 AS c_zip#121, d_year#46 AS syear#122, count(1)#105 AS cnt#123, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#9))#106,17,2) AS s1#124, MakeDecimal(sum(UnscaledValue(ss_list_price#10))#107,17,2) AS s2#125, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#11))#108,17,2) AS s3#126] Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] -(197) WholeStageCodegenTransformer (31) +(202) WholeStageCodegenTransformer (31) Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: false -(198) VeloxResizeBatches +(203) VeloxResizeBatches Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: 1024, 2147483647, 10485760 -(199) ColumnarExchange +(204) ColumnarExchange Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: hashpartitioning(item_sk#111, store_name#112, store_zip#113, 1), ENSURE_REQUIREMENTS, [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126], [plan_id=23], [shuffle_writer_type=hash] -(200) InputAdapter +(205) InputAdapter Input [17]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] -(201) InputIteratorTransformer +(206) InputIteratorTransformer Input [17]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] -(202) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(207) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Batched: true Location: InMemoryFileIndex [] @@ -1096,674 +1118,673 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#138), dynamicpruningexpression(ss_s PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)] ReadSchema: struct -(203) FilterExecTransformer +(208) WholeStageCodegenTransformer (34) +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] +Arguments: false + +(209) VeloxColumnarToRow +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(210) Filter [codegen id : 2] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -Arguments: ((((((((isnotnull(ss_item_sk#127) AND isnotnull(ss_ticket_number#134)) AND isnotnull(ss_store_sk#132)) AND isnotnull(ss_customer_sk#128)) AND isnotnull(ss_cdemo_sk#129)) AND isnotnull(ss_promo_sk#133)) AND isnotnull(ss_hdemo_sk#130)) AND isnotnull(ss_addr_sk#131)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#127, 42))) +Condition : ((((((((isnotnull(ss_item_sk#127) AND isnotnull(ss_ticket_number#134)) AND isnotnull(ss_store_sk#132)) AND isnotnull(ss_customer_sk#128)) AND isnotnull(ss_cdemo_sk#129)) AND isnotnull(ss_promo_sk#133)) AND isnotnull(ss_hdemo_sk#130)) AND isnotnull(ss_addr_sk#131)) AND might_contain(ReusedSubquery Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#127, 42))) -(204) ProjectExecTransformer +(211) RowToVeloxColumnar +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(212) InputAdapter +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(213) InputIteratorTransformer +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(214) ProjectExecTransformer Output [13]: [hash(ss_item_sk#127, ss_ticket_number#134, 42) AS hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(205) WholeStageCodegenTransformer (35) +(215) WholeStageCodegenTransformer (35) Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: false -(206) VeloxResizeBatches +(216) VeloxResizeBatches Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: 1024, 2147483647, 10485760 -(207) ColumnarExchange +(217) ColumnarExchange Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: hashpartitioning(ss_item_sk#127, ss_ticket_number#134, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138], [plan_id=24], [shuffle_writer_type=hash] -(208) InputAdapter +(218) InputAdapter Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(209) InputIteratorTransformer +(219) InputIteratorTransformer Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(210) ReusedExchange [Reuses operator id: 14] +(220) ReusedExchange [Reuses operator id: 19] Output [2]: [sr_item_sk#141, sr_ticket_number#142] -(211) InputAdapter +(221) InputAdapter Input [2]: [sr_item_sk#141, sr_ticket_number#142] -(212) InputIteratorTransformer +(222) InputIteratorTransformer Input [2]: [sr_item_sk#141, sr_ticket_number#142] -(213) ShuffledHashJoinExecTransformer +(223) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#127, ss_ticket_number#134] Right keys [2]: [sr_item_sk#141, sr_ticket_number#142] Join type: Inner Join condition: None -(214) ProjectExecTransformer +(224) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [14]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, sr_item_sk#141, sr_ticket_number#142] -(215) ReusedExchange [Reuses operator id: 49] +(225) ReusedExchange [Reuses operator id: 54] Output [1]: [cs_item_sk#143] -(216) InputAdapter +(226) InputAdapter Input [1]: [cs_item_sk#143] -(217) InputIteratorTransformer +(227) InputIteratorTransformer Input [1]: [cs_item_sk#143] -(218) BroadcastHashJoinExecTransformer +(228) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#127] Right keys [1]: [cs_item_sk#143] Join type: Inner Join condition: None -(219) ProjectExecTransformer +(229) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, cs_item_sk#143] -(220) ReusedExchange [Reuses operator id: 363] +(230) ReusedExchange [Reuses operator id: 372] Output [2]: [d_date_sk#144, d_year#145] -(221) InputAdapter +(231) InputAdapter Input [2]: [d_date_sk#144, d_year#145] -(222) InputIteratorTransformer +(232) InputIteratorTransformer Input [2]: [d_date_sk#144, d_year#145] -(223) BroadcastHashJoinExecTransformer +(233) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#138] Right keys [1]: [d_date_sk#144] Join type: Inner Join condition: None -(224) ProjectExecTransformer +(234) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145] Input [13]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, d_date_sk#144, d_year#145] -(225) ReusedExchange [Reuses operator id: 62] +(235) ReusedExchange [Reuses operator id: 67] Output [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(226) InputAdapter +(236) InputAdapter Input [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(227) InputIteratorTransformer +(237) InputIteratorTransformer Input [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(228) BroadcastHashJoinExecTransformer +(238) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#132] Right keys [1]: [s_store_sk#146] Join type: Inner Join condition: None -(229) ProjectExecTransformer +(239) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#128, 42) AS hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Input [14]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_sk#146, s_store_name#147, s_zip#148] -(230) WholeStageCodegenTransformer (43) +(240) WholeStageCodegenTransformer (43) Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: false -(231) VeloxResizeBatches +(241) VeloxResizeBatches Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: 1024, 2147483647, 10485760 -(232) ColumnarExchange +(242) ColumnarExchange Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: hashpartitioning(ss_customer_sk#128, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148], [plan_id=25], [shuffle_writer_type=hash] -(233) InputAdapter +(243) InputAdapter Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] -(234) InputIteratorTransformer +(244) InputIteratorTransformer Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] -(235) ReusedExchange [Reuses operator id: 77] +(245) ReusedExchange [Reuses operator id: 82] Output [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(236) InputAdapter +(246) InputAdapter Input [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(237) InputIteratorTransformer +(247) InputIteratorTransformer Input [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(238) ShuffledHashJoinExecTransformer +(248) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#128] Right keys [1]: [c_customer_sk#150] Join type: Inner Join condition: None -(239) ProjectExecTransformer +(249) ProjectExecTransformer Output [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] Input [18]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(240) ReusedExchange [Reuses operator id: 85] +(250) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#156, d_year#157] -(241) InputAdapter +(251) InputAdapter Input [2]: [d_date_sk#156, d_year#157] -(242) InputIteratorTransformer +(252) InputIteratorTransformer Input [2]: [d_date_sk#156, d_year#157] -(243) BroadcastHashJoinExecTransformer +(253) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_sales_date_sk#155] Right keys [1]: [d_date_sk#156] Join type: Inner Join condition: None -(244) ProjectExecTransformer +(254) ProjectExecTransformer Output [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, d_year#157] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155, d_date_sk#156, d_year#157] -(245) ReusedExchange [Reuses operator id: 85] +(255) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#158, d_year#159] -(246) InputAdapter +(256) InputAdapter Input [2]: [d_date_sk#158, d_year#159] -(247) InputIteratorTransformer +(257) InputIteratorTransformer Input [2]: [d_date_sk#158, d_year#159] -(248) BroadcastHashJoinExecTransformer +(258) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_shipto_date_sk#154] Right keys [1]: [d_date_sk#158] Join type: Inner Join condition: None -(249) ProjectExecTransformer +(259) ProjectExecTransformer Output [17]: [hash(ss_cdemo_sk#129, 42) AS hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, d_year#157, d_date_sk#158, d_year#159] -(250) WholeStageCodegenTransformer (47) +(260) WholeStageCodegenTransformer (47) Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: false -(251) VeloxResizeBatches +(261) VeloxResizeBatches Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: 1024, 2147483647, 10485760 -(252) ColumnarExchange +(262) ColumnarExchange Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: hashpartitioning(ss_cdemo_sk#129, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159], [plan_id=26], [shuffle_writer_type=hash] -(253) InputAdapter +(263) InputAdapter Input [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] -(254) InputIteratorTransformer +(264) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] -(255) ReusedExchange [Reuses operator id: 105] +(265) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#161, cd_marital_status#162] -(256) InputAdapter +(266) InputAdapter Input [2]: [cd_demo_sk#161, cd_marital_status#162] -(257) InputIteratorTransformer +(267) InputIteratorTransformer Input [2]: [cd_demo_sk#161, cd_marital_status#162] -(258) ShuffledHashJoinExecTransformer +(268) ShuffledHashJoinExecTransformer Left keys [1]: [ss_cdemo_sk#129] Right keys [1]: [cd_demo_sk#161] Join type: Inner Join condition: None -(259) ProjectExecTransformer +(269) ProjectExecTransformer Output [17]: [hash(c_current_cdemo_sk#151, 42) AS hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_demo_sk#161, cd_marital_status#162] -(260) WholeStageCodegenTransformer (49) +(270) WholeStageCodegenTransformer (49) Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: false -(261) VeloxResizeBatches +(271) VeloxResizeBatches Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: 1024, 2147483647, 10485760 -(262) ColumnarExchange +(272) ColumnarExchange Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: hashpartitioning(c_current_cdemo_sk#151, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162], [plan_id=27], [shuffle_writer_type=hash] -(263) InputAdapter +(273) InputAdapter Input [16]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] -(264) InputIteratorTransformer +(274) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] -(265) ReusedExchange [Reuses operator id: 105] +(275) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#164, cd_marital_status#165] -(266) InputAdapter +(276) InputAdapter Input [2]: [cd_demo_sk#164, cd_marital_status#165] -(267) InputIteratorTransformer +(277) InputIteratorTransformer Input [2]: [cd_demo_sk#164, cd_marital_status#165] -(268) ShuffledHashJoinExecTransformer +(278) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#151] Right keys [1]: [cd_demo_sk#164] Join type: Inner Join condition: NOT (cd_marital_status#162 = cd_marital_status#165) -(269) ProjectExecTransformer +(279) ProjectExecTransformer Output [14]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [18]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162, cd_demo_sk#164, cd_marital_status#165] -(270) ReusedExchange [Reuses operator id: 123] +(280) ReusedExchange [Reuses operator id: 128] Output [1]: [p_promo_sk#166] -(271) InputAdapter +(281) InputAdapter Input [1]: [p_promo_sk#166] -(272) InputIteratorTransformer +(282) InputIteratorTransformer Input [1]: [p_promo_sk#166] -(273) BroadcastHashJoinExecTransformer +(283) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#133] Right keys [1]: [p_promo_sk#166] Join type: Inner Join condition: None -(274) ProjectExecTransformer +(284) ProjectExecTransformer Output [13]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [15]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, p_promo_sk#166] -(275) ReusedExchange [Reuses operator id: 131] +(285) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(276) InputAdapter +(286) InputAdapter Input [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(277) InputIteratorTransformer +(287) InputIteratorTransformer Input [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(278) BroadcastHashJoinExecTransformer +(288) BroadcastHashJoinExecTransformer Left keys [1]: [ss_hdemo_sk#130] Right keys [1]: [hd_demo_sk#167] Join type: Inner Join condition: None -(279) ProjectExecTransformer +(289) ProjectExecTransformer Output [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168] Input [15]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_demo_sk#167, hd_income_band_sk#168] -(280) ReusedExchange [Reuses operator id: 131] +(290) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(281) InputAdapter +(291) InputAdapter Input [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(282) InputIteratorTransformer +(292) InputIteratorTransformer Input [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(283) BroadcastHashJoinExecTransformer +(293) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_hdemo_sk#152] Right keys [1]: [hd_demo_sk#169] Join type: Inner Join condition: None -(284) ProjectExecTransformer +(294) ProjectExecTransformer Output [14]: [hash(ss_addr_sk#131, 42) AS hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Input [15]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_demo_sk#169, hd_income_band_sk#170] -(285) WholeStageCodegenTransformer (54) +(295) WholeStageCodegenTransformer (54) Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: false -(286) VeloxResizeBatches +(296) VeloxResizeBatches Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: 1024, 2147483647, 10485760 -(287) ColumnarExchange +(297) ColumnarExchange Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: hashpartitioning(ss_addr_sk#131, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170], [plan_id=28], [shuffle_writer_type=hash] -(288) InputAdapter +(298) InputAdapter Input [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] -(289) InputIteratorTransformer +(299) InputIteratorTransformer Input [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] -(290) ReusedExchange [Reuses operator id: 151] +(300) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(291) InputAdapter +(301) InputAdapter Input [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(292) InputIteratorTransformer +(302) InputIteratorTransformer Input [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(293) ShuffledHashJoinExecTransformer +(303) ShuffledHashJoinExecTransformer Left keys [1]: [ss_addr_sk#131] Right keys [1]: [ca_address_sk#172] Join type: Inner Join condition: None -(294) ProjectExecTransformer +(304) ProjectExecTransformer Output [17]: [hash(c_current_addr_sk#153, 42) AS hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Input [18]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(295) WholeStageCodegenTransformer (56) +(305) WholeStageCodegenTransformer (56) Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: false -(296) VeloxResizeBatches +(306) VeloxResizeBatches Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: 1024, 2147483647, 10485760 -(297) ColumnarExchange +(307) ColumnarExchange Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: hashpartitioning(c_current_addr_sk#153, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176], [plan_id=29], [shuffle_writer_type=hash] -(298) InputAdapter +(308) InputAdapter Input [16]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(299) InputIteratorTransformer +(309) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(300) ReusedExchange [Reuses operator id: 151] +(310) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(301) InputAdapter +(311) InputAdapter Input [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(302) InputIteratorTransformer +(312) InputIteratorTransformer Input [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(303) ShuffledHashJoinExecTransformer +(313) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#153] Right keys [1]: [ca_address_sk#178] Join type: Inner Join condition: None -(304) ProjectExecTransformer +(314) ProjectExecTransformer Output [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [21]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(305) ReusedExchange [Reuses operator id: 169] +(315) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#183] -(306) InputAdapter +(316) InputAdapter Input [1]: [ib_income_band_sk#183] -(307) InputIteratorTransformer +(317) InputIteratorTransformer Input [1]: [ib_income_band_sk#183] -(308) BroadcastHashJoinExecTransformer +(318) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#168] Right keys [1]: [ib_income_band_sk#183] Join type: Inner Join condition: None -(309) ProjectExecTransformer +(319) ProjectExecTransformer Output [18]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [20]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, ib_income_band_sk#183] -(310) ReusedExchange [Reuses operator id: 169] +(320) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#184] -(311) InputAdapter +(321) InputAdapter Input [1]: [ib_income_band_sk#184] -(312) InputIteratorTransformer +(322) InputIteratorTransformer Input [1]: [ib_income_band_sk#184] -(313) BroadcastHashJoinExecTransformer +(323) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#170] Right keys [1]: [ib_income_band_sk#184] Join type: Inner Join condition: None -(314) ProjectExecTransformer +(324) ProjectExecTransformer Output [17]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, ib_income_band_sk#184] -(315) ReusedExchange [Reuses operator id: 183] +(325) ReusedExchange [Reuses operator id: 188] Output [2]: [i_item_sk#185, i_product_name#186] -(316) InputAdapter +(326) InputAdapter Input [2]: [i_item_sk#185, i_product_name#186] -(317) InputIteratorTransformer +(327) InputIteratorTransformer Input [2]: [i_item_sk#185, i_product_name#186] -(318) BroadcastHashJoinExecTransformer +(328) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#127] Right keys [1]: [i_item_sk#185] Join type: Inner Join condition: None -(319) ProjectExecTransformer +(329) ProjectExecTransformer Output [18]: [d_year#145, d_year#157, d_year#159, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186, UnscaledValue(ss_wholesale_cost#135) AS _pre_6#187, UnscaledValue(ss_list_price#136) AS _pre_7#188, UnscaledValue(ss_coupon_amt#137) AS _pre_8#189] Input [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186] -(320) FlushableHashAggregateExecTransformer +(330) FlushableHashAggregateExecTransformer Input [18]: [d_year#145, d_year#157, d_year#159, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186, _pre_6#187, _pre_7#188, _pre_8#189] Keys [15]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159] Functions [4]: [partial_count(1), partial_sum(_pre_6#187), partial_sum(_pre_7#188), partial_sum(_pre_8#189)] Aggregate Attributes [4]: [count#96, sum#190, sum#191, sum#192] Results [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(321) ProjectExecTransformer +(331) ProjectExecTransformer Output [20]: [hash(i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, 42) AS hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(322) WholeStageCodegenTransformer (61) +(332) WholeStageCodegenTransformer (61) Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: false -(323) VeloxResizeBatches +(333) VeloxResizeBatches Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: 1024, 2147483647, 10485760 -(324) ColumnarExchange +(334) ColumnarExchange Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: hashpartitioning(i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, 1), ENSURE_REQUIREMENTS, [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195], [plan_id=30], [shuffle_writer_type=hash] -(325) InputAdapter +(335) InputAdapter Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(326) InputIteratorTransformer +(336) InputIteratorTransformer Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(327) RegularHashAggregateExecTransformer +(337) RegularHashAggregateExecTransformer Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Keys [15]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159] Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#135)), sum(UnscaledValue(ss_list_price#136)), sum(UnscaledValue(ss_coupon_amt#137))] Aggregate Attributes [4]: [count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] Results [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] -(328) ProjectExecTransformer +(338) ProjectExecTransformer Output [9]: [hash(i_item_sk#185, s_store_name#147, s_zip#148, 42) AS hash_partition_key#197, i_item_sk#185 AS item_sk#198, s_store_name#147 AS store_name#199, s_zip#148 AS store_zip#200, d_year#145 AS syear#201, count(1)#105 AS cnt#202, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#135))#106,17,2) AS s1#203, MakeDecimal(sum(UnscaledValue(ss_list_price#136))#107,17,2) AS s2#204, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#137))#108,17,2) AS s3#205] Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] -(329) WholeStageCodegenTransformer (62) +(339) WholeStageCodegenTransformer (62) Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: false -(330) VeloxResizeBatches +(340) VeloxResizeBatches Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: 1024, 2147483647, 10485760 -(331) ColumnarExchange +(341) ColumnarExchange Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: hashpartitioning(item_sk#198, store_name#199, store_zip#200, 1), ENSURE_REQUIREMENTS, [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205], [plan_id=31], [shuffle_writer_type=hash] -(332) InputAdapter +(342) InputAdapter Input [8]: [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(333) InputIteratorTransformer +(343) InputIteratorTransformer Input [8]: [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(334) ShuffledHashJoinExecTransformer +(344) ShuffledHashJoinExecTransformer Left keys [3]: [item_sk#111, store_name#112, store_zip#113] Right keys [3]: [item_sk#198, store_name#199, store_zip#200] Join type: Inner Join condition: (cnt#202 <= cnt#123) -(335) ProjectExecTransformer +(345) ProjectExecTransformer Output [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Input [25]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(336) WholeStageCodegenTransformer (63) +(346) WholeStageCodegenTransformer (63) Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: false -(337) VeloxResizeBatches +(347) VeloxResizeBatches Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: 1024, 2147483647, 10485760 -(338) ColumnarExchange +(348) ColumnarExchange Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: rangepartitioning(product_name#110 ASC NULLS FIRST, store_name#112 ASC NULLS FIRST, cnt#202 ASC NULLS FIRST, 1), ENSURE_REQUIREMENTS, [plan_id=32], [shuffle_writer_type=hash] -(339) InputAdapter +(349) InputAdapter Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] -(340) InputIteratorTransformer +(350) InputIteratorTransformer Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] -(341) SortExecTransformer +(351) SortExecTransformer Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: [product_name#110 ASC NULLS FIRST, store_name#112 ASC NULLS FIRST, cnt#202 ASC NULLS FIRST], true, 0 -(342) WholeStageCodegenTransformer (64) +(352) WholeStageCodegenTransformer (64) Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: false -(343) VeloxColumnarToRow +(353) VeloxColumnarToRow Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#14, [id=#1] -VeloxColumnarToRow (355) -+- ^ RegularHashAggregateExecTransformer (353) - +- ^ InputIteratorTransformer (352) - +- ColumnarExchange (350) - +- VeloxResizeBatches (349) - +- ^ FlushableHashAggregateExecTransformer (347) - +- ^ ProjectExecTransformer (346) - +- ^ FilterExecTransformer (345) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (344) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#14, [id=#1] +ObjectHashAggregate (364) ++- VeloxColumnarToRow (363) + +- ColumnarExchange (362) + +- VeloxResizeBatches (361) + +- RowToVeloxColumnar (360) + +- ObjectHashAggregate (359) + +- VeloxColumnarToRow (358) + +- ^ ProjectExecTransformer (356) + +- ^ FilterExecTransformer (355) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (354) -(344) FileSourceScanExecTransformer parquet spark_catalog.default.item +(354) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [3]: [i_item_sk#89, i_current_price#90, i_color#91] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood ,floral ,indian ,medium ,purple ,spring ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)] ReadSchema: struct -(345) FilterExecTransformer +(355) FilterExecTransformer Input [3]: [i_item_sk#89, i_current_price#90, i_color#91] Arguments: ((((((isnotnull(i_current_price#90) AND i_color#91 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#90 >= 64.00)) AND (i_current_price#90 <= 74.00)) AND (i_current_price#90 >= 65.00)) AND (i_current_price#90 <= 79.00)) AND isnotnull(i_item_sk#89)) -(346) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#89, 42) AS _pre_9#206] +(356) ProjectExecTransformer +Output [1]: [i_item_sk#89] Input [3]: [i_item_sk#89, i_current_price#90, i_color#91] -(347) FlushableHashAggregateExecTransformer -Input [1]: [_pre_9#206] +(357) WholeStageCodegenTransformer (1) +Input [1]: [i_item_sk#89] +Arguments: false + +(358) VeloxColumnarToRow +Input [1]: [i_item_sk#89] + +(359) ObjectHashAggregate +Input [1]: [i_item_sk#89] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_9#206, 1250, 30121, 0, 0)] -Aggregate Attributes [1]: [buf#207] -Results [1]: [buf#208] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] +Aggregate Attributes [1]: [buf#206] +Results [1]: [buf#207] -(348) WholeStageCodegenTransformer (1) -Input [1]: [buf#208] -Arguments: false +(360) RowToVeloxColumnar +Input [1]: [buf#207] -(349) VeloxResizeBatches -Input [1]: [buf#208] +(361) VeloxResizeBatches +Input [1]: [buf#207] Arguments: 1024, 2147483647, 10485760 -(350) ColumnarExchange -Input [1]: [buf#208] +(362) ColumnarExchange +Input [1]: [buf#207] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=33], [shuffle_writer_type=hash] -(351) InputAdapter -Input [1]: [buf#208] +(363) VeloxColumnarToRow +Input [1]: [buf#207] -(352) InputIteratorTransformer -Input [1]: [buf#208] - -(353) RegularHashAggregateExecTransformer -Input [1]: [buf#208] +(364) ObjectHashAggregate +Input [1]: [buf#207] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#209] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#209 AS bloomFilter#210] - -(354) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#210] -Arguments: false - -(355) VeloxColumnarToRow -Input [1]: [bloomFilter#210] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#208] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#208 AS bloomFilter#209] Subquery:2 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13 -ColumnarBroadcastExchange (359) -+- ^ FilterExecTransformer (357) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (356) +ColumnarBroadcastExchange (368) ++- ^ FilterExecTransformer (366) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (365) -(356) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(365) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#45, d_year#46] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct -(357) FilterExecTransformer +(366) FilterExecTransformer Input [2]: [d_date_sk#45, d_year#46] Arguments: ((isnotnull(d_year#46) AND (d_year#46 = 1999)) AND isnotnull(d_date_sk#45)) -(358) WholeStageCodegenTransformer (3) +(367) WholeStageCodegenTransformer (2) Input [2]: [d_date_sk#45, d_year#46] Arguments: false -(359) ColumnarBroadcastExchange +(368) ColumnarBroadcastExchange Input [2]: [d_date_sk#45, d_year#46] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=34] -Subquery:3 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#14, [id=#1] -VeloxColumnarToRow (355) -+- ^ RegularHashAggregateExecTransformer (353) - +- ^ InputIteratorTransformer (352) - +- ColumnarExchange (350) - +- VeloxResizeBatches (349) - +- ^ FlushableHashAggregateExecTransformer (347) - +- ^ ProjectExecTransformer (346) - +- ^ FilterExecTransformer (345) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (344) - +Subquery:3 Hosting operator id = 210 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] -Subquery:4 Hosting operator id = 203 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] +Subquery:4 Hosting operator id = 207 Hosting Expression = ss_sold_date_sk#138 IN dynamicpruning#139 +ColumnarBroadcastExchange (372) ++- ^ FilterExecTransformer (370) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (369) -Subquery:5 Hosting operator id = 202 Hosting Expression = ss_sold_date_sk#138 IN dynamicpruning#139 -ColumnarBroadcastExchange (363) -+- ^ FilterExecTransformer (361) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (360) - -(360) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(369) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#144, d_year#145] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct -(361) FilterExecTransformer +(370) FilterExecTransformer Input [2]: [d_date_sk#144, d_year#145] Arguments: ((isnotnull(d_year#145) AND (d_year#145 = 2000)) AND isnotnull(d_date_sk#144)) -(362) WholeStageCodegenTransformer (34) +(371) WholeStageCodegenTransformer (33) Input [2]: [d_date_sk#144, d_year#145] Arguments: false -(363) ColumnarBroadcastExchange +(372) ColumnarBroadcastExchange Input [2]: [d_date_sk#144, d_year#145] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=35] -Subquery:6 Hosting operator id = 202 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] - diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/simplified.txt index 85cf04eee0a..e87bd9f602b 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q64.sf100/simplified.txt @@ -87,39 +87,32 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (4) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - FilterExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #11 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_color,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (3) - FilterExecTransformer [d_year,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #11 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_color,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_color,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #10 + WholeStageCodegenTransformer (2) + FilterExecTransformer [d_year,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] InputIteratorTransformer InputAdapter ColumnarExchange [sr_item_sk,sr_ticket_number] #12 @@ -319,15 +312,21 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (35) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - FilterExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] - ReusedSubquery [bloomFilter] #2 - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #3 - ColumnarBroadcastExchange #34 - WholeStageCodegenTransformer (34) - FilterExecTransformer [d_year,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] - ReusedSubquery [bloomFilter] #2 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] + ReusedSubquery [bloomFilter] #2 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (34) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #3 + ColumnarBroadcastExchange #34 + WholeStageCodegenTransformer (33) + FilterExecTransformer [d_year,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] InputIteratorTransformer InputAdapter ReusedExchange [sr_item_sk,sr_ticket_number] #12 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/explain.txt index 88417617286..a9f6b316a2c 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/explain.txt @@ -1,60 +1,63 @@ == Physical Plan == -VeloxColumnarToRow (74) -+- TakeOrderedAndProjectExecTransformer (73) - +- ^ ProjectExecTransformer (71) - +- ^ RegularHashAggregateExecTransformer (70) - +- ^ InputIteratorTransformer (69) - +- ColumnarExchange (67) - +- VeloxResizeBatches (66) - +- ^ ProjectExecTransformer (64) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (61) - :- ^ InputIteratorTransformer (58) - : +- ColumnarBroadcastExchange (56) - : +- ^ ProjectExecTransformer (54) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (53) - : :- ^ ProjectExecTransformer (45) - : : +- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (44) - : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (32) - : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (20) - : : : : :- ^ InputIteratorTransformer (8) - : : : : : +- ColumnarExchange (6) - : : : : : +- VeloxResizeBatches (5) - : : : : : +- ^ ProjectExecTransformer (3) - : : : : : +- ^ FilterExecTransformer (2) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) - : : : : +- ^ InputIteratorTransformer (19) - : : : : +- ColumnarExchange (17) - : : : : +- VeloxResizeBatches (16) - : : : : +- ^ ProjectExecTransformer (14) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13) - : : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (9) - : : : : +- ^ InputIteratorTransformer (12) - : : : : +- ReusedExchange (10) - : : : +- ^ InputIteratorTransformer (31) - : : : +- ColumnarExchange (29) - : : : +- VeloxResizeBatches (28) - : : : +- ^ ProjectExecTransformer (26) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (25) - : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (21) - : : : +- ^ InputIteratorTransformer (24) - : : : +- ReusedExchange (22) - : : +- ^ InputIteratorTransformer (43) - : : +- ColumnarExchange (41) - : : +- VeloxResizeBatches (40) - : : +- ^ ProjectExecTransformer (38) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) - : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (33) - : : +- ^ InputIteratorTransformer (36) - : : +- ReusedExchange (34) - : +- ^ InputIteratorTransformer (52) - : +- ColumnarBroadcastExchange (50) - : +- ^ ProjectExecTransformer (48) - : +- ^ FilterExecTransformer (47) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (46) - +- ^ FilterExecTransformer (60) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (59) +VeloxColumnarToRow (79) ++- TakeOrderedAndProjectExecTransformer (78) + +- ^ ProjectExecTransformer (76) + +- ^ RegularHashAggregateExecTransformer (75) + +- ^ InputIteratorTransformer (74) + +- ColumnarExchange (72) + +- VeloxResizeBatches (71) + +- ^ ProjectExecTransformer (69) + +- ^ FlushableHashAggregateExecTransformer (68) + +- ^ ProjectExecTransformer (67) + +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (66) + :- ^ InputIteratorTransformer (63) + : +- ColumnarBroadcastExchange (61) + : +- ^ ProjectExecTransformer (59) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (58) + : :- ^ ProjectExecTransformer (50) + : : +- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (49) + : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (37) + : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (25) + : : : : :- ^ InputIteratorTransformer (13) + : : : : : +- ColumnarExchange (11) + : : : : : +- VeloxResizeBatches (10) + : : : : : +- ^ ProjectExecTransformer (8) + : : : : : +- ^ InputIteratorTransformer (7) + : : : : : +- RowToVeloxColumnar (5) + : : : : : +- * Filter (4) + : : : : : +- VeloxColumnarToRow (3) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) + : : : : +- ^ InputIteratorTransformer (24) + : : : : +- ColumnarExchange (22) + : : : : +- VeloxResizeBatches (21) + : : : : +- ^ ProjectExecTransformer (19) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) + : : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (14) + : : : : +- ^ InputIteratorTransformer (17) + : : : : +- ReusedExchange (15) + : : : +- ^ InputIteratorTransformer (36) + : : : +- ColumnarExchange (34) + : : : +- VeloxResizeBatches (33) + : : : +- ^ ProjectExecTransformer (31) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (30) + : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (26) + : : : +- ^ InputIteratorTransformer (29) + : : : +- ReusedExchange (27) + : : +- ^ InputIteratorTransformer (48) + : : +- ColumnarExchange (46) + : : +- VeloxResizeBatches (45) + : : +- ^ ProjectExecTransformer (43) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (42) + : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (38) + : : +- ^ InputIteratorTransformer (41) + : : +- ReusedExchange (39) + : +- ^ InputIteratorTransformer (57) + : +- ColumnarBroadcastExchange (55) + : +- ^ ProjectExecTransformer (53) + : +- ^ FilterExecTransformer (52) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (51) + +- ^ FilterExecTransformer (65) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (64) (1) FileSourceScanExecTransformer parquet spark_catalog.default.customer @@ -64,423 +67,424 @@ Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (2) +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Arguments: false + +(3) VeloxColumnarToRow +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(4) Filter [codegen id : 1] +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) + +(5) RowToVeloxColumnar +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(6) InputAdapter Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -Arguments: ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND velox_might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) -(3) ProjectExecTransformer +(7) InputIteratorTransformer +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(8) ProjectExecTransformer Output [4]: [hash(c_customer_sk#1, 42) AS hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(4) WholeStageCodegenTransformer (3) +(9) WholeStageCodegenTransformer (3) Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: hashpartitioning(c_customer_sk#1, 1), ENSURE_REQUIREMENTS, [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [2]: [ss_customer_sk#6, ss_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] ReadSchema: struct -(10) ReusedExchange [Reuses operator id: 91] +(15) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#9] -(11) InputAdapter +(16) InputAdapter Input [1]: [d_date_sk#9] -(12) InputIteratorTransformer +(17) InputIteratorTransformer Input [1]: [d_date_sk#9] -(13) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#7] Right keys [1]: [d_date_sk#9] Join type: Inner Join condition: None -(14) ProjectExecTransformer +(19) ProjectExecTransformer Output [2]: [hash(ss_customer_sk#6, 42) AS hash_partition_key#10, ss_customer_sk#6] Input [3]: [ss_customer_sk#6, ss_sold_date_sk#7, d_date_sk#9] -(15) WholeStageCodegenTransformer (6) +(20) WholeStageCodegenTransformer (6) Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: false -(16) VeloxResizeBatches +(21) VeloxResizeBatches Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: 1024, 2147483647, 10485760 -(17) ColumnarExchange +(22) ColumnarExchange Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: hashpartitioning(ss_customer_sk#6, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#6], [plan_id=3], [shuffle_writer_type=hash] -(18) InputAdapter +(23) InputAdapter Input [1]: [ss_customer_sk#6] -(19) InputIteratorTransformer +(24) InputIteratorTransformer Input [1]: [ss_customer_sk#6] -(20) ShuffledHashJoinExecTransformer +(25) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [ss_customer_sk#6] Join type: LeftSemi Join condition: None -(21) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(26) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [2]: [ws_bill_customer_sk#11, ws_sold_date_sk#12] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ws_sold_date_sk#12), dynamicpruningexpression(ws_sold_date_sk#12 IN dynamicpruning#8)] ReadSchema: struct -(22) ReusedExchange [Reuses operator id: 91] +(27) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#13] -(23) InputAdapter +(28) InputAdapter Input [1]: [d_date_sk#13] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [1]: [d_date_sk#13] -(25) BroadcastHashJoinExecTransformer +(30) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#12] Right keys [1]: [d_date_sk#13] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [2]: [hash(ws_bill_customer_sk#11, 42) AS hash_partition_key#14, ws_bill_customer_sk#11] Input [3]: [ws_bill_customer_sk#11, ws_sold_date_sk#12, d_date_sk#13] -(27) WholeStageCodegenTransformer (9) +(32) WholeStageCodegenTransformer (9) Input [2]: [hash_partition_key#14, ws_bill_customer_sk#11] Arguments: false -(28) VeloxResizeBatches +(33) VeloxResizeBatches Input [2]: [hash_partition_key#14, ws_bill_customer_sk#11] Arguments: 1024, 2147483647, 10485760 -(29) ColumnarExchange +(34) ColumnarExchange Input [2]: [hash_partition_key#14, ws_bill_customer_sk#11] Arguments: hashpartitioning(ws_bill_customer_sk#11, 1), ENSURE_REQUIREMENTS, [ws_bill_customer_sk#11], [plan_id=4], [shuffle_writer_type=hash] -(30) InputAdapter +(35) InputAdapter Input [1]: [ws_bill_customer_sk#11] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [1]: [ws_bill_customer_sk#11] -(32) ShuffledHashJoinExecTransformer +(37) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [ws_bill_customer_sk#11] Join type: LeftAnti Join condition: None -(33) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(38) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(cs_sold_date_sk#16), dynamicpruningexpression(cs_sold_date_sk#16 IN dynamicpruning#8)] ReadSchema: struct -(34) ReusedExchange [Reuses operator id: 91] +(39) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#17] -(35) InputAdapter +(40) InputAdapter Input [1]: [d_date_sk#17] -(36) InputIteratorTransformer +(41) InputIteratorTransformer Input [1]: [d_date_sk#17] -(37) BroadcastHashJoinExecTransformer +(42) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#16] Right keys [1]: [d_date_sk#17] Join type: Inner Join condition: None -(38) ProjectExecTransformer +(43) ProjectExecTransformer Output [2]: [hash(cs_ship_customer_sk#15, 42) AS hash_partition_key#18, cs_ship_customer_sk#15] Input [3]: [cs_ship_customer_sk#15, cs_sold_date_sk#16, d_date_sk#17] -(39) WholeStageCodegenTransformer (12) +(44) WholeStageCodegenTransformer (12) Input [2]: [hash_partition_key#18, cs_ship_customer_sk#15] Arguments: false -(40) VeloxResizeBatches +(45) VeloxResizeBatches Input [2]: [hash_partition_key#18, cs_ship_customer_sk#15] Arguments: 1024, 2147483647, 10485760 -(41) ColumnarExchange +(46) ColumnarExchange Input [2]: [hash_partition_key#18, cs_ship_customer_sk#15] Arguments: hashpartitioning(cs_ship_customer_sk#15, 1), ENSURE_REQUIREMENTS, [cs_ship_customer_sk#15], [plan_id=5], [shuffle_writer_type=hash] -(42) InputAdapter +(47) InputAdapter Input [1]: [cs_ship_customer_sk#15] -(43) InputIteratorTransformer +(48) InputIteratorTransformer Input [1]: [cs_ship_customer_sk#15] -(44) ShuffledHashJoinExecTransformer +(49) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [cs_ship_customer_sk#15] Join type: LeftAnti Join condition: None -(45) ProjectExecTransformer +(50) ProjectExecTransformer Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(46) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(51) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#19, ca_state#20] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [GA,KY,NM]), IsNotNull(ca_address_sk)] ReadSchema: struct -(47) FilterExecTransformer +(52) FilterExecTransformer Input [2]: [ca_address_sk#19, ca_state#20] Arguments: (ca_state#20 IN (KY,GA,NM) AND isnotnull(ca_address_sk#19)) -(48) ProjectExecTransformer +(53) ProjectExecTransformer Output [1]: [ca_address_sk#19] Input [2]: [ca_address_sk#19, ca_state#20] -(49) WholeStageCodegenTransformer (13) +(54) WholeStageCodegenTransformer (13) Input [1]: [ca_address_sk#19] Arguments: false -(50) ColumnarBroadcastExchange +(55) ColumnarBroadcastExchange Input [1]: [ca_address_sk#19] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(51) InputAdapter +(56) InputAdapter Input [1]: [ca_address_sk#19] -(52) InputIteratorTransformer +(57) InputIteratorTransformer Input [1]: [ca_address_sk#19] -(53) BroadcastHashJoinExecTransformer +(58) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#3] Right keys [1]: [ca_address_sk#19] Join type: Inner Join condition: None -(54) ProjectExecTransformer +(59) ProjectExecTransformer Output [1]: [c_current_cdemo_sk#2] Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#19] -(55) WholeStageCodegenTransformer (14) +(60) WholeStageCodegenTransformer (14) Input [1]: [c_current_cdemo_sk#2] Arguments: false -(56) ColumnarBroadcastExchange +(61) ColumnarBroadcastExchange Input [1]: [c_current_cdemo_sk#2] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(57) InputAdapter +(62) InputAdapter Input [1]: [c_current_cdemo_sk#2] -(58) InputIteratorTransformer +(63) InputIteratorTransformer Input [1]: [c_current_cdemo_sk#2] -(59) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(64) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [6]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct -(60) FilterExecTransformer +(65) FilterExecTransformer Input [6]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Arguments: isnotnull(cd_demo_sk#21) -(61) BroadcastHashJoinExecTransformer +(66) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#2] Right keys [1]: [cd_demo_sk#21] Join type: Inner Join condition: None -(62) ProjectExecTransformer +(67) ProjectExecTransformer Output [5]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Input [7]: [c_current_cdemo_sk#2, cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] -(63) FlushableHashAggregateExecTransformer +(68) FlushableHashAggregateExecTransformer Input [5]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Keys [5]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Functions [1]: [partial_count(1)] Aggregate Attributes [1]: [count#27] Results [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] -(64) ProjectExecTransformer +(69) ProjectExecTransformer Output [7]: [hash(cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, 42) AS hash_partition_key#29, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] Input [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] -(65) WholeStageCodegenTransformer (15) +(70) WholeStageCodegenTransformer (15) Input [7]: [hash_partition_key#29, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] Arguments: false -(66) VeloxResizeBatches +(71) VeloxResizeBatches Input [7]: [hash_partition_key#29, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] Arguments: 1024, 2147483647, 10485760 -(67) ColumnarExchange +(72) ColumnarExchange Input [7]: [hash_partition_key#29, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] Arguments: hashpartitioning(cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, 1), ENSURE_REQUIREMENTS, [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28], [plan_id=8], [shuffle_writer_type=hash] -(68) InputAdapter +(73) InputAdapter Input [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] -(69) InputIteratorTransformer +(74) InputIteratorTransformer Input [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] -(70) RegularHashAggregateExecTransformer +(75) RegularHashAggregateExecTransformer Input [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count#28] Keys [5]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26] Functions [1]: [count(1)] Aggregate Attributes [1]: [count(1)#30] Results [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count(1)#30] -(71) ProjectExecTransformer +(76) ProjectExecTransformer Output [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, count(1)#30 AS cnt1#31, cd_purchase_estimate#25, count(1)#30 AS cnt2#32, cd_credit_rating#26, count(1)#30 AS cnt3#33] Input [6]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, count(1)#30] -(72) WholeStageCodegenTransformer (16) +(77) WholeStageCodegenTransformer (16) Input [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#31, cd_purchase_estimate#25, cnt2#32, cd_credit_rating#26, cnt3#33] Arguments: false -(73) TakeOrderedAndProjectExecTransformer +(78) TakeOrderedAndProjectExecTransformer Input [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#31, cd_purchase_estimate#25, cnt2#32, cd_credit_rating#26, cnt3#33] Arguments: 100, [cd_gender#22 ASC NULLS FIRST, cd_marital_status#23 ASC NULLS FIRST, cd_education_status#24 ASC NULLS FIRST, cd_purchase_estimate#25 ASC NULLS FIRST, cd_credit_rating#26 ASC NULLS FIRST], [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#31, cd_purchase_estimate#25, cnt2#32, cd_credit_rating#26, cnt3#33], 0 -(74) VeloxColumnarToRow +(79) VeloxColumnarToRow Input [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#31, cd_purchase_estimate#25, cnt2#32, cd_credit_rating#26, cnt3#33] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#4, [id=#1] +ObjectHashAggregate (90) ++- VeloxColumnarToRow (89) + +- ColumnarExchange (88) + +- VeloxResizeBatches (87) + +- RowToVeloxColumnar (86) + +- ObjectHashAggregate (85) + +- VeloxColumnarToRow (84) + +- ^ ProjectExecTransformer (82) + +- ^ FilterExecTransformer (81) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (80) -(75) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(80) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#19, ca_state#20] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [GA,KY,NM]), IsNotNull(ca_address_sk)] ReadSchema: struct -(76) FilterExecTransformer +(81) FilterExecTransformer Input [2]: [ca_address_sk#19, ca_state#20] Arguments: (ca_state#20 IN (KY,GA,NM) AND isnotnull(ca_address_sk#19)) -(77) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#19, 42) AS _pre_1#34] +(82) ProjectExecTransformer +Output [1]: [ca_address_sk#19] Input [2]: [ca_address_sk#19, ca_state#20] -(78) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#34] +(83) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#19] +Arguments: false + +(84) VeloxColumnarToRow +Input [1]: [ca_address_sk#19] + +(85) ObjectHashAggregate +Input [1]: [ca_address_sk#19] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#34, 55556, 899992, 0, 0)] -Aggregate Attributes [1]: [buf#35] -Results [1]: [buf#36] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)] +Aggregate Attributes [1]: [buf#34] +Results [1]: [buf#35] -(79) WholeStageCodegenTransformer (1) -Input [1]: [buf#36] -Arguments: false +(86) RowToVeloxColumnar +Input [1]: [buf#35] -(80) VeloxResizeBatches -Input [1]: [buf#36] +(87) VeloxResizeBatches +Input [1]: [buf#35] Arguments: 1024, 2147483647, 10485760 -(81) ColumnarExchange -Input [1]: [buf#36] +(88) ColumnarExchange +Input [1]: [buf#35] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9], [shuffle_writer_type=hash] -(82) InputAdapter -Input [1]: [buf#36] +(89) VeloxColumnarToRow +Input [1]: [buf#35] -(83) InputIteratorTransformer -Input [1]: [buf#36] - -(84) RegularHashAggregateExecTransformer -Input [1]: [buf#36] +(90) ObjectHashAggregate +Input [1]: [buf#35] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)#37] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)#37 AS bloomFilter#38] - -(85) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#38] -Arguments: false - -(86) VeloxColumnarToRow -Input [1]: [bloomFilter#38] - -Subquery:2 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) - +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)#36] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 55556, 899992, 0, 0)#36 AS bloomFilter#37] -Subquery:3 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (91) -+- ^ ProjectExecTransformer (89) - +- ^ FilterExecTransformer (88) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) +Subquery:2 Hosting operator id = 14 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 +ColumnarBroadcastExchange (95) ++- ^ ProjectExecTransformer (93) + +- ^ FilterExecTransformer (92) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (91) -(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [3]: [d_date_sk#9, d_year#39, d_moy#40] +(91) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [3]: [d_date_sk#9, d_year#38, d_moy#39] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,6), IsNotNull(d_date_sk)] ReadSchema: struct -(88) FilterExecTransformer -Input [3]: [d_date_sk#9, d_year#39, d_moy#40] -Arguments: (((((isnotnull(d_year#39) AND isnotnull(d_moy#40)) AND (d_year#39 = 2001)) AND (d_moy#40 >= 4)) AND (d_moy#40 <= 6)) AND isnotnull(d_date_sk#9)) +(92) FilterExecTransformer +Input [3]: [d_date_sk#9, d_year#38, d_moy#39] +Arguments: (((((isnotnull(d_year#38) AND isnotnull(d_moy#39)) AND (d_year#38 = 2001)) AND (d_moy#39 >= 4)) AND (d_moy#39 <= 6)) AND isnotnull(d_date_sk#9)) -(89) ProjectExecTransformer +(93) ProjectExecTransformer Output [1]: [d_date_sk#9] -Input [3]: [d_date_sk#9, d_year#39, d_moy#40] +Input [3]: [d_date_sk#9, d_year#38, d_moy#39] -(90) WholeStageCodegenTransformer (4) +(94) WholeStageCodegenTransformer (4) Input [1]: [d_date_sk#9] Arguments: false -(91) ColumnarBroadcastExchange +(95) ColumnarBroadcastExchange Input [1]: [d_date_sk#9] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:4 Hosting operator id = 21 Hosting Expression = ws_sold_date_sk#12 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 26 Hosting Expression = ws_sold_date_sk#12 IN dynamicpruning#8 -Subquery:5 Hosting operator id = 33 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#8 +Subquery:4 Hosting operator id = 38 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#8 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/simplified.txt index 10297e2f0a4..eafdfcb5869 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q69.sf100/simplified.txt @@ -28,34 +28,27 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (3) ProjectExecTransformer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - FilterExecTransformer [c_current_addr_sk,c_current_cdemo_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 55556, 899992, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 55556, 899992, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [c_current_addr_sk,c_current_cdemo_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 55556, 899992, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_state,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] InputIteratorTransformer InputAdapter ColumnarExchange [ss_customer_sk] #5 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/explain.txt index 74d759c2670..24af8b1d00e 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/explain.txt @@ -1,139 +1,148 @@ == Physical Plan == -VeloxColumnarToRow (177) -+- TakeOrderedAndProjectExecTransformer (176) - +- ^ ProjectExecTransformer (174) - +- ^ RegularHashAggregateExecTransformer (173) - +- ^ InputIteratorTransformer (172) - +- ColumnarExchange (170) - +- VeloxResizeBatches (169) - +- ^ ProjectExecTransformer (167) - +- ^ FlushableHashAggregateExecTransformer (166) - +- ^ ExpandExecTransformer (165) - +- ^ InputIteratorTransformer (164) - +- ColumnarUnion (162) - :- ^ ProjectExecTransformer (58) - : +- ^ RegularHashAggregateExecTransformer (57) - : +- ^ InputIteratorTransformer (56) - : +- ColumnarExchange (54) - : +- VeloxResizeBatches (53) - : +- ^ ProjectExecTransformer (51) - : +- ^ FlushableHashAggregateExecTransformer (50) - : +- ^ ProjectExecTransformer (49) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (48) - : :- ^ ProjectExecTransformer (41) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (40) - : : :- ^ ProjectExecTransformer (36) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (35) - : : : :- ^ ProjectExecTransformer (27) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (26) - : : : : :- ^ ProjectExecTransformer (18) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (17) - : : : : : :- ^ InputIteratorTransformer (8) - : : : : : : +- ColumnarExchange (6) - : : : : : : +- VeloxResizeBatches (5) - : : : : : : +- ^ ProjectExecTransformer (3) - : : : : : : +- ^ FilterExecTransformer (2) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : : : +- ^ InputIteratorTransformer (16) - : : : : : +- ColumnarExchange (14) - : : : : : +- VeloxResizeBatches (13) - : : : : : +- ^ ProjectExecTransformer (11) - : : : : : +- ^ FilterExecTransformer (10) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (9) - : : : : +- ^ InputIteratorTransformer (25) - : : : : +- ColumnarBroadcastExchange (23) - : : : : +- ^ ProjectExecTransformer (21) - : : : : +- ^ FilterExecTransformer (20) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (19) - : : : +- ^ InputIteratorTransformer (34) - : : : +- ColumnarBroadcastExchange (32) - : : : +- ^ ProjectExecTransformer (30) - : : : +- ^ FilterExecTransformer (29) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (28) - : : +- ^ InputIteratorTransformer (39) - : : +- ReusedExchange (37) - : +- ^ InputIteratorTransformer (47) - : +- ColumnarBroadcastExchange (45) - : +- ^ FilterExecTransformer (43) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (42) - :- ^ ProjectExecTransformer (109) - : +- ^ RegularHashAggregateExecTransformer (108) - : +- ^ InputIteratorTransformer (107) - : +- ColumnarExchange (105) - : +- VeloxResizeBatches (104) - : +- ^ ProjectExecTransformer (102) - : +- ^ FlushableHashAggregateExecTransformer (101) - : +- ^ ProjectExecTransformer (100) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (99) - : :- ^ ProjectExecTransformer (92) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (91) - : : :- ^ ProjectExecTransformer (87) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (86) - : : : :- ^ ProjectExecTransformer (82) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (81) - : : : : :- ^ ProjectExecTransformer (77) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (76) - : : : : : :- ^ InputIteratorTransformer (67) - : : : : : : +- ColumnarExchange (65) - : : : : : : +- VeloxResizeBatches (64) - : : : : : : +- ^ ProjectExecTransformer (62) - : : : : : : +- ^ FilterExecTransformer (61) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (60) - : : : : : +- ^ InputIteratorTransformer (75) - : : : : : +- ColumnarExchange (73) - : : : : : +- VeloxResizeBatches (72) - : : : : : +- ^ ProjectExecTransformer (70) - : : : : : +- ^ FilterExecTransformer (69) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (68) - : : : : +- ^ InputIteratorTransformer (80) - : : : : +- ReusedExchange (78) - : : : +- ^ InputIteratorTransformer (85) - : : : +- ReusedExchange (83) - : : +- ^ InputIteratorTransformer (90) - : : +- ReusedExchange (88) - : +- ^ InputIteratorTransformer (98) - : +- ColumnarBroadcastExchange (96) - : +- ^ FilterExecTransformer (94) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page (93) - +- ^ ProjectExecTransformer (160) - +- ^ RegularHashAggregateExecTransformer (159) - +- ^ InputIteratorTransformer (158) - +- ColumnarExchange (156) - +- VeloxResizeBatches (155) - +- ^ ProjectExecTransformer (153) - +- ^ FlushableHashAggregateExecTransformer (152) - +- ^ ProjectExecTransformer (151) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (150) - :- ^ ProjectExecTransformer (143) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (142) - : :- ^ ProjectExecTransformer (138) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (137) - : : :- ^ ProjectExecTransformer (133) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (132) - : : : :- ^ ProjectExecTransformer (128) - : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (127) - : : : : :- ^ InputIteratorTransformer (118) - : : : : : +- ColumnarExchange (116) - : : : : : +- VeloxResizeBatches (115) - : : : : : +- ^ ProjectExecTransformer (113) - : : : : : +- ^ FilterExecTransformer (112) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (111) - : : : : +- ^ InputIteratorTransformer (126) - : : : : +- ColumnarExchange (124) - : : : : +- VeloxResizeBatches (123) - : : : : +- ^ ProjectExecTransformer (121) - : : : : +- ^ FilterExecTransformer (120) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (119) - : : : +- ^ InputIteratorTransformer (131) - : : : +- ReusedExchange (129) - : : +- ^ InputIteratorTransformer (136) - : : +- ReusedExchange (134) - : +- ^ InputIteratorTransformer (141) - : +- ReusedExchange (139) - +- ^ InputIteratorTransformer (149) - +- ColumnarBroadcastExchange (147) - +- ^ FilterExecTransformer (145) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (144) +VeloxColumnarToRow (192) ++- TakeOrderedAndProjectExecTransformer (191) + +- ^ ProjectExecTransformer (189) + +- ^ RegularHashAggregateExecTransformer (188) + +- ^ InputIteratorTransformer (187) + +- ColumnarExchange (185) + +- VeloxResizeBatches (184) + +- ^ ProjectExecTransformer (182) + +- ^ FlushableHashAggregateExecTransformer (181) + +- ^ ExpandExecTransformer (180) + +- ^ InputIteratorTransformer (179) + +- ColumnarUnion (177) + :- ^ ProjectExecTransformer (63) + : +- ^ RegularHashAggregateExecTransformer (62) + : +- ^ InputIteratorTransformer (61) + : +- ColumnarExchange (59) + : +- VeloxResizeBatches (58) + : +- ^ ProjectExecTransformer (56) + : +- ^ FlushableHashAggregateExecTransformer (55) + : +- ^ ProjectExecTransformer (54) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (53) + : :- ^ ProjectExecTransformer (46) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (45) + : : :- ^ ProjectExecTransformer (41) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (40) + : : : :- ^ ProjectExecTransformer (32) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (31) + : : : : :- ^ ProjectExecTransformer (23) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (22) + : : : : : :- ^ InputIteratorTransformer (13) + : : : : : : +- ColumnarExchange (11) + : : : : : : +- VeloxResizeBatches (10) + : : : : : : +- ^ ProjectExecTransformer (8) + : : : : : : +- ^ InputIteratorTransformer (7) + : : : : : : +- RowToVeloxColumnar (5) + : : : : : : +- * Filter (4) + : : : : : : +- VeloxColumnarToRow (3) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : : : +- ^ InputIteratorTransformer (21) + : : : : : +- ColumnarExchange (19) + : : : : : +- VeloxResizeBatches (18) + : : : : : +- ^ ProjectExecTransformer (16) + : : : : : +- ^ FilterExecTransformer (15) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (14) + : : : : +- ^ InputIteratorTransformer (30) + : : : : +- ColumnarBroadcastExchange (28) + : : : : +- ^ ProjectExecTransformer (26) + : : : : +- ^ FilterExecTransformer (25) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (24) + : : : +- ^ InputIteratorTransformer (39) + : : : +- ColumnarBroadcastExchange (37) + : : : +- ^ ProjectExecTransformer (35) + : : : +- ^ FilterExecTransformer (34) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (33) + : : +- ^ InputIteratorTransformer (44) + : : +- ReusedExchange (42) + : +- ^ InputIteratorTransformer (52) + : +- ColumnarBroadcastExchange (50) + : +- ^ FilterExecTransformer (48) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (47) + :- ^ ProjectExecTransformer (119) + : +- ^ RegularHashAggregateExecTransformer (118) + : +- ^ InputIteratorTransformer (117) + : +- ColumnarExchange (115) + : +- VeloxResizeBatches (114) + : +- ^ ProjectExecTransformer (112) + : +- ^ FlushableHashAggregateExecTransformer (111) + : +- ^ ProjectExecTransformer (110) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (109) + : :- ^ ProjectExecTransformer (102) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (101) + : : :- ^ ProjectExecTransformer (97) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (96) + : : : :- ^ ProjectExecTransformer (92) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (91) + : : : : :- ^ ProjectExecTransformer (87) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (86) + : : : : : :- ^ InputIteratorTransformer (77) + : : : : : : +- ColumnarExchange (75) + : : : : : : +- VeloxResizeBatches (74) + : : : : : : +- ^ ProjectExecTransformer (72) + : : : : : : +- ^ InputIteratorTransformer (71) + : : : : : : +- RowToVeloxColumnar (69) + : : : : : : +- * Filter (68) + : : : : : : +- VeloxColumnarToRow (67) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (65) + : : : : : +- ^ InputIteratorTransformer (85) + : : : : : +- ColumnarExchange (83) + : : : : : +- VeloxResizeBatches (82) + : : : : : +- ^ ProjectExecTransformer (80) + : : : : : +- ^ FilterExecTransformer (79) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (78) + : : : : +- ^ InputIteratorTransformer (90) + : : : : +- ReusedExchange (88) + : : : +- ^ InputIteratorTransformer (95) + : : : +- ReusedExchange (93) + : : +- ^ InputIteratorTransformer (100) + : : +- ReusedExchange (98) + : +- ^ InputIteratorTransformer (108) + : +- ColumnarBroadcastExchange (106) + : +- ^ FilterExecTransformer (104) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page (103) + +- ^ ProjectExecTransformer (175) + +- ^ RegularHashAggregateExecTransformer (174) + +- ^ InputIteratorTransformer (173) + +- ColumnarExchange (171) + +- VeloxResizeBatches (170) + +- ^ ProjectExecTransformer (168) + +- ^ FlushableHashAggregateExecTransformer (167) + +- ^ ProjectExecTransformer (166) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (165) + :- ^ ProjectExecTransformer (158) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (157) + : :- ^ ProjectExecTransformer (153) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (152) + : : :- ^ ProjectExecTransformer (148) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (147) + : : : :- ^ ProjectExecTransformer (143) + : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (142) + : : : : :- ^ InputIteratorTransformer (133) + : : : : : +- ColumnarExchange (131) + : : : : : +- VeloxResizeBatches (130) + : : : : : +- ^ ProjectExecTransformer (128) + : : : : : +- ^ InputIteratorTransformer (127) + : : : : : +- RowToVeloxColumnar (125) + : : : : : +- * Filter (124) + : : : : : +- VeloxColumnarToRow (123) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (121) + : : : : +- ^ InputIteratorTransformer (141) + : : : : +- ColumnarExchange (139) + : : : : +- VeloxResizeBatches (138) + : : : : +- ^ ProjectExecTransformer (136) + : : : : +- ^ FilterExecTransformer (135) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (134) + : : : +- ^ InputIteratorTransformer (146) + : : : +- ReusedExchange (144) + : : +- ^ InputIteratorTransformer (151) + : : +- ReusedExchange (149) + : +- ^ InputIteratorTransformer (156) + : +- ReusedExchange (154) + +- ^ InputIteratorTransformer (164) + +- ColumnarBroadcastExchange (162) + +- ^ FilterExecTransformer (160) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (159) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -144,252 +153,268 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sol PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (4) +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] +Arguments: false + +(3) VeloxColumnarToRow +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(4) Filter [codegen id : 1] +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] +Condition : ((((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3)) AND might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ss_item_sk#1, 42))) AND might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ss_promo_sk#3, 42))) + +(5) RowToVeloxColumnar Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -Arguments: ((((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3)) AND velox_might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ss_item_sk#1, 42))) AND velox_might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ss_promo_sk#3, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(7) InputIteratorTransformer +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(8) ProjectExecTransformer Output [8]: [hash(ss_item_sk#1, ss_ticket_number#4, 42) AS hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(4) WholeStageCodegenTransformer (6) +(9) WholeStageCodegenTransformer (5) Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7], [plan_id=3], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] Arguments: (isnotnull(sr_item_sk#12) AND isnotnull(sr_ticket_number#13)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [5]: [hash(sr_item_sk#12, sr_ticket_number#13, 42) AS hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Input [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] -(12) WholeStageCodegenTransformer (7) +(17) WholeStageCodegenTransformer (6) Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: hashpartitioning(sr_item_sk#12, sr_ticket_number#13, 1), ENSURE_REQUIREMENTS, [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15], [plan_id=4], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [4]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [4]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(17) ShuffledHashJoinExecTransformer +(22) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#1, ss_ticket_number#4] Right keys [2]: [sr_item_sk#12, sr_ticket_number#13] Join type: LeftOuter Join condition: None -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(19) FileSourceScanExecTransformer parquet spark_catalog.default.item +(24) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct -(20) FilterExecTransformer +(25) FilterExecTransformer Input [2]: [i_item_sk#18, i_current_price#19] Arguments: ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [1]: [i_item_sk#18] Input [2]: [i_item_sk#18, i_current_price#19] -(22) WholeStageCodegenTransformer (8) +(27) WholeStageCodegenTransformer (7) Input [1]: [i_item_sk#18] Arguments: false -(23) ColumnarBroadcastExchange +(28) ColumnarBroadcastExchange Input [1]: [i_item_sk#18] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(24) InputAdapter +(29) InputAdapter Input [1]: [i_item_sk#18] -(25) InputIteratorTransformer +(30) InputIteratorTransformer Input [1]: [i_item_sk#18] -(26) BroadcastHashJoinExecTransformer +(31) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#18] Join type: Inner Join condition: None -(27) ProjectExecTransformer +(32) ProjectExecTransformer Output [7]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, i_item_sk#18] -(28) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(33) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct -(29) FilterExecTransformer +(34) FilterExecTransformer Input [2]: [p_promo_sk#20, p_channel_tv#21] Arguments: ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) -(30) ProjectExecTransformer +(35) ProjectExecTransformer Output [1]: [p_promo_sk#20] Input [2]: [p_promo_sk#20, p_channel_tv#21] -(31) WholeStageCodegenTransformer (9) +(36) WholeStageCodegenTransformer (8) Input [1]: [p_promo_sk#20] Arguments: false -(32) ColumnarBroadcastExchange +(37) ColumnarBroadcastExchange Input [1]: [p_promo_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(33) InputAdapter +(38) InputAdapter Input [1]: [p_promo_sk#20] -(34) InputIteratorTransformer +(39) InputIteratorTransformer Input [1]: [p_promo_sk#20] -(35) BroadcastHashJoinExecTransformer +(40) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#3] Right keys [1]: [p_promo_sk#20] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(41) ProjectExecTransformer Output [6]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [8]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, p_promo_sk#20] -(37) ReusedExchange [Reuses operator id: 206] +(42) ReusedExchange [Reuses operator id: 219] Output [1]: [d_date_sk#22] -(38) InputAdapter +(43) InputAdapter Input [1]: [d_date_sk#22] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [1]: [d_date_sk#22] -(40) BroadcastHashJoinExecTransformer +(45) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#7] Right keys [1]: [d_date_sk#22] Join type: Inner Join condition: None -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [5]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#14, sr_net_loss#15] Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, d_date_sk#22] -(42) FileSourceScanExecTransformer parquet spark_catalog.default.store +(47) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [2]: [s_store_sk#23, s_store_id#24] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct -(43) FilterExecTransformer +(48) FilterExecTransformer Input [2]: [s_store_sk#23, s_store_id#24] Arguments: isnotnull(s_store_sk#23) -(44) WholeStageCodegenTransformer (11) +(49) WholeStageCodegenTransformer (10) Input [2]: [s_store_sk#23, s_store_id#24] Arguments: false -(45) ColumnarBroadcastExchange +(50) ColumnarBroadcastExchange Input [2]: [s_store_sk#23, s_store_id#24] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] -(46) InputAdapter +(51) InputAdapter Input [2]: [s_store_sk#23, s_store_id#24] -(47) InputIteratorTransformer +(52) InputIteratorTransformer Input [2]: [s_store_sk#23, s_store_id#24] -(48) BroadcastHashJoinExecTransformer +(53) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#2] Right keys [1]: [s_store_sk#23] Join type: Inner Join condition: None -(49) ProjectExecTransformer +(54) ProjectExecTransformer Output [4]: [s_store_id#24, UnscaledValue(ss_ext_sales_price#5) AS _pre_1#25, coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00) AS _pre_2#26, (ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)) AS _pre_3#27] Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#14, sr_net_loss#15, s_store_sk#23, s_store_id#24] -(50) FlushableHashAggregateExecTransformer +(55) FlushableHashAggregateExecTransformer Input [4]: [s_store_id#24, _pre_1#25, _pre_2#26, _pre_3#27] Keys [1]: [s_store_id#24] Functions [3]: [partial_sum(_pre_1#25), partial_sum(_pre_2#26), partial_sum(_pre_3#27)] Aggregate Attributes [5]: [sum#28, sum#29, isEmpty#30, sum#31, isEmpty#32] Results [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(51) ProjectExecTransformer +(56) ProjectExecTransformer Output [7]: [hash(s_store_id#24, 42) AS hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(52) WholeStageCodegenTransformer (12) +(57) WholeStageCodegenTransformer (11) Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: false -(53) VeloxResizeBatches +(58) VeloxResizeBatches Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: 1024, 2147483647, 10485760 -(54) ColumnarExchange +(59) ColumnarExchange Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: hashpartitioning(s_store_id#24, 1), ENSURE_REQUIREMENTS, [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37], [plan_id=8], [shuffle_writer_type=hash] -(55) InputAdapter +(60) InputAdapter Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(57) RegularHashAggregateExecTransformer +(62) RegularHashAggregateExecTransformer Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Keys [1]: [s_store_id#24] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00)), sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] Results [4]: [s_store_id#24, sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [5]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#39,17,2) AS sales#42, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40 AS returns#43, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41 AS profit#44, store channel AS channel#45, concat(store, s_store_id#24) AS id#46] Input [4]: [s_store_id#24, sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] -(59) WholeStageCodegenTransformer (13) +(64) WholeStageCodegenTransformer (12) Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46] Arguments: false -(60) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(65) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Batched: true Location: InMemoryFileIndex [] @@ -397,212 +422,228 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#53), dynamicpruningexpression(cs_so PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)] ReadSchema: struct -(61) FilterExecTransformer +(66) WholeStageCodegenTransformer (16) +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] +Arguments: false + +(67) VeloxColumnarToRow +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(68) Filter [codegen id : 2] +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] +Condition : ((((isnotnull(cs_catalog_page_sk#47) AND isnotnull(cs_item_sk#48)) AND isnotnull(cs_promo_sk#49)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(cs_item_sk#48, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(cs_promo_sk#49, 42))) + +(69) RowToVeloxColumnar +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(70) InputAdapter +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(71) InputIteratorTransformer Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -Arguments: ((((isnotnull(cs_catalog_page_sk#47) AND isnotnull(cs_item_sk#48)) AND isnotnull(cs_promo_sk#49)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(cs_item_sk#48, 42))) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(cs_promo_sk#49, 42))) -(62) ProjectExecTransformer +(72) ProjectExecTransformer Output [8]: [hash(cs_item_sk#48, cs_order_number#50, 42) AS hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(63) WholeStageCodegenTransformer (19) +(73) WholeStageCodegenTransformer (17) Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: false -(64) VeloxResizeBatches +(74) VeloxResizeBatches Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: 1024, 2147483647, 10485760 -(65) ColumnarExchange +(75) ColumnarExchange Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: hashpartitioning(cs_item_sk#48, cs_order_number#50, 1), ENSURE_REQUIREMENTS, [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53], [plan_id=9], [shuffle_writer_type=hash] -(66) InputAdapter +(76) InputAdapter Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(67) InputIteratorTransformer +(77) InputIteratorTransformer Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(68) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(78) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct -(69) FilterExecTransformer +(79) FilterExecTransformer Input [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] Arguments: (isnotnull(cr_item_sk#55) AND isnotnull(cr_order_number#56)) -(70) ProjectExecTransformer +(80) ProjectExecTransformer Output [5]: [hash(cr_item_sk#55, cr_order_number#56, 42) AS hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Input [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] -(71) WholeStageCodegenTransformer (20) +(81) WholeStageCodegenTransformer (18) Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: false -(72) VeloxResizeBatches +(82) VeloxResizeBatches Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: 1024, 2147483647, 10485760 -(73) ColumnarExchange +(83) ColumnarExchange Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: hashpartitioning(cr_item_sk#55, cr_order_number#56, 1), ENSURE_REQUIREMENTS, [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58], [plan_id=10], [shuffle_writer_type=hash] -(74) InputAdapter +(84) InputAdapter Input [4]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(75) InputIteratorTransformer +(85) InputIteratorTransformer Input [4]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(76) ShuffledHashJoinExecTransformer +(86) ShuffledHashJoinExecTransformer Left keys [2]: [cs_item_sk#48, cs_order_number#50] Right keys [2]: [cr_item_sk#55, cr_order_number#56] Join type: LeftOuter Join condition: None -(77) ProjectExecTransformer +(87) ProjectExecTransformer Output [8]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [11]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(78) ReusedExchange [Reuses operator id: 23] +(88) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#61] -(79) InputAdapter +(89) InputAdapter Input [1]: [i_item_sk#61] -(80) InputIteratorTransformer +(90) InputIteratorTransformer Input [1]: [i_item_sk#61] -(81) BroadcastHashJoinExecTransformer +(91) BroadcastHashJoinExecTransformer Left keys [1]: [cs_item_sk#48] Right keys [1]: [i_item_sk#61] Join type: Inner Join condition: None -(82) ProjectExecTransformer +(92) ProjectExecTransformer Output [7]: [cs_catalog_page_sk#47, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [9]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, i_item_sk#61] -(83) ReusedExchange [Reuses operator id: 32] +(93) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#62] -(84) InputAdapter +(94) InputAdapter Input [1]: [p_promo_sk#62] -(85) InputIteratorTransformer +(95) InputIteratorTransformer Input [1]: [p_promo_sk#62] -(86) BroadcastHashJoinExecTransformer +(96) BroadcastHashJoinExecTransformer Left keys [1]: [cs_promo_sk#49] Right keys [1]: [p_promo_sk#62] Join type: Inner Join condition: None -(87) ProjectExecTransformer +(97) ProjectExecTransformer Output [6]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [8]: [cs_catalog_page_sk#47, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, p_promo_sk#62] -(88) ReusedExchange [Reuses operator id: 206] +(98) ReusedExchange [Reuses operator id: 219] Output [1]: [d_date_sk#63] -(89) InputAdapter +(99) InputAdapter Input [1]: [d_date_sk#63] -(90) InputIteratorTransformer +(100) InputIteratorTransformer Input [1]: [d_date_sk#63] -(91) BroadcastHashJoinExecTransformer +(101) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#53] Right keys [1]: [d_date_sk#63] Join type: Inner Join condition: None -(92) ProjectExecTransformer +(102) ProjectExecTransformer Output [5]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cr_return_amount#57, cr_net_loss#58] Input [7]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, d_date_sk#63] -(93) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page +(103) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page Output [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct -(94) FilterExecTransformer +(104) FilterExecTransformer Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: isnotnull(cp_catalog_page_sk#64) -(95) WholeStageCodegenTransformer (24) +(105) WholeStageCodegenTransformer (22) Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: false -(96) ColumnarBroadcastExchange +(106) ColumnarBroadcastExchange Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=11] -(97) InputAdapter +(107) InputAdapter Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -(98) InputIteratorTransformer +(108) InputIteratorTransformer Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -(99) BroadcastHashJoinExecTransformer +(109) BroadcastHashJoinExecTransformer Left keys [1]: [cs_catalog_page_sk#47] Right keys [1]: [cp_catalog_page_sk#64] Join type: Inner Join condition: None -(100) ProjectExecTransformer +(110) ProjectExecTransformer Output [4]: [cp_catalog_page_id#65, UnscaledValue(cs_ext_sales_price#51) AS _pre_4#66, coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00) AS _pre_5#67, (cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)) AS _pre_6#68] Input [7]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cr_return_amount#57, cr_net_loss#58, cp_catalog_page_sk#64, cp_catalog_page_id#65] -(101) FlushableHashAggregateExecTransformer +(111) FlushableHashAggregateExecTransformer Input [4]: [cp_catalog_page_id#65, _pre_4#66, _pre_5#67, _pre_6#68] Keys [1]: [cp_catalog_page_id#65] Functions [3]: [partial_sum(_pre_4#66), partial_sum(_pre_5#67), partial_sum(_pre_6#68)] Aggregate Attributes [5]: [sum#69, sum#70, isEmpty#71, sum#72, isEmpty#73] Results [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(102) ProjectExecTransformer +(112) ProjectExecTransformer Output [7]: [hash(cp_catalog_page_id#65, 42) AS hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(103) WholeStageCodegenTransformer (25) +(113) WholeStageCodegenTransformer (23) Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: false -(104) VeloxResizeBatches +(114) VeloxResizeBatches Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: 1024, 2147483647, 10485760 -(105) ColumnarExchange +(115) ColumnarExchange Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: hashpartitioning(cp_catalog_page_id#65, 1), ENSURE_REQUIREMENTS, [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78], [plan_id=12], [shuffle_writer_type=hash] -(106) InputAdapter +(116) InputAdapter Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(107) InputIteratorTransformer +(117) InputIteratorTransformer Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(108) RegularHashAggregateExecTransformer +(118) RegularHashAggregateExecTransformer Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Keys [1]: [cp_catalog_page_id#65] Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#51)), sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00)), sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] Results [4]: [cp_catalog_page_id#65, sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] -(109) ProjectExecTransformer +(119) ProjectExecTransformer Output [5]: [MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#51))#80,17,2) AS sales#83, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81 AS returns#84, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82 AS profit#85, catalog channel AS channel#86, concat(catalog_page, cp_catalog_page_id#65) AS id#87] Input [4]: [cp_catalog_page_id#65, sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] -(110) WholeStageCodegenTransformer (26) +(120) WholeStageCodegenTransformer (24) Input [5]: [sales#83, returns#84, profit#85, channel#86, id#87] Arguments: false -(111) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(121) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Batched: true Location: InMemoryFileIndex [] @@ -610,481 +651,459 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#94), dynamicpruningexpression(ws_so PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)] ReadSchema: struct -(112) FilterExecTransformer +(122) WholeStageCodegenTransformer (28) +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Arguments: false + +(123) VeloxColumnarToRow +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(124) Filter [codegen id : 3] +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Condition : ((((isnotnull(ws_web_site_sk#89) AND isnotnull(ws_item_sk#88)) AND isnotnull(ws_promo_sk#90)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(ws_item_sk#88, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(ws_promo_sk#90, 42))) + +(125) RowToVeloxColumnar +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(126) InputAdapter +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(127) InputIteratorTransformer Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Arguments: ((((isnotnull(ws_web_site_sk#89) AND isnotnull(ws_item_sk#88)) AND isnotnull(ws_promo_sk#90)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(ws_item_sk#88, 42))) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(ws_promo_sk#90, 42))) -(113) ProjectExecTransformer +(128) ProjectExecTransformer Output [8]: [hash(ws_item_sk#88, ws_order_number#91, 42) AS hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(114) WholeStageCodegenTransformer (32) +(129) WholeStageCodegenTransformer (29) Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: false -(115) VeloxResizeBatches +(130) VeloxResizeBatches Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: 1024, 2147483647, 10485760 -(116) ColumnarExchange +(131) ColumnarExchange Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: hashpartitioning(ws_item_sk#88, ws_order_number#91, 1), ENSURE_REQUIREMENTS, [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94], [plan_id=13], [shuffle_writer_type=hash] -(117) InputAdapter +(132) InputAdapter Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(118) InputIteratorTransformer +(133) InputIteratorTransformer Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(119) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns +(134) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns Output [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number)] ReadSchema: struct -(120) FilterExecTransformer +(135) FilterExecTransformer Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] Arguments: (isnotnull(wr_item_sk#96) AND isnotnull(wr_order_number#97)) -(121) ProjectExecTransformer +(136) ProjectExecTransformer Output [5]: [hash(wr_item_sk#96, wr_order_number#97, 42) AS hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -(122) WholeStageCodegenTransformer (33) +(137) WholeStageCodegenTransformer (30) Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: false -(123) VeloxResizeBatches +(138) VeloxResizeBatches Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: 1024, 2147483647, 10485760 -(124) ColumnarExchange +(139) ColumnarExchange Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: hashpartitioning(wr_item_sk#96, wr_order_number#97, 1), ENSURE_REQUIREMENTS, [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99], [plan_id=14], [shuffle_writer_type=hash] -(125) InputAdapter +(140) InputAdapter Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(126) InputIteratorTransformer +(141) InputIteratorTransformer Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(127) ShuffledHashJoinExecTransformer +(142) ShuffledHashJoinExecTransformer Left keys [2]: [ws_item_sk#88, ws_order_number#91] Right keys [2]: [wr_item_sk#96, wr_order_number#97] Join type: LeftOuter Join condition: None -(128) ProjectExecTransformer +(143) ProjectExecTransformer Output [8]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [11]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(129) ReusedExchange [Reuses operator id: 23] +(144) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#102] -(130) InputAdapter +(145) InputAdapter Input [1]: [i_item_sk#102] -(131) InputIteratorTransformer +(146) InputIteratorTransformer Input [1]: [i_item_sk#102] -(132) BroadcastHashJoinExecTransformer +(147) BroadcastHashJoinExecTransformer Left keys [1]: [ws_item_sk#88] Right keys [1]: [i_item_sk#102] Join type: Inner Join condition: None -(133) ProjectExecTransformer +(148) ProjectExecTransformer Output [7]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [9]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, i_item_sk#102] -(134) ReusedExchange [Reuses operator id: 32] +(149) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#103] -(135) InputAdapter +(150) InputAdapter Input [1]: [p_promo_sk#103] -(136) InputIteratorTransformer +(151) InputIteratorTransformer Input [1]: [p_promo_sk#103] -(137) BroadcastHashJoinExecTransformer +(152) BroadcastHashJoinExecTransformer Left keys [1]: [ws_promo_sk#90] Right keys [1]: [p_promo_sk#103] Join type: Inner Join condition: None -(138) ProjectExecTransformer +(153) ProjectExecTransformer Output [6]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [8]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, p_promo_sk#103] -(139) ReusedExchange [Reuses operator id: 206] +(154) ReusedExchange [Reuses operator id: 219] Output [1]: [d_date_sk#104] -(140) InputAdapter +(155) InputAdapter Input [1]: [d_date_sk#104] -(141) InputIteratorTransformer +(156) InputIteratorTransformer Input [1]: [d_date_sk#104] -(142) BroadcastHashJoinExecTransformer +(157) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#94] Right keys [1]: [d_date_sk#104] Join type: Inner Join condition: None -(143) ProjectExecTransformer +(158) ProjectExecTransformer Output [5]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99] Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, d_date_sk#104] -(144) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(159) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#105, web_site_id#106] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct -(145) FilterExecTransformer +(160) FilterExecTransformer Input [2]: [web_site_sk#105, web_site_id#106] Arguments: isnotnull(web_site_sk#105) -(146) WholeStageCodegenTransformer (37) +(161) WholeStageCodegenTransformer (34) Input [2]: [web_site_sk#105, web_site_id#106] Arguments: false -(147) ColumnarBroadcastExchange +(162) ColumnarBroadcastExchange Input [2]: [web_site_sk#105, web_site_id#106] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -(148) InputAdapter +(163) InputAdapter Input [2]: [web_site_sk#105, web_site_id#106] -(149) InputIteratorTransformer +(164) InputIteratorTransformer Input [2]: [web_site_sk#105, web_site_id#106] -(150) BroadcastHashJoinExecTransformer +(165) BroadcastHashJoinExecTransformer Left keys [1]: [ws_web_site_sk#89] Right keys [1]: [web_site_sk#105] Join type: Inner Join condition: None -(151) ProjectExecTransformer +(166) ProjectExecTransformer Output [4]: [web_site_id#106, UnscaledValue(ws_ext_sales_price#92) AS _pre_7#107, coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00) AS _pre_8#108, (ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)) AS _pre_9#109] Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_sk#105, web_site_id#106] -(152) FlushableHashAggregateExecTransformer +(167) FlushableHashAggregateExecTransformer Input [4]: [web_site_id#106, _pre_7#107, _pre_8#108, _pre_9#109] Keys [1]: [web_site_id#106] Functions [3]: [partial_sum(_pre_7#107), partial_sum(_pre_8#108), partial_sum(_pre_9#109)] Aggregate Attributes [5]: [sum#110, sum#111, isEmpty#112, sum#113, isEmpty#114] Results [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(153) ProjectExecTransformer +(168) ProjectExecTransformer Output [7]: [hash(web_site_id#106, 42) AS hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(154) WholeStageCodegenTransformer (38) +(169) WholeStageCodegenTransformer (35) Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: false -(155) VeloxResizeBatches +(170) VeloxResizeBatches Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: 1024, 2147483647, 10485760 -(156) ColumnarExchange +(171) ColumnarExchange Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: hashpartitioning(web_site_id#106, 1), ENSURE_REQUIREMENTS, [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119], [plan_id=16], [shuffle_writer_type=hash] -(157) InputAdapter +(172) InputAdapter Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(158) InputIteratorTransformer +(173) InputIteratorTransformer Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(159) RegularHashAggregateExecTransformer +(174) RegularHashAggregateExecTransformer Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Keys [1]: [web_site_id#106] Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#92)), sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00)), sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] Results [4]: [web_site_id#106, sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] -(160) ProjectExecTransformer +(175) ProjectExecTransformer Output [5]: [MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#92))#121,17,2) AS sales#124, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122 AS returns#125, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123 AS profit#126, web channel AS channel#127, concat(web_site, web_site_id#106) AS id#128] Input [4]: [web_site_id#106, sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] -(161) WholeStageCodegenTransformer (39) +(176) WholeStageCodegenTransformer (36) Input [5]: [sales#124, returns#125, profit#126, channel#127, id#128] Arguments: false -(162) ColumnarUnion +(177) ColumnarUnion Arguments: UnknownPartitioning(0) -(163) InputAdapter +(178) InputAdapter Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46] -(164) InputIteratorTransformer +(179) InputIteratorTransformer Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46] -(165) ExpandExecTransformer +(180) ExpandExecTransformer Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46] Arguments: [[sales#42, returns#43, profit#44, channel#45, id#46, 0], [sales#42, returns#43, profit#44, channel#45, null, 1], [sales#42, returns#43, profit#44, null, null, 3]], [sales#42, returns#43, profit#44, channel#129, id#130, spark_grouping_id#131] -(166) FlushableHashAggregateExecTransformer +(181) FlushableHashAggregateExecTransformer Input [6]: [sales#42, returns#43, profit#44, channel#129, id#130, spark_grouping_id#131] Keys [3]: [channel#129, id#130, spark_grouping_id#131] Functions [3]: [partial_sum(sales#42), partial_sum(returns#43), partial_sum(profit#44)] Aggregate Attributes [6]: [sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] Results [9]: [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] -(167) ProjectExecTransformer +(182) ProjectExecTransformer Output [10]: [hash(channel#129, id#130, spark_grouping_id#131, 42) AS hash_partition_key#144, channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] Input [9]: [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] -(168) WholeStageCodegenTransformer (40) +(183) WholeStageCodegenTransformer (37) Input [10]: [hash_partition_key#144, channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] Arguments: false -(169) VeloxResizeBatches +(184) VeloxResizeBatches Input [10]: [hash_partition_key#144, channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] Arguments: 1024, 2147483647, 10485760 -(170) ColumnarExchange +(185) ColumnarExchange Input [10]: [hash_partition_key#144, channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] Arguments: hashpartitioning(channel#129, id#130, spark_grouping_id#131, 1), ENSURE_REQUIREMENTS, [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143], [plan_id=17], [shuffle_writer_type=hash] -(171) InputAdapter +(186) InputAdapter Input [9]: [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] -(172) InputIteratorTransformer +(187) InputIteratorTransformer Input [9]: [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] -(173) RegularHashAggregateExecTransformer +(188) RegularHashAggregateExecTransformer Input [9]: [channel#129, id#130, spark_grouping_id#131, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] Keys [3]: [channel#129, id#130, spark_grouping_id#131] Functions [3]: [sum(sales#42), sum(returns#43), sum(profit#44)] Aggregate Attributes [3]: [sum(sales#42)#145, sum(returns#43)#146, sum(profit#44)#147] Results [6]: [channel#129, id#130, spark_grouping_id#131, sum(sales#42)#145, sum(returns#43)#146, sum(profit#44)#147] -(174) ProjectExecTransformer +(189) ProjectExecTransformer Output [5]: [channel#129, id#130, sum(sales#42)#145 AS sales#148, sum(returns#43)#146 AS returns#149, sum(profit#44)#147 AS profit#150] Input [6]: [channel#129, id#130, spark_grouping_id#131, sum(sales#42)#145, sum(returns#43)#146, sum(profit#44)#147] -(175) WholeStageCodegenTransformer (41) +(190) WholeStageCodegenTransformer (38) Input [5]: [channel#129, id#130, sales#148, returns#149, profit#150] Arguments: false -(176) TakeOrderedAndProjectExecTransformer +(191) TakeOrderedAndProjectExecTransformer Input [5]: [channel#129, id#130, sales#148, returns#149, profit#150] Arguments: 100, [channel#129 ASC NULLS FIRST, id#130 ASC NULLS FIRST], [channel#129, id#130, sales#148, returns#149, profit#150], 0 -(177) VeloxColumnarToRow +(192) VeloxColumnarToRow Input [5]: [channel#129, id#130, sales#148, returns#149, profit#150] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (189) -+- ^ RegularHashAggregateExecTransformer (187) - +- ^ InputIteratorTransformer (186) - +- ColumnarExchange (184) - +- VeloxResizeBatches (183) - +- ^ FlushableHashAggregateExecTransformer (181) - +- ^ ProjectExecTransformer (180) - +- ^ FilterExecTransformer (179) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (178) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#9, [id=#1] +ObjectHashAggregate (203) ++- VeloxColumnarToRow (202) + +- ColumnarExchange (201) + +- VeloxResizeBatches (200) + +- RowToVeloxColumnar (199) + +- ObjectHashAggregate (198) + +- VeloxColumnarToRow (197) + +- ^ ProjectExecTransformer (195) + +- ^ FilterExecTransformer (194) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (193) -(178) FileSourceScanExecTransformer parquet spark_catalog.default.item +(193) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct -(179) FilterExecTransformer +(194) FilterExecTransformer Input [2]: [i_item_sk#18, i_current_price#19] Arguments: ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) -(180) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#18, 42) AS _pre_10#151] +(195) ProjectExecTransformer +Output [1]: [i_item_sk#18] Input [2]: [i_item_sk#18, i_current_price#19] -(181) FlushableHashAggregateExecTransformer -Input [1]: [_pre_10#151] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_10#151, 101823, 1521109, 0, 0)] -Aggregate Attributes [1]: [buf#152] -Results [1]: [buf#153] - -(182) WholeStageCodegenTransformer (1) -Input [1]: [buf#153] +(196) WholeStageCodegenTransformer (1) +Input [1]: [i_item_sk#18] Arguments: false -(183) VeloxResizeBatches -Input [1]: [buf#153] -Arguments: 1024, 2147483647, 10485760 - -(184) ColumnarExchange -Input [1]: [buf#153] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=18], [shuffle_writer_type=hash] - -(185) InputAdapter -Input [1]: [buf#153] - -(186) InputIteratorTransformer -Input [1]: [buf#153] +(197) VeloxColumnarToRow +Input [1]: [i_item_sk#18] -(187) RegularHashAggregateExecTransformer -Input [1]: [buf#153] +(198) ObjectHashAggregate +Input [1]: [i_item_sk#18] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#154] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#154 AS bloomFilter#155] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] +Aggregate Attributes [1]: [buf#151] +Results [1]: [buf#152] -(188) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#155] -Arguments: false +(199) RowToVeloxColumnar +Input [1]: [buf#152] -(189) VeloxColumnarToRow -Input [1]: [bloomFilter#155] +(200) VeloxResizeBatches +Input [1]: [buf#152] +Arguments: 1024, 2147483647, 10485760 -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (201) -+- ^ RegularHashAggregateExecTransformer (199) - +- ^ InputIteratorTransformer (198) - +- ColumnarExchange (196) - +- VeloxResizeBatches (195) - +- ^ FlushableHashAggregateExecTransformer (193) - +- ^ ProjectExecTransformer (192) - +- ^ FilterExecTransformer (191) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (190) +(201) ColumnarExchange +Input [1]: [buf#152] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=18], [shuffle_writer_type=hash] +(202) VeloxColumnarToRow +Input [1]: [buf#152] -(190) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(203) ObjectHashAggregate +Input [1]: [buf#152] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#153] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#153 AS bloomFilter#154] + +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#10, [id=#2] +ObjectHashAggregate (214) ++- VeloxColumnarToRow (213) + +- ColumnarExchange (212) + +- VeloxResizeBatches (211) + +- RowToVeloxColumnar (210) + +- ObjectHashAggregate (209) + +- VeloxColumnarToRow (208) + +- ^ ProjectExecTransformer (206) + +- ^ FilterExecTransformer (205) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (204) + + +(204) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct -(191) FilterExecTransformer +(205) FilterExecTransformer Input [2]: [p_promo_sk#20, p_channel_tv#21] Arguments: ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) -(192) ProjectExecTransformer -Output [1]: [xxhash64(p_promo_sk#20, 42) AS _pre_11#156] +(206) ProjectExecTransformer +Output [1]: [p_promo_sk#20] Input [2]: [p_promo_sk#20, p_channel_tv#21] -(193) FlushableHashAggregateExecTransformer -Input [1]: [_pre_11#156] +(207) WholeStageCodegenTransformer (2) +Input [1]: [p_promo_sk#20] +Arguments: false + +(208) VeloxColumnarToRow +Input [1]: [p_promo_sk#20] + +(209) ObjectHashAggregate +Input [1]: [p_promo_sk#20] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_11#156, 986, 24246, 0, 0)] -Aggregate Attributes [1]: [buf#157] -Results [1]: [buf#158] +Functions [1]: [partial_bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] +Aggregate Attributes [1]: [buf#155] +Results [1]: [buf#156] -(194) WholeStageCodegenTransformer (3) -Input [1]: [buf#158] -Arguments: false +(210) RowToVeloxColumnar +Input [1]: [buf#156] -(195) VeloxResizeBatches -Input [1]: [buf#158] +(211) VeloxResizeBatches +Input [1]: [buf#156] Arguments: 1024, 2147483647, 10485760 -(196) ColumnarExchange -Input [1]: [buf#158] +(212) ColumnarExchange +Input [1]: [buf#156] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=19], [shuffle_writer_type=hash] -(197) InputAdapter -Input [1]: [buf#158] - -(198) InputIteratorTransformer -Input [1]: [buf#158] +(213) VeloxColumnarToRow +Input [1]: [buf#156] -(199) RegularHashAggregateExecTransformer -Input [1]: [buf#158] +(214) ObjectHashAggregate +Input [1]: [buf#156] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#159] -Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#159 AS bloomFilter#160] - -(200) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#160] -Arguments: false - -(201) VeloxColumnarToRow -Input [1]: [bloomFilter#160] +Functions [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#157] +Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#157 AS bloomFilter#158] Subquery:3 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (206) -+- ^ ProjectExecTransformer (204) - +- ^ FilterExecTransformer (203) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (202) +ColumnarBroadcastExchange (219) ++- ^ ProjectExecTransformer (217) + +- ^ FilterExecTransformer (216) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (215) -(202) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#22, d_date#161] +(215) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [2]: [d_date_sk#22, d_date#159] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-08-23), LessThanOrEqual(d_date,2000-09-22), IsNotNull(d_date_sk)] ReadSchema: struct -(203) FilterExecTransformer -Input [2]: [d_date_sk#22, d_date#161] -Arguments: (((isnotnull(d_date#161) AND (d_date#161 >= 2000-08-23)) AND (d_date#161 <= 2000-09-22)) AND isnotnull(d_date_sk#22)) +(216) FilterExecTransformer +Input [2]: [d_date_sk#22, d_date#159] +Arguments: (((isnotnull(d_date#159) AND (d_date#159 >= 2000-08-23)) AND (d_date#159 <= 2000-09-22)) AND isnotnull(d_date_sk#22)) -(204) ProjectExecTransformer +(217) ProjectExecTransformer Output [1]: [d_date_sk#22] -Input [2]: [d_date_sk#22, d_date#161] +Input [2]: [d_date_sk#22, d_date#159] -(205) WholeStageCodegenTransformer (5) +(218) WholeStageCodegenTransformer (3) Input [1]: [d_date_sk#22] Arguments: false -(206) ColumnarBroadcastExchange +(219) ColumnarBroadcastExchange Input [1]: [d_date_sk#22] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=20] -Subquery:4 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (189) -+- ^ RegularHashAggregateExecTransformer (187) - +- ^ InputIteratorTransformer (186) - +- ColumnarExchange (184) - +- VeloxResizeBatches (183) - +- ^ FlushableHashAggregateExecTransformer (181) - +- ^ ProjectExecTransformer (180) - +- ^ FilterExecTransformer (179) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (178) - - -Subquery:5 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (201) -+- ^ RegularHashAggregateExecTransformer (199) - +- ^ InputIteratorTransformer (198) - +- ColumnarExchange (196) - +- VeloxResizeBatches (195) - +- ^ FlushableHashAggregateExecTransformer (193) - +- ^ ProjectExecTransformer (192) - +- ^ FilterExecTransformer (191) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (190) - - -Subquery:6 Hosting operator id = 61 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] - -Subquery:7 Hosting operator id = 61 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] - -Subquery:8 Hosting operator id = 60 Hosting Expression = cs_sold_date_sk#53 IN dynamicpruning#8 - -Subquery:9 Hosting operator id = 60 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] - -Subquery:10 Hosting operator id = 60 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:4 Hosting operator id = 68 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] -Subquery:11 Hosting operator id = 112 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] +Subquery:5 Hosting operator id = 68 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] -Subquery:12 Hosting operator id = 112 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:6 Hosting operator id = 65 Hosting Expression = cs_sold_date_sk#53 IN dynamicpruning#8 -Subquery:13 Hosting operator id = 111 Hosting Expression = ws_sold_date_sk#94 IN dynamicpruning#8 +Subquery:7 Hosting operator id = 124 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] -Subquery:14 Hosting operator id = 111 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] +Subquery:8 Hosting operator id = 124 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] -Subquery:15 Hosting operator id = 111 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:9 Hosting operator id = 121 Hosting Expression = ws_sold_date_sk#94 IN dynamicpruning#8 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/simplified.txt index 1196f00f3c0..171ec5a661d 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q80.sf100/simplified.txt @@ -1,27 +1,27 @@ VeloxColumnarToRow TakeOrderedAndProjectExecTransformer [channel,id,sales,returns,profit] - WholeStageCodegenTransformer (41) + WholeStageCodegenTransformer (38) ProjectExecTransformer [channel,id,sum(sales),sum(returns),sum(profit)] RegularHashAggregateExecTransformer [channel,id,spark_grouping_id,sum,isEmpty,sum,isEmpty,sum,isEmpty] [sum(sales),sum(returns),sum(profit),sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [channel,id,spark_grouping_id,sum,isEmpty,sum,isEmpty,sum,isEmpty] #1 VeloxResizeBatches - WholeStageCodegenTransformer (40) + WholeStageCodegenTransformer (37) ProjectExecTransformer [channel,id,spark_grouping_id,sum,isEmpty,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [channel,id,spark_grouping_id,sales,returns,profit] [sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty] ExpandExecTransformer [sales,returns,profit,channel,id] InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (12) ProjectExecTransformer [sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00))),s_store_id] RegularHashAggregateExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [s_store_id,sum,sum,isEmpty,sum,isEmpty] #2 VeloxResizeBatches - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (11) ProjectExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [s_store_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [s_store_id,ss_ext_sales_price,sr_return_amt,ss_net_profit,sr_net_loss] @@ -38,87 +38,66 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] #3 VeloxResizeBatches - WholeStageCodegenTransformer (6) + WholeStageCodegenTransformer (5) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] - FilterExecTransformer [ss_store_sk,ss_item_sk,ss_promo_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #5 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [p_promo_sk] - FilterExecTransformer [p_channel_tv,p_promo_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #4 - WholeStageCodegenTransformer (5) - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_store_sk,ss_item_sk,ss_promo_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #5 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [p_promo_sk] - FilterExecTransformer [p_channel_tv,p_promo_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] + RowToVeloxColumnar + ObjectHashAggregate [p_promo_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [p_promo_sk] + FilterExecTransformer [p_channel_tv,p_promo_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #4 + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] InputIteratorTransformer InputAdapter ColumnarExchange [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss] #7 VeloxResizeBatches - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (6) ProjectExecTransformer [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss] FilterExecTransformer [sr_item_sk,sr_ticket_number] FileSourceScanExecTransformer parquet spark_catalog.default.store_returns [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss,sr_returned_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (7) ProjectExecTransformer [i_item_sk] FilterExecTransformer [i_current_price,i_item_sk] FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (8) ProjectExecTransformer [p_promo_sk] FilterExecTransformer [p_channel_tv,p_promo_sk] FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] @@ -128,17 +107,17 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (10) FilterExecTransformer [s_store_sk] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id] - WholeStageCodegenTransformer (26) + WholeStageCodegenTransformer (24) ProjectExecTransformer [sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00))),cp_catalog_page_id] RegularHashAggregateExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] #11 VeloxResizeBatches - WholeStageCodegenTransformer (25) + WholeStageCodegenTransformer (23) ProjectExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [cp_catalog_page_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [cp_catalog_page_id,cs_ext_sales_price,cr_return_amount,cs_net_profit,cr_net_loss] @@ -155,20 +134,25 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] #12 VeloxResizeBatches - WholeStageCodegenTransformer (19) + WholeStageCodegenTransformer (17) ProjectExecTransformer [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] - FilterExecTransformer [cs_catalog_page_sk,cs_item_sk,cs_promo_sk] - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_catalog_page_sk,cs_item_sk,cs_promo_sk,cs_order_number,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] - ReusedSubquery [d_date_sk] #1 - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [cs_catalog_page_sk,cs_item_sk,cs_promo_sk] + ReusedSubquery [bloomFilter] #2 + ReusedSubquery [bloomFilter] #3 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (16) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_catalog_page_sk,cs_item_sk,cs_promo_sk,cs_order_number,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] + ReusedSubquery [d_date_sk] #1 InputIteratorTransformer InputAdapter ColumnarExchange [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss] #13 VeloxResizeBatches - WholeStageCodegenTransformer (20) + WholeStageCodegenTransformer (18) ProjectExecTransformer [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss] FilterExecTransformer [cr_item_sk,cr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss,cr_returned_date_sk] @@ -184,17 +168,17 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #14 - WholeStageCodegenTransformer (24) + WholeStageCodegenTransformer (22) FilterExecTransformer [cp_catalog_page_sk] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page [cp_catalog_page_sk,cp_catalog_page_id] - WholeStageCodegenTransformer (39) + WholeStageCodegenTransformer (36) ProjectExecTransformer [sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00))),web_site_id] RegularHashAggregateExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [web_site_id,sum,sum,isEmpty,sum,isEmpty] #15 VeloxResizeBatches - WholeStageCodegenTransformer (38) + WholeStageCodegenTransformer (35) ProjectExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [web_site_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [web_site_id,ws_ext_sales_price,wr_return_amt,ws_net_profit,wr_net_loss] @@ -211,20 +195,25 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] #16 VeloxResizeBatches - WholeStageCodegenTransformer (32) + WholeStageCodegenTransformer (29) ProjectExecTransformer [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] - FilterExecTransformer [ws_web_site_sk,ws_item_sk,ws_promo_sk] - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 - FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_web_site_sk,ws_promo_sk,ws_order_number,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] - ReusedSubquery [d_date_sk] #1 - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (3) + Filter [ws_web_site_sk,ws_item_sk,ws_promo_sk] + ReusedSubquery [bloomFilter] #2 + ReusedSubquery [bloomFilter] #3 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (28) + FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_web_site_sk,ws_promo_sk,ws_order_number,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] + ReusedSubquery [d_date_sk] #1 InputIteratorTransformer InputAdapter ColumnarExchange [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss] #17 VeloxResizeBatches - WholeStageCodegenTransformer (33) + WholeStageCodegenTransformer (30) ProjectExecTransformer [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss] FilterExecTransformer [wr_item_sk,wr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss,wr_returned_date_sk] @@ -240,6 +229,6 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #18 - WholeStageCodegenTransformer (37) + WholeStageCodegenTransformer (34) FilterExecTransformer [web_site_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_site_id] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/explain.txt index 1502fa7d454..416bb24d21f 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/explain.txt @@ -1,14 +1,14 @@ == Physical Plan == -VeloxColumnarToRow (43) -+- TakeOrderedAndProjectExecTransformer (42) - +- ^ RegularHashAggregateExecTransformer (40) - +- ^ InputIteratorTransformer (39) - +- ColumnarExchange (37) - +- VeloxResizeBatches (36) - +- ^ ProjectExecTransformer (34) - +- ^ FlushableHashAggregateExecTransformer (33) - +- ^ ProjectExecTransformer (32) - +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (31) +VeloxColumnarToRow (48) ++- TakeOrderedAndProjectExecTransformer (47) + +- ^ RegularHashAggregateExecTransformer (45) + +- ^ InputIteratorTransformer (44) + +- ColumnarExchange (42) + +- VeloxResizeBatches (41) + +- ^ ProjectExecTransformer (39) + +- ^ FlushableHashAggregateExecTransformer (38) + +- ^ ProjectExecTransformer (37) + +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (36) :- ^ InputIteratorTransformer (22) : +- ColumnarExchange (20) : +- VeloxResizeBatches (19) @@ -26,12 +26,15 @@ VeloxColumnarToRow (43) : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.inventory (8) : +- ^ InputIteratorTransformer (15) : +- ReusedExchange (13) - +- ^ InputIteratorTransformer (30) - +- ColumnarExchange (28) - +- VeloxResizeBatches (27) - +- ^ ProjectExecTransformer (25) - +- ^ FilterExecTransformer (24) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (23) + +- ^ InputIteratorTransformer (35) + +- ColumnarExchange (33) + +- VeloxResizeBatches (32) + +- ^ ProjectExecTransformer (30) + +- ^ InputIteratorTransformer (29) + +- RowToVeloxColumnar (27) + +- * Filter (26) + +- VeloxColumnarToRow (25) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (23) (1) FileSourceScanExecTransformer parquet spark_catalog.default.item @@ -89,7 +92,7 @@ Join condition: None Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8] Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_item_sk#6, inv_date_sk#8] -(13) ReusedExchange [Reuses operator id: 48] +(13) ReusedExchange [Reuses operator id: 53] Output [1]: [d_date_sk#10] (14) InputAdapter @@ -133,197 +136,198 @@ Location: CatalogFileIndex [{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct -(24) FilterExecTransformer +(24) WholeStageCodegenTransformer (6) +Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] +Arguments: false + +(25) VeloxColumnarToRow +Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] + +(26) Filter [codegen id : 1] +Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] +Condition : (isnotnull(ss_item_sk#12) AND might_contain(Subquery scalar-subquery#14, [id=#3], xxhash64(ss_item_sk#12, 42))) + +(27) RowToVeloxColumnar Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] -Arguments: (isnotnull(ss_item_sk#12) AND velox_might_contain(Subquery scalar-subquery#14, [id=#3], xxhash64(ss_item_sk#12, 42))) -(25) ProjectExecTransformer +(28) InputAdapter +Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] + +(29) InputIteratorTransformer +Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] + +(30) ProjectExecTransformer Output [2]: [hash(ss_item_sk#12, 42) AS hash_partition_key#15, ss_item_sk#12] Input [2]: [ss_item_sk#12, ss_sold_date_sk#13] -(26) WholeStageCodegenTransformer (7) +(31) WholeStageCodegenTransformer (7) Input [2]: [hash_partition_key#15, ss_item_sk#12] Arguments: false -(27) VeloxResizeBatches +(32) VeloxResizeBatches Input [2]: [hash_partition_key#15, ss_item_sk#12] Arguments: 1024, 2147483647, 10485760 -(28) ColumnarExchange +(33) ColumnarExchange Input [2]: [hash_partition_key#15, ss_item_sk#12] Arguments: hashpartitioning(ss_item_sk#12, 1), ENSURE_REQUIREMENTS, [ss_item_sk#12], [plan_id=4], [shuffle_writer_type=hash] -(29) InputAdapter +(34) InputAdapter Input [1]: [ss_item_sk#12] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [1]: [ss_item_sk#12] -(31) ShuffledHashJoinExecTransformer +(36) ShuffledHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [ss_item_sk#12] Join type: Inner Join condition: None -(32) ProjectExecTransformer +(37) ProjectExecTransformer Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, ss_item_sk#12] -(33) FlushableHashAggregateExecTransformer +(38) FlushableHashAggregateExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Functions: [] Aggregate Attributes: [] Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [4]: [hash(i_item_id#2, i_item_desc#3, i_current_price#4, 42) AS hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(35) WholeStageCodegenTransformer (8) +(40) WholeStageCodegenTransformer (8) Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: false -(36) VeloxResizeBatches +(41) VeloxResizeBatches Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: 1024, 2147483647, 10485760 -(37) ColumnarExchange +(42) ColumnarExchange Input [4]: [hash_partition_key#16, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 1), ENSURE_REQUIREMENTS, [i_item_id#2, i_item_desc#3, i_current_price#4], [plan_id=5], [shuffle_writer_type=hash] -(38) InputAdapter +(43) InputAdapter Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(40) RegularHashAggregateExecTransformer +(45) RegularHashAggregateExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Functions: [] Aggregate Attributes: [] Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -(41) WholeStageCodegenTransformer (9) +(46) WholeStageCodegenTransformer (9) Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: false -(42) TakeOrderedAndProjectExecTransformer +(47) TakeOrderedAndProjectExecTransformer Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: 100, [i_item_id#2 ASC NULLS FIRST], [i_item_id#2, i_item_desc#3, i_current_price#4], 0 -(43) VeloxColumnarToRow +(48) VeloxColumnarToRow Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] ===== Subqueries ===== Subquery:1 Hosting operator id = 8 Hosting Expression = inv_date_sk#8 IN dynamicpruning#9 -ColumnarBroadcastExchange (48) -+- ^ ProjectExecTransformer (46) - +- ^ FilterExecTransformer (45) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (44) +ColumnarBroadcastExchange (53) ++- ^ ProjectExecTransformer (51) + +- ^ FilterExecTransformer (50) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (49) -(44) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(49) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#10, d_date#17] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-05-25), LessThanOrEqual(d_date,2000-07-24), IsNotNull(d_date_sk)] ReadSchema: struct -(45) FilterExecTransformer +(50) FilterExecTransformer Input [2]: [d_date_sk#10, d_date#17] Arguments: (((isnotnull(d_date#17) AND (d_date#17 >= 2000-05-25)) AND (d_date#17 <= 2000-07-24)) AND isnotnull(d_date_sk#10)) -(46) ProjectExecTransformer +(51) ProjectExecTransformer Output [1]: [d_date_sk#10] Input [2]: [d_date_sk#10, d_date#17] -(47) WholeStageCodegenTransformer (2) +(52) WholeStageCodegenTransformer (2) Input [1]: [d_date_sk#10] Arguments: false -(48) ColumnarBroadcastExchange +(53) ColumnarBroadcastExchange Input [1]: [d_date_sk#10] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -Subquery:2 Hosting operator id = 24 Hosting Expression = Subquery scalar-subquery#14, [id=#3] -VeloxColumnarToRow (60) -+- ^ RegularHashAggregateExecTransformer (58) - +- ^ InputIteratorTransformer (57) - +- ColumnarExchange (55) - +- VeloxResizeBatches (54) - +- ^ FlushableHashAggregateExecTransformer (52) - +- ^ ProjectExecTransformer (51) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (49) +Subquery:2 Hosting operator id = 26 Hosting Expression = Subquery scalar-subquery#14, [id=#3] +ObjectHashAggregate (64) ++- VeloxColumnarToRow (63) + +- ColumnarExchange (62) + +- VeloxResizeBatches (61) + +- RowToVeloxColumnar (60) + +- ObjectHashAggregate (59) + +- VeloxColumnarToRow (58) + +- ^ ProjectExecTransformer (56) + +- ^ FilterExecTransformer (55) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (54) -(49) FileSourceScanExecTransformer parquet spark_catalog.default.item +(54) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,62.00), LessThanOrEqual(i_current_price,92.00), In(i_manufact_id, [129,270,423,821]), IsNotNull(i_item_sk)] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] Arguments: ((((isnotnull(i_current_price#4) AND (i_current_price#4 >= 62.00)) AND (i_current_price#4 <= 92.00)) AND i_manufact_id#5 IN (129,270,821,423)) AND isnotnull(i_item_sk#1)) -(51) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#1, 42) AS _pre_1#18] +(56) ProjectExecTransformer +Output [1]: [i_item_sk#1] Input [3]: [i_item_sk#1, i_current_price#4, i_manufact_id#5] -(52) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#18] +(57) WholeStageCodegenTransformer (5) +Input [1]: [i_item_sk#1] +Arguments: false + +(58) VeloxColumnarToRow +Input [1]: [i_item_sk#1] + +(59) ObjectHashAggregate +Input [1]: [i_item_sk#1] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#18, 239, 6582, 0, 0)] -Aggregate Attributes [1]: [buf#19] -Results [1]: [buf#20] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] +Aggregate Attributes [1]: [buf#18] +Results [1]: [buf#19] -(53) WholeStageCodegenTransformer (5) -Input [1]: [buf#20] -Arguments: false +(60) RowToVeloxColumnar +Input [1]: [buf#19] -(54) VeloxResizeBatches -Input [1]: [buf#20] +(61) VeloxResizeBatches +Input [1]: [buf#19] Arguments: 1024, 2147483647, 10485760 -(55) ColumnarExchange -Input [1]: [buf#20] +(62) ColumnarExchange +Input [1]: [buf#19] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7], [shuffle_writer_type=hash] -(56) InputAdapter -Input [1]: [buf#20] +(63) VeloxColumnarToRow +Input [1]: [buf#19] -(57) InputIteratorTransformer -Input [1]: [buf#20] - -(58) RegularHashAggregateExecTransformer -Input [1]: [buf#20] +(64) ObjectHashAggregate +Input [1]: [buf#19] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#21] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#21 AS bloomFilter#22] - -(59) WholeStageCodegenTransformer (6) -Input [1]: [bloomFilter#22] -Arguments: false - -(60) VeloxColumnarToRow -Input [1]: [bloomFilter#22] - -Subquery:3 Hosting operator id = 23 Hosting Expression = Subquery scalar-subquery#14, [id=#3] -VeloxColumnarToRow (60) -+- ^ RegularHashAggregateExecTransformer (58) - +- ^ InputIteratorTransformer (57) - +- ColumnarExchange (55) - +- VeloxResizeBatches (54) - +- ^ FlushableHashAggregateExecTransformer (52) - +- ^ ProjectExecTransformer (51) - +- ^ FilterExecTransformer (50) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (49) - +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#20] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 239, 6582, 0, 0)#20 AS bloomFilter#21] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/simplified.txt index 0ebf8e97b7b..21e767549d9 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q82.sf100/simplified.txt @@ -45,31 +45,24 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (7) ProjectExecTransformer [ss_item_sk] - FilterExecTransformer [ss_item_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_sold_date_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_item_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 239, 6582, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (5) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_manufact_id,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_manufact_id] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (6) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_sold_date_sk] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/explain.txt index 8c1a07c927e..2f65ed5f9ab 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/explain.txt @@ -1,28 +1,28 @@ == Physical Plan == -VeloxColumnarToRow (82) -+- TakeOrderedAndProjectExecTransformer (81) - +- ^ ProjectExecTransformer (79) - +- ^ RegularHashAggregateExecTransformer (78) - +- ^ InputIteratorTransformer (77) - +- ColumnarExchange (75) - +- VeloxResizeBatches (74) - +- ^ ProjectExecTransformer (72) - +- ^ FlushableHashAggregateExecTransformer (71) - +- ^ ProjectExecTransformer (70) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (69) - :- ^ ProjectExecTransformer (62) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (61) - : :- ^ ProjectExecTransformer (57) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (56) - : : :- ^ ProjectExecTransformer (48) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (47) - : : : :- ^ InputIteratorTransformer (38) - : : : : +- ColumnarExchange (36) - : : : : +- VeloxResizeBatches (35) - : : : : +- ^ ProjectExecTransformer (33) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (32) - : : : : :- ^ ProjectExecTransformer (25) - : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (24) +VeloxColumnarToRow (87) ++- TakeOrderedAndProjectExecTransformer (86) + +- ^ ProjectExecTransformer (84) + +- ^ RegularHashAggregateExecTransformer (83) + +- ^ InputIteratorTransformer (82) + +- ColumnarExchange (80) + +- VeloxResizeBatches (79) + +- ^ ProjectExecTransformer (77) + +- ^ FlushableHashAggregateExecTransformer (76) + +- ^ ProjectExecTransformer (75) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (74) + :- ^ ProjectExecTransformer (67) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (66) + : :- ^ ProjectExecTransformer (62) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (61) + : : :- ^ ProjectExecTransformer (53) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (52) + : : : :- ^ InputIteratorTransformer (43) + : : : : +- ColumnarExchange (41) + : : : : +- VeloxResizeBatches (40) + : : : : +- ^ ProjectExecTransformer (38) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) + : : : : :- ^ ProjectExecTransformer (30) + : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (29) : : : : : :- ^ InputIteratorTransformer (15) : : : : : : +- ColumnarExchange (13) : : : : : : +- VeloxResizeBatches (12) @@ -34,33 +34,36 @@ VeloxColumnarToRow (82) : : : : : : +- ColumnarBroadcastExchange (6) : : : : : : +- ^ FilterExecTransformer (4) : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_page (3) - : : : : : +- ^ InputIteratorTransformer (23) - : : : : : +- ColumnarExchange (21) - : : : : : +- VeloxResizeBatches (20) - : : : : : +- ^ ProjectExecTransformer (18) - : : : : : +- ^ FilterExecTransformer (17) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (16) - : : : : +- ^ InputIteratorTransformer (31) - : : : : +- ColumnarBroadcastExchange (29) - : : : : +- ^ FilterExecTransformer (27) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (26) - : : : +- ^ InputIteratorTransformer (46) - : : : +- ColumnarExchange (44) - : : : +- VeloxResizeBatches (43) - : : : +- ^ ProjectExecTransformer (41) - : : : +- ^ FilterExecTransformer (40) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (39) - : : +- ^ InputIteratorTransformer (55) - : : +- ColumnarBroadcastExchange (53) - : : +- ^ ProjectExecTransformer (51) - : : +- ^ FilterExecTransformer (50) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (49) - : +- ^ InputIteratorTransformer (60) - : +- ReusedExchange (58) - +- ^ InputIteratorTransformer (68) - +- ColumnarBroadcastExchange (66) - +- ^ FilterExecTransformer (64) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.reason (63) + : : : : : +- ^ InputIteratorTransformer (28) + : : : : : +- ColumnarExchange (26) + : : : : : +- VeloxResizeBatches (25) + : : : : : +- ^ ProjectExecTransformer (23) + : : : : : +- ^ InputIteratorTransformer (22) + : : : : : +- RowToVeloxColumnar (20) + : : : : : +- * Filter (19) + : : : : : +- VeloxColumnarToRow (18) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (16) + : : : : +- ^ InputIteratorTransformer (36) + : : : : +- ColumnarBroadcastExchange (34) + : : : : +- ^ FilterExecTransformer (32) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (31) + : : : +- ^ InputIteratorTransformer (51) + : : : +- ColumnarExchange (49) + : : : +- VeloxResizeBatches (48) + : : : +- ^ ProjectExecTransformer (46) + : : : +- ^ FilterExecTransformer (45) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (44) + : : +- ^ InputIteratorTransformer (60) + : : +- ColumnarBroadcastExchange (58) + : : +- ^ ProjectExecTransformer (56) + : : +- ^ FilterExecTransformer (55) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (54) + : +- ^ InputIteratorTransformer (65) + : +- ReusedExchange (63) + +- ^ InputIteratorTransformer (73) + +- ColumnarBroadcastExchange (71) + +- ^ FilterExecTransformer (69) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.reason (68) (1) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales @@ -135,468 +138,454 @@ Location: CatalogFileIndex [{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number), IsNotNull(wr_refunded_cdemo_sk), IsNotNull(wr_returning_cdemo_sk), IsNotNull(wr_refunded_addr_sk), IsNotNull(wr_reason_sk)] ReadSchema: struct -(17) FilterExecTransformer +(17) WholeStageCodegenTransformer (6) +Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] +Arguments: false + +(18) VeloxColumnarToRow +Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] + +(19) Filter [codegen id : 1] +Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] +Condition : (((((((isnotnull(wr_item_sk#11) AND isnotnull(wr_order_number#16)) AND isnotnull(wr_refunded_cdemo_sk#12)) AND isnotnull(wr_returning_cdemo_sk#14)) AND isnotnull(wr_refunded_addr_sk#13)) AND isnotnull(wr_reason_sk#15)) AND might_contain(Subquery scalar-subquery#20, [id=#3], xxhash64(wr_refunded_cdemo_sk#12, 42))) AND might_contain(Subquery scalar-subquery#21, [id=#4], xxhash64(wr_refunded_addr_sk#13, 42))) + +(20) RowToVeloxColumnar +Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] + +(21) InputAdapter +Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] + +(22) InputIteratorTransformer Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] -Arguments: (((((((isnotnull(wr_item_sk#11) AND isnotnull(wr_order_number#16)) AND isnotnull(wr_refunded_cdemo_sk#12)) AND isnotnull(wr_returning_cdemo_sk#14)) AND isnotnull(wr_refunded_addr_sk#13)) AND isnotnull(wr_reason_sk#15)) AND velox_might_contain(Subquery scalar-subquery#20, [id=#3], xxhash64(wr_refunded_cdemo_sk#12, 42))) AND velox_might_contain(Subquery scalar-subquery#21, [id=#4], xxhash64(wr_refunded_addr_sk#13, 42))) -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [9]: [hash(wr_item_sk#11, wr_order_number#16, 42) AS hash_partition_key#22, wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] Input [9]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18, wr_returned_date_sk#19] -(19) WholeStageCodegenTransformer (8) +(24) WholeStageCodegenTransformer (7) Input [9]: [hash_partition_key#22, wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] Arguments: false -(20) VeloxResizeBatches +(25) VeloxResizeBatches Input [9]: [hash_partition_key#22, wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] Arguments: 1024, 2147483647, 10485760 -(21) ColumnarExchange +(26) ColumnarExchange Input [9]: [hash_partition_key#22, wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] Arguments: hashpartitioning(wr_item_sk#11, wr_order_number#16, 1), ENSURE_REQUIREMENTS, [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18], [plan_id=5], [shuffle_writer_type=hash] -(22) InputAdapter +(27) InputAdapter Input [8]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] -(23) InputIteratorTransformer +(28) InputIteratorTransformer Input [8]: [wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] -(24) ShuffledHashJoinExecTransformer +(29) ShuffledHashJoinExecTransformer Left keys [2]: [ws_item_sk#1, ws_order_number#3] Right keys [2]: [wr_item_sk#11, wr_order_number#16] Join type: Inner Join condition: None -(25) ProjectExecTransformer +(30) ProjectExecTransformer Output [10]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18] Input [14]: [ws_item_sk#1, ws_order_number#3, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_item_sk#11, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_order_number#16, wr_fee#17, wr_refunded_cash#18] -(26) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(31) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), 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 -(27) FilterExecTransformer +(32) FilterExecTransformer Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Arguments: (((isnotnull(cd_demo_sk#23) AND isnotnull(cd_marital_status#24)) AND isnotnull(cd_education_status#25)) AND ((((cd_marital_status#24 = M) AND (cd_education_status#25 = Advanced Degree )) OR ((cd_marital_status#24 = S) AND (cd_education_status#25 = College ))) OR ((cd_marital_status#24 = W) AND (cd_education_status#25 = 2 yr Degree )))) -(28) WholeStageCodegenTransformer (9) +(33) WholeStageCodegenTransformer (8) Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Arguments: false -(29) ColumnarBroadcastExchange +(34) ColumnarBroadcastExchange Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] -(30) InputAdapter +(35) InputAdapter Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] -(32) BroadcastHashJoinExecTransformer +(37) BroadcastHashJoinExecTransformer Left keys [1]: [wr_refunded_cdemo_sk#12] Right keys [1]: [cd_demo_sk#23] Join type: Inner Join condition: ((((((cd_marital_status#24 = M) AND (cd_education_status#25 = Advanced Degree )) AND (ws_sales_price#5 >= 100.00)) AND (ws_sales_price#5 <= 150.00)) OR ((((cd_marital_status#24 = S) AND (cd_education_status#25 = College )) AND (ws_sales_price#5 >= 50.00)) AND (ws_sales_price#5 <= 100.00))) OR ((((cd_marital_status#24 = W) AND (cd_education_status#25 = 2 yr Degree )) AND (ws_sales_price#5 >= 150.00)) AND (ws_sales_price#5 <= 200.00))) -(33) ProjectExecTransformer +(38) ProjectExecTransformer Output [11]: [hash(wr_returning_cdemo_sk#14, cd_marital_status#24, cd_education_status#25, 42) AS hash_partition_key#26, ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] Input [13]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#12, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] -(34) WholeStageCodegenTransformer (10) +(39) WholeStageCodegenTransformer (9) Input [11]: [hash_partition_key#26, ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] Arguments: false -(35) VeloxResizeBatches +(40) VeloxResizeBatches Input [11]: [hash_partition_key#26, ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] Arguments: 1024, 2147483647, 10485760 -(36) ColumnarExchange +(41) ColumnarExchange Input [11]: [hash_partition_key#26, ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] Arguments: hashpartitioning(wr_returning_cdemo_sk#14, cd_marital_status#24, cd_education_status#25, 1), ENSURE_REQUIREMENTS, [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25], [plan_id=7], [shuffle_writer_type=hash] -(37) InputAdapter +(42) InputAdapter Input [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] -(38) InputIteratorTransformer +(43) InputIteratorTransformer Input [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25] -(39) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(44) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status), IsNotNull(cd_education_status)] ReadSchema: struct -(40) FilterExecTransformer +(45) FilterExecTransformer Input [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Arguments: ((isnotnull(cd_demo_sk#27) AND isnotnull(cd_marital_status#28)) AND isnotnull(cd_education_status#29)) -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [4]: [hash(cd_demo_sk#27, cd_marital_status#28, cd_education_status#29, 42) AS hash_partition_key#30, cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Input [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] -(42) WholeStageCodegenTransformer (11) +(47) WholeStageCodegenTransformer (10) Input [4]: [hash_partition_key#30, cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Arguments: false -(43) VeloxResizeBatches +(48) VeloxResizeBatches Input [4]: [hash_partition_key#30, cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Arguments: 1024, 2147483647, 10485760 -(44) ColumnarExchange +(49) ColumnarExchange Input [4]: [hash_partition_key#30, cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Arguments: hashpartitioning(cd_demo_sk#27, cd_marital_status#28, cd_education_status#29, 1), ENSURE_REQUIREMENTS, [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29], [plan_id=8], [shuffle_writer_type=hash] -(45) InputAdapter +(50) InputAdapter Input [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] -(46) InputIteratorTransformer +(51) InputIteratorTransformer Input [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] -(47) ShuffledHashJoinExecTransformer +(52) ShuffledHashJoinExecTransformer Left keys [3]: [wr_returning_cdemo_sk#14, cd_marital_status#24, cd_education_status#25] Right keys [3]: [cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] Join type: Inner Join condition: None -(48) ProjectExecTransformer +(53) ProjectExecTransformer Output [7]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18] Input [13]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_returning_cdemo_sk#14, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, cd_marital_status#24, cd_education_status#25, cd_demo_sk#27, cd_marital_status#28, cd_education_status#29] -(49) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(54) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_address_sk#31, ca_state#32, ca_country#33] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [IN,NJ,OH]),In(ca_state, [CT,KY,WI])),In(ca_state, [AR,IA,LA]))] ReadSchema: struct -(50) FilterExecTransformer +(55) FilterExecTransformer Input [3]: [ca_address_sk#31, ca_state#32, ca_country#33] Arguments: (((isnotnull(ca_country#33) AND (ca_country#33 = United States)) AND isnotnull(ca_address_sk#31)) AND ((ca_state#32 IN (IN,OH,NJ) OR ca_state#32 IN (WI,CT,KY)) OR ca_state#32 IN (LA,IA,AR))) -(51) ProjectExecTransformer +(56) ProjectExecTransformer Output [2]: [ca_address_sk#31, ca_state#32] Input [3]: [ca_address_sk#31, ca_state#32, ca_country#33] -(52) WholeStageCodegenTransformer (12) +(57) WholeStageCodegenTransformer (11) Input [2]: [ca_address_sk#31, ca_state#32] Arguments: false -(53) ColumnarBroadcastExchange +(58) ColumnarBroadcastExchange Input [2]: [ca_address_sk#31, ca_state#32] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -(54) InputAdapter +(59) InputAdapter Input [2]: [ca_address_sk#31, ca_state#32] -(55) InputIteratorTransformer +(60) InputIteratorTransformer Input [2]: [ca_address_sk#31, ca_state#32] -(56) BroadcastHashJoinExecTransformer +(61) BroadcastHashJoinExecTransformer Left keys [1]: [wr_refunded_addr_sk#13] Right keys [1]: [ca_address_sk#31] Join type: Inner Join condition: ((((ca_state#32 IN (IN,OH,NJ) AND (ws_net_profit#6 >= 100.00)) AND (ws_net_profit#6 <= 200.00)) OR ((ca_state#32 IN (WI,CT,KY) AND (ws_net_profit#6 >= 150.00)) AND (ws_net_profit#6 <= 300.00))) OR ((ca_state#32 IN (LA,IA,AR) AND (ws_net_profit#6 >= 50.00)) AND (ws_net_profit#6 <= 250.00))) -(57) ProjectExecTransformer +(62) ProjectExecTransformer Output [5]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18] Input [9]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#13, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, ca_address_sk#31, ca_state#32] -(58) ReusedExchange [Reuses operator id: 87] +(63) ReusedExchange [Reuses operator id: 92] Output [1]: [d_date_sk#34] -(59) InputAdapter +(64) InputAdapter Input [1]: [d_date_sk#34] -(60) InputIteratorTransformer +(65) InputIteratorTransformer Input [1]: [d_date_sk#34] -(61) BroadcastHashJoinExecTransformer +(66) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#7] Right keys [1]: [d_date_sk#34] Join type: Inner Join condition: None -(62) ProjectExecTransformer +(67) ProjectExecTransformer Output [4]: [ws_quantity#4, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18] Input [6]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, d_date_sk#34] -(63) FileSourceScanExecTransformer parquet spark_catalog.default.reason +(68) FileSourceScanExecTransformer parquet spark_catalog.default.reason Output [2]: [r_reason_sk#35, r_reason_desc#36] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/reason] PushedFilters: [IsNotNull(r_reason_sk)] ReadSchema: struct -(64) FilterExecTransformer +(69) FilterExecTransformer Input [2]: [r_reason_sk#35, r_reason_desc#36] Arguments: isnotnull(r_reason_sk#35) -(65) WholeStageCodegenTransformer (14) +(70) WholeStageCodegenTransformer (13) Input [2]: [r_reason_sk#35, r_reason_desc#36] Arguments: false -(66) ColumnarBroadcastExchange +(71) ColumnarBroadcastExchange Input [2]: [r_reason_sk#35, r_reason_desc#36] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10] -(67) InputAdapter +(72) InputAdapter Input [2]: [r_reason_sk#35, r_reason_desc#36] -(68) InputIteratorTransformer +(73) InputIteratorTransformer Input [2]: [r_reason_sk#35, r_reason_desc#36] -(69) BroadcastHashJoinExecTransformer +(74) BroadcastHashJoinExecTransformer Left keys [1]: [wr_reason_sk#15] Right keys [1]: [r_reason_sk#35] Join type: Inner Join condition: None -(70) ProjectExecTransformer +(75) ProjectExecTransformer Output [4]: [ws_quantity#4, r_reason_desc#36, UnscaledValue(wr_refunded_cash#18) AS _pre_1#37, UnscaledValue(wr_fee#17) AS _pre_2#38] Input [6]: [ws_quantity#4, wr_reason_sk#15, wr_fee#17, wr_refunded_cash#18, r_reason_sk#35, r_reason_desc#36] -(71) FlushableHashAggregateExecTransformer +(76) FlushableHashAggregateExecTransformer Input [4]: [ws_quantity#4, r_reason_desc#36, _pre_1#37, _pre_2#38] Keys [1]: [r_reason_desc#36] Functions [3]: [partial_avg(ws_quantity#4), partial_avg(_pre_1#37), partial_avg(_pre_2#38)] Aggregate Attributes [6]: [sum#39, count#40, sum#41, count#42, sum#43, count#44] Results [7]: [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] -(72) ProjectExecTransformer +(77) ProjectExecTransformer Output [8]: [hash(r_reason_desc#36, 42) AS hash_partition_key#51, r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] Input [7]: [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] -(73) WholeStageCodegenTransformer (15) +(78) WholeStageCodegenTransformer (14) Input [8]: [hash_partition_key#51, r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] Arguments: false -(74) VeloxResizeBatches +(79) VeloxResizeBatches Input [8]: [hash_partition_key#51, r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] Arguments: 1024, 2147483647, 10485760 -(75) ColumnarExchange +(80) ColumnarExchange Input [8]: [hash_partition_key#51, r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] Arguments: hashpartitioning(r_reason_desc#36, 1), ENSURE_REQUIREMENTS, [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50], [plan_id=11], [shuffle_writer_type=hash] -(76) InputAdapter +(81) InputAdapter Input [7]: [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] -(77) InputIteratorTransformer +(82) InputIteratorTransformer Input [7]: [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] -(78) RegularHashAggregateExecTransformer +(83) RegularHashAggregateExecTransformer Input [7]: [r_reason_desc#36, sum#45, count#46, sum#47, count#48, sum#49, count#50] Keys [1]: [r_reason_desc#36] Functions [3]: [avg(ws_quantity#4), avg(UnscaledValue(wr_refunded_cash#18)), avg(UnscaledValue(wr_fee#17))] Aggregate Attributes [3]: [avg(ws_quantity#4)#52, avg(UnscaledValue(wr_refunded_cash#18))#53, avg(UnscaledValue(wr_fee#17))#54] Results [4]: [r_reason_desc#36, avg(ws_quantity#4)#52, avg(UnscaledValue(wr_refunded_cash#18))#53, avg(UnscaledValue(wr_fee#17))#54] -(79) ProjectExecTransformer +(84) ProjectExecTransformer Output [4]: [substr(r_reason_desc#36, 1, 20) AS substr(r_reason_desc, 1, 20)#55, avg(ws_quantity#4)#52 AS avg(ws_quantity)#56, cast((avg(UnscaledValue(wr_refunded_cash#18))#53 / 100.0) as decimal(11,6)) AS avg(wr_refunded_cash)#57, cast((avg(UnscaledValue(wr_fee#17))#54 / 100.0) as decimal(11,6)) AS avg(wr_fee)#58] Input [4]: [r_reason_desc#36, avg(ws_quantity#4)#52, avg(UnscaledValue(wr_refunded_cash#18))#53, avg(UnscaledValue(wr_fee#17))#54] -(80) WholeStageCodegenTransformer (16) +(85) WholeStageCodegenTransformer (15) Input [4]: [substr(r_reason_desc, 1, 20)#55, avg(ws_quantity)#56, avg(wr_refunded_cash)#57, avg(wr_fee)#58] Arguments: false -(81) TakeOrderedAndProjectExecTransformer +(86) TakeOrderedAndProjectExecTransformer Input [4]: [substr(r_reason_desc, 1, 20)#55, avg(ws_quantity)#56, avg(wr_refunded_cash)#57, avg(wr_fee)#58] Arguments: 100, [substr(r_reason_desc, 1, 20)#55 ASC NULLS FIRST, avg(ws_quantity)#56 ASC NULLS FIRST, avg(wr_refunded_cash)#57 ASC NULLS FIRST, avg(wr_fee)#58 ASC NULLS FIRST], [substr(r_reason_desc, 1, 20)#55, avg(ws_quantity)#56, avg(wr_refunded_cash)#57, avg(wr_fee)#58], 0 -(82) VeloxColumnarToRow +(87) VeloxColumnarToRow Input [4]: [substr(r_reason_desc, 1, 20)#55, avg(ws_quantity)#56, avg(wr_refunded_cash)#57, avg(wr_fee)#58] ===== Subqueries ===== Subquery:1 Hosting operator id = 1 Hosting Expression = ws_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (87) -+- ^ ProjectExecTransformer (85) - +- ^ FilterExecTransformer (84) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (83) +ColumnarBroadcastExchange (92) ++- ^ ProjectExecTransformer (90) + +- ^ FilterExecTransformer (89) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (88) -(83) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(88) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#34, d_year#59] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct -(84) FilterExecTransformer +(89) FilterExecTransformer Input [2]: [d_date_sk#34, d_year#59] Arguments: ((isnotnull(d_year#59) AND (d_year#59 = 2000)) AND isnotnull(d_date_sk#34)) -(85) ProjectExecTransformer +(90) ProjectExecTransformer Output [1]: [d_date_sk#34] Input [2]: [d_date_sk#34, d_year#59] -(86) WholeStageCodegenTransformer (1) +(91) WholeStageCodegenTransformer (1) Input [1]: [d_date_sk#34] Arguments: false -(87) ColumnarBroadcastExchange +(92) ColumnarBroadcastExchange Input [1]: [d_date_sk#34] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] -Subquery:2 Hosting operator id = 17 Hosting Expression = Subquery scalar-subquery#20, [id=#3] -VeloxColumnarToRow (99) -+- ^ RegularHashAggregateExecTransformer (97) - +- ^ InputIteratorTransformer (96) - +- ColumnarExchange (94) - +- VeloxResizeBatches (93) - +- ^ FlushableHashAggregateExecTransformer (91) - +- ^ ProjectExecTransformer (90) - +- ^ FilterExecTransformer (89) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (88) +Subquery:2 Hosting operator id = 19 Hosting Expression = Subquery scalar-subquery#20, [id=#3] +ObjectHashAggregate (103) ++- VeloxColumnarToRow (102) + +- ColumnarExchange (101) + +- VeloxResizeBatches (100) + +- RowToVeloxColumnar (99) + +- ObjectHashAggregate (98) + +- VeloxColumnarToRow (97) + +- ^ ProjectExecTransformer (95) + +- ^ FilterExecTransformer (94) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (93) -(88) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(93) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), 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 -(89) FilterExecTransformer +(94) FilterExecTransformer Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Arguments: (((isnotnull(cd_demo_sk#23) AND isnotnull(cd_marital_status#24)) AND isnotnull(cd_education_status#25)) AND ((((cd_marital_status#24 = M) AND (cd_education_status#25 = Advanced Degree )) OR ((cd_marital_status#24 = S) AND (cd_education_status#25 = College ))) OR ((cd_marital_status#24 = W) AND (cd_education_status#25 = 2 yr Degree )))) -(90) ProjectExecTransformer -Output [1]: [xxhash64(cd_demo_sk#23, 42) AS _pre_3#60] +(95) ProjectExecTransformer +Output [1]: [cd_demo_sk#23] Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] -(91) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#60] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#60, 159981, 2239471, 0, 0)] -Aggregate Attributes [1]: [buf#61] -Results [1]: [buf#62] - -(92) WholeStageCodegenTransformer (4) -Input [1]: [buf#62] +(96) WholeStageCodegenTransformer (4) +Input [1]: [cd_demo_sk#23] Arguments: false -(93) VeloxResizeBatches -Input [1]: [buf#62] -Arguments: 1024, 2147483647, 10485760 - -(94) ColumnarExchange -Input [1]: [buf#62] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13], [shuffle_writer_type=hash] +(97) VeloxColumnarToRow +Input [1]: [cd_demo_sk#23] -(95) InputAdapter -Input [1]: [buf#62] - -(96) InputIteratorTransformer -Input [1]: [buf#62] - -(97) RegularHashAggregateExecTransformer -Input [1]: [buf#62] +(98) ObjectHashAggregate +Input [1]: [cd_demo_sk#23] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)#63] -Results [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)#63 AS bloomFilter#64] +Functions [1]: [partial_bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)] +Aggregate Attributes [1]: [buf#60] +Results [1]: [buf#61] -(98) WholeStageCodegenTransformer (5) -Input [1]: [bloomFilter#64] -Arguments: false +(99) RowToVeloxColumnar +Input [1]: [buf#61] -(99) VeloxColumnarToRow -Input [1]: [bloomFilter#64] +(100) VeloxResizeBatches +Input [1]: [buf#61] +Arguments: 1024, 2147483647, 10485760 -Subquery:3 Hosting operator id = 17 Hosting Expression = Subquery scalar-subquery#21, [id=#4] -VeloxColumnarToRow (111) -+- ^ RegularHashAggregateExecTransformer (109) - +- ^ InputIteratorTransformer (108) - +- ColumnarExchange (106) - +- VeloxResizeBatches (105) - +- ^ FlushableHashAggregateExecTransformer (103) - +- ^ ProjectExecTransformer (102) - +- ^ FilterExecTransformer (101) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (100) +(101) ColumnarExchange +Input [1]: [buf#61] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13], [shuffle_writer_type=hash] +(102) VeloxColumnarToRow +Input [1]: [buf#61] -(100) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(103) ObjectHashAggregate +Input [1]: [buf#61] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)#62] +Results [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 2239471, 0, 0)#62 AS bloomFilter#63] + +Subquery:3 Hosting operator id = 19 Hosting Expression = Subquery scalar-subquery#21, [id=#4] +ObjectHashAggregate (114) ++- VeloxColumnarToRow (113) + +- ColumnarExchange (112) + +- VeloxResizeBatches (111) + +- RowToVeloxColumnar (110) + +- ObjectHashAggregate (109) + +- VeloxColumnarToRow (108) + +- ^ ProjectExecTransformer (106) + +- ^ FilterExecTransformer (105) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (104) + + +(104) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [3]: [ca_address_sk#31, ca_state#32, ca_country#33] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [IN,NJ,OH]),In(ca_state, [CT,KY,WI])),In(ca_state, [AR,IA,LA]))] ReadSchema: struct -(101) FilterExecTransformer +(105) FilterExecTransformer Input [3]: [ca_address_sk#31, ca_state#32, ca_country#33] Arguments: (((isnotnull(ca_country#33) AND (ca_country#33 = United States)) AND isnotnull(ca_address_sk#31)) AND ((ca_state#32 IN (IN,OH,NJ) OR ca_state#32 IN (WI,CT,KY)) OR ca_state#32 IN (LA,IA,AR))) -(102) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#31, 42) AS _pre_4#65] +(106) ProjectExecTransformer +Output [1]: [ca_address_sk#31] Input [3]: [ca_address_sk#31, ca_state#32, ca_country#33] -(103) FlushableHashAggregateExecTransformer -Input [1]: [_pre_4#65] +(107) WholeStageCodegenTransformer (5) +Input [1]: [ca_address_sk#31] +Arguments: false + +(108) VeloxColumnarToRow +Input [1]: [ca_address_sk#31] + +(109) ObjectHashAggregate +Input [1]: [ca_address_sk#31] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_4#65, 152837, 2153999, 0, 0)] -Aggregate Attributes [1]: [buf#66] -Results [1]: [buf#67] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)] +Aggregate Attributes [1]: [buf#64] +Results [1]: [buf#65] -(104) WholeStageCodegenTransformer (6) -Input [1]: [buf#67] -Arguments: false +(110) RowToVeloxColumnar +Input [1]: [buf#65] -(105) VeloxResizeBatches -Input [1]: [buf#67] +(111) VeloxResizeBatches +Input [1]: [buf#65] Arguments: 1024, 2147483647, 10485760 -(106) ColumnarExchange -Input [1]: [buf#67] +(112) ColumnarExchange +Input [1]: [buf#65] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=14], [shuffle_writer_type=hash] -(107) InputAdapter -Input [1]: [buf#67] +(113) VeloxColumnarToRow +Input [1]: [buf#65] -(108) InputIteratorTransformer -Input [1]: [buf#67] - -(109) RegularHashAggregateExecTransformer -Input [1]: [buf#67] +(114) ObjectHashAggregate +Input [1]: [buf#65] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)#68] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)#68 AS bloomFilter#69] - -(110) WholeStageCodegenTransformer (7) -Input [1]: [bloomFilter#69] -Arguments: false - -(111) VeloxColumnarToRow -Input [1]: [bloomFilter#69] - -Subquery:4 Hosting operator id = 16 Hosting Expression = Subquery scalar-subquery#20, [id=#3] -VeloxColumnarToRow (99) -+- ^ RegularHashAggregateExecTransformer (97) - +- ^ InputIteratorTransformer (96) - +- ColumnarExchange (94) - +- VeloxResizeBatches (93) - +- ^ FlushableHashAggregateExecTransformer (91) - +- ^ ProjectExecTransformer (90) - +- ^ FilterExecTransformer (89) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (88) - - -Subquery:5 Hosting operator id = 16 Hosting Expression = Subquery scalar-subquery#21, [id=#4] -VeloxColumnarToRow (111) -+- ^ RegularHashAggregateExecTransformer (109) - +- ^ InputIteratorTransformer (108) - +- ColumnarExchange (106) - +- VeloxResizeBatches (105) - +- ^ FlushableHashAggregateExecTransformer (103) - +- ^ ProjectExecTransformer (102) - +- ^ FilterExecTransformer (101) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (100) - +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)#66] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#31, 42), 152837, 2153999, 0, 0)#66 AS bloomFilter#67] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/simplified.txt index c309533c42e..e05cf8cae38 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q85.sf100/simplified.txt @@ -1,13 +1,13 @@ VeloxColumnarToRow TakeOrderedAndProjectExecTransformer [substr(r_reason_desc, 1, 20),avg(ws_quantity),avg(wr_refunded_cash),avg(wr_fee)] - WholeStageCodegenTransformer (16) + WholeStageCodegenTransformer (15) ProjectExecTransformer [r_reason_desc,avg(ws_quantity),avg(UnscaledValue(wr_refunded_cash)),avg(UnscaledValue(wr_fee))] RegularHashAggregateExecTransformer [r_reason_desc,sum,count,sum,count,sum,count] [avg(ws_quantity),avg(UnscaledValue(wr_refunded_cash)),avg(UnscaledValue(wr_fee)),sum,count,sum,count,sum,count] InputIteratorTransformer InputAdapter ColumnarExchange [r_reason_desc,sum,count,sum,count,sum,count] #1 VeloxResizeBatches - WholeStageCodegenTransformer (15) + WholeStageCodegenTransformer (14) ProjectExecTransformer [r_reason_desc,sum,count,sum,count,sum,count] FlushableHashAggregateExecTransformer [r_reason_desc,ws_quantity,_pre_x,_pre_x] [sum,count,sum,count,sum,count,sum,count,sum,count,sum,count,sum,count,sum,count] ProjectExecTransformer [ws_quantity,r_reason_desc,wr_refunded_cash,wr_fee] @@ -22,7 +22,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [wr_returning_cdemo_sk,cd_marital_status,cd_education_status,ws_quantity,ws_net_profit,ws_sold_date_sk,wr_refunded_addr_sk,wr_reason_sk,wr_fee,wr_refunded_cash] #2 VeloxResizeBatches - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (9) ProjectExecTransformer [wr_returning_cdemo_sk,cd_marital_status,cd_education_status,ws_quantity,ws_net_profit,ws_sold_date_sk,wr_refunded_addr_sk,wr_reason_sk,wr_fee,wr_refunded_cash] BroadcastHashJoinExecTransformer [wr_refunded_cdemo_sk,cd_demo_sk,cd_marital_status,cd_education_status,ws_sales_price] ProjectExecTransformer [ws_quantity,ws_sales_price,ws_net_profit,ws_sold_date_sk,wr_refunded_cdemo_sk,wr_refunded_addr_sk,wr_returning_cdemo_sk,wr_reason_sk,wr_fee,wr_refunded_cash] @@ -52,80 +52,59 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [wr_item_sk,wr_order_number,wr_refunded_cdemo_sk,wr_refunded_addr_sk,wr_returning_cdemo_sk,wr_reason_sk,wr_fee,wr_refunded_cash] #6 VeloxResizeBatches - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (7) ProjectExecTransformer [wr_item_sk,wr_order_number,wr_refunded_cdemo_sk,wr_refunded_addr_sk,wr_returning_cdemo_sk,wr_reason_sk,wr_fee,wr_refunded_cash] - FilterExecTransformer [wr_item_sk,wr_order_number,wr_refunded_cdemo_sk,wr_returning_cdemo_sk,wr_refunded_addr_sk,wr_reason_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (5) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(cd_demo_sk, 42), 159981, 2239471, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #7 - VeloxResizeBatches - WholeStageCodegenTransformer (4) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [cd_demo_sk] - FilterExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics [cd_demo_sk,cd_marital_status,cd_education_status] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (7) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 152837, 2153999, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #8 - VeloxResizeBatches - WholeStageCodegenTransformer (6) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_country,ca_address_sk,ca_state] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state,ca_country] - FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_item_sk,wr_refunded_cdemo_sk,wr_refunded_addr_sk,wr_returning_cdemo_sk,wr_reason_sk,wr_order_number,wr_fee,wr_refunded_cash,wr_returned_date_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (5) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(cd_demo_sk, 42), 159981, 2239471, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [wr_item_sk,wr_order_number,wr_refunded_cdemo_sk,wr_returning_cdemo_sk,wr_refunded_addr_sk,wr_reason_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(cd_demo_sk, 42), 159981, 2239471, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #7 VeloxResizeBatches - WholeStageCodegenTransformer (4) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [cd_demo_sk] - FilterExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics [cd_demo_sk,cd_marital_status,cd_education_status] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (7) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 152837, 2153999, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [cd_demo_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + ProjectExecTransformer [cd_demo_sk] + FilterExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics [cd_demo_sk,cd_marital_status,cd_education_status] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 152837, 2153999, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #8 VeloxResizeBatches - WholeStageCodegenTransformer (6) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_country,ca_address_sk,ca_state] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state,ca_country] + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (5) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_country,ca_address_sk,ca_state] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state,ca_country] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (6) + FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_item_sk,wr_refunded_cdemo_sk,wr_refunded_addr_sk,wr_returning_cdemo_sk,wr_reason_sk,wr_order_number,wr_fee,wr_refunded_cash,wr_returned_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (8) FilterExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics [cd_demo_sk,cd_marital_status,cd_education_status] InputIteratorTransformer InputAdapter ColumnarExchange [cd_demo_sk,cd_marital_status,cd_education_status] #10 VeloxResizeBatches - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (10) ProjectExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] FilterExecTransformer [cd_demo_sk,cd_marital_status,cd_education_status] FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics [cd_demo_sk,cd_marital_status,cd_education_status] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #11 - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (11) ProjectExecTransformer [ca_address_sk,ca_state] FilterExecTransformer [ca_country,ca_address_sk,ca_state] FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state,ca_country] @@ -135,6 +114,6 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #12 - WholeStageCodegenTransformer (14) + WholeStageCodegenTransformer (13) FilterExecTransformer [r_reason_sk] FileSourceScanExecTransformer parquet spark_catalog.default.reason [r_reason_sk,r_reason_desc] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/explain.txt index 79c8d3f7747..05cec1e391d 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/explain.txt @@ -1,42 +1,45 @@ == Physical Plan == -VeloxColumnarToRow (49) -+- ^ ProjectExecTransformer (47) - +- ^ RegularHashAggregateExecTransformer (46) - +- ^ InputIteratorTransformer (45) - +- ColumnarExchange (43) - +- VeloxResizeBatches (42) - +- ^ FlushableHashAggregateExecTransformer (40) - +- ^ ProjectExecTransformer (39) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (38) - :- ^ ProjectExecTransformer (34) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (33) - : :- ^ InputIteratorTransformer (30) - : : +- ColumnarBroadcastExchange (28) - : : +- ^ ProjectExecTransformer (26) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (25) +VeloxColumnarToRow (54) ++- ^ ProjectExecTransformer (52) + +- ^ RegularHashAggregateExecTransformer (51) + +- ^ InputIteratorTransformer (50) + +- ColumnarExchange (48) + +- VeloxResizeBatches (47) + +- ^ FlushableHashAggregateExecTransformer (45) + +- ^ ProjectExecTransformer (44) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (43) + :- ^ ProjectExecTransformer (39) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (38) + : :- ^ InputIteratorTransformer (35) + : : +- ColumnarBroadcastExchange (33) + : : +- ^ ProjectExecTransformer (31) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (30) : : :- ^ InputIteratorTransformer (7) : : : +- ColumnarBroadcastExchange (5) : : : +- ^ ProjectExecTransformer (3) : : : +- ^ FilterExecTransformer (2) : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (1) - : : +- ^ FilterExecTransformer (24) - : : +- ^ ProjectExecTransformer (23) - : : +- ^ RegularHashAggregateExecTransformer (22) - : : +- ^ InputIteratorTransformer (21) - : : +- ColumnarExchange (19) - : : +- VeloxResizeBatches (18) - : : +- ^ ProjectExecTransformer (16) - : : +- ^ FlushableHashAggregateExecTransformer (15) - : : +- ^ ProjectExecTransformer (14) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13) - : : :- ^ FilterExecTransformer (9) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (8) - : : +- ^ InputIteratorTransformer (12) - : : +- ReusedExchange (10) - : +- ^ FilterExecTransformer (32) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (31) - +- ^ InputIteratorTransformer (37) - +- ReusedExchange (35) + : : +- ^ FilterExecTransformer (29) + : : +- ^ ProjectExecTransformer (28) + : : +- ^ RegularHashAggregateExecTransformer (27) + : : +- ^ InputIteratorTransformer (26) + : : +- ColumnarExchange (24) + : : +- VeloxResizeBatches (23) + : : +- ^ ProjectExecTransformer (21) + : : +- ^ FlushableHashAggregateExecTransformer (20) + : : +- ^ ProjectExecTransformer (19) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) + : : :- ^ InputIteratorTransformer (14) + : : : +- RowToVeloxColumnar (12) + : : : +- * Filter (11) + : : : +- VeloxColumnarToRow (10) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (8) + : : +- ^ InputIteratorTransformer (17) + : : +- ReusedExchange (15) + : +- ^ FilterExecTransformer (37) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (36) + +- ^ InputIteratorTransformer (42) + +- ReusedExchange (40) (1) FileSourceScanExecTransformer parquet spark_catalog.default.item @@ -76,98 +79,114 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#5), dynamicpruningexpression(ws_sol PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct -(9) FilterExecTransformer +(9) WholeStageCodegenTransformer (4) +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] +Arguments: false + +(10) VeloxColumnarToRow +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] + +(11) Filter [codegen id : 1] +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] +Condition : (isnotnull(ws_item_sk#3) AND might_contain(Subquery scalar-subquery#7, [id=#2], xxhash64(ws_item_sk#3, 42))) + +(12) RowToVeloxColumnar +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] + +(13) InputAdapter +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] + +(14) InputIteratorTransformer Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] -Arguments: (isnotnull(ws_item_sk#3) AND velox_might_contain(Subquery scalar-subquery#7, [id=#2], xxhash64(ws_item_sk#3, 42))) -(10) ReusedExchange [Reuses operator id: 66] +(15) ReusedExchange [Reuses operator id: 70] Output [1]: [d_date_sk#8] -(11) InputAdapter +(16) InputAdapter Input [1]: [d_date_sk#8] -(12) InputIteratorTransformer +(17) InputIteratorTransformer Input [1]: [d_date_sk#8] -(13) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#5] Right keys [1]: [d_date_sk#8] Join type: Inner Join condition: None -(14) ProjectExecTransformer +(19) ProjectExecTransformer Output [2]: [ws_item_sk#3, UnscaledValue(ws_ext_discount_amt#4) AS _pre_1#9] Input [4]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5, d_date_sk#8] -(15) FlushableHashAggregateExecTransformer +(20) FlushableHashAggregateExecTransformer Input [2]: [ws_item_sk#3, _pre_1#9] Keys [1]: [ws_item_sk#3] Functions [1]: [partial_avg(_pre_1#9)] Aggregate Attributes [2]: [sum#10, count#11] Results [3]: [ws_item_sk#3, sum#12, count#13] -(16) ProjectExecTransformer +(21) ProjectExecTransformer Output [4]: [hash(ws_item_sk#3, 42) AS hash_partition_key#14, ws_item_sk#3, sum#12, count#13] Input [3]: [ws_item_sk#3, sum#12, count#13] -(17) WholeStageCodegenTransformer (6) +(22) WholeStageCodegenTransformer (6) Input [4]: [hash_partition_key#14, ws_item_sk#3, sum#12, count#13] Arguments: false -(18) VeloxResizeBatches +(23) VeloxResizeBatches Input [4]: [hash_partition_key#14, ws_item_sk#3, sum#12, count#13] Arguments: 1024, 2147483647, 10485760 -(19) ColumnarExchange +(24) ColumnarExchange Input [4]: [hash_partition_key#14, ws_item_sk#3, sum#12, count#13] Arguments: hashpartitioning(ws_item_sk#3, 1), ENSURE_REQUIREMENTS, [ws_item_sk#3, sum#12, count#13], [plan_id=3], [shuffle_writer_type=hash] -(20) InputAdapter +(25) InputAdapter Input [3]: [ws_item_sk#3, sum#12, count#13] -(21) InputIteratorTransformer +(26) InputIteratorTransformer Input [3]: [ws_item_sk#3, sum#12, count#13] -(22) RegularHashAggregateExecTransformer +(27) RegularHashAggregateExecTransformer Input [3]: [ws_item_sk#3, sum#12, count#13] Keys [1]: [ws_item_sk#3] Functions [1]: [avg(UnscaledValue(ws_ext_discount_amt#4))] Aggregate Attributes [1]: [avg(UnscaledValue(ws_ext_discount_amt#4))#15] Results [2]: [ws_item_sk#3, avg(UnscaledValue(ws_ext_discount_amt#4))#15] -(23) ProjectExecTransformer +(28) ProjectExecTransformer Output [2]: [(1.3 * cast((avg(UnscaledValue(ws_ext_discount_amt#4))#15 / 100.0) as decimal(11,6))) AS (1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#3] Input [2]: [ws_item_sk#3, avg(UnscaledValue(ws_ext_discount_amt#4))#15] -(24) FilterExecTransformer +(29) FilterExecTransformer Input [2]: [(1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#3] Arguments: isnotnull((1.3 * avg(ws_ext_discount_amt))#16) -(25) BroadcastHashJoinExecTransformer +(30) BroadcastHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [ws_item_sk#3] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16] Input [3]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#3] -(27) WholeStageCodegenTransformer (7) +(32) WholeStageCodegenTransformer (7) Input [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16] Arguments: false -(28) ColumnarBroadcastExchange +(33) ColumnarBroadcastExchange Input [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] -(29) InputAdapter +(34) InputAdapter Input [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16] -(31) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(36) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [3]: [ws_item_sk#17, ws_ext_discount_amt#18, ws_sold_date_sk#19] Batched: true Location: InMemoryFileIndex [] @@ -175,192 +194,177 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#19), dynamicpruningexpression(ws_so PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_ext_discount_amt)] ReadSchema: struct -(32) FilterExecTransformer +(37) FilterExecTransformer Input [3]: [ws_item_sk#17, ws_ext_discount_amt#18, ws_sold_date_sk#19] Arguments: (isnotnull(ws_item_sk#17) AND isnotnull(ws_ext_discount_amt#18)) -(33) BroadcastHashJoinExecTransformer +(38) BroadcastHashJoinExecTransformer Left keys [1]: [i_item_sk#1] Right keys [1]: [ws_item_sk#17] Join type: Inner Join condition: (cast(ws_ext_discount_amt#18 as decimal(14,7)) > (1.3 * avg(ws_ext_discount_amt))#16) -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [2]: [ws_ext_discount_amt#18, ws_sold_date_sk#19] Input [5]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#17, ws_ext_discount_amt#18, ws_sold_date_sk#19] -(35) ReusedExchange [Reuses operator id: 66] +(40) ReusedExchange [Reuses operator id: 70] Output [1]: [d_date_sk#20] -(36) InputAdapter +(41) InputAdapter Input [1]: [d_date_sk#20] -(37) InputIteratorTransformer +(42) InputIteratorTransformer Input [1]: [d_date_sk#20] -(38) BroadcastHashJoinExecTransformer +(43) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#19] Right keys [1]: [d_date_sk#20] Join type: Inner Join condition: None -(39) ProjectExecTransformer +(44) ProjectExecTransformer Output [1]: [UnscaledValue(ws_ext_discount_amt#18) AS _pre_2#21] Input [3]: [ws_ext_discount_amt#18, ws_sold_date_sk#19, d_date_sk#20] -(40) FlushableHashAggregateExecTransformer +(45) FlushableHashAggregateExecTransformer Input [1]: [_pre_2#21] Keys: [] Functions [1]: [partial_sum(_pre_2#21)] Aggregate Attributes [1]: [sum#22] Results [1]: [sum#23] -(41) WholeStageCodegenTransformer (10) +(46) WholeStageCodegenTransformer (10) Input [1]: [sum#23] Arguments: false -(42) VeloxResizeBatches +(47) VeloxResizeBatches Input [1]: [sum#23] Arguments: 1024, 2147483647, 10485760 -(43) ColumnarExchange +(48) ColumnarExchange Input [1]: [sum#23] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5], [shuffle_writer_type=hash] -(44) InputAdapter +(49) InputAdapter Input [1]: [sum#23] -(45) InputIteratorTransformer +(50) InputIteratorTransformer Input [1]: [sum#23] -(46) RegularHashAggregateExecTransformer +(51) RegularHashAggregateExecTransformer Input [1]: [sum#23] Keys: [] Functions [1]: [sum(UnscaledValue(ws_ext_discount_amt#18))] Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_discount_amt#18))#24] Results [1]: [sum(UnscaledValue(ws_ext_discount_amt#18))#24] -(47) ProjectExecTransformer +(52) ProjectExecTransformer Output [1]: [MakeDecimal(sum(UnscaledValue(ws_ext_discount_amt#18))#24,17,2) AS Excess Discount Amount #25] Input [1]: [sum(UnscaledValue(ws_ext_discount_amt#18))#24] -(48) WholeStageCodegenTransformer (11) +(53) WholeStageCodegenTransformer (11) Input [1]: [Excess Discount Amount #25] Arguments: false -(49) VeloxColumnarToRow +(54) VeloxColumnarToRow Input [1]: [Excess Discount Amount #25] ===== Subqueries ===== -Subquery:1 Hosting operator id = 9 Hosting Expression = Subquery scalar-subquery#7, [id=#2] -VeloxColumnarToRow (61) -+- ^ RegularHashAggregateExecTransformer (59) - +- ^ InputIteratorTransformer (58) - +- ColumnarExchange (56) - +- VeloxResizeBatches (55) - +- ^ FlushableHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ FilterExecTransformer (51) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (50) +Subquery:1 Hosting operator id = 11 Hosting Expression = Subquery scalar-subquery#7, [id=#2] +ObjectHashAggregate (65) ++- VeloxColumnarToRow (64) + +- ColumnarExchange (63) + +- VeloxResizeBatches (62) + +- RowToVeloxColumnar (61) + +- ObjectHashAggregate (60) + +- VeloxColumnarToRow (59) + +- ^ ProjectExecTransformer (57) + +- ^ FilterExecTransformer (56) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (55) -(50) FileSourceScanExecTransformer parquet spark_catalog.default.item +(55) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#1, i_manufact_id#2] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manufact_id), EqualTo(i_manufact_id,350), IsNotNull(i_item_sk)] ReadSchema: struct -(51) FilterExecTransformer +(56) FilterExecTransformer Input [2]: [i_item_sk#1, i_manufact_id#2] Arguments: ((isnotnull(i_manufact_id#2) AND (i_manufact_id#2 = 350)) AND isnotnull(i_item_sk#1)) -(52) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#1, 42) AS _pre_3#26] +(57) ProjectExecTransformer +Output [1]: [i_item_sk#1] Input [2]: [i_item_sk#1, i_manufact_id#2] -(53) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#26] +(58) WholeStageCodegenTransformer (2) +Input [1]: [i_item_sk#1] +Arguments: false + +(59) VeloxColumnarToRow +Input [1]: [i_item_sk#1] + +(60) ObjectHashAggregate +Input [1]: [i_item_sk#1] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#26, 199, 5556, 0, 0)] -Aggregate Attributes [1]: [buf#27] -Results [1]: [buf#28] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] +Aggregate Attributes [1]: [buf#26] +Results [1]: [buf#27] -(54) WholeStageCodegenTransformer (2) -Input [1]: [buf#28] -Arguments: false +(61) RowToVeloxColumnar +Input [1]: [buf#27] -(55) VeloxResizeBatches -Input [1]: [buf#28] +(62) VeloxResizeBatches +Input [1]: [buf#27] Arguments: 1024, 2147483647, 10485760 -(56) ColumnarExchange -Input [1]: [buf#28] +(63) ColumnarExchange +Input [1]: [buf#27] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6], [shuffle_writer_type=hash] -(57) InputAdapter -Input [1]: [buf#28] - -(58) InputIteratorTransformer -Input [1]: [buf#28] +(64) VeloxColumnarToRow +Input [1]: [buf#27] -(59) RegularHashAggregateExecTransformer -Input [1]: [buf#28] +(65) ObjectHashAggregate +Input [1]: [buf#27] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#29] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#29 AS bloomFilter#30] - -(60) WholeStageCodegenTransformer (3) -Input [1]: [bloomFilter#30] -Arguments: false - -(61) VeloxColumnarToRow -Input [1]: [bloomFilter#30] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#28] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#28 AS bloomFilter#29] Subquery:2 Hosting operator id = 8 Hosting Expression = ws_sold_date_sk#5 IN dynamicpruning#6 -ColumnarBroadcastExchange (66) -+- ^ ProjectExecTransformer (64) - +- ^ FilterExecTransformer (63) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (62) +ColumnarBroadcastExchange (70) ++- ^ ProjectExecTransformer (68) + +- ^ FilterExecTransformer (67) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (66) -(62) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#8, d_date#31] +(66) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [2]: [d_date_sk#8, d_date#30] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-01-27), LessThanOrEqual(d_date,2000-04-26), IsNotNull(d_date_sk)] ReadSchema: struct -(63) FilterExecTransformer -Input [2]: [d_date_sk#8, d_date#31] -Arguments: (((isnotnull(d_date#31) AND (d_date#31 >= 2000-01-27)) AND (d_date#31 <= 2000-04-26)) AND isnotnull(d_date_sk#8)) +(67) FilterExecTransformer +Input [2]: [d_date_sk#8, d_date#30] +Arguments: (((isnotnull(d_date#30) AND (d_date#30 >= 2000-01-27)) AND (d_date#30 <= 2000-04-26)) AND isnotnull(d_date_sk#8)) -(64) ProjectExecTransformer +(68) ProjectExecTransformer Output [1]: [d_date_sk#8] -Input [2]: [d_date_sk#8, d_date#31] +Input [2]: [d_date_sk#8, d_date#30] -(65) WholeStageCodegenTransformer (4) +(69) WholeStageCodegenTransformer (3) Input [1]: [d_date_sk#8] Arguments: false -(66) ColumnarBroadcastExchange +(70) ColumnarBroadcastExchange Input [1]: [d_date_sk#8] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:3 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#7, [id=#2] -VeloxColumnarToRow (61) -+- ^ RegularHashAggregateExecTransformer (59) - +- ^ InputIteratorTransformer (58) - +- ColumnarExchange (56) - +- VeloxResizeBatches (55) - +- ^ FlushableHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ FilterExecTransformer (51) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (50) - - -Subquery:4 Hosting operator id = 31 Hosting Expression = ws_sold_date_sk#19 IN dynamicpruning#6 +Subquery:3 Hosting operator id = 36 Hosting Expression = ws_sold_date_sk#19 IN dynamicpruning#6 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/simplified.txt index 15ffbe4ce83..1d96ba9c5f2 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q92.sf100/simplified.txt @@ -37,40 +37,33 @@ VeloxColumnarToRow FlushableHashAggregateExecTransformer [ws_item_sk,_pre_x] [sum,count,sum,count,sum,count] ProjectExecTransformer [ws_item_sk,ws_ext_discount_amt] BroadcastHashJoinExecTransformer [ws_sold_date_sk,d_date_sk] - FilterExecTransformer [ws_item_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (3) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (2) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] - FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_ext_discount_amt,ws_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (4) - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (3) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ws_item_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 199, 5556, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (2) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_manufact_id,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_manufact_id,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_manufact_id] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_ext_discount_amt,ws_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #5 + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] InputIteratorTransformer InputAdapter ReusedExchange [d_date_sk] #5 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt index 95d1d08e432..e6413d2cff9 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt @@ -1,50 +1,53 @@ == Physical Plan == -VeloxColumnarToRow (59) -+- ^ ProjectExecTransformer (57) - +- ^ RegularHashAggregateExecTransformer (56) - +- ^ RegularHashAggregateExecTransformer (55) - +- ^ RegularHashAggregateExecTransformer (54) - +- ^ RegularHashAggregateExecTransformer (53) - +- ^ ProjectExecTransformer (52) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51) - :- ^ ProjectExecTransformer (43) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (42) - : :- ^ ProjectExecTransformer (34) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (33) - : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (25) - : : : :- ^ ProjectExecTransformer (17) - : : : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (16) - : : : : :- ^ InputIteratorTransformer (8) - : : : : : +- ColumnarExchange (6) - : : : : : +- VeloxResizeBatches (5) - : : : : : +- ^ ProjectExecTransformer (3) - : : : : : +- ^ FilterExecTransformer (2) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (1) - : : : : +- ^ InputIteratorTransformer (15) - : : : : +- ColumnarExchange (13) - : : : : +- VeloxResizeBatches (12) - : : : : +- ^ ProjectExecTransformer (10) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (9) - : : : +- ^ InputIteratorTransformer (24) - : : : +- ColumnarExchange (22) - : : : +- VeloxResizeBatches (21) - : : : +- ^ ProjectExecTransformer (19) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (18) - : : +- ^ InputIteratorTransformer (32) - : : +- ColumnarBroadcastExchange (30) - : : +- ^ ProjectExecTransformer (28) - : : +- ^ FilterExecTransformer (27) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (26) - : +- ^ InputIteratorTransformer (41) - : +- ColumnarBroadcastExchange (39) - : +- ^ ProjectExecTransformer (37) - : +- ^ FilterExecTransformer (36) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (35) - +- ^ InputIteratorTransformer (50) - +- ColumnarBroadcastExchange (48) - +- ^ ProjectExecTransformer (46) - +- ^ FilterExecTransformer (45) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (44) +VeloxColumnarToRow (64) ++- ^ ProjectExecTransformer (62) + +- ^ RegularHashAggregateExecTransformer (61) + +- ^ RegularHashAggregateExecTransformer (60) + +- ^ RegularHashAggregateExecTransformer (59) + +- ^ RegularHashAggregateExecTransformer (58) + +- ^ ProjectExecTransformer (57) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (56) + :- ^ ProjectExecTransformer (48) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (47) + : :- ^ ProjectExecTransformer (39) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (38) + : : :- ^ ShuffledHashJoinExecTransformer LeftAnti BuildRight (30) + : : : :- ^ ProjectExecTransformer (22) + : : : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (21) + : : : : :- ^ InputIteratorTransformer (13) + : : : : : +- ColumnarExchange (11) + : : : : : +- VeloxResizeBatches (10) + : : : : : +- ^ ProjectExecTransformer (8) + : : : : : +- ^ InputIteratorTransformer (7) + : : : : : +- RowToVeloxColumnar (5) + : : : : : +- * Filter (4) + : : : : : +- VeloxColumnarToRow (3) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (1) + : : : : +- ^ InputIteratorTransformer (20) + : : : : +- ColumnarExchange (18) + : : : : +- VeloxResizeBatches (17) + : : : : +- ^ ProjectExecTransformer (15) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (14) + : : : +- ^ InputIteratorTransformer (29) + : : : +- ColumnarExchange (27) + : : : +- VeloxResizeBatches (26) + : : : +- ^ ProjectExecTransformer (24) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (23) + : : +- ^ InputIteratorTransformer (37) + : : +- ColumnarBroadcastExchange (35) + : : +- ^ ProjectExecTransformer (33) + : : +- ^ FilterExecTransformer (32) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (31) + : +- ^ InputIteratorTransformer (46) + : +- ColumnarBroadcastExchange (44) + : +- ^ ProjectExecTransformer (42) + : +- ^ FilterExecTransformer (41) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (40) + +- ^ InputIteratorTransformer (55) + +- ColumnarBroadcastExchange (53) + +- ^ ProjectExecTransformer (51) + +- ^ FilterExecTransformer (50) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (49) (1) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales @@ -54,494 +57,465 @@ Location: CatalogFileIndex [{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (4) +Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] +Arguments: false + +(3) VeloxColumnarToRow +Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] + +(4) Filter [codegen id : 1] +Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] +Condition : (((((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ws_ship_addr_sk#2, 42))) AND might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ws_web_site_sk#3, 42))) AND might_contain(Subquery scalar-subquery#11, [id=#3], xxhash64(ws_ship_date_sk#1, 42))) + +(5) RowToVeloxColumnar Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] -Arguments: (((((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND velox_might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ws_ship_addr_sk#2, 42))) AND velox_might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ws_web_site_sk#3, 42))) AND velox_might_contain(Subquery scalar-subquery#11, [id=#3], xxhash64(ws_ship_date_sk#1, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] + +(7) InputIteratorTransformer +Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] + +(8) ProjectExecTransformer Output [8]: [hash(ws_order_number#5, 42) AS hash_partition_key#12, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ws_sold_date_sk#8] -(4) WholeStageCodegenTransformer (7) +(9) WholeStageCodegenTransformer (5) Input [8]: [hash_partition_key#12, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [8]: [hash_partition_key#12, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [8]: [hash_partition_key#12, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Arguments: hashpartitioning(ws_order_number#5, 1), ENSURE_REQUIREMENTS, [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7], [plan_id=4], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [3]: [ws_warehouse_sk#13, ws_order_number#14, ws_sold_date_sk#15] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_sales] ReadSchema: struct -(10) ProjectExecTransformer +(15) ProjectExecTransformer Output [3]: [hash(ws_order_number#14, 42) AS hash_partition_key#16, ws_warehouse_sk#13, ws_order_number#14] Input [3]: [ws_warehouse_sk#13, ws_order_number#14, ws_sold_date_sk#15] -(11) WholeStageCodegenTransformer (8) +(16) WholeStageCodegenTransformer (6) Input [3]: [hash_partition_key#16, ws_warehouse_sk#13, ws_order_number#14] Arguments: false -(12) VeloxResizeBatches +(17) VeloxResizeBatches Input [3]: [hash_partition_key#16, ws_warehouse_sk#13, ws_order_number#14] Arguments: 1024, 2147483647, 10485760 -(13) ColumnarExchange +(18) ColumnarExchange Input [3]: [hash_partition_key#16, ws_warehouse_sk#13, ws_order_number#14] Arguments: hashpartitioning(ws_order_number#14, 1), ENSURE_REQUIREMENTS, [ws_warehouse_sk#13, ws_order_number#14], [plan_id=5], [shuffle_writer_type=hash] -(14) InputAdapter +(19) InputAdapter Input [2]: [ws_warehouse_sk#13, ws_order_number#14] -(15) InputIteratorTransformer +(20) InputIteratorTransformer Input [2]: [ws_warehouse_sk#13, ws_order_number#14] -(16) ShuffledHashJoinExecTransformer +(21) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#5] Right keys [1]: [ws_order_number#14] Join type: LeftSemi Join condition: NOT (ws_warehouse_sk#4 = ws_warehouse_sk#13) -(17) ProjectExecTransformer +(22) ProjectExecTransformer Output [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -(18) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns +(23) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns Output [2]: [wr_order_number#17, wr_returned_date_sk#18] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_returns] ReadSchema: struct -(19) ProjectExecTransformer +(24) ProjectExecTransformer Output [2]: [hash(wr_order_number#17, 42) AS hash_partition_key#19, wr_order_number#17] Input [2]: [wr_order_number#17, wr_returned_date_sk#18] -(20) WholeStageCodegenTransformer (9) +(25) WholeStageCodegenTransformer (7) Input [2]: [hash_partition_key#19, wr_order_number#17] Arguments: false -(21) VeloxResizeBatches +(26) VeloxResizeBatches Input [2]: [hash_partition_key#19, wr_order_number#17] Arguments: 1024, 2147483647, 10485760 -(22) ColumnarExchange +(27) ColumnarExchange Input [2]: [hash_partition_key#19, wr_order_number#17] Arguments: hashpartitioning(wr_order_number#17, 1), ENSURE_REQUIREMENTS, [wr_order_number#17], [plan_id=6], [shuffle_writer_type=hash] -(23) InputAdapter +(28) InputAdapter Input [1]: [wr_order_number#17] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [1]: [wr_order_number#17] -(25) ShuffledHashJoinExecTransformer +(30) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#5] Right keys [1]: [wr_order_number#17] Join type: LeftAnti Join condition: None -(26) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(31) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct -(27) FilterExecTransformer +(32) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_state#21] Arguments: ((isnotnull(ca_state#21) AND (ca_state#21 = IL)) AND isnotnull(ca_address_sk#20)) -(28) ProjectExecTransformer +(33) ProjectExecTransformer Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_state#21] -(29) WholeStageCodegenTransformer (10) +(34) WholeStageCodegenTransformer (8) Input [1]: [ca_address_sk#20] Arguments: false -(30) ColumnarBroadcastExchange +(35) ColumnarBroadcastExchange Input [1]: [ca_address_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(31) InputAdapter +(36) InputAdapter Input [1]: [ca_address_sk#20] -(32) InputIteratorTransformer +(37) InputIteratorTransformer Input [1]: [ca_address_sk#20] -(33) BroadcastHashJoinExecTransformer +(38) BroadcastHashJoinExecTransformer Left keys [1]: [ws_ship_addr_sk#2] Right keys [1]: [ca_address_sk#20] Join type: Inner Join condition: None -(34) ProjectExecTransformer +(39) ProjectExecTransformer Output [5]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ca_address_sk#20] -(35) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(40) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#22, web_company_name#23] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct -(36) FilterExecTransformer +(41) FilterExecTransformer Input [2]: [web_site_sk#22, web_company_name#23] Arguments: ((isnotnull(web_company_name#23) AND (web_company_name#23 = pri )) AND isnotnull(web_site_sk#22)) -(37) ProjectExecTransformer +(42) ProjectExecTransformer Output [1]: [web_site_sk#22] Input [2]: [web_site_sk#22, web_company_name#23] -(38) WholeStageCodegenTransformer (11) +(43) WholeStageCodegenTransformer (9) Input [1]: [web_site_sk#22] Arguments: false -(39) ColumnarBroadcastExchange +(44) ColumnarBroadcastExchange Input [1]: [web_site_sk#22] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -(40) InputAdapter +(45) InputAdapter Input [1]: [web_site_sk#22] -(41) InputIteratorTransformer +(46) InputIteratorTransformer Input [1]: [web_site_sk#22] -(42) BroadcastHashJoinExecTransformer +(47) BroadcastHashJoinExecTransformer Left keys [1]: [ws_web_site_sk#3] Right keys [1]: [web_site_sk#22] Join type: Inner Join condition: None -(43) ProjectExecTransformer +(48) ProjectExecTransformer Output [4]: [ws_ship_date_sk#1, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [6]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, web_site_sk#22] -(44) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(49) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#24, d_date#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(45) FilterExecTransformer +(50) FilterExecTransformer Input [2]: [d_date_sk#24, d_date#25] Arguments: (((isnotnull(d_date#25) AND (d_date#25 >= 1999-02-01)) AND (d_date#25 <= 1999-04-02)) AND isnotnull(d_date_sk#24)) -(46) ProjectExecTransformer +(51) ProjectExecTransformer Output [1]: [d_date_sk#24] Input [2]: [d_date_sk#24, d_date#25] -(47) WholeStageCodegenTransformer (12) +(52) WholeStageCodegenTransformer (10) Input [1]: [d_date_sk#24] Arguments: false -(48) ColumnarBroadcastExchange +(53) ColumnarBroadcastExchange Input [1]: [d_date_sk#24] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -(49) InputAdapter +(54) InputAdapter Input [1]: [d_date_sk#24] -(50) InputIteratorTransformer +(55) InputIteratorTransformer Input [1]: [d_date_sk#24] -(51) BroadcastHashJoinExecTransformer +(56) BroadcastHashJoinExecTransformer Left keys [1]: [ws_ship_date_sk#1] Right keys [1]: [d_date_sk#24] Join type: Inner Join condition: None -(52) ProjectExecTransformer +(57) ProjectExecTransformer Output [3]: [ws_order_number#5, UnscaledValue(ws_ext_ship_cost#6) AS _pre_1#26, UnscaledValue(ws_net_profit#7) AS _pre_2#27] Input [5]: [ws_ship_date_sk#1, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, d_date_sk#24] -(53) RegularHashAggregateExecTransformer +(58) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#5, _pre_1#26, _pre_2#27] Keys [1]: [ws_order_number#5] Functions [2]: [partial_sum(_pre_1#26), partial_sum(_pre_2#27)] Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29] Results [3]: [ws_order_number#5, sum#30, sum#31] -(54) RegularHashAggregateExecTransformer +(59) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#5, sum#30, sum#31] Keys [1]: [ws_order_number#5] Functions [2]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(UnscaledValue(ws_net_profit#7))] Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29] Results [3]: [ws_order_number#5, sum#30, sum#31] -(55) RegularHashAggregateExecTransformer +(60) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#5, sum#30, sum#31] Keys: [] Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(UnscaledValue(ws_net_profit#7)), partial_count(distinct ws_order_number#5)] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29, count(ws_order_number#5)#32] Results [3]: [sum#30, sum#31, count#33] -(56) RegularHashAggregateExecTransformer +(61) RegularHashAggregateExecTransformer Input [3]: [sum#30, sum#31, count#33] Keys: [] Functions [3]: [sum(UnscaledValue(ws_ext_ship_cost#6)), sum(UnscaledValue(ws_net_profit#7)), count(distinct ws_order_number#5)] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29, count(ws_order_number#5)#32] Results [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29, count(ws_order_number#5)#32] -(57) ProjectExecTransformer +(62) ProjectExecTransformer Output [3]: [count(ws_order_number#5)#32 AS order count #34, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#6))#28,17,2) AS total shipping cost #35, MakeDecimal(sum(UnscaledValue(ws_net_profit#7))#29,17,2) AS total net profit #36] Input [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, sum(UnscaledValue(ws_net_profit#7))#29, count(ws_order_number#5)#32] -(58) WholeStageCodegenTransformer (13) +(63) WholeStageCodegenTransformer (11) Input [3]: [order count #34, total shipping cost #35, total net profit #36] Arguments: false -(59) VeloxColumnarToRow +(64) VeloxColumnarToRow Input [3]: [order count #34, total shipping cost #35, total net profit #36] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (71) -+- ^ RegularHashAggregateExecTransformer (69) - +- ^ InputIteratorTransformer (68) - +- ColumnarExchange (66) - +- VeloxResizeBatches (65) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ FilterExecTransformer (61) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (60) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#9, [id=#1] +ObjectHashAggregate (75) ++- VeloxColumnarToRow (74) + +- ColumnarExchange (73) + +- VeloxResizeBatches (72) + +- RowToVeloxColumnar (71) + +- ObjectHashAggregate (70) + +- VeloxColumnarToRow (69) + +- ^ ProjectExecTransformer (67) + +- ^ FilterExecTransformer (66) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (65) -(60) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(65) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct -(61) FilterExecTransformer +(66) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_state#21] Arguments: ((isnotnull(ca_state#21) AND (ca_state#21 = IL)) AND isnotnull(ca_address_sk#20)) -(62) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#20, 42) AS _pre_3#37] +(67) ProjectExecTransformer +Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_state#21] -(63) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#37] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#37, 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [buf#38] -Results [1]: [buf#39] - -(64) WholeStageCodegenTransformer (1) -Input [1]: [buf#39] +(68) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#20] Arguments: false -(65) VeloxResizeBatches -Input [1]: [buf#39] -Arguments: 1024, 2147483647, 10485760 - -(66) ColumnarExchange -Input [1]: [buf#39] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] - -(67) InputAdapter -Input [1]: [buf#39] - -(68) InputIteratorTransformer -Input [1]: [buf#39] +(69) VeloxColumnarToRow +Input [1]: [ca_address_sk#20] -(69) RegularHashAggregateExecTransformer -Input [1]: [buf#39] +(70) ObjectHashAggregate +Input [1]: [ca_address_sk#20] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#40] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#40 AS bloomFilter#41] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [buf#37] +Results [1]: [buf#38] -(70) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#41] -Arguments: false +(71) RowToVeloxColumnar +Input [1]: [buf#38] -(71) VeloxColumnarToRow -Input [1]: [bloomFilter#41] +(72) VeloxResizeBatches +Input [1]: [buf#38] +Arguments: 1024, 2147483647, 10485760 -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (83) -+- ^ RegularHashAggregateExecTransformer (81) - +- ^ InputIteratorTransformer (80) - +- ColumnarExchange (78) - +- VeloxResizeBatches (77) - +- ^ FlushableHashAggregateExecTransformer (75) - +- ^ ProjectExecTransformer (74) - +- ^ FilterExecTransformer (73) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (72) +(73) ColumnarExchange +Input [1]: [buf#38] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] +(74) VeloxColumnarToRow +Input [1]: [buf#38] -(72) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(75) ObjectHashAggregate +Input [1]: [buf#38] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#39] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 333176, 0, 0)#39 AS bloomFilter#40] + +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#10, [id=#2] +ObjectHashAggregate (86) ++- VeloxColumnarToRow (85) + +- ColumnarExchange (84) + +- VeloxResizeBatches (83) + +- RowToVeloxColumnar (82) + +- ObjectHashAggregate (81) + +- VeloxColumnarToRow (80) + +- ^ ProjectExecTransformer (78) + +- ^ FilterExecTransformer (77) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (76) + + +(76) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#22, web_company_name#23] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct -(73) FilterExecTransformer +(77) FilterExecTransformer Input [2]: [web_site_sk#22, web_company_name#23] Arguments: ((isnotnull(web_company_name#23) AND (web_company_name#23 = pri )) AND isnotnull(web_site_sk#22)) -(74) ProjectExecTransformer -Output [1]: [xxhash64(web_site_sk#22, 42) AS _pre_4#42] +(78) ProjectExecTransformer +Output [1]: [web_site_sk#22] Input [2]: [web_site_sk#22, web_company_name#23] -(75) FlushableHashAggregateExecTransformer -Input [1]: [_pre_4#42] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_4#42, 4, 144, 0, 0)] -Aggregate Attributes [1]: [buf#43] -Results [1]: [buf#44] - -(76) WholeStageCodegenTransformer (3) -Input [1]: [buf#44] +(79) WholeStageCodegenTransformer (2) +Input [1]: [web_site_sk#22] Arguments: false -(77) VeloxResizeBatches -Input [1]: [buf#44] -Arguments: 1024, 2147483647, 10485760 - -(78) ColumnarExchange -Input [1]: [buf#44] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] - -(79) InputAdapter -Input [1]: [buf#44] - -(80) InputIteratorTransformer -Input [1]: [buf#44] +(80) VeloxColumnarToRow +Input [1]: [web_site_sk#22] -(81) RegularHashAggregateExecTransformer -Input [1]: [buf#44] +(81) ObjectHashAggregate +Input [1]: [web_site_sk#22] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)#45] -Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)#45 AS bloomFilter#46] +Functions [1]: [partial_bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [buf#41] +Results [1]: [buf#42] -(82) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#46] -Arguments: false +(82) RowToVeloxColumnar +Input [1]: [buf#42] -(83) VeloxColumnarToRow -Input [1]: [bloomFilter#46] +(83) VeloxResizeBatches +Input [1]: [buf#42] +Arguments: 1024, 2147483647, 10485760 -Subquery:3 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#11, [id=#3] -VeloxColumnarToRow (95) -+- ^ RegularHashAggregateExecTransformer (93) - +- ^ InputIteratorTransformer (92) - +- ColumnarExchange (90) - +- VeloxResizeBatches (89) - +- ^ FlushableHashAggregateExecTransformer (87) - +- ^ ProjectExecTransformer (86) - +- ^ FilterExecTransformer (85) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (84) +(84) ColumnarExchange +Input [1]: [buf#42] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] +(85) VeloxColumnarToRow +Input [1]: [buf#42] -(84) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(86) ObjectHashAggregate +Input [1]: [buf#42] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)#43] +Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 144, 0, 0)#43 AS bloomFilter#44] + +Subquery:3 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#11, [id=#3] +ObjectHashAggregate (97) ++- VeloxColumnarToRow (96) + +- ColumnarExchange (95) + +- VeloxResizeBatches (94) + +- RowToVeloxColumnar (93) + +- ObjectHashAggregate (92) + +- VeloxColumnarToRow (91) + +- ^ ProjectExecTransformer (89) + +- ^ FilterExecTransformer (88) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) + + +(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#24, d_date#25] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(85) FilterExecTransformer +(88) FilterExecTransformer Input [2]: [d_date_sk#24, d_date#25] Arguments: (((isnotnull(d_date#25) AND (d_date#25 >= 1999-02-01)) AND (d_date#25 <= 1999-04-02)) AND isnotnull(d_date_sk#24)) -(86) ProjectExecTransformer -Output [1]: [xxhash64(d_date_sk#24, 42) AS _pre_5#47] +(89) ProjectExecTransformer +Output [1]: [d_date_sk#24] Input [2]: [d_date_sk#24, d_date#25] -(87) FlushableHashAggregateExecTransformer -Input [1]: [_pre_5#47] +(90) WholeStageCodegenTransformer (3) +Input [1]: [d_date_sk#24] +Arguments: false + +(91) VeloxColumnarToRow +Input [1]: [d_date_sk#24] + +(92) ObjectHashAggregate +Input [1]: [d_date_sk#24] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_5#47, 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [buf#48] -Results [1]: [buf#49] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [buf#45] +Results [1]: [buf#46] -(88) WholeStageCodegenTransformer (5) -Input [1]: [buf#49] -Arguments: false +(93) RowToVeloxColumnar +Input [1]: [buf#46] -(89) VeloxResizeBatches -Input [1]: [buf#49] +(94) VeloxResizeBatches +Input [1]: [buf#46] Arguments: 1024, 2147483647, 10485760 -(90) ColumnarExchange -Input [1]: [buf#49] +(95) ColumnarExchange +Input [1]: [buf#46] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(91) InputAdapter -Input [1]: [buf#49] +(96) VeloxColumnarToRow +Input [1]: [buf#46] -(92) InputIteratorTransformer -Input [1]: [buf#49] - -(93) RegularHashAggregateExecTransformer -Input [1]: [buf#49] +(97) ObjectHashAggregate +Input [1]: [buf#46] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#50] -Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#50 AS bloomFilter#51] - -(94) WholeStageCodegenTransformer (6) -Input [1]: [bloomFilter#51] -Arguments: false - -(95) VeloxColumnarToRow -Input [1]: [bloomFilter#51] - -Subquery:4 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (71) -+- ^ RegularHashAggregateExecTransformer (69) - +- ^ InputIteratorTransformer (68) - +- ColumnarExchange (66) - +- VeloxResizeBatches (65) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ FilterExecTransformer (61) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (60) - - -Subquery:5 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (83) -+- ^ RegularHashAggregateExecTransformer (81) - +- ^ InputIteratorTransformer (80) - +- ColumnarExchange (78) - +- VeloxResizeBatches (77) - +- ^ FlushableHashAggregateExecTransformer (75) - +- ^ ProjectExecTransformer (74) - +- ^ FilterExecTransformer (73) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (72) - - -Subquery:6 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#11, [id=#3] -VeloxColumnarToRow (95) -+- ^ RegularHashAggregateExecTransformer (93) - +- ^ InputIteratorTransformer (92) - +- ColumnarExchange (90) - +- VeloxResizeBatches (89) - +- ^ FlushableHashAggregateExecTransformer (87) - +- ^ ProjectExecTransformer (86) - +- ^ FilterExecTransformer (85) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (84) - +Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#47] +Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 1141755, 0, 0)#47 AS bloomFilter#48] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt index 547b6e44685..0ba5c7ff66e 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt @@ -1,5 +1,5 @@ VeloxColumnarToRow - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))] RegularHashAggregateExecTransformer [sum,sum,count] [sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count] RegularHashAggregateExecTransformer [ws_order_number] [sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count] @@ -18,120 +18,85 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ws_order_number,ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_warehouse_sk,ws_ext_ship_cost,ws_net_profit] #1 VeloxResizeBatches - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (5) ProjectExecTransformer [ws_order_number,ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_warehouse_sk,ws_ext_ship_cost,ws_net_profit] - FilterExecTransformer [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #2 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [web_site_sk] - FilterExecTransformer [web_company_name,web_site_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_warehouse_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit,ws_sold_date_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #2 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_state,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #3 VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [web_site_sk] - FilterExecTransformer [web_company_name,web_site_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [web_site_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [web_site_sk] + FilterExecTransformer [web_company_name,web_site_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + RowToVeloxColumnar + ObjectHashAggregate [d_date_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_warehouse_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit,ws_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarExchange [ws_order_number,ws_warehouse_sk] #5 VeloxResizeBatches - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (6) ProjectExecTransformer [ws_order_number,ws_warehouse_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_warehouse_sk,ws_order_number,ws_sold_date_sk] InputIteratorTransformer InputAdapter ColumnarExchange [wr_order_number] #6 VeloxResizeBatches - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (7) ProjectExecTransformer [wr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_order_number,wr_returned_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #7 - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (8) ProjectExecTransformer [ca_address_sk] FilterExecTransformer [ca_state,ca_address_sk] FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (9) ProjectExecTransformer [web_site_sk] FilterExecTransformer [web_company_name,web_site_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (10) ProjectExecTransformer [d_date_sk] FilterExecTransformer [d_date,d_date_sk] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt index db8f1b9518f..d538d995bf4 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt @@ -1,62 +1,65 @@ == Physical Plan == -VeloxColumnarToRow (74) -+- ^ ProjectExecTransformer (72) - +- ^ RegularHashAggregateExecTransformer (71) - +- ^ RegularHashAggregateExecTransformer (70) - +- ^ RegularHashAggregateExecTransformer (69) - +- ^ RegularHashAggregateExecTransformer (68) - +- ^ ProjectExecTransformer (67) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (66) - :- ^ ProjectExecTransformer (58) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) - : :- ^ ProjectExecTransformer (49) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (48) - : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (40) - : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (22) - : : : : :- ^ InputIteratorTransformer (8) - : : : : : +- ColumnarExchange (6) - : : : : : +- VeloxResizeBatches (5) - : : : : : +- ^ ProjectExecTransformer (3) - : : : : : +- ^ FilterExecTransformer (2) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (1) - : : : : +- ^ ProjectExecTransformer (21) - : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (20) - : : : : :- ^ InputIteratorTransformer (16) - : : : : : +- ColumnarExchange (14) - : : : : : +- VeloxResizeBatches (13) - : : : : : +- ^ ProjectExecTransformer (11) - : : : : : +- ^ FilterExecTransformer (10) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (9) - : : : : +- ^ InputIteratorTransformer (19) - : : : : +- ReusedExchange (17) - : : : +- ^ ProjectExecTransformer (39) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (38) - : : : :- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (34) - : : : : :- ^ InputIteratorTransformer (30) - : : : : : +- ColumnarExchange (28) - : : : : : +- VeloxResizeBatches (27) - : : : : : +- ^ ProjectExecTransformer (25) - : : : : : +- ^ FilterExecTransformer (24) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (23) - : : : : +- ^ InputIteratorTransformer (33) - : : : : +- ReusedExchange (31) - : : : +- ^ InputIteratorTransformer (37) - : : : +- ReusedExchange (35) - : : +- ^ InputIteratorTransformer (47) - : : +- ColumnarBroadcastExchange (45) - : : +- ^ ProjectExecTransformer (43) - : : +- ^ FilterExecTransformer (42) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (41) - : +- ^ InputIteratorTransformer (56) - : +- ColumnarBroadcastExchange (54) - : +- ^ ProjectExecTransformer (52) - : +- ^ FilterExecTransformer (51) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (50) - +- ^ InputIteratorTransformer (65) - +- ColumnarBroadcastExchange (63) - +- ^ ProjectExecTransformer (61) - +- ^ FilterExecTransformer (60) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (59) +VeloxColumnarToRow (79) ++- ^ ProjectExecTransformer (77) + +- ^ RegularHashAggregateExecTransformer (76) + +- ^ RegularHashAggregateExecTransformer (75) + +- ^ RegularHashAggregateExecTransformer (74) + +- ^ RegularHashAggregateExecTransformer (73) + +- ^ ProjectExecTransformer (72) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (71) + :- ^ ProjectExecTransformer (63) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) + : :- ^ ProjectExecTransformer (54) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (53) + : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (45) + : : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (27) + : : : : :- ^ InputIteratorTransformer (13) + : : : : : +- ColumnarExchange (11) + : : : : : +- VeloxResizeBatches (10) + : : : : : +- ^ ProjectExecTransformer (8) + : : : : : +- ^ InputIteratorTransformer (7) + : : : : : +- RowToVeloxColumnar (5) + : : : : : +- * Filter (4) + : : : : : +- VeloxColumnarToRow (3) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (1) + : : : : +- ^ ProjectExecTransformer (26) + : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (25) + : : : : :- ^ InputIteratorTransformer (21) + : : : : : +- ColumnarExchange (19) + : : : : : +- VeloxResizeBatches (18) + : : : : : +- ^ ProjectExecTransformer (16) + : : : : : +- ^ FilterExecTransformer (15) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (14) + : : : : +- ^ InputIteratorTransformer (24) + : : : : +- ReusedExchange (22) + : : : +- ^ ProjectExecTransformer (44) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (43) + : : : :- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (39) + : : : : :- ^ InputIteratorTransformer (35) + : : : : : +- ColumnarExchange (33) + : : : : : +- VeloxResizeBatches (32) + : : : : : +- ^ ProjectExecTransformer (30) + : : : : : +- ^ FilterExecTransformer (29) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (28) + : : : : +- ^ InputIteratorTransformer (38) + : : : : +- ReusedExchange (36) + : : : +- ^ InputIteratorTransformer (42) + : : : +- ReusedExchange (40) + : : +- ^ InputIteratorTransformer (52) + : : +- ColumnarBroadcastExchange (50) + : : +- ^ ProjectExecTransformer (48) + : : +- ^ FilterExecTransformer (47) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (46) + : +- ^ InputIteratorTransformer (61) + : +- ColumnarBroadcastExchange (59) + : +- ^ ProjectExecTransformer (57) + : +- ^ FilterExecTransformer (56) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (55) + +- ^ InputIteratorTransformer (70) + +- ColumnarBroadcastExchange (68) + +- ^ ProjectExecTransformer (66) + +- ^ FilterExecTransformer (65) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (64) (1) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales @@ -66,553 +69,524 @@ Location: CatalogFileIndex [{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (4) +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] +Arguments: false + +(3) VeloxColumnarToRow +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] + +(4) Filter [codegen id : 1] +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] +Condition : (((((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND might_contain(Subquery scalar-subquery#8, [id=#1], xxhash64(ws_ship_addr_sk#2, 42))) AND might_contain(Subquery scalar-subquery#9, [id=#2], xxhash64(ws_web_site_sk#3, 42))) AND might_contain(Subquery scalar-subquery#10, [id=#3], xxhash64(ws_ship_date_sk#1, 42))) + +(5) RowToVeloxColumnar Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] -Arguments: (((((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND velox_might_contain(Subquery scalar-subquery#8, [id=#1], xxhash64(ws_ship_addr_sk#2, 42))) AND velox_might_contain(Subquery scalar-subquery#9, [id=#2], xxhash64(ws_web_site_sk#3, 42))) AND velox_might_contain(Subquery scalar-subquery#10, [id=#3], xxhash64(ws_ship_date_sk#1, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] + +(7) InputIteratorTransformer +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] + +(8) ProjectExecTransformer Output [7]: [hash(ws_order_number#4, 42) AS hash_partition_key#11, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ws_sold_date_sk#7] -(4) WholeStageCodegenTransformer (7) +(9) WholeStageCodegenTransformer (5) Input [7]: [hash_partition_key#11, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [7]: [hash_partition_key#11, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [7]: [hash_partition_key#11, ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Arguments: hashpartitioning(ws_order_number#4, 1), ENSURE_REQUIREMENTS, [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6], [plan_id=4], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [3]: [ws_warehouse_sk#12, ws_order_number#13, ws_sold_date_sk#14] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_order_number), IsNotNull(ws_warehouse_sk)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [3]: [ws_warehouse_sk#12, ws_order_number#13, ws_sold_date_sk#14] Arguments: (isnotnull(ws_order_number#13) AND isnotnull(ws_warehouse_sk#12)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [3]: [hash(ws_order_number#13, 42) AS hash_partition_key#15, ws_warehouse_sk#12, ws_order_number#13] Input [3]: [ws_warehouse_sk#12, ws_order_number#13, ws_sold_date_sk#14] -(12) WholeStageCodegenTransformer (8) +(17) WholeStageCodegenTransformer (6) Input [3]: [hash_partition_key#15, ws_warehouse_sk#12, ws_order_number#13] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [3]: [hash_partition_key#15, ws_warehouse_sk#12, ws_order_number#13] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [3]: [hash_partition_key#15, ws_warehouse_sk#12, ws_order_number#13] Arguments: hashpartitioning(ws_order_number#13, 1), ENSURE_REQUIREMENTS, [ws_warehouse_sk#12, ws_order_number#13], [plan_id=5], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [2]: [ws_warehouse_sk#12, ws_order_number#13] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [2]: [ws_warehouse_sk#12, ws_order_number#13] -(17) ReusedExchange [Reuses operator id: 14] +(22) ReusedExchange [Reuses operator id: 19] Output [2]: [ws_warehouse_sk#16, ws_order_number#17] -(18) InputAdapter +(23) InputAdapter Input [2]: [ws_warehouse_sk#16, ws_order_number#17] -(19) InputIteratorTransformer +(24) InputIteratorTransformer Input [2]: [ws_warehouse_sk#16, ws_order_number#17] -(20) ShuffledHashJoinExecTransformer +(25) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#13] Right keys [1]: [ws_order_number#17] Join type: Inner Join condition: NOT (ws_warehouse_sk#12 = ws_warehouse_sk#16) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [1]: [ws_order_number#13] Input [4]: [ws_warehouse_sk#12, ws_order_number#13, ws_warehouse_sk#16, ws_order_number#17] -(22) ShuffledHashJoinExecTransformer +(27) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#4] Right keys [1]: [ws_order_number#13] Join type: LeftSemi Join condition: None -(23) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns +(28) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns Output [2]: [wr_order_number#18, wr_returned_date_sk#19] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_order_number)] ReadSchema: struct -(24) FilterExecTransformer +(29) FilterExecTransformer Input [2]: [wr_order_number#18, wr_returned_date_sk#19] Arguments: isnotnull(wr_order_number#18) -(25) ProjectExecTransformer +(30) ProjectExecTransformer Output [2]: [hash(wr_order_number#18, 42) AS hash_partition_key#20, wr_order_number#18] Input [2]: [wr_order_number#18, wr_returned_date_sk#19] -(26) WholeStageCodegenTransformer (10) +(31) WholeStageCodegenTransformer (8) Input [2]: [hash_partition_key#20, wr_order_number#18] Arguments: false -(27) VeloxResizeBatches +(32) VeloxResizeBatches Input [2]: [hash_partition_key#20, wr_order_number#18] Arguments: 1024, 2147483647, 10485760 -(28) ColumnarExchange +(33) ColumnarExchange Input [2]: [hash_partition_key#20, wr_order_number#18] Arguments: hashpartitioning(wr_order_number#18, 1), ENSURE_REQUIREMENTS, [wr_order_number#18], [plan_id=6], [shuffle_writer_type=hash] -(29) InputAdapter +(34) InputAdapter Input [1]: [wr_order_number#18] -(30) InputIteratorTransformer +(35) InputIteratorTransformer Input [1]: [wr_order_number#18] -(31) ReusedExchange [Reuses operator id: 14] +(36) ReusedExchange [Reuses operator id: 19] Output [2]: [ws_warehouse_sk#21, ws_order_number#22] -(32) InputAdapter +(37) InputAdapter Input [2]: [ws_warehouse_sk#21, ws_order_number#22] -(33) InputIteratorTransformer +(38) InputIteratorTransformer Input [2]: [ws_warehouse_sk#21, ws_order_number#22] -(34) ShuffledHashJoinExecTransformer +(39) ShuffledHashJoinExecTransformer Left keys [1]: [wr_order_number#18] Right keys [1]: [ws_order_number#22] Join type: Inner Join condition: None -(35) ReusedExchange [Reuses operator id: 14] +(40) ReusedExchange [Reuses operator id: 19] Output [2]: [ws_warehouse_sk#23, ws_order_number#24] -(36) InputAdapter +(41) InputAdapter Input [2]: [ws_warehouse_sk#23, ws_order_number#24] -(37) InputIteratorTransformer +(42) InputIteratorTransformer Input [2]: [ws_warehouse_sk#23, ws_order_number#24] -(38) ShuffledHashJoinExecTransformer +(43) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#22] Right keys [1]: [ws_order_number#24] Join type: Inner Join condition: NOT (ws_warehouse_sk#21 = ws_warehouse_sk#23) -(39) ProjectExecTransformer +(44) ProjectExecTransformer Output [1]: [wr_order_number#18] Input [5]: [wr_order_number#18, ws_warehouse_sk#21, ws_order_number#22, ws_warehouse_sk#23, ws_order_number#24] -(40) ShuffledHashJoinExecTransformer +(45) ShuffledHashJoinExecTransformer Left keys [1]: [ws_order_number#4] Right keys [1]: [wr_order_number#18] Join type: LeftSemi Join condition: None -(41) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(46) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#25, ca_state#26] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct -(42) FilterExecTransformer +(47) FilterExecTransformer Input [2]: [ca_address_sk#25, ca_state#26] Arguments: ((isnotnull(ca_state#26) AND (ca_state#26 = IL)) AND isnotnull(ca_address_sk#25)) -(43) ProjectExecTransformer +(48) ProjectExecTransformer Output [1]: [ca_address_sk#25] Input [2]: [ca_address_sk#25, ca_state#26] -(44) WholeStageCodegenTransformer (13) +(49) WholeStageCodegenTransformer (11) Input [1]: [ca_address_sk#25] Arguments: false -(45) ColumnarBroadcastExchange +(50) ColumnarBroadcastExchange Input [1]: [ca_address_sk#25] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(46) InputAdapter +(51) InputAdapter Input [1]: [ca_address_sk#25] -(47) InputIteratorTransformer +(52) InputIteratorTransformer Input [1]: [ca_address_sk#25] -(48) BroadcastHashJoinExecTransformer +(53) BroadcastHashJoinExecTransformer Left keys [1]: [ws_ship_addr_sk#2] Right keys [1]: [ca_address_sk#25] Join type: Inner Join condition: None -(49) ProjectExecTransformer +(54) ProjectExecTransformer Output [5]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ca_address_sk#25] -(50) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(55) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#27, web_company_name#28] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct -(51) FilterExecTransformer +(56) FilterExecTransformer Input [2]: [web_site_sk#27, web_company_name#28] Arguments: ((isnotnull(web_company_name#28) AND (web_company_name#28 = pri )) AND isnotnull(web_site_sk#27)) -(52) ProjectExecTransformer +(57) ProjectExecTransformer Output [1]: [web_site_sk#27] Input [2]: [web_site_sk#27, web_company_name#28] -(53) WholeStageCodegenTransformer (14) +(58) WholeStageCodegenTransformer (12) Input [1]: [web_site_sk#27] Arguments: false -(54) ColumnarBroadcastExchange +(59) ColumnarBroadcastExchange Input [1]: [web_site_sk#27] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -(55) InputAdapter +(60) InputAdapter Input [1]: [web_site_sk#27] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [1]: [web_site_sk#27] -(57) BroadcastHashJoinExecTransformer +(62) BroadcastHashJoinExecTransformer Left keys [1]: [ws_web_site_sk#3] Right keys [1]: [web_site_sk#27] Join type: Inner Join condition: None -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [4]: [ws_ship_date_sk#1, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Input [6]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, web_site_sk#27] -(59) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(64) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#29, d_date#30] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(60) FilterExecTransformer +(65) FilterExecTransformer Input [2]: [d_date_sk#29, d_date#30] Arguments: (((isnotnull(d_date#30) AND (d_date#30 >= 1999-02-01)) AND (d_date#30 <= 1999-04-02)) AND isnotnull(d_date_sk#29)) -(61) ProjectExecTransformer +(66) ProjectExecTransformer Output [1]: [d_date_sk#29] Input [2]: [d_date_sk#29, d_date#30] -(62) WholeStageCodegenTransformer (15) +(67) WholeStageCodegenTransformer (13) Input [1]: [d_date_sk#29] Arguments: false -(63) ColumnarBroadcastExchange +(68) ColumnarBroadcastExchange Input [1]: [d_date_sk#29] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -(64) InputAdapter +(69) InputAdapter Input [1]: [d_date_sk#29] -(65) InputIteratorTransformer +(70) InputIteratorTransformer Input [1]: [d_date_sk#29] -(66) BroadcastHashJoinExecTransformer +(71) BroadcastHashJoinExecTransformer Left keys [1]: [ws_ship_date_sk#1] Right keys [1]: [d_date_sk#29] Join type: Inner Join condition: None -(67) ProjectExecTransformer +(72) ProjectExecTransformer Output [3]: [ws_order_number#4, UnscaledValue(ws_ext_ship_cost#5) AS _pre_1#31, UnscaledValue(ws_net_profit#6) AS _pre_2#32] Input [5]: [ws_ship_date_sk#1, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, d_date_sk#29] -(68) RegularHashAggregateExecTransformer +(73) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#4, _pre_1#31, _pre_2#32] Keys [1]: [ws_order_number#4] Functions [2]: [partial_sum(_pre_1#31), partial_sum(_pre_2#32)] Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34] Results [3]: [ws_order_number#4, sum#35, sum#36] -(69) RegularHashAggregateExecTransformer +(74) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#4, sum#35, sum#36] Keys [1]: [ws_order_number#4] Functions [2]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(UnscaledValue(ws_net_profit#6))] Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34] Results [3]: [ws_order_number#4, sum#35, sum#36] -(70) RegularHashAggregateExecTransformer +(75) RegularHashAggregateExecTransformer Input [3]: [ws_order_number#4, sum#35, sum#36] Keys: [] Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(UnscaledValue(ws_net_profit#6)), partial_count(distinct ws_order_number#4)] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34, count(ws_order_number#4)#37] Results [3]: [sum#35, sum#36, count#38] -(71) RegularHashAggregateExecTransformer +(76) RegularHashAggregateExecTransformer Input [3]: [sum#35, sum#36, count#38] Keys: [] Functions [3]: [sum(UnscaledValue(ws_ext_ship_cost#5)), sum(UnscaledValue(ws_net_profit#6)), count(distinct ws_order_number#4)] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34, count(ws_order_number#4)#37] Results [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34, count(ws_order_number#4)#37] -(72) ProjectExecTransformer +(77) ProjectExecTransformer Output [3]: [count(ws_order_number#4)#37 AS order count #39, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#5))#33,17,2) AS total shipping cost #40, MakeDecimal(sum(UnscaledValue(ws_net_profit#6))#34,17,2) AS total net profit #41] Input [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34, count(ws_order_number#4)#37] -(73) WholeStageCodegenTransformer (16) +(78) WholeStageCodegenTransformer (14) Input [3]: [order count #39, total shipping cost #40, total net profit #41] Arguments: false -(74) VeloxColumnarToRow +(79) VeloxColumnarToRow Input [3]: [order count #39, total shipping cost #40, total net profit #41] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#8, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#8, [id=#1] +ObjectHashAggregate (90) ++- VeloxColumnarToRow (89) + +- ColumnarExchange (88) + +- VeloxResizeBatches (87) + +- RowToVeloxColumnar (86) + +- ObjectHashAggregate (85) + +- VeloxColumnarToRow (84) + +- ^ ProjectExecTransformer (82) + +- ^ FilterExecTransformer (81) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (80) -(75) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(80) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#25, ca_state#26] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct -(76) FilterExecTransformer +(81) FilterExecTransformer Input [2]: [ca_address_sk#25, ca_state#26] Arguments: ((isnotnull(ca_state#26) AND (ca_state#26 = IL)) AND isnotnull(ca_address_sk#25)) -(77) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#25, 42) AS _pre_3#42] +(82) ProjectExecTransformer +Output [1]: [ca_address_sk#25] Input [2]: [ca_address_sk#25, ca_state#26] -(78) FlushableHashAggregateExecTransformer -Input [1]: [_pre_3#42] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#42, 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [buf#43] -Results [1]: [buf#44] - -(79) WholeStageCodegenTransformer (1) -Input [1]: [buf#44] +(83) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#25] Arguments: false -(80) VeloxResizeBatches -Input [1]: [buf#44] -Arguments: 1024, 2147483647, 10485760 - -(81) ColumnarExchange -Input [1]: [buf#44] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] - -(82) InputAdapter -Input [1]: [buf#44] - -(83) InputIteratorTransformer -Input [1]: [buf#44] +(84) VeloxColumnarToRow +Input [1]: [ca_address_sk#25] -(84) RegularHashAggregateExecTransformer -Input [1]: [buf#44] +(85) ObjectHashAggregate +Input [1]: [ca_address_sk#25] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)#45] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)#45 AS bloomFilter#46] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [buf#42] +Results [1]: [buf#43] -(85) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#46] -Arguments: false +(86) RowToVeloxColumnar +Input [1]: [buf#43] -(86) VeloxColumnarToRow -Input [1]: [bloomFilter#46] +(87) VeloxResizeBatches +Input [1]: [buf#43] +Arguments: 1024, 2147483647, 10485760 -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#9, [id=#2] -VeloxColumnarToRow (98) -+- ^ RegularHashAggregateExecTransformer (96) - +- ^ InputIteratorTransformer (95) - +- ColumnarExchange (93) - +- VeloxResizeBatches (92) - +- ^ FlushableHashAggregateExecTransformer (90) - +- ^ ProjectExecTransformer (89) - +- ^ FilterExecTransformer (88) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (87) +(88) ColumnarExchange +Input [1]: [buf#43] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash] +(89) VeloxColumnarToRow +Input [1]: [buf#43] -(87) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(90) ObjectHashAggregate +Input [1]: [buf#43] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)#44] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#25, 42), 17961, 333176, 0, 0)#44 AS bloomFilter#45] + +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#9, [id=#2] +ObjectHashAggregate (101) ++- VeloxColumnarToRow (100) + +- ColumnarExchange (99) + +- VeloxResizeBatches (98) + +- RowToVeloxColumnar (97) + +- ObjectHashAggregate (96) + +- VeloxColumnarToRow (95) + +- ^ ProjectExecTransformer (93) + +- ^ FilterExecTransformer (92) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (91) + + +(91) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#27, web_company_name#28] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct -(88) FilterExecTransformer +(92) FilterExecTransformer Input [2]: [web_site_sk#27, web_company_name#28] Arguments: ((isnotnull(web_company_name#28) AND (web_company_name#28 = pri )) AND isnotnull(web_site_sk#27)) -(89) ProjectExecTransformer -Output [1]: [xxhash64(web_site_sk#27, 42) AS _pre_4#47] +(93) ProjectExecTransformer +Output [1]: [web_site_sk#27] Input [2]: [web_site_sk#27, web_company_name#28] -(90) FlushableHashAggregateExecTransformer -Input [1]: [_pre_4#47] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_4#47, 4, 144, 0, 0)] -Aggregate Attributes [1]: [buf#48] -Results [1]: [buf#49] - -(91) WholeStageCodegenTransformer (3) -Input [1]: [buf#49] +(94) WholeStageCodegenTransformer (2) +Input [1]: [web_site_sk#27] Arguments: false -(92) VeloxResizeBatches -Input [1]: [buf#49] -Arguments: 1024, 2147483647, 10485760 - -(93) ColumnarExchange -Input [1]: [buf#49] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] - -(94) InputAdapter -Input [1]: [buf#49] - -(95) InputIteratorTransformer -Input [1]: [buf#49] +(95) VeloxColumnarToRow +Input [1]: [web_site_sk#27] -(96) RegularHashAggregateExecTransformer -Input [1]: [buf#49] +(96) ObjectHashAggregate +Input [1]: [web_site_sk#27] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)#50] -Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)#50 AS bloomFilter#51] +Functions [1]: [partial_bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [buf#46] +Results [1]: [buf#47] -(97) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#51] -Arguments: false +(97) RowToVeloxColumnar +Input [1]: [buf#47] -(98) VeloxColumnarToRow -Input [1]: [bloomFilter#51] +(98) VeloxResizeBatches +Input [1]: [buf#47] +Arguments: 1024, 2147483647, 10485760 -Subquery:3 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#10, [id=#3] -VeloxColumnarToRow (110) -+- ^ RegularHashAggregateExecTransformer (108) - +- ^ InputIteratorTransformer (107) - +- ColumnarExchange (105) - +- VeloxResizeBatches (104) - +- ^ FlushableHashAggregateExecTransformer (102) - +- ^ ProjectExecTransformer (101) - +- ^ FilterExecTransformer (100) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (99) +(99) ColumnarExchange +Input [1]: [buf#47] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11], [shuffle_writer_type=hash] +(100) VeloxColumnarToRow +Input [1]: [buf#47] -(99) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(101) ObjectHashAggregate +Input [1]: [buf#47] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)#48] +Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 144, 0, 0)#48 AS bloomFilter#49] + +Subquery:3 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#10, [id=#3] +ObjectHashAggregate (112) ++- VeloxColumnarToRow (111) + +- ColumnarExchange (110) + +- VeloxResizeBatches (109) + +- RowToVeloxColumnar (108) + +- ObjectHashAggregate (107) + +- VeloxColumnarToRow (106) + +- ^ ProjectExecTransformer (104) + +- ^ FilterExecTransformer (103) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (102) + + +(102) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#29, d_date#30] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct -(100) FilterExecTransformer +(103) FilterExecTransformer Input [2]: [d_date_sk#29, d_date#30] Arguments: (((isnotnull(d_date#30) AND (d_date#30 >= 1999-02-01)) AND (d_date#30 <= 1999-04-02)) AND isnotnull(d_date_sk#29)) -(101) ProjectExecTransformer -Output [1]: [xxhash64(d_date_sk#29, 42) AS _pre_5#52] +(104) ProjectExecTransformer +Output [1]: [d_date_sk#29] Input [2]: [d_date_sk#29, d_date#30] -(102) FlushableHashAggregateExecTransformer -Input [1]: [_pre_5#52] +(105) WholeStageCodegenTransformer (3) +Input [1]: [d_date_sk#29] +Arguments: false + +(106) VeloxColumnarToRow +Input [1]: [d_date_sk#29] + +(107) ObjectHashAggregate +Input [1]: [d_date_sk#29] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_5#52, 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [buf#53] -Results [1]: [buf#54] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [buf#50] +Results [1]: [buf#51] -(103) WholeStageCodegenTransformer (5) -Input [1]: [buf#54] -Arguments: false +(108) RowToVeloxColumnar +Input [1]: [buf#51] -(104) VeloxResizeBatches -Input [1]: [buf#54] +(109) VeloxResizeBatches +Input [1]: [buf#51] Arguments: 1024, 2147483647, 10485760 -(105) ColumnarExchange -Input [1]: [buf#54] +(110) ColumnarExchange +Input [1]: [buf#51] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12], [shuffle_writer_type=hash] -(106) InputAdapter -Input [1]: [buf#54] +(111) VeloxColumnarToRow +Input [1]: [buf#51] -(107) InputIteratorTransformer -Input [1]: [buf#54] - -(108) RegularHashAggregateExecTransformer -Input [1]: [buf#54] +(112) ObjectHashAggregate +Input [1]: [buf#51] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)#55] -Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)#55 AS bloomFilter#56] - -(109) WholeStageCodegenTransformer (6) -Input [1]: [bloomFilter#56] -Arguments: false - -(110) VeloxColumnarToRow -Input [1]: [bloomFilter#56] - -Subquery:4 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#8, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) - - -Subquery:5 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#9, [id=#2] -VeloxColumnarToRow (98) -+- ^ RegularHashAggregateExecTransformer (96) - +- ^ InputIteratorTransformer (95) - +- ColumnarExchange (93) - +- VeloxResizeBatches (92) - +- ^ FlushableHashAggregateExecTransformer (90) - +- ^ ProjectExecTransformer (89) - +- ^ FilterExecTransformer (88) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (87) - - -Subquery:6 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#10, [id=#3] -VeloxColumnarToRow (110) -+- ^ RegularHashAggregateExecTransformer (108) - +- ^ InputIteratorTransformer (107) - +- ColumnarExchange (105) - +- VeloxResizeBatches (104) - +- ^ FlushableHashAggregateExecTransformer (102) - +- ^ ProjectExecTransformer (101) - +- ^ FilterExecTransformer (100) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (99) - +Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)#52] +Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 1141755, 0, 0)#52 AS bloomFilter#53] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt index b764f51091d..24682895f45 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt @@ -1,5 +1,5 @@ VeloxColumnarToRow - WholeStageCodegenTransformer (16) + WholeStageCodegenTransformer (14) ProjectExecTransformer [count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))] RegularHashAggregateExecTransformer [sum,sum,count] [sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count] RegularHashAggregateExecTransformer [ws_order_number] [sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count] @@ -17,95 +17,60 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ws_order_number,ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_ext_ship_cost,ws_net_profit] #1 VeloxResizeBatches - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (5) ProjectExecTransformer [ws_order_number,ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_ext_ship_cost,ws_net_profit] - FilterExecTransformer [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #2 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #3 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [web_site_sk] - FilterExecTransformer [web_company_name,web_site_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit,ws_sold_date_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 17961, 333176, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #2 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_state,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_state,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(web_site_sk, 42), 4, 144, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #3 VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [web_site_sk] - FilterExecTransformer [web_company_name,web_site_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (6) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [web_site_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [web_site_sk] + FilterExecTransformer [web_company_name,web_site_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(d_date_sk, 42), 73049, 1141755, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (5) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + RowToVeloxColumnar + ObjectHashAggregate [d_date_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_ship_date_sk,ws_ship_addr_sk,ws_web_site_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit,ws_sold_date_sk] ProjectExecTransformer [ws_order_number] ShuffledHashJoinExecTransformer [ws_order_number,ws_order_number,ws_warehouse_sk,ws_warehouse_sk] InputIteratorTransformer InputAdapter ColumnarExchange [ws_order_number,ws_warehouse_sk] #5 VeloxResizeBatches - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (6) ProjectExecTransformer [ws_order_number,ws_warehouse_sk] FilterExecTransformer [ws_order_number,ws_warehouse_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_warehouse_sk,ws_order_number,ws_sold_date_sk] @@ -119,7 +84,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [wr_order_number] #6 VeloxResizeBatches - WholeStageCodegenTransformer (10) + WholeStageCodegenTransformer (8) ProjectExecTransformer [wr_order_number] FilterExecTransformer [wr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_order_number,wr_returned_date_sk] @@ -132,21 +97,21 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #7 - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (11) ProjectExecTransformer [ca_address_sk] FilterExecTransformer [ca_state,ca_address_sk] FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_state] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #8 - WholeStageCodegenTransformer (14) + WholeStageCodegenTransformer (12) ProjectExecTransformer [web_site_sk] FilterExecTransformer [web_company_name,web_site_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_company_name] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (15) + WholeStageCodegenTransformer (13) ProjectExecTransformer [d_date_sk] FilterExecTransformer [d_date,d_date_sk] FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/explain.txt index 1dd5eb0a109..e4bc9aa68f5 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/explain.txt @@ -1,59 +1,62 @@ == Physical Plan == -VeloxColumnarToRow (74) -+- TakeOrderedAndProjectExecTransformer (73) - +- ^ ProjectExecTransformer (71) - +- ^ RegularHashAggregateExecTransformer (70) - +- ^ InputIteratorTransformer (69) - +- ColumnarExchange (67) - +- VeloxResizeBatches (66) - +- ^ ProjectExecTransformer (64) - +- ^ FlushableHashAggregateExecTransformer (63) - +- ^ ProjectExecTransformer (62) - +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (61) - :- ^ InputIteratorTransformer (58) - : +- ColumnarBroadcastExchange (56) - : +- ^ ProjectExecTransformer (54) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (53) - : :- ^ ProjectExecTransformer (45) - : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (44) - : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (20) - : : : :- ^ InputIteratorTransformer (8) - : : : : +- ColumnarExchange (6) - : : : : +- VeloxResizeBatches (5) - : : : : +- ^ ProjectExecTransformer (3) - : : : : +- ^ FilterExecTransformer (2) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) - : : : +- ^ InputIteratorTransformer (19) - : : : +- ColumnarExchange (17) - : : : +- VeloxResizeBatches (16) - : : : +- ^ ProjectExecTransformer (14) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13) - : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (9) - : : : +- ^ InputIteratorTransformer (12) - : : : +- ReusedExchange (10) - : : +- ^ InputIteratorTransformer (43) - : : +- ColumnarExchange (41) - : : +- VeloxResizeBatches (40) - : : +- ^ ProjectExecTransformer (38) - : : +- ^ InputIteratorTransformer (37) - : : +- ColumnarUnion (35) - : : :- ^ ProjectExecTransformer (26) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (25) - : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (21) - : : : +- ^ InputIteratorTransformer (24) - : : : +- ReusedExchange (22) - : : +- ^ ProjectExecTransformer (33) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (32) - : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (28) - : : +- ^ InputIteratorTransformer (31) - : : +- ReusedExchange (29) - : +- ^ InputIteratorTransformer (52) - : +- ColumnarBroadcastExchange (50) - : +- ^ ProjectExecTransformer (48) - : +- ^ FilterExecTransformer (47) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (46) - +- ^ FilterExecTransformer (60) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (59) +VeloxColumnarToRow (79) ++- TakeOrderedAndProjectExecTransformer (78) + +- ^ ProjectExecTransformer (76) + +- ^ RegularHashAggregateExecTransformer (75) + +- ^ InputIteratorTransformer (74) + +- ColumnarExchange (72) + +- VeloxResizeBatches (71) + +- ^ ProjectExecTransformer (69) + +- ^ FlushableHashAggregateExecTransformer (68) + +- ^ ProjectExecTransformer (67) + +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (66) + :- ^ InputIteratorTransformer (63) + : +- ColumnarBroadcastExchange (61) + : +- ^ ProjectExecTransformer (59) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (58) + : :- ^ ProjectExecTransformer (50) + : : +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (49) + : : :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (25) + : : : :- ^ InputIteratorTransformer (13) + : : : : +- ColumnarExchange (11) + : : : : +- VeloxResizeBatches (10) + : : : : +- ^ ProjectExecTransformer (8) + : : : : +- ^ InputIteratorTransformer (7) + : : : : +- RowToVeloxColumnar (5) + : : : : +- * Filter (4) + : : : : +- VeloxColumnarToRow (3) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1) + : : : +- ^ InputIteratorTransformer (24) + : : : +- ColumnarExchange (22) + : : : +- VeloxResizeBatches (21) + : : : +- ^ ProjectExecTransformer (19) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18) + : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (14) + : : : +- ^ InputIteratorTransformer (17) + : : : +- ReusedExchange (15) + : : +- ^ InputIteratorTransformer (48) + : : +- ColumnarExchange (46) + : : +- VeloxResizeBatches (45) + : : +- ^ ProjectExecTransformer (43) + : : +- ^ InputIteratorTransformer (42) + : : +- ColumnarUnion (40) + : : :- ^ ProjectExecTransformer (31) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (30) + : : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (26) + : : : +- ^ InputIteratorTransformer (29) + : : : +- ReusedExchange (27) + : : +- ^ ProjectExecTransformer (38) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37) + : : :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (33) + : : +- ^ InputIteratorTransformer (36) + : : +- ReusedExchange (34) + : +- ^ InputIteratorTransformer (57) + : +- ColumnarBroadcastExchange (55) + : +- ^ ProjectExecTransformer (53) + : +- ^ FilterExecTransformer (52) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (51) + +- ^ FilterExecTransformer (65) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (64) (1) FileSourceScanExecTransformer parquet spark_catalog.default.customer @@ -63,420 +66,421 @@ Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (2) +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Arguments: false + +(3) VeloxColumnarToRow +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(4) Filter [codegen id : 1] +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] +Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) + +(5) RowToVeloxColumnar +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(6) InputAdapter +Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] + +(7) InputIteratorTransformer Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -Arguments: ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND velox_might_contain(Subquery scalar-subquery#4, [id=#1], xxhash64(c_current_addr_sk#3, 42))) -(3) ProjectExecTransformer +(8) ProjectExecTransformer Output [4]: [hash(c_customer_sk#1, 42) AS hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(4) WholeStageCodegenTransformer (3) +(9) WholeStageCodegenTransformer (3) Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [4]: [hash_partition_key#5, c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: hashpartitioning(c_customer_sk#1, 1), ENSURE_REQUIREMENTS, [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [2]: [ss_customer_sk#6, ss_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] ReadSchema: struct -(10) ReusedExchange [Reuses operator id: 91] +(15) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#9] -(11) InputAdapter +(16) InputAdapter Input [1]: [d_date_sk#9] -(12) InputIteratorTransformer +(17) InputIteratorTransformer Input [1]: [d_date_sk#9] -(13) BroadcastHashJoinExecTransformer +(18) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#7] Right keys [1]: [d_date_sk#9] Join type: Inner Join condition: None -(14) ProjectExecTransformer +(19) ProjectExecTransformer Output [2]: [hash(ss_customer_sk#6, 42) AS hash_partition_key#10, ss_customer_sk#6] Input [3]: [ss_customer_sk#6, ss_sold_date_sk#7, d_date_sk#9] -(15) WholeStageCodegenTransformer (6) +(20) WholeStageCodegenTransformer (6) Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: false -(16) VeloxResizeBatches +(21) VeloxResizeBatches Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: 1024, 2147483647, 10485760 -(17) ColumnarExchange +(22) ColumnarExchange Input [2]: [hash_partition_key#10, ss_customer_sk#6] Arguments: hashpartitioning(ss_customer_sk#6, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#6], [plan_id=3], [shuffle_writer_type=hash] -(18) InputAdapter +(23) InputAdapter Input [1]: [ss_customer_sk#6] -(19) InputIteratorTransformer +(24) InputIteratorTransformer Input [1]: [ss_customer_sk#6] -(20) ShuffledHashJoinExecTransformer +(25) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [ss_customer_sk#6] Join type: LeftSemi Join condition: None -(21) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(26) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [2]: [ws_bill_customer_sk#11, ws_sold_date_sk#12] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(ws_sold_date_sk#12), dynamicpruningexpression(ws_sold_date_sk#12 IN dynamicpruning#8)] ReadSchema: struct -(22) ReusedExchange [Reuses operator id: 91] +(27) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#13] -(23) InputAdapter +(28) InputAdapter Input [1]: [d_date_sk#13] -(24) InputIteratorTransformer +(29) InputIteratorTransformer Input [1]: [d_date_sk#13] -(25) BroadcastHashJoinExecTransformer +(30) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#12] Right keys [1]: [d_date_sk#13] Join type: Inner Join condition: None -(26) ProjectExecTransformer +(31) ProjectExecTransformer Output [1]: [ws_bill_customer_sk#11 AS customer_sk#14] Input [3]: [ws_bill_customer_sk#11, ws_sold_date_sk#12, d_date_sk#13] -(27) WholeStageCodegenTransformer (9) +(32) WholeStageCodegenTransformer (9) Input [1]: [customer_sk#14] Arguments: false -(28) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(33) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] Batched: true Location: InMemoryFileIndex [] PartitionFilters: [isnotnull(cs_sold_date_sk#16), dynamicpruningexpression(cs_sold_date_sk#16 IN dynamicpruning#8)] ReadSchema: struct -(29) ReusedExchange [Reuses operator id: 91] +(34) ReusedExchange [Reuses operator id: 95] Output [1]: [d_date_sk#17] -(30) InputAdapter +(35) InputAdapter Input [1]: [d_date_sk#17] -(31) InputIteratorTransformer +(36) InputIteratorTransformer Input [1]: [d_date_sk#17] -(32) BroadcastHashJoinExecTransformer +(37) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#16] Right keys [1]: [d_date_sk#17] Join type: Inner Join condition: None -(33) ProjectExecTransformer +(38) ProjectExecTransformer Output [1]: [cs_ship_customer_sk#15 AS customer_sk#18] Input [3]: [cs_ship_customer_sk#15, cs_sold_date_sk#16, d_date_sk#17] -(34) WholeStageCodegenTransformer (12) +(39) WholeStageCodegenTransformer (12) Input [1]: [customer_sk#18] Arguments: false -(35) ColumnarUnion +(40) ColumnarUnion Arguments: UnknownPartitioning(0) -(36) InputAdapter +(41) InputAdapter Input [1]: [customer_sk#14] -(37) InputIteratorTransformer +(42) InputIteratorTransformer Input [1]: [customer_sk#14] -(38) ProjectExecTransformer +(43) ProjectExecTransformer Output [2]: [hash(customer_sk#14, 42) AS hash_partition_key#19, customer_sk#14] Input [1]: [customer_sk#14] -(39) WholeStageCodegenTransformer (13) +(44) WholeStageCodegenTransformer (13) Input [2]: [hash_partition_key#19, customer_sk#14] Arguments: false -(40) VeloxResizeBatches +(45) VeloxResizeBatches Input [2]: [hash_partition_key#19, customer_sk#14] Arguments: 1024, 2147483647, 10485760 -(41) ColumnarExchange +(46) ColumnarExchange Input [2]: [hash_partition_key#19, customer_sk#14] Arguments: hashpartitioning(customer_sk#14, 1), ENSURE_REQUIREMENTS, [customer_sk#14], [plan_id=4], [shuffle_writer_type=hash] -(42) InputAdapter +(47) InputAdapter Input [1]: [customer_sk#14] -(43) InputIteratorTransformer +(48) InputIteratorTransformer Input [1]: [customer_sk#14] -(44) ShuffledHashJoinExecTransformer +(49) ShuffledHashJoinExecTransformer Left keys [1]: [c_customer_sk#1] Right keys [1]: [customer_sk#14] Join type: LeftSemi Join condition: None -(45) ProjectExecTransformer +(50) ProjectExecTransformer Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -(46) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(51) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_county#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(47) FilterExecTransformer +(52) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_county#21] Arguments: (ca_county#21 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#20)) -(48) ProjectExecTransformer +(53) ProjectExecTransformer Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_county#21] -(49) WholeStageCodegenTransformer (14) +(54) WholeStageCodegenTransformer (14) Input [1]: [ca_address_sk#20] Arguments: false -(50) ColumnarBroadcastExchange +(55) ColumnarBroadcastExchange Input [1]: [ca_address_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(51) InputAdapter +(56) InputAdapter Input [1]: [ca_address_sk#20] -(52) InputIteratorTransformer +(57) InputIteratorTransformer Input [1]: [ca_address_sk#20] -(53) BroadcastHashJoinExecTransformer +(58) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#3] Right keys [1]: [ca_address_sk#20] Join type: Inner Join condition: None -(54) ProjectExecTransformer +(59) ProjectExecTransformer Output [1]: [c_current_cdemo_sk#2] Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#20] -(55) WholeStageCodegenTransformer (15) +(60) WholeStageCodegenTransformer (15) Input [1]: [c_current_cdemo_sk#2] Arguments: false -(56) ColumnarBroadcastExchange +(61) ColumnarBroadcastExchange Input [1]: [c_current_cdemo_sk#2] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(57) InputAdapter +(62) InputAdapter Input [1]: [c_current_cdemo_sk#2] -(58) InputIteratorTransformer +(63) InputIteratorTransformer Input [1]: [c_current_cdemo_sk#2] -(59) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(64) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct -(60) FilterExecTransformer +(65) FilterExecTransformer Input [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Arguments: isnotnull(cd_demo_sk#22) -(61) BroadcastHashJoinExecTransformer +(66) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#2] Right keys [1]: [cd_demo_sk#22] Join type: Inner Join condition: None -(62) ProjectExecTransformer +(67) ProjectExecTransformer Output [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -(63) FlushableHashAggregateExecTransformer +(68) FlushableHashAggregateExecTransformer Input [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Keys [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Functions [1]: [partial_count(1)] Aggregate Attributes [1]: [count#31] Results [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] -(64) ProjectExecTransformer +(69) ProjectExecTransformer Output [10]: [hash(cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, 42) AS hash_partition_key#33, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] -(65) WholeStageCodegenTransformer (16) +(70) WholeStageCodegenTransformer (16) Input [10]: [hash_partition_key#33, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] Arguments: false -(66) VeloxResizeBatches +(71) VeloxResizeBatches Input [10]: [hash_partition_key#33, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] Arguments: 1024, 2147483647, 10485760 -(67) ColumnarExchange +(72) ColumnarExchange Input [10]: [hash_partition_key#33, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] Arguments: hashpartitioning(cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, 1), ENSURE_REQUIREMENTS, [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32], [plan_id=7], [shuffle_writer_type=hash] -(68) InputAdapter +(73) InputAdapter Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] -(69) InputIteratorTransformer +(74) InputIteratorTransformer Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] -(70) RegularHashAggregateExecTransformer +(75) RegularHashAggregateExecTransformer Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#32] Keys [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] Functions [1]: [count(1)] Aggregate Attributes [1]: [count(1)#34] Results [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count(1)#34] -(71) ProjectExecTransformer +(76) ProjectExecTransformer Output [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, count(1)#34 AS cnt1#35, cd_purchase_estimate#26, count(1)#34 AS cnt2#36, cd_credit_rating#27, count(1)#34 AS cnt3#37, cd_dep_count#28, count(1)#34 AS cnt4#38, cd_dep_employed_count#29, count(1)#34 AS cnt5#39, cd_dep_college_count#30, count(1)#34 AS cnt6#40] Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count(1)#34] -(72) WholeStageCodegenTransformer (17) +(77) WholeStageCodegenTransformer (17) Input [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#35, cd_purchase_estimate#26, cnt2#36, cd_credit_rating#27, cnt3#37, cd_dep_count#28, cnt4#38, cd_dep_employed_count#29, cnt5#39, cd_dep_college_count#30, cnt6#40] Arguments: false -(73) TakeOrderedAndProjectExecTransformer +(78) TakeOrderedAndProjectExecTransformer Input [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#35, cd_purchase_estimate#26, cnt2#36, cd_credit_rating#27, cnt3#37, cd_dep_count#28, cnt4#38, cd_dep_employed_count#29, cnt5#39, cd_dep_college_count#30, cnt6#40] Arguments: 100, [cd_gender#23 ASC NULLS FIRST, cd_marital_status#24 ASC NULLS FIRST, cd_education_status#25 ASC NULLS FIRST, cd_purchase_estimate#26 ASC NULLS FIRST, cd_credit_rating#27 ASC NULLS FIRST, cd_dep_count#28 ASC NULLS FIRST, cd_dep_employed_count#29 ASC NULLS FIRST, cd_dep_college_count#30 ASC NULLS FIRST], [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#35, cd_purchase_estimate#26, cnt2#36, cd_credit_rating#27, cnt3#37, cd_dep_count#28, cnt4#38, cd_dep_employed_count#29, cnt5#39, cd_dep_college_count#30, cnt6#40], 0 -(74) VeloxColumnarToRow +(79) VeloxColumnarToRow Input [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#35, cd_purchase_estimate#26, cnt2#36, cd_credit_rating#27, cnt3#37, cd_dep_count#28, cnt4#38, cd_dep_employed_count#29, cnt5#39, cd_dep_college_count#30, cnt6#40] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#4, [id=#1] +ObjectHashAggregate (90) ++- VeloxColumnarToRow (89) + +- ColumnarExchange (88) + +- VeloxResizeBatches (87) + +- RowToVeloxColumnar (86) + +- ObjectHashAggregate (85) + +- VeloxColumnarToRow (84) + +- ^ ProjectExecTransformer (82) + +- ^ FilterExecTransformer (81) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (80) -(75) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(80) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [2]: [ca_address_sk#20, ca_county#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct -(76) FilterExecTransformer +(81) FilterExecTransformer Input [2]: [ca_address_sk#20, ca_county#21] Arguments: (ca_county#21 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#20)) -(77) ProjectExecTransformer -Output [1]: [xxhash64(ca_address_sk#20, 42) AS _pre_1#41] +(82) ProjectExecTransformer +Output [1]: [ca_address_sk#20] Input [2]: [ca_address_sk#20, ca_county#21] -(78) FlushableHashAggregateExecTransformer -Input [1]: [_pre_1#41] +(83) WholeStageCodegenTransformer (1) +Input [1]: [ca_address_sk#20] +Arguments: false + +(84) VeloxColumnarToRow +Input [1]: [ca_address_sk#20] + +(85) ObjectHashAggregate +Input [1]: [ca_address_sk#20] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_1#41, 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [buf#42] -Results [1]: [buf#43] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [buf#41] +Results [1]: [buf#42] -(79) WholeStageCodegenTransformer (1) -Input [1]: [buf#43] -Arguments: false +(86) RowToVeloxColumnar +Input [1]: [buf#42] -(80) VeloxResizeBatches -Input [1]: [buf#43] +(87) VeloxResizeBatches +Input [1]: [buf#42] Arguments: 1024, 2147483647, 10485760 -(81) ColumnarExchange -Input [1]: [buf#43] +(88) ColumnarExchange +Input [1]: [buf#42] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8], [shuffle_writer_type=hash] -(82) InputAdapter -Input [1]: [buf#43] - -(83) InputIteratorTransformer -Input [1]: [buf#43] +(89) VeloxColumnarToRow +Input [1]: [buf#42] -(84) RegularHashAggregateExecTransformer -Input [1]: [buf#43] +(90) ObjectHashAggregate +Input [1]: [buf#42] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)#44] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)#44 AS bloomFilter#45] - -(85) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#45] -Arguments: false - -(86) VeloxColumnarToRow -Input [1]: [bloomFilter#45] - -Subquery:2 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#4, [id=#1] -VeloxColumnarToRow (86) -+- ^ RegularHashAggregateExecTransformer (84) - +- ^ InputIteratorTransformer (83) - +- ColumnarExchange (81) - +- VeloxResizeBatches (80) - +- ^ FlushableHashAggregateExecTransformer (78) - +- ^ ProjectExecTransformer (77) - +- ^ FilterExecTransformer (76) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (75) - +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)#43] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 2555, 57765, 0, 0)#43 AS bloomFilter#44] -Subquery:3 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (91) -+- ^ ProjectExecTransformer (89) - +- ^ FilterExecTransformer (88) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) +Subquery:2 Hosting operator id = 14 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 +ColumnarBroadcastExchange (95) ++- ^ ProjectExecTransformer (93) + +- ^ FilterExecTransformer (92) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (91) -(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [3]: [d_date_sk#9, d_year#46, d_moy#47] +(91) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [3]: [d_date_sk#9, d_year#45, d_moy#46] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,7), IsNotNull(d_date_sk)] ReadSchema: struct -(88) FilterExecTransformer -Input [3]: [d_date_sk#9, d_year#46, d_moy#47] -Arguments: (((((isnotnull(d_year#46) AND isnotnull(d_moy#47)) AND (d_year#46 = 2002)) AND (d_moy#47 >= 4)) AND (d_moy#47 <= 7)) AND isnotnull(d_date_sk#9)) +(92) FilterExecTransformer +Input [3]: [d_date_sk#9, d_year#45, d_moy#46] +Arguments: (((((isnotnull(d_year#45) AND isnotnull(d_moy#46)) AND (d_year#45 = 2002)) AND (d_moy#46 >= 4)) AND (d_moy#46 <= 7)) AND isnotnull(d_date_sk#9)) -(89) ProjectExecTransformer +(93) ProjectExecTransformer Output [1]: [d_date_sk#9] -Input [3]: [d_date_sk#9, d_year#46, d_moy#47] +Input [3]: [d_date_sk#9, d_year#45, d_moy#46] -(90) WholeStageCodegenTransformer (4) +(94) WholeStageCodegenTransformer (4) Input [1]: [d_date_sk#9] Arguments: false -(91) ColumnarBroadcastExchange +(95) ColumnarBroadcastExchange Input [1]: [d_date_sk#9] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:4 Hosting operator id = 21 Hosting Expression = ws_sold_date_sk#12 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 26 Hosting Expression = ws_sold_date_sk#12 IN dynamicpruning#8 -Subquery:5 Hosting operator id = 28 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#8 +Subquery:4 Hosting operator id = 33 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#8 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/simplified.txt index 7e9e3672808..396ad79aa9d 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q10a.sf100/simplified.txt @@ -27,34 +27,27 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (3) ProjectExecTransformer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - FilterExecTransformer [c_current_addr_sk,c_current_cdemo_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #4 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] - FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] - Subquery #1 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [c_current_addr_sk,c_current_cdemo_sk] + Subquery #1 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(ca_address_sk, 42), 2555, 57765, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #4 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [ca_address_sk] - FilterExecTransformer [ca_county,ca_address_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + RowToVeloxColumnar + ObjectHashAggregate [ca_address_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [ca_address_sk] + FilterExecTransformer [ca_county,ca_address_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.customer_address [ca_address_sk,ca_county] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + FileSourceScanExecTransformer parquet spark_catalog.default.customer [c_customer_sk,c_current_cdemo_sk,c_current_addr_sk] InputIteratorTransformer InputAdapter ColumnarExchange [ss_customer_sk] #5 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/explain.txt index 758702123b8..d265fb91649 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/explain.txt @@ -1,261 +1,267 @@ == Physical Plan == -VeloxColumnarToRow (343) -+- ^ SortExecTransformer (341) - +- ^ InputIteratorTransformer (340) - +- ColumnarExchange (338) - +- VeloxResizeBatches (337) - +- ^ ProjectExecTransformer (335) - +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (334) - :- ^ InputIteratorTransformer (201) - : +- ColumnarExchange (199) - : +- VeloxResizeBatches (198) - : +- ^ ProjectExecTransformer (196) - : +- ^ RegularHashAggregateExecTransformer (195) - : +- ^ InputIteratorTransformer (194) - : +- ColumnarExchange (192) - : +- VeloxResizeBatches (191) - : +- ^ ProjectExecTransformer (189) - : +- ^ FlushableHashAggregateExecTransformer (188) - : +- ^ ProjectExecTransformer (187) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (186) - : :- ^ ProjectExecTransformer (178) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (177) - : : :- ^ ProjectExecTransformer (173) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (172) - : : : :- ^ ProjectExecTransformer (165) - : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (164) - : : : : :- ^ InputIteratorTransformer (160) - : : : : : +- ColumnarExchange (158) - : : : : : +- VeloxResizeBatches (157) - : : : : : +- ^ ProjectExecTransformer (155) - : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (154) - : : : : : :- ^ InputIteratorTransformer (145) - : : : : : : +- ColumnarExchange (143) - : : : : : : +- VeloxResizeBatches (142) - : : : : : : +- ^ ProjectExecTransformer (140) - : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (139) - : : : : : : :- ^ ProjectExecTransformer (135) - : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (134) - : : : : : : : :- ^ ProjectExecTransformer (127) - : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (126) - : : : : : : : : :- ^ ProjectExecTransformer (119) - : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (118) - : : : : : : : : : :- ^ InputIteratorTransformer (114) - : : : : : : : : : : +- ColumnarExchange (112) - : : : : : : : : : : +- VeloxResizeBatches (111) - : : : : : : : : : : +- ^ ProjectExecTransformer (109) - : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (108) - : : : : : : : : : : :- ^ InputIteratorTransformer (99) - : : : : : : : : : : : +- ColumnarExchange (97) - : : : : : : : : : : : +- VeloxResizeBatches (96) - : : : : : : : : : : : +- ^ ProjectExecTransformer (94) - : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (93) - : : : : : : : : : : : :- ^ ProjectExecTransformer (89) - : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (88) - : : : : : : : : : : : : :- ^ ProjectExecTransformer (81) - : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (80) - : : : : : : : : : : : : : :- ^ InputIteratorTransformer (71) - : : : : : : : : : : : : : : +- ColumnarExchange (69) - : : : : : : : : : : : : : : +- VeloxResizeBatches (68) - : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (66) - : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (65) - : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (58) - : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) - : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (53) - : : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (52) - : : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (18) - : : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (17) - : : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (8) - : : : : : : : : : : : : : : : : : : +- ColumnarExchange (6) - : : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (5) - : : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (3) - : : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (2) - : : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (16) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (14) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (13) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (11) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (10) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (9) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (51) - : : : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (49) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (47) - : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (46) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (45) - : : : : : : : : : : : : : : : : +- ^ RegularHashAggregateExecTransformer (44) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (43) - : : : : : : : : : : : : : : : : +- ColumnarExchange (41) - : : : : : : : : : : : : : : : : +- VeloxResizeBatches (40) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (38) - : : : : : : : : : : : : : : : : +- ^ FlushableHashAggregateExecTransformer (37) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (36) - : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (35) - : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (26) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (24) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (23) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (21) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (20) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (19) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (34) - : : : : : : : : : : : : : : : : +- ColumnarExchange (32) - : : : : : : : : : : : : : : : : +- VeloxResizeBatches (31) - : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (29) - : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (28) - : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (27) - : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (56) - : : : : : : : : : : : : : : : +- ReusedExchange (54) - : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (64) - : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (62) - : : : : : : : : : : : : : : +- ^ FilterExecTransformer (60) - : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (59) - : : : : : : : : : : : : : +- ^ InputIteratorTransformer (79) - : : : : : : : : : : : : : +- ColumnarExchange (77) - : : : : : : : : : : : : : +- VeloxResizeBatches (76) - : : : : : : : : : : : : : +- ^ ProjectExecTransformer (74) - : : : : : : : : : : : : : +- ^ FilterExecTransformer (73) - : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (72) - : : : : : : : : : : : : +- ^ InputIteratorTransformer (87) - : : : : : : : : : : : : +- ColumnarBroadcastExchange (85) - : : : : : : : : : : : : +- ^ FilterExecTransformer (83) - : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (82) - : : : : : : : : : : : +- ^ InputIteratorTransformer (92) - : : : : : : : : : : : +- ReusedExchange (90) - : : : : : : : : : : +- ^ InputIteratorTransformer (107) - : : : : : : : : : : +- ColumnarExchange (105) - : : : : : : : : : : +- VeloxResizeBatches (104) - : : : : : : : : : : +- ^ ProjectExecTransformer (102) - : : : : : : : : : : +- ^ FilterExecTransformer (101) - : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (100) - : : : : : : : : : +- ^ InputIteratorTransformer (117) - : : : : : : : : : +- ReusedExchange (115) - : : : : : : : : +- ^ InputIteratorTransformer (125) - : : : : : : : : +- ColumnarBroadcastExchange (123) - : : : : : : : : +- ^ FilterExecTransformer (121) - : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (120) - : : : : : : : +- ^ InputIteratorTransformer (133) - : : : : : : : +- ColumnarBroadcastExchange (131) - : : : : : : : +- ^ FilterExecTransformer (129) - : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics (128) - : : : : : : +- ^ InputIteratorTransformer (138) - : : : : : : +- ReusedExchange (136) - : : : : : +- ^ InputIteratorTransformer (153) - : : : : : +- ColumnarExchange (151) - : : : : : +- VeloxResizeBatches (150) - : : : : : +- ^ ProjectExecTransformer (148) - : : : : : +- ^ FilterExecTransformer (147) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (146) - : : : : +- ^ InputIteratorTransformer (163) - : : : : +- ReusedExchange (161) - : : : +- ^ InputIteratorTransformer (171) - : : : +- ColumnarBroadcastExchange (169) - : : : +- ^ FilterExecTransformer (167) - : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.income_band (166) - : : +- ^ InputIteratorTransformer (176) - : : +- ReusedExchange (174) - : +- ^ InputIteratorTransformer (185) - : +- ColumnarBroadcastExchange (183) - : +- ^ ProjectExecTransformer (181) - : +- ^ FilterExecTransformer (180) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (179) - +- ^ InputIteratorTransformer (333) - +- ColumnarExchange (331) - +- VeloxResizeBatches (330) - +- ^ ProjectExecTransformer (328) - +- ^ RegularHashAggregateExecTransformer (327) - +- ^ InputIteratorTransformer (326) - +- ColumnarExchange (324) - +- VeloxResizeBatches (323) - +- ^ ProjectExecTransformer (321) - +- ^ FlushableHashAggregateExecTransformer (320) - +- ^ ProjectExecTransformer (319) - +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (318) - :- ^ ProjectExecTransformer (314) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (313) - : :- ^ ProjectExecTransformer (309) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (308) - : : :- ^ ProjectExecTransformer (304) - : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (303) - : : : :- ^ InputIteratorTransformer (299) - : : : : +- ColumnarExchange (297) - : : : : +- VeloxResizeBatches (296) - : : : : +- ^ ProjectExecTransformer (294) - : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (293) - : : : : :- ^ InputIteratorTransformer (289) - : : : : : +- ColumnarExchange (287) - : : : : : +- VeloxResizeBatches (286) - : : : : : +- ^ ProjectExecTransformer (284) - : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) - : : : : : :- ^ ProjectExecTransformer (279) - : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (278) - : : : : : : :- ^ ProjectExecTransformer (274) - : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (273) - : : : : : : : :- ^ ProjectExecTransformer (269) - : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (268) - : : : : : : : : :- ^ InputIteratorTransformer (264) - : : : : : : : : : +- ColumnarExchange (262) - : : : : : : : : : +- VeloxResizeBatches (261) - : : : : : : : : : +- ^ ProjectExecTransformer (259) - : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (258) - : : : : : : : : : :- ^ InputIteratorTransformer (254) - : : : : : : : : : : +- ColumnarExchange (252) - : : : : : : : : : : +- VeloxResizeBatches (251) - : : : : : : : : : : +- ^ ProjectExecTransformer (249) - : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (248) - : : : : : : : : : : :- ^ ProjectExecTransformer (244) - : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (243) - : : : : : : : : : : : :- ^ ProjectExecTransformer (239) - : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (238) - : : : : : : : : : : : : :- ^ InputIteratorTransformer (234) - : : : : : : : : : : : : : +- ColumnarExchange (232) - : : : : : : : : : : : : : +- VeloxResizeBatches (231) - : : : : : : : : : : : : : +- ^ ProjectExecTransformer (229) - : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (228) - : : : : : : : : : : : : : :- ^ ProjectExecTransformer (224) - : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (223) - : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (219) - : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (218) - : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (214) - : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (213) - : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (209) - : : : : : : : : : : : : : : : : : +- ColumnarExchange (207) - : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (206) - : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (204) - : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (203) - : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (202) - : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (212) - : : : : : : : : : : : : : : : : +- ReusedExchange (210) - : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (217) - : : : : : : : : : : : : : : : +- ReusedExchange (215) - : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (222) - : : : : : : : : : : : : : : +- ReusedExchange (220) - : : : : : : : : : : : : : +- ^ InputIteratorTransformer (227) - : : : : : : : : : : : : : +- ReusedExchange (225) - : : : : : : : : : : : : +- ^ InputIteratorTransformer (237) - : : : : : : : : : : : : +- ReusedExchange (235) - : : : : : : : : : : : +- ^ InputIteratorTransformer (242) - : : : : : : : : : : : +- ReusedExchange (240) - : : : : : : : : : : +- ^ InputIteratorTransformer (247) - : : : : : : : : : : +- ReusedExchange (245) - : : : : : : : : : +- ^ InputIteratorTransformer (257) - : : : : : : : : : +- ReusedExchange (255) - : : : : : : : : +- ^ InputIteratorTransformer (267) - : : : : : : : : +- ReusedExchange (265) - : : : : : : : +- ^ InputIteratorTransformer (272) - : : : : : : : +- ReusedExchange (270) - : : : : : : +- ^ InputIteratorTransformer (277) - : : : : : : +- ReusedExchange (275) - : : : : : +- ^ InputIteratorTransformer (282) - : : : : : +- ReusedExchange (280) - : : : : +- ^ InputIteratorTransformer (292) - : : : : +- ReusedExchange (290) - : : : +- ^ InputIteratorTransformer (302) - : : : +- ReusedExchange (300) - : : +- ^ InputIteratorTransformer (307) - : : +- ReusedExchange (305) - : +- ^ InputIteratorTransformer (312) - : +- ReusedExchange (310) - +- ^ InputIteratorTransformer (317) - +- ReusedExchange (315) +VeloxColumnarToRow (353) ++- ^ SortExecTransformer (351) + +- ^ InputIteratorTransformer (350) + +- ColumnarExchange (348) + +- VeloxResizeBatches (347) + +- ^ ProjectExecTransformer (345) + +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (344) + :- ^ InputIteratorTransformer (206) + : +- ColumnarExchange (204) + : +- VeloxResizeBatches (203) + : +- ^ ProjectExecTransformer (201) + : +- ^ RegularHashAggregateExecTransformer (200) + : +- ^ InputIteratorTransformer (199) + : +- ColumnarExchange (197) + : +- VeloxResizeBatches (196) + : +- ^ ProjectExecTransformer (194) + : +- ^ FlushableHashAggregateExecTransformer (193) + : +- ^ ProjectExecTransformer (192) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (191) + : :- ^ ProjectExecTransformer (183) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (182) + : : :- ^ ProjectExecTransformer (178) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (177) + : : : :- ^ ProjectExecTransformer (170) + : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (169) + : : : : :- ^ InputIteratorTransformer (165) + : : : : : +- ColumnarExchange (163) + : : : : : +- VeloxResizeBatches (162) + : : : : : +- ^ ProjectExecTransformer (160) + : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (159) + : : : : : :- ^ InputIteratorTransformer (150) + : : : : : : +- ColumnarExchange (148) + : : : : : : +- VeloxResizeBatches (147) + : : : : : : +- ^ ProjectExecTransformer (145) + : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (144) + : : : : : : :- ^ ProjectExecTransformer (140) + : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (139) + : : : : : : : :- ^ ProjectExecTransformer (132) + : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (131) + : : : : : : : : :- ^ ProjectExecTransformer (124) + : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (123) + : : : : : : : : : :- ^ InputIteratorTransformer (119) + : : : : : : : : : : +- ColumnarExchange (117) + : : : : : : : : : : +- VeloxResizeBatches (116) + : : : : : : : : : : +- ^ ProjectExecTransformer (114) + : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (113) + : : : : : : : : : : :- ^ InputIteratorTransformer (104) + : : : : : : : : : : : +- ColumnarExchange (102) + : : : : : : : : : : : +- VeloxResizeBatches (101) + : : : : : : : : : : : +- ^ ProjectExecTransformer (99) + : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (98) + : : : : : : : : : : : :- ^ ProjectExecTransformer (94) + : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (93) + : : : : : : : : : : : : :- ^ ProjectExecTransformer (86) + : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (85) + : : : : : : : : : : : : : :- ^ InputIteratorTransformer (76) + : : : : : : : : : : : : : : +- ColumnarExchange (74) + : : : : : : : : : : : : : : +- VeloxResizeBatches (73) + : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (71) + : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (70) + : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (63) + : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62) + : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (58) + : : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57) + : : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (23) + : : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (22) + : : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (13) + : : : : : : : : : : : : : : : : : : +- ColumnarExchange (11) + : : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (10) + : : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (8) + : : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (7) + : : : : : : : : : : : : : : : : : : +- RowToVeloxColumnar (5) + : : : : : : : : : : : : : : : : : : +- * Filter (4) + : : : : : : : : : : : : : : : : : : +- VeloxColumnarToRow (3) + : : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (21) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (19) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (18) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (16) + : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (15) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (14) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (56) + : : : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (54) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (52) + : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (51) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (50) + : : : : : : : : : : : : : : : : +- ^ RegularHashAggregateExecTransformer (49) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (48) + : : : : : : : : : : : : : : : : +- ColumnarExchange (46) + : : : : : : : : : : : : : : : : +- VeloxResizeBatches (45) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (43) + : : : : : : : : : : : : : : : : +- ^ FlushableHashAggregateExecTransformer (42) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (41) + : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (40) + : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (31) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (29) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (28) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (26) + : : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (25) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (24) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (39) + : : : : : : : : : : : : : : : : +- ColumnarExchange (37) + : : : : : : : : : : : : : : : : +- VeloxResizeBatches (36) + : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (34) + : : : : : : : : : : : : : : : : +- ^ FilterExecTransformer (33) + : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (32) + : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (61) + : : : : : : : : : : : : : : : +- ReusedExchange (59) + : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (69) + : : : : : : : : : : : : : : +- ColumnarBroadcastExchange (67) + : : : : : : : : : : : : : : +- ^ FilterExecTransformer (65) + : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (64) + : : : : : : : : : : : : : +- ^ InputIteratorTransformer (84) + : : : : : : : : : : : : : +- ColumnarExchange (82) + : : : : : : : : : : : : : +- VeloxResizeBatches (81) + : : : : : : : : : : : : : +- ^ ProjectExecTransformer (79) + : : : : : : : : : : : : : +- ^ FilterExecTransformer (78) + : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (77) + : : : : : : : : : : : : +- ^ InputIteratorTransformer (92) + : : : : : : : : : : : : +- ColumnarBroadcastExchange (90) + : : : : : : : : : : : : +- ^ FilterExecTransformer (88) + : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (87) + : : : : : : : : : : : +- ^ InputIteratorTransformer (97) + : : : : : : : : : : : +- ReusedExchange (95) + : : : : : : : : : : +- ^ InputIteratorTransformer (112) + : : : : : : : : : : +- ColumnarExchange (110) + : : : : : : : : : : +- VeloxResizeBatches (109) + : : : : : : : : : : +- ^ ProjectExecTransformer (107) + : : : : : : : : : : +- ^ FilterExecTransformer (106) + : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (105) + : : : : : : : : : +- ^ InputIteratorTransformer (122) + : : : : : : : : : +- ReusedExchange (120) + : : : : : : : : +- ^ InputIteratorTransformer (130) + : : : : : : : : +- ColumnarBroadcastExchange (128) + : : : : : : : : +- ^ FilterExecTransformer (126) + : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (125) + : : : : : : : +- ^ InputIteratorTransformer (138) + : : : : : : : +- ColumnarBroadcastExchange (136) + : : : : : : : +- ^ FilterExecTransformer (134) + : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics (133) + : : : : : : +- ^ InputIteratorTransformer (143) + : : : : : : +- ReusedExchange (141) + : : : : : +- ^ InputIteratorTransformer (158) + : : : : : +- ColumnarExchange (156) + : : : : : +- VeloxResizeBatches (155) + : : : : : +- ^ ProjectExecTransformer (153) + : : : : : +- ^ FilterExecTransformer (152) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (151) + : : : : +- ^ InputIteratorTransformer (168) + : : : : +- ReusedExchange (166) + : : : +- ^ InputIteratorTransformer (176) + : : : +- ColumnarBroadcastExchange (174) + : : : +- ^ FilterExecTransformer (172) + : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.income_band (171) + : : +- ^ InputIteratorTransformer (181) + : : +- ReusedExchange (179) + : +- ^ InputIteratorTransformer (190) + : +- ColumnarBroadcastExchange (188) + : +- ^ ProjectExecTransformer (186) + : +- ^ FilterExecTransformer (185) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (184) + +- ^ InputIteratorTransformer (343) + +- ColumnarExchange (341) + +- VeloxResizeBatches (340) + +- ^ ProjectExecTransformer (338) + +- ^ RegularHashAggregateExecTransformer (337) + +- ^ InputIteratorTransformer (336) + +- ColumnarExchange (334) + +- VeloxResizeBatches (333) + +- ^ ProjectExecTransformer (331) + +- ^ FlushableHashAggregateExecTransformer (330) + +- ^ ProjectExecTransformer (329) + +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (328) + :- ^ ProjectExecTransformer (324) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (323) + : :- ^ ProjectExecTransformer (319) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (318) + : : :- ^ ProjectExecTransformer (314) + : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (313) + : : : :- ^ InputIteratorTransformer (309) + : : : : +- ColumnarExchange (307) + : : : : +- VeloxResizeBatches (306) + : : : : +- ^ ProjectExecTransformer (304) + : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (303) + : : : : :- ^ InputIteratorTransformer (299) + : : : : : +- ColumnarExchange (297) + : : : : : +- VeloxResizeBatches (296) + : : : : : +- ^ ProjectExecTransformer (294) + : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (293) + : : : : : :- ^ ProjectExecTransformer (289) + : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (288) + : : : : : : :- ^ ProjectExecTransformer (284) + : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) + : : : : : : : :- ^ ProjectExecTransformer (279) + : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (278) + : : : : : : : : :- ^ InputIteratorTransformer (274) + : : : : : : : : : +- ColumnarExchange (272) + : : : : : : : : : +- VeloxResizeBatches (271) + : : : : : : : : : +- ^ ProjectExecTransformer (269) + : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (268) + : : : : : : : : : :- ^ InputIteratorTransformer (264) + : : : : : : : : : : +- ColumnarExchange (262) + : : : : : : : : : : +- VeloxResizeBatches (261) + : : : : : : : : : : +- ^ ProjectExecTransformer (259) + : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (258) + : : : : : : : : : : :- ^ ProjectExecTransformer (254) + : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (253) + : : : : : : : : : : : :- ^ ProjectExecTransformer (249) + : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (248) + : : : : : : : : : : : : :- ^ InputIteratorTransformer (244) + : : : : : : : : : : : : : +- ColumnarExchange (242) + : : : : : : : : : : : : : +- VeloxResizeBatches (241) + : : : : : : : : : : : : : +- ^ ProjectExecTransformer (239) + : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (238) + : : : : : : : : : : : : : :- ^ ProjectExecTransformer (234) + : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (233) + : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (229) + : : : : : : : : : : : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (228) + : : : : : : : : : : : : : : : :- ^ ProjectExecTransformer (224) + : : : : : : : : : : : : : : : : +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (223) + : : : : : : : : : : : : : : : : :- ^ InputIteratorTransformer (219) + : : : : : : : : : : : : : : : : : +- ColumnarExchange (217) + : : : : : : : : : : : : : : : : : +- VeloxResizeBatches (216) + : : : : : : : : : : : : : : : : : +- ^ ProjectExecTransformer (214) + : : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (213) + : : : : : : : : : : : : : : : : : +- RowToVeloxColumnar (211) + : : : : : : : : : : : : : : : : : +- * Filter (210) + : : : : : : : : : : : : : : : : : +- VeloxColumnarToRow (209) + : : : : : : : : : : : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (207) + : : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (222) + : : : : : : : : : : : : : : : : +- ReusedExchange (220) + : : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (227) + : : : : : : : : : : : : : : : +- ReusedExchange (225) + : : : : : : : : : : : : : : +- ^ InputIteratorTransformer (232) + : : : : : : : : : : : : : : +- ReusedExchange (230) + : : : : : : : : : : : : : +- ^ InputIteratorTransformer (237) + : : : : : : : : : : : : : +- ReusedExchange (235) + : : : : : : : : : : : : +- ^ InputIteratorTransformer (247) + : : : : : : : : : : : : +- ReusedExchange (245) + : : : : : : : : : : : +- ^ InputIteratorTransformer (252) + : : : : : : : : : : : +- ReusedExchange (250) + : : : : : : : : : : +- ^ InputIteratorTransformer (257) + : : : : : : : : : : +- ReusedExchange (255) + : : : : : : : : : +- ^ InputIteratorTransformer (267) + : : : : : : : : : +- ReusedExchange (265) + : : : : : : : : +- ^ InputIteratorTransformer (277) + : : : : : : : : +- ReusedExchange (275) + : : : : : : : +- ^ InputIteratorTransformer (282) + : : : : : : : +- ReusedExchange (280) + : : : : : : +- ^ InputIteratorTransformer (287) + : : : : : : +- ReusedExchange (285) + : : : : : +- ^ InputIteratorTransformer (292) + : : : : : +- ReusedExchange (290) + : : : : +- ^ InputIteratorTransformer (302) + : : : : +- ReusedExchange (300) + : : : +- ^ InputIteratorTransformer (312) + : : : +- ReusedExchange (310) + : : +- ^ InputIteratorTransformer (317) + : : +- ReusedExchange (315) + : +- ^ InputIteratorTransformer (322) + : +- ReusedExchange (320) + +- ^ InputIteratorTransformer (327) + +- ReusedExchange (325) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -266,829 +272,845 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#12), dynamicpruningexpression(ss_so PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (3) +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] +Arguments: false + +(3) VeloxColumnarToRow +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(4) Filter [codegen id : 1] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] +Condition : ((((((((isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#8)) AND isnotnull(ss_store_sk#6)) AND isnotnull(ss_customer_sk#2)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_promo_sk#7)) AND isnotnull(ss_hdemo_sk#4)) AND isnotnull(ss_addr_sk#5)) AND might_contain(Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#1, 42))) + +(5) RowToVeloxColumnar +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(6) InputAdapter +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] + +(7) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -Arguments: ((((((((isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#8)) AND isnotnull(ss_store_sk#6)) AND isnotnull(ss_customer_sk#2)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_promo_sk#7)) AND isnotnull(ss_hdemo_sk#4)) AND isnotnull(ss_addr_sk#5)) AND velox_might_contain(Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#1, 42))) -(3) ProjectExecTransformer +(8) ProjectExecTransformer Output [13]: [hash(ss_item_sk#1, ss_ticket_number#8, 42) AS hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(4) WholeStageCodegenTransformer (4) +(9) WholeStageCodegenTransformer (4) Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [13]: [hash_partition_key#15, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#8, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12], [plan_id=2], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] Arguments: (isnotnull(sr_item_sk#16) AND isnotnull(sr_ticket_number#17)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [3]: [hash(sr_item_sk#16, sr_ticket_number#17, 42) AS hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Input [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] -(12) WholeStageCodegenTransformer (5) +(17) WholeStageCodegenTransformer (5) Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [3]: [hash_partition_key#19, sr_item_sk#16, sr_ticket_number#17] Arguments: hashpartitioning(sr_item_sk#16, sr_ticket_number#17, 1), ENSURE_REQUIREMENTS, [sr_item_sk#16, sr_ticket_number#17], [plan_id=3], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [2]: [sr_item_sk#16, sr_ticket_number#17] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [2]: [sr_item_sk#16, sr_ticket_number#17] -(17) ShuffledHashJoinExecTransformer +(22) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#1, ss_ticket_number#8] Right keys [2]: [sr_item_sk#16, sr_ticket_number#17] Join type: Inner Join condition: None -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, sr_item_sk#16, sr_ticket_number#17] -(19) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(24) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_order_number)] ReadSchema: struct -(20) FilterExecTransformer +(25) FilterExecTransformer Input [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] Arguments: (isnotnull(cs_item_sk#20) AND isnotnull(cs_order_number#21)) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [4]: [hash(cs_item_sk#20, cs_order_number#21, 42) AS hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Input [4]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cs_sold_date_sk#23] -(22) WholeStageCodegenTransformer (6) +(27) WholeStageCodegenTransformer (6) Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: false -(23) VeloxResizeBatches +(28) VeloxResizeBatches Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: 1024, 2147483647, 10485760 -(24) ColumnarExchange +(29) ColumnarExchange Input [4]: [hash_partition_key#24, cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] Arguments: hashpartitioning(cs_item_sk#20, cs_order_number#21, 1), ENSURE_REQUIREMENTS, [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22], [plan_id=4], [shuffle_writer_type=hash] -(25) InputAdapter +(30) InputAdapter Input [3]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] -(26) InputIteratorTransformer +(31) InputIteratorTransformer Input [3]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22] -(27) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(32) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct -(28) FilterExecTransformer +(33) FilterExecTransformer Input [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] Arguments: (isnotnull(cr_item_sk#25) AND isnotnull(cr_order_number#26)) -(29) ProjectExecTransformer +(34) ProjectExecTransformer Output [6]: [hash(cr_item_sk#25, cr_order_number#26, 42) AS hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Input [6]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29, cr_returned_date_sk#30] -(30) WholeStageCodegenTransformer (7) +(35) WholeStageCodegenTransformer (7) Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: false -(31) VeloxResizeBatches +(36) VeloxResizeBatches Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: 1024, 2147483647, 10485760 -(32) ColumnarExchange +(37) ColumnarExchange Input [6]: [hash_partition_key#31, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] Arguments: hashpartitioning(cr_item_sk#25, cr_order_number#26, 1), ENSURE_REQUIREMENTS, [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29], [plan_id=5], [shuffle_writer_type=hash] -(33) InputAdapter +(38) InputAdapter Input [5]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(34) InputIteratorTransformer +(39) InputIteratorTransformer Input [5]: [cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(35) ShuffledHashJoinExecTransformer +(40) ShuffledHashJoinExecTransformer Left keys [2]: [cs_item_sk#20, cs_order_number#21] Right keys [2]: [cr_item_sk#25, cr_order_number#26] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(41) ProjectExecTransformer Output [3]: [cs_item_sk#20, UnscaledValue(cs_ext_list_price#22) AS _pre_1#32, ((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29) AS _pre_2#33] Input [8]: [cs_item_sk#20, cs_order_number#21, cs_ext_list_price#22, cr_item_sk#25, cr_order_number#26, cr_refunded_cash#27, cr_reversed_charge#28, cr_store_credit#29] -(37) FlushableHashAggregateExecTransformer +(42) FlushableHashAggregateExecTransformer Input [3]: [cs_item_sk#20, _pre_1#32, _pre_2#33] Keys [1]: [cs_item_sk#20] Functions [2]: [partial_sum(_pre_1#32), partial_sum(_pre_2#33)] Aggregate Attributes [3]: [sum#34, sum#35, isEmpty#36] Results [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(38) ProjectExecTransformer +(43) ProjectExecTransformer Output [5]: [hash(cs_item_sk#20, 42) AS hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(39) WholeStageCodegenTransformer (8) +(44) WholeStageCodegenTransformer (8) Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: false -(40) VeloxResizeBatches +(45) VeloxResizeBatches Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: 1024, 2147483647, 10485760 -(41) ColumnarExchange +(46) ColumnarExchange Input [5]: [hash_partition_key#40, cs_item_sk#20, sum#37, sum#38, isEmpty#39] Arguments: hashpartitioning(cs_item_sk#20, 1), ENSURE_REQUIREMENTS, [cs_item_sk#20, sum#37, sum#38, isEmpty#39], [plan_id=6], [shuffle_writer_type=hash] -(42) InputAdapter +(47) InputAdapter Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(43) InputIteratorTransformer +(48) InputIteratorTransformer Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] -(44) RegularHashAggregateExecTransformer +(49) RegularHashAggregateExecTransformer Input [4]: [cs_item_sk#20, sum#37, sum#38, isEmpty#39] Keys [1]: [cs_item_sk#20] Functions [2]: [sum(UnscaledValue(cs_ext_list_price#22)), sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))] Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] Results [3]: [cs_item_sk#20, sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] -(45) ProjectExecTransformer +(50) ProjectExecTransformer Output [3]: [cs_item_sk#20, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#22))#41,17,2) AS sale#43, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42 AS refund#44] Input [3]: [cs_item_sk#20, sum(UnscaledValue(cs_ext_list_price#22))#41, sum(((cr_refunded_cash#27 + cr_reversed_charge#28) + cr_store_credit#29))#42] -(46) FilterExecTransformer +(51) FilterExecTransformer Input [3]: [cs_item_sk#20, sale#43, refund#44] Arguments: ((isnotnull(sale#43) AND isnotnull(refund#44)) AND (cast(sale#43 as decimal(21,2)) > (2 * refund#44))) -(47) ProjectExecTransformer +(52) ProjectExecTransformer Output [1]: [cs_item_sk#20] Input [3]: [cs_item_sk#20, sale#43, refund#44] -(48) WholeStageCodegenTransformer (9) +(53) WholeStageCodegenTransformer (9) Input [1]: [cs_item_sk#20] Arguments: false -(49) ColumnarBroadcastExchange +(54) ColumnarBroadcastExchange Input [1]: [cs_item_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -(50) InputAdapter +(55) InputAdapter Input [1]: [cs_item_sk#20] -(51) InputIteratorTransformer +(56) InputIteratorTransformer Input [1]: [cs_item_sk#20] -(52) BroadcastHashJoinExecTransformer +(57) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [cs_item_sk#20] Join type: Inner Join condition: None -(53) ProjectExecTransformer +(58) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, cs_item_sk#20] -(54) ReusedExchange [Reuses operator id: 359] +(59) ReusedExchange [Reuses operator id: 368] Output [2]: [d_date_sk#45, d_year#46] -(55) InputAdapter +(60) InputAdapter Input [2]: [d_date_sk#45, d_year#46] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [2]: [d_date_sk#45, d_year#46] -(57) BroadcastHashJoinExecTransformer +(62) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#12] Right keys [1]: [d_date_sk#45] Join type: Inner Join condition: None -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46] Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, d_date_sk#45, d_year#46] -(59) FileSourceScanExecTransformer parquet spark_catalog.default.store +(64) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_name), IsNotNull(s_zip)] ReadSchema: struct -(60) FilterExecTransformer +(65) FilterExecTransformer Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: ((isnotnull(s_store_sk#47) AND isnotnull(s_store_name#48)) AND isnotnull(s_zip#49)) -(61) WholeStageCodegenTransformer (11) +(66) WholeStageCodegenTransformer (11) Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: false -(62) ColumnarBroadcastExchange +(67) ColumnarBroadcastExchange Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] -(63) InputAdapter +(68) InputAdapter Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] -(64) InputIteratorTransformer +(69) InputIteratorTransformer Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] -(65) BroadcastHashJoinExecTransformer +(70) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#6] Right keys [1]: [s_store_sk#47] Join type: Inner Join condition: None -(66) ProjectExecTransformer +(71) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#2, 42) AS hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_sk#47, s_store_name#48, s_zip#49] -(67) WholeStageCodegenTransformer (12) +(72) WholeStageCodegenTransformer (12) Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: false -(68) VeloxResizeBatches +(73) VeloxResizeBatches Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: 1024, 2147483647, 10485760 -(69) ColumnarExchange +(74) ColumnarExchange Input [13]: [hash_partition_key#50, ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] Arguments: hashpartitioning(ss_customer_sk#2, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49], [plan_id=9], [shuffle_writer_type=hash] -(70) InputAdapter +(75) InputAdapter Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] -(71) InputIteratorTransformer +(76) InputIteratorTransformer Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] -(72) FileSourceScanExecTransformer parquet spark_catalog.default.customer +(77) FileSourceScanExecTransformer parquet spark_catalog.default.customer Output [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_first_sales_date_sk), IsNotNull(c_first_shipto_date_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_hdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct -(73) FilterExecTransformer +(78) FilterExecTransformer Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: (((((isnotnull(c_customer_sk#51) AND isnotnull(c_first_sales_date_sk#56)) AND isnotnull(c_first_shipto_date_sk#55)) AND isnotnull(c_current_cdemo_sk#52)) AND isnotnull(c_current_hdemo_sk#53)) AND isnotnull(c_current_addr_sk#54)) -(74) ProjectExecTransformer +(79) ProjectExecTransformer Output [7]: [hash(c_customer_sk#51, 42) AS hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(75) WholeStageCodegenTransformer (13) +(80) WholeStageCodegenTransformer (13) Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: false -(76) VeloxResizeBatches +(81) VeloxResizeBatches Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: 1024, 2147483647, 10485760 -(77) ColumnarExchange +(82) ColumnarExchange Input [7]: [hash_partition_key#57, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Arguments: hashpartitioning(c_customer_sk#51, 1), ENSURE_REQUIREMENTS, [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56], [plan_id=10], [shuffle_writer_type=hash] -(78) InputAdapter +(83) InputAdapter Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(79) InputIteratorTransformer +(84) InputIteratorTransformer Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(80) ShuffledHashJoinExecTransformer +(85) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#2] Right keys [1]: [c_customer_sk#51] Join type: Inner Join condition: None -(81) ProjectExecTransformer +(86) ProjectExecTransformer Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] Input [18]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56] -(82) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(87) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#58, d_year#59] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct -(83) FilterExecTransformer +(88) FilterExecTransformer Input [2]: [d_date_sk#58, d_year#59] Arguments: isnotnull(d_date_sk#58) -(84) WholeStageCodegenTransformer (14) +(89) WholeStageCodegenTransformer (14) Input [2]: [d_date_sk#58, d_year#59] Arguments: false -(85) ColumnarBroadcastExchange +(90) ColumnarBroadcastExchange Input [2]: [d_date_sk#58, d_year#59] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=11] -(86) InputAdapter +(91) InputAdapter Input [2]: [d_date_sk#58, d_year#59] -(87) InputIteratorTransformer +(92) InputIteratorTransformer Input [2]: [d_date_sk#58, d_year#59] -(88) BroadcastHashJoinExecTransformer +(93) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_sales_date_sk#56] Right keys [1]: [d_date_sk#58] Join type: Inner Join condition: None -(89) ProjectExecTransformer +(94) ProjectExecTransformer Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, d_year#59] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56, d_date_sk#58, d_year#59] -(90) ReusedExchange [Reuses operator id: 85] +(95) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#60, d_year#61] -(91) InputAdapter +(96) InputAdapter Input [2]: [d_date_sk#60, d_year#61] -(92) InputIteratorTransformer +(97) InputIteratorTransformer Input [2]: [d_date_sk#60, d_year#61] -(93) BroadcastHashJoinExecTransformer +(98) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_shipto_date_sk#55] Right keys [1]: [d_date_sk#60] Join type: Inner Join condition: None -(94) ProjectExecTransformer +(99) ProjectExecTransformer Output [17]: [hash(ss_cdemo_sk#3, 42) AS hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, d_year#59, d_date_sk#60, d_year#61] -(95) WholeStageCodegenTransformer (16) +(100) WholeStageCodegenTransformer (16) Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: false -(96) VeloxResizeBatches +(101) VeloxResizeBatches Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: 1024, 2147483647, 10485760 -(97) ColumnarExchange +(102) ColumnarExchange Input [17]: [hash_partition_key#62, ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Arguments: hashpartitioning(ss_cdemo_sk#3, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61], [plan_id=12], [shuffle_writer_type=hash] -(98) InputAdapter +(103) InputAdapter Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] -(99) InputIteratorTransformer +(104) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] -(100) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics +(105) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics Output [2]: [cd_demo_sk#63, cd_marital_status#64] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status)] ReadSchema: struct -(101) FilterExecTransformer +(106) FilterExecTransformer Input [2]: [cd_demo_sk#63, cd_marital_status#64] Arguments: (isnotnull(cd_demo_sk#63) AND isnotnull(cd_marital_status#64)) -(102) ProjectExecTransformer +(107) ProjectExecTransformer Output [3]: [hash(cd_demo_sk#63, 42) AS hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(103) WholeStageCodegenTransformer (17) +(108) WholeStageCodegenTransformer (17) Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: false -(104) VeloxResizeBatches +(109) VeloxResizeBatches Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: 1024, 2147483647, 10485760 -(105) ColumnarExchange +(110) ColumnarExchange Input [3]: [hash_partition_key#65, cd_demo_sk#63, cd_marital_status#64] Arguments: hashpartitioning(cd_demo_sk#63, 1), ENSURE_REQUIREMENTS, [cd_demo_sk#63, cd_marital_status#64], [plan_id=13], [shuffle_writer_type=hash] -(106) InputAdapter +(111) InputAdapter Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(107) InputIteratorTransformer +(112) InputIteratorTransformer Input [2]: [cd_demo_sk#63, cd_marital_status#64] -(108) ShuffledHashJoinExecTransformer +(113) ShuffledHashJoinExecTransformer Left keys [1]: [ss_cdemo_sk#3] Right keys [1]: [cd_demo_sk#63] Join type: Inner Join condition: None -(109) ProjectExecTransformer +(114) ProjectExecTransformer Output [17]: [hash(c_current_cdemo_sk#52, 42) AS hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_demo_sk#63, cd_marital_status#64] -(110) WholeStageCodegenTransformer (18) +(115) WholeStageCodegenTransformer (18) Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: false -(111) VeloxResizeBatches +(116) VeloxResizeBatches Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: 1024, 2147483647, 10485760 -(112) ColumnarExchange +(117) ColumnarExchange Input [17]: [hash_partition_key#66, ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] Arguments: hashpartitioning(c_current_cdemo_sk#52, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64], [plan_id=14], [shuffle_writer_type=hash] -(113) InputAdapter +(118) InputAdapter Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] -(114) InputIteratorTransformer +(119) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64] -(115) ReusedExchange [Reuses operator id: 105] +(120) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#67, cd_marital_status#68] -(116) InputAdapter +(121) InputAdapter Input [2]: [cd_demo_sk#67, cd_marital_status#68] -(117) InputIteratorTransformer +(122) InputIteratorTransformer Input [2]: [cd_demo_sk#67, cd_marital_status#68] -(118) ShuffledHashJoinExecTransformer +(123) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#52] Right keys [1]: [cd_demo_sk#67] Join type: Inner Join condition: NOT (cd_marital_status#64 = cd_marital_status#68) -(119) ProjectExecTransformer +(124) ProjectExecTransformer Output [14]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [18]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, cd_marital_status#64, cd_demo_sk#67, cd_marital_status#68] -(120) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(125) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [1]: [p_promo_sk#69] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_promo_sk)] ReadSchema: struct -(121) FilterExecTransformer +(126) FilterExecTransformer Input [1]: [p_promo_sk#69] Arguments: isnotnull(p_promo_sk#69) -(122) WholeStageCodegenTransformer (20) +(127) WholeStageCodegenTransformer (20) Input [1]: [p_promo_sk#69] Arguments: false -(123) ColumnarBroadcastExchange +(128) ColumnarBroadcastExchange Input [1]: [p_promo_sk#69] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -(124) InputAdapter +(129) InputAdapter Input [1]: [p_promo_sk#69] -(125) InputIteratorTransformer +(130) InputIteratorTransformer Input [1]: [p_promo_sk#69] -(126) BroadcastHashJoinExecTransformer +(131) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#7] Right keys [1]: [p_promo_sk#69] Join type: Inner Join condition: None -(127) ProjectExecTransformer +(132) ProjectExecTransformer Output [13]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61] Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, p_promo_sk#69] -(128) FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics +(133) FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics Output [2]: [hd_demo_sk#70, hd_income_band_sk#71] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_demo_sk), IsNotNull(hd_income_band_sk)] ReadSchema: struct -(129) FilterExecTransformer +(134) FilterExecTransformer Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: (isnotnull(hd_demo_sk#70) AND isnotnull(hd_income_band_sk#71)) -(130) WholeStageCodegenTransformer (21) +(135) WholeStageCodegenTransformer (21) Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: false -(131) ColumnarBroadcastExchange +(136) ColumnarBroadcastExchange Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=16] -(132) InputAdapter +(137) InputAdapter Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] -(133) InputIteratorTransformer +(138) InputIteratorTransformer Input [2]: [hd_demo_sk#70, hd_income_band_sk#71] -(134) BroadcastHashJoinExecTransformer +(139) BroadcastHashJoinExecTransformer Left keys [1]: [ss_hdemo_sk#4] Right keys [1]: [hd_demo_sk#70] Join type: Inner Join condition: None -(135) ProjectExecTransformer +(140) ProjectExecTransformer Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71] Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_demo_sk#70, hd_income_band_sk#71] -(136) ReusedExchange [Reuses operator id: 131] +(141) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(137) InputAdapter +(142) InputAdapter Input [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(138) InputIteratorTransformer +(143) InputIteratorTransformer Input [2]: [hd_demo_sk#72, hd_income_band_sk#73] -(139) BroadcastHashJoinExecTransformer +(144) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_hdemo_sk#53] Right keys [1]: [hd_demo_sk#72] Join type: Inner Join condition: None -(140) ProjectExecTransformer +(145) ProjectExecTransformer Output [14]: [hash(ss_addr_sk#5, 42) AS hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Input [15]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_demo_sk#72, hd_income_band_sk#73] -(141) WholeStageCodegenTransformer (23) +(146) WholeStageCodegenTransformer (23) Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: false -(142) VeloxResizeBatches +(147) VeloxResizeBatches Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: 1024, 2147483647, 10485760 -(143) ColumnarExchange +(148) ColumnarExchange Input [14]: [hash_partition_key#74, ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] Arguments: hashpartitioning(ss_addr_sk#5, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73], [plan_id=17], [shuffle_writer_type=hash] -(144) InputAdapter +(149) InputAdapter Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] -(145) InputIteratorTransformer +(150) InputIteratorTransformer Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73] -(146) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address +(151) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address Output [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct -(147) FilterExecTransformer +(152) FilterExecTransformer Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: isnotnull(ca_address_sk#75) -(148) ProjectExecTransformer +(153) ProjectExecTransformer Output [6]: [hash(ca_address_sk#75, 42) AS hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(149) WholeStageCodegenTransformer (24) +(154) WholeStageCodegenTransformer (24) Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: false -(150) VeloxResizeBatches +(155) VeloxResizeBatches Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: 1024, 2147483647, 10485760 -(151) ColumnarExchange +(156) ColumnarExchange Input [6]: [hash_partition_key#80, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: hashpartitioning(ca_address_sk#75, 1), ENSURE_REQUIREMENTS, [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79], [plan_id=18], [shuffle_writer_type=hash] -(152) InputAdapter +(157) InputAdapter Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(153) InputIteratorTransformer +(158) InputIteratorTransformer Input [5]: [ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(154) ShuffledHashJoinExecTransformer +(159) ShuffledHashJoinExecTransformer Left keys [1]: [ss_addr_sk#5] Right keys [1]: [ca_address_sk#75] Join type: Inner Join condition: None -(155) ProjectExecTransformer +(160) ProjectExecTransformer Output [17]: [hash(c_current_addr_sk#54, 42) AS hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Input [18]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_address_sk#75, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(156) WholeStageCodegenTransformer (25) +(161) WholeStageCodegenTransformer (25) Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: false -(157) VeloxResizeBatches +(162) VeloxResizeBatches Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: 1024, 2147483647, 10485760 -(158) ColumnarExchange +(163) ColumnarExchange Input [17]: [hash_partition_key#81, ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] Arguments: hashpartitioning(c_current_addr_sk#54, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79], [plan_id=19], [shuffle_writer_type=hash] -(159) InputAdapter +(164) InputAdapter Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(160) InputIteratorTransformer +(165) InputIteratorTransformer Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79] -(161) ReusedExchange [Reuses operator id: 151] +(166) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(162) InputAdapter +(167) InputAdapter Input [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(163) InputIteratorTransformer +(168) InputIteratorTransformer Input [5]: [ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(164) ShuffledHashJoinExecTransformer +(169) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#54] Right keys [1]: [ca_address_sk#82] Join type: Inner Join condition: None -(165) ProjectExecTransformer +(170) ProjectExecTransformer Output [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#54, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_address_sk#82, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] -(166) FileSourceScanExecTransformer parquet spark_catalog.default.income_band +(171) FileSourceScanExecTransformer parquet spark_catalog.default.income_band Output [1]: [ib_income_band_sk#87] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/income_band] PushedFilters: [IsNotNull(ib_income_band_sk)] ReadSchema: struct -(167) FilterExecTransformer +(172) FilterExecTransformer Input [1]: [ib_income_band_sk#87] Arguments: isnotnull(ib_income_band_sk#87) -(168) WholeStageCodegenTransformer (27) +(173) WholeStageCodegenTransformer (27) Input [1]: [ib_income_band_sk#87] Arguments: false -(169) ColumnarBroadcastExchange +(174) ColumnarBroadcastExchange Input [1]: [ib_income_band_sk#87] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=20] -(170) InputAdapter +(175) InputAdapter Input [1]: [ib_income_band_sk#87] -(171) InputIteratorTransformer +(176) InputIteratorTransformer Input [1]: [ib_income_band_sk#87] -(172) BroadcastHashJoinExecTransformer +(177) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#71] Right keys [1]: [ib_income_band_sk#87] Join type: Inner Join condition: None -(173) ProjectExecTransformer +(178) ProjectExecTransformer Output [18]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#71, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, ib_income_band_sk#87] -(174) ReusedExchange [Reuses operator id: 169] +(179) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#88] -(175) InputAdapter +(180) InputAdapter Input [1]: [ib_income_band_sk#88] -(176) InputIteratorTransformer +(181) InputIteratorTransformer Input [1]: [ib_income_band_sk#88] -(177) BroadcastHashJoinExecTransformer +(182) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#73] Right keys [1]: [ib_income_band_sk#88] Join type: Inner Join condition: None -(178) ProjectExecTransformer +(183) ProjectExecTransformer Output [17]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86] Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, hd_income_band_sk#73, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, ib_income_band_sk#88] -(179) FileSourceScanExecTransformer parquet spark_catalog.default.item +(184) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood ,floral ,indian ,medium ,purple ,spring ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)] ReadSchema: struct -(180) FilterExecTransformer +(185) FilterExecTransformer Input [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] Arguments: ((((((isnotnull(i_current_price#90) AND i_color#91 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#90 >= 64.00)) AND (i_current_price#90 <= 74.00)) AND (i_current_price#90 >= 65.00)) AND (i_current_price#90 <= 79.00)) AND isnotnull(i_item_sk#89)) -(181) ProjectExecTransformer +(186) ProjectExecTransformer Output [2]: [i_item_sk#89, i_product_name#92] Input [4]: [i_item_sk#89, i_current_price#90, i_color#91, i_product_name#92] -(182) WholeStageCodegenTransformer (29) +(187) WholeStageCodegenTransformer (29) Input [2]: [i_item_sk#89, i_product_name#92] Arguments: false -(183) ColumnarBroadcastExchange +(188) ColumnarBroadcastExchange Input [2]: [i_item_sk#89, i_product_name#92] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=21] -(184) InputAdapter +(189) InputAdapter Input [2]: [i_item_sk#89, i_product_name#92] -(185) InputIteratorTransformer +(190) InputIteratorTransformer Input [2]: [i_item_sk#89, i_product_name#92] -(186) BroadcastHashJoinExecTransformer +(191) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#89] Join type: Inner Join condition: None -(187) ProjectExecTransformer +(192) ProjectExecTransformer Output [18]: [d_year#46, d_year#59, d_year#61, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92, UnscaledValue(ss_wholesale_cost#9) AS _pre_3#93, UnscaledValue(ss_list_price#10) AS _pre_4#94, UnscaledValue(ss_coupon_amt#11) AS _pre_5#95] Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#59, d_year#61, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92] -(188) FlushableHashAggregateExecTransformer +(193) FlushableHashAggregateExecTransformer Input [18]: [d_year#46, d_year#59, d_year#61, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, i_item_sk#89, i_product_name#92, _pre_3#93, _pre_4#94, _pre_5#95] Keys [15]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61] Functions [4]: [partial_count(1), partial_sum(_pre_3#93), partial_sum(_pre_4#94), partial_sum(_pre_5#95)] Aggregate Attributes [4]: [count#96, sum#97, sum#98, sum#99] Results [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(189) ProjectExecTransformer +(194) ProjectExecTransformer Output [20]: [hash(i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, 42) AS hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(190) WholeStageCodegenTransformer (30) +(195) WholeStageCodegenTransformer (30) Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: false -(191) VeloxResizeBatches +(196) VeloxResizeBatches Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: 1024, 2147483647, 10485760 -(192) ColumnarExchange +(197) ColumnarExchange Input [20]: [hash_partition_key#104, i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Arguments: hashpartitioning(i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, 1), ENSURE_REQUIREMENTS, [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103], [plan_id=22], [shuffle_writer_type=hash] -(193) InputAdapter +(198) InputAdapter Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(194) InputIteratorTransformer +(199) InputIteratorTransformer Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] -(195) RegularHashAggregateExecTransformer +(200) RegularHashAggregateExecTransformer Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count#100, sum#101, sum#102, sum#103] Keys [15]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61] Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#9)), sum(UnscaledValue(ss_list_price#10)), sum(UnscaledValue(ss_coupon_amt#11))] Aggregate Attributes [4]: [count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] Results [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] -(196) ProjectExecTransformer +(201) ProjectExecTransformer Output [18]: [hash(i_item_sk#89, s_store_name#48, s_zip#49, 42) AS hash_partition_key#109, i_product_name#92 AS product_name#110, i_item_sk#89 AS item_sk#111, s_store_name#48 AS store_name#112, s_zip#49 AS store_zip#113, ca_street_number#76 AS b_street_number#114, ca_street_name#77 AS b_streen_name#115, ca_city#78 AS b_city#116, ca_zip#79 AS b_zip#117, ca_street_number#83 AS c_street_number#118, ca_street_name#84 AS c_street_name#119, ca_city#85 AS c_city#120, ca_zip#86 AS c_zip#121, d_year#46 AS syear#122, count(1)#105 AS cnt#123, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#9))#106,17,2) AS s1#124, MakeDecimal(sum(UnscaledValue(ss_list_price#10))#107,17,2) AS s2#125, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#11))#108,17,2) AS s3#126] Input [19]: [i_product_name#92, i_item_sk#89, s_store_name#48, s_zip#49, ca_street_number#76, ca_street_name#77, ca_city#78, ca_zip#79, ca_street_number#83, ca_street_name#84, ca_city#85, ca_zip#86, d_year#46, d_year#59, d_year#61, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#9))#106, sum(UnscaledValue(ss_list_price#10))#107, sum(UnscaledValue(ss_coupon_amt#11))#108] -(197) WholeStageCodegenTransformer (31) +(202) WholeStageCodegenTransformer (31) Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: false -(198) VeloxResizeBatches +(203) VeloxResizeBatches Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: 1024, 2147483647, 10485760 -(199) ColumnarExchange +(204) ColumnarExchange Input [18]: [hash_partition_key#109, product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] Arguments: hashpartitioning(item_sk#111, store_name#112, store_zip#113, 1), ENSURE_REQUIREMENTS, [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126], [plan_id=23], [shuffle_writer_type=hash] -(200) InputAdapter +(205) InputAdapter Input [17]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] -(201) InputIteratorTransformer +(206) InputIteratorTransformer Input [17]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126] -(202) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(207) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Batched: true Location: InMemoryFileIndex [] @@ -1096,674 +1118,673 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#138), dynamicpruningexpression(ss_s PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)] ReadSchema: struct -(203) FilterExecTransformer +(208) WholeStageCodegenTransformer (34) +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] +Arguments: false + +(209) VeloxColumnarToRow +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(210) Filter [codegen id : 2] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -Arguments: ((((((((isnotnull(ss_item_sk#127) AND isnotnull(ss_ticket_number#134)) AND isnotnull(ss_store_sk#132)) AND isnotnull(ss_customer_sk#128)) AND isnotnull(ss_cdemo_sk#129)) AND isnotnull(ss_promo_sk#133)) AND isnotnull(ss_hdemo_sk#130)) AND isnotnull(ss_addr_sk#131)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#127, 42))) +Condition : ((((((((isnotnull(ss_item_sk#127) AND isnotnull(ss_ticket_number#134)) AND isnotnull(ss_store_sk#132)) AND isnotnull(ss_customer_sk#128)) AND isnotnull(ss_cdemo_sk#129)) AND isnotnull(ss_promo_sk#133)) AND isnotnull(ss_hdemo_sk#130)) AND isnotnull(ss_addr_sk#131)) AND might_contain(ReusedSubquery Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#127, 42))) -(204) ProjectExecTransformer +(211) RowToVeloxColumnar +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(212) InputAdapter +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(213) InputIteratorTransformer +Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] + +(214) ProjectExecTransformer Output [13]: [hash(ss_item_sk#127, ss_ticket_number#134, 42) AS hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(205) WholeStageCodegenTransformer (35) +(215) WholeStageCodegenTransformer (35) Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: false -(206) VeloxResizeBatches +(216) VeloxResizeBatches Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: 1024, 2147483647, 10485760 -(207) ColumnarExchange +(217) ColumnarExchange Input [13]: [hash_partition_key#140, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Arguments: hashpartitioning(ss_item_sk#127, ss_ticket_number#134, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138], [plan_id=24], [shuffle_writer_type=hash] -(208) InputAdapter +(218) InputAdapter Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(209) InputIteratorTransformer +(219) InputIteratorTransformer Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] -(210) ReusedExchange [Reuses operator id: 14] +(220) ReusedExchange [Reuses operator id: 19] Output [2]: [sr_item_sk#141, sr_ticket_number#142] -(211) InputAdapter +(221) InputAdapter Input [2]: [sr_item_sk#141, sr_ticket_number#142] -(212) InputIteratorTransformer +(222) InputIteratorTransformer Input [2]: [sr_item_sk#141, sr_ticket_number#142] -(213) ShuffledHashJoinExecTransformer +(223) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#127, ss_ticket_number#134] Right keys [2]: [sr_item_sk#141, sr_ticket_number#142] Join type: Inner Join condition: None -(214) ProjectExecTransformer +(224) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [14]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_ticket_number#134, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, sr_item_sk#141, sr_ticket_number#142] -(215) ReusedExchange [Reuses operator id: 49] +(225) ReusedExchange [Reuses operator id: 54] Output [1]: [cs_item_sk#143] -(216) InputAdapter +(226) InputAdapter Input [1]: [cs_item_sk#143] -(217) InputIteratorTransformer +(227) InputIteratorTransformer Input [1]: [cs_item_sk#143] -(218) BroadcastHashJoinExecTransformer +(228) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#127] Right keys [1]: [cs_item_sk#143] Join type: Inner Join condition: None -(219) ProjectExecTransformer +(229) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138] Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, cs_item_sk#143] -(220) ReusedExchange [Reuses operator id: 363] +(230) ReusedExchange [Reuses operator id: 372] Output [2]: [d_date_sk#144, d_year#145] -(221) InputAdapter +(231) InputAdapter Input [2]: [d_date_sk#144, d_year#145] -(222) InputIteratorTransformer +(232) InputIteratorTransformer Input [2]: [d_date_sk#144, d_year#145] -(223) BroadcastHashJoinExecTransformer +(233) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#138] Right keys [1]: [d_date_sk#144] Join type: Inner Join condition: None -(224) ProjectExecTransformer +(234) ProjectExecTransformer Output [11]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145] Input [13]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, ss_sold_date_sk#138, d_date_sk#144, d_year#145] -(225) ReusedExchange [Reuses operator id: 62] +(235) ReusedExchange [Reuses operator id: 67] Output [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(226) InputAdapter +(236) InputAdapter Input [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(227) InputIteratorTransformer +(237) InputIteratorTransformer Input [3]: [s_store_sk#146, s_store_name#147, s_zip#148] -(228) BroadcastHashJoinExecTransformer +(238) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#132] Right keys [1]: [s_store_sk#146] Join type: Inner Join condition: None -(229) ProjectExecTransformer +(239) ProjectExecTransformer Output [13]: [hash(ss_customer_sk#128, 42) AS hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Input [14]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_store_sk#132, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_sk#146, s_store_name#147, s_zip#148] -(230) WholeStageCodegenTransformer (43) +(240) WholeStageCodegenTransformer (43) Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: false -(231) VeloxResizeBatches +(241) VeloxResizeBatches Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: 1024, 2147483647, 10485760 -(232) ColumnarExchange +(242) ColumnarExchange Input [13]: [hash_partition_key#149, ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] Arguments: hashpartitioning(ss_customer_sk#128, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148], [plan_id=25], [shuffle_writer_type=hash] -(233) InputAdapter +(243) InputAdapter Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] -(234) InputIteratorTransformer +(244) InputIteratorTransformer Input [12]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148] -(235) ReusedExchange [Reuses operator id: 77] +(245) ReusedExchange [Reuses operator id: 82] Output [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(236) InputAdapter +(246) InputAdapter Input [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(237) InputIteratorTransformer +(247) InputIteratorTransformer Input [6]: [c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(238) ShuffledHashJoinExecTransformer +(248) ShuffledHashJoinExecTransformer Left keys [1]: [ss_customer_sk#128] Right keys [1]: [c_customer_sk#150] Join type: Inner Join condition: None -(239) ProjectExecTransformer +(249) ProjectExecTransformer Output [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] Input [18]: [ss_item_sk#127, ss_customer_sk#128, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_customer_sk#150, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155] -(240) ReusedExchange [Reuses operator id: 85] +(250) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#156, d_year#157] -(241) InputAdapter +(251) InputAdapter Input [2]: [d_date_sk#156, d_year#157] -(242) InputIteratorTransformer +(252) InputIteratorTransformer Input [2]: [d_date_sk#156, d_year#157] -(243) BroadcastHashJoinExecTransformer +(253) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_sales_date_sk#155] Right keys [1]: [d_date_sk#156] Join type: Inner Join condition: None -(244) ProjectExecTransformer +(254) ProjectExecTransformer Output [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, d_year#157] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, c_first_sales_date_sk#155, d_date_sk#156, d_year#157] -(245) ReusedExchange [Reuses operator id: 85] +(255) ReusedExchange [Reuses operator id: 90] Output [2]: [d_date_sk#158, d_year#159] -(246) InputAdapter +(256) InputAdapter Input [2]: [d_date_sk#158, d_year#159] -(247) InputIteratorTransformer +(257) InputIteratorTransformer Input [2]: [d_date_sk#158, d_year#159] -(248) BroadcastHashJoinExecTransformer +(258) BroadcastHashJoinExecTransformer Left keys [1]: [c_first_shipto_date_sk#154] Right keys [1]: [d_date_sk#158] Join type: Inner Join condition: None -(249) ProjectExecTransformer +(259) ProjectExecTransformer Output [17]: [hash(ss_cdemo_sk#129, 42) AS hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, c_first_shipto_date_sk#154, d_year#157, d_date_sk#158, d_year#159] -(250) WholeStageCodegenTransformer (47) +(260) WholeStageCodegenTransformer (47) Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: false -(251) VeloxResizeBatches +(261) VeloxResizeBatches Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: 1024, 2147483647, 10485760 -(252) ColumnarExchange +(262) ColumnarExchange Input [17]: [hash_partition_key#160, ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Arguments: hashpartitioning(ss_cdemo_sk#129, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159], [plan_id=26], [shuffle_writer_type=hash] -(253) InputAdapter +(263) InputAdapter Input [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] -(254) InputIteratorTransformer +(264) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] -(255) ReusedExchange [Reuses operator id: 105] +(265) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#161, cd_marital_status#162] -(256) InputAdapter +(266) InputAdapter Input [2]: [cd_demo_sk#161, cd_marital_status#162] -(257) InputIteratorTransformer +(267) InputIteratorTransformer Input [2]: [cd_demo_sk#161, cd_marital_status#162] -(258) ShuffledHashJoinExecTransformer +(268) ShuffledHashJoinExecTransformer Left keys [1]: [ss_cdemo_sk#129] Right keys [1]: [cd_demo_sk#161] Join type: Inner Join condition: None -(259) ProjectExecTransformer +(269) ProjectExecTransformer Output [17]: [hash(c_current_cdemo_sk#151, 42) AS hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Input [18]: [ss_item_sk#127, ss_cdemo_sk#129, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_demo_sk#161, cd_marital_status#162] -(260) WholeStageCodegenTransformer (49) +(270) WholeStageCodegenTransformer (49) Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: false -(261) VeloxResizeBatches +(271) VeloxResizeBatches Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: 1024, 2147483647, 10485760 -(262) ColumnarExchange +(272) ColumnarExchange Input [17]: [hash_partition_key#163, ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] Arguments: hashpartitioning(c_current_cdemo_sk#151, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162], [plan_id=27], [shuffle_writer_type=hash] -(263) InputAdapter +(273) InputAdapter Input [16]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] -(264) InputIteratorTransformer +(274) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162] -(265) ReusedExchange [Reuses operator id: 105] +(275) ReusedExchange [Reuses operator id: 110] Output [2]: [cd_demo_sk#164, cd_marital_status#165] -(266) InputAdapter +(276) InputAdapter Input [2]: [cd_demo_sk#164, cd_marital_status#165] -(267) InputIteratorTransformer +(277) InputIteratorTransformer Input [2]: [cd_demo_sk#164, cd_marital_status#165] -(268) ShuffledHashJoinExecTransformer +(278) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_cdemo_sk#151] Right keys [1]: [cd_demo_sk#164] Join type: Inner Join condition: NOT (cd_marital_status#162 = cd_marital_status#165) -(269) ProjectExecTransformer +(279) ProjectExecTransformer Output [14]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [18]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_cdemo_sk#151, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, cd_marital_status#162, cd_demo_sk#164, cd_marital_status#165] -(270) ReusedExchange [Reuses operator id: 123] +(280) ReusedExchange [Reuses operator id: 128] Output [1]: [p_promo_sk#166] -(271) InputAdapter +(281) InputAdapter Input [1]: [p_promo_sk#166] -(272) InputIteratorTransformer +(282) InputIteratorTransformer Input [1]: [p_promo_sk#166] -(273) BroadcastHashJoinExecTransformer +(283) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#133] Right keys [1]: [p_promo_sk#166] Join type: Inner Join condition: None -(274) ProjectExecTransformer +(284) ProjectExecTransformer Output [13]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159] Input [15]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_promo_sk#133, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, p_promo_sk#166] -(275) ReusedExchange [Reuses operator id: 131] +(285) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(276) InputAdapter +(286) InputAdapter Input [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(277) InputIteratorTransformer +(287) InputIteratorTransformer Input [2]: [hd_demo_sk#167, hd_income_band_sk#168] -(278) BroadcastHashJoinExecTransformer +(288) BroadcastHashJoinExecTransformer Left keys [1]: [ss_hdemo_sk#130] Right keys [1]: [hd_demo_sk#167] Join type: Inner Join condition: None -(279) ProjectExecTransformer +(289) ProjectExecTransformer Output [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168] Input [15]: [ss_item_sk#127, ss_hdemo_sk#130, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_demo_sk#167, hd_income_band_sk#168] -(280) ReusedExchange [Reuses operator id: 131] +(290) ReusedExchange [Reuses operator id: 136] Output [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(281) InputAdapter +(291) InputAdapter Input [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(282) InputIteratorTransformer +(292) InputIteratorTransformer Input [2]: [hd_demo_sk#169, hd_income_band_sk#170] -(283) BroadcastHashJoinExecTransformer +(293) BroadcastHashJoinExecTransformer Left keys [1]: [c_current_hdemo_sk#152] Right keys [1]: [hd_demo_sk#169] Join type: Inner Join condition: None -(284) ProjectExecTransformer +(294) ProjectExecTransformer Output [14]: [hash(ss_addr_sk#131, 42) AS hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Input [15]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_hdemo_sk#152, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_demo_sk#169, hd_income_band_sk#170] -(285) WholeStageCodegenTransformer (54) +(295) WholeStageCodegenTransformer (54) Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: false -(286) VeloxResizeBatches +(296) VeloxResizeBatches Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: 1024, 2147483647, 10485760 -(287) ColumnarExchange +(297) ColumnarExchange Input [14]: [hash_partition_key#171, ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] Arguments: hashpartitioning(ss_addr_sk#131, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170], [plan_id=28], [shuffle_writer_type=hash] -(288) InputAdapter +(298) InputAdapter Input [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] -(289) InputIteratorTransformer +(299) InputIteratorTransformer Input [13]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170] -(290) ReusedExchange [Reuses operator id: 151] +(300) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(291) InputAdapter +(301) InputAdapter Input [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(292) InputIteratorTransformer +(302) InputIteratorTransformer Input [5]: [ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(293) ShuffledHashJoinExecTransformer +(303) ShuffledHashJoinExecTransformer Left keys [1]: [ss_addr_sk#131] Right keys [1]: [ca_address_sk#172] Join type: Inner Join condition: None -(294) ProjectExecTransformer +(304) ProjectExecTransformer Output [17]: [hash(c_current_addr_sk#153, 42) AS hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Input [18]: [ss_item_sk#127, ss_addr_sk#131, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_address_sk#172, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(295) WholeStageCodegenTransformer (56) +(305) WholeStageCodegenTransformer (56) Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: false -(296) VeloxResizeBatches +(306) VeloxResizeBatches Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: 1024, 2147483647, 10485760 -(297) ColumnarExchange +(307) ColumnarExchange Input [17]: [hash_partition_key#177, ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] Arguments: hashpartitioning(c_current_addr_sk#153, 1), ENSURE_REQUIREMENTS, [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176], [plan_id=29], [shuffle_writer_type=hash] -(298) InputAdapter +(308) InputAdapter Input [16]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(299) InputIteratorTransformer +(309) InputIteratorTransformer Input [16]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176] -(300) ReusedExchange [Reuses operator id: 151] +(310) ReusedExchange [Reuses operator id: 156] Output [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(301) InputAdapter +(311) InputAdapter Input [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(302) InputIteratorTransformer +(312) InputIteratorTransformer Input [5]: [ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(303) ShuffledHashJoinExecTransformer +(313) ShuffledHashJoinExecTransformer Left keys [1]: [c_current_addr_sk#153] Right keys [1]: [ca_address_sk#178] Join type: Inner Join condition: None -(304) ProjectExecTransformer +(314) ProjectExecTransformer Output [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [21]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, c_current_addr_sk#153, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_address_sk#178, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] -(305) ReusedExchange [Reuses operator id: 169] +(315) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#183] -(306) InputAdapter +(316) InputAdapter Input [1]: [ib_income_band_sk#183] -(307) InputIteratorTransformer +(317) InputIteratorTransformer Input [1]: [ib_income_band_sk#183] -(308) BroadcastHashJoinExecTransformer +(318) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#168] Right keys [1]: [ib_income_band_sk#183] Join type: Inner Join condition: None -(309) ProjectExecTransformer +(319) ProjectExecTransformer Output [18]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [20]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, ib_income_band_sk#183] -(310) ReusedExchange [Reuses operator id: 169] +(320) ReusedExchange [Reuses operator id: 174] Output [1]: [ib_income_band_sk#184] -(311) InputAdapter +(321) InputAdapter Input [1]: [ib_income_band_sk#184] -(312) InputIteratorTransformer +(322) InputIteratorTransformer Input [1]: [ib_income_band_sk#184] -(313) BroadcastHashJoinExecTransformer +(323) BroadcastHashJoinExecTransformer Left keys [1]: [hd_income_band_sk#170] Right keys [1]: [ib_income_band_sk#184] Join type: Inner Join condition: None -(314) ProjectExecTransformer +(324) ProjectExecTransformer Output [17]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182] Input [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, hd_income_band_sk#170, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, ib_income_band_sk#184] -(315) ReusedExchange [Reuses operator id: 183] +(325) ReusedExchange [Reuses operator id: 188] Output [2]: [i_item_sk#185, i_product_name#186] -(316) InputAdapter +(326) InputAdapter Input [2]: [i_item_sk#185, i_product_name#186] -(317) InputIteratorTransformer +(327) InputIteratorTransformer Input [2]: [i_item_sk#185, i_product_name#186] -(318) BroadcastHashJoinExecTransformer +(328) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#127] Right keys [1]: [i_item_sk#185] Join type: Inner Join condition: None -(319) ProjectExecTransformer +(329) ProjectExecTransformer Output [18]: [d_year#145, d_year#157, d_year#159, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186, UnscaledValue(ss_wholesale_cost#135) AS _pre_6#187, UnscaledValue(ss_list_price#136) AS _pre_7#188, UnscaledValue(ss_coupon_amt#137) AS _pre_8#189] Input [19]: [ss_item_sk#127, ss_wholesale_cost#135, ss_list_price#136, ss_coupon_amt#137, d_year#145, s_store_name#147, s_zip#148, d_year#157, d_year#159, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186] -(320) FlushableHashAggregateExecTransformer +(330) FlushableHashAggregateExecTransformer Input [18]: [d_year#145, d_year#157, d_year#159, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, i_item_sk#185, i_product_name#186, _pre_6#187, _pre_7#188, _pre_8#189] Keys [15]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159] Functions [4]: [partial_count(1), partial_sum(_pre_6#187), partial_sum(_pre_7#188), partial_sum(_pre_8#189)] Aggregate Attributes [4]: [count#96, sum#190, sum#191, sum#192] Results [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(321) ProjectExecTransformer +(331) ProjectExecTransformer Output [20]: [hash(i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, 42) AS hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(322) WholeStageCodegenTransformer (61) +(332) WholeStageCodegenTransformer (61) Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: false -(323) VeloxResizeBatches +(333) VeloxResizeBatches Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: 1024, 2147483647, 10485760 -(324) ColumnarExchange +(334) ColumnarExchange Input [20]: [hash_partition_key#196, i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Arguments: hashpartitioning(i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, 1), ENSURE_REQUIREMENTS, [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195], [plan_id=30], [shuffle_writer_type=hash] -(325) InputAdapter +(335) InputAdapter Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(326) InputIteratorTransformer +(336) InputIteratorTransformer Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] -(327) RegularHashAggregateExecTransformer +(337) RegularHashAggregateExecTransformer Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count#100, sum#193, sum#194, sum#195] Keys [15]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159] Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#135)), sum(UnscaledValue(ss_list_price#136)), sum(UnscaledValue(ss_coupon_amt#137))] Aggregate Attributes [4]: [count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] Results [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] -(328) ProjectExecTransformer +(338) ProjectExecTransformer Output [9]: [hash(i_item_sk#185, s_store_name#147, s_zip#148, 42) AS hash_partition_key#197, i_item_sk#185 AS item_sk#198, s_store_name#147 AS store_name#199, s_zip#148 AS store_zip#200, d_year#145 AS syear#201, count(1)#105 AS cnt#202, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#135))#106,17,2) AS s1#203, MakeDecimal(sum(UnscaledValue(ss_list_price#136))#107,17,2) AS s2#204, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#137))#108,17,2) AS s3#205] Input [19]: [i_product_name#186, i_item_sk#185, s_store_name#147, s_zip#148, ca_street_number#173, ca_street_name#174, ca_city#175, ca_zip#176, ca_street_number#179, ca_street_name#180, ca_city#181, ca_zip#182, d_year#145, d_year#157, d_year#159, count(1)#105, sum(UnscaledValue(ss_wholesale_cost#135))#106, sum(UnscaledValue(ss_list_price#136))#107, sum(UnscaledValue(ss_coupon_amt#137))#108] -(329) WholeStageCodegenTransformer (62) +(339) WholeStageCodegenTransformer (62) Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: false -(330) VeloxResizeBatches +(340) VeloxResizeBatches Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: 1024, 2147483647, 10485760 -(331) ColumnarExchange +(341) ColumnarExchange Input [9]: [hash_partition_key#197, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] Arguments: hashpartitioning(item_sk#198, store_name#199, store_zip#200, 1), ENSURE_REQUIREMENTS, [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205], [plan_id=31], [shuffle_writer_type=hash] -(332) InputAdapter +(342) InputAdapter Input [8]: [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(333) InputIteratorTransformer +(343) InputIteratorTransformer Input [8]: [item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(334) ShuffledHashJoinExecTransformer +(344) ShuffledHashJoinExecTransformer Left keys [3]: [item_sk#111, store_name#112, store_zip#113] Right keys [3]: [item_sk#198, store_name#199, store_zip#200] Join type: Inner Join condition: (cnt#202 <= cnt#123) -(335) ProjectExecTransformer +(345) ProjectExecTransformer Output [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Input [25]: [product_name#110, item_sk#111, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, item_sk#198, store_name#199, store_zip#200, syear#201, cnt#202, s1#203, s2#204, s3#205] -(336) WholeStageCodegenTransformer (63) +(346) WholeStageCodegenTransformer (63) Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: false -(337) VeloxResizeBatches +(347) VeloxResizeBatches Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: 1024, 2147483647, 10485760 -(338) ColumnarExchange +(348) ColumnarExchange Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: rangepartitioning(product_name#110 ASC NULLS FIRST, store_name#112 ASC NULLS FIRST, cnt#202 ASC NULLS FIRST, s1#124 ASC NULLS FIRST, s1#203 ASC NULLS FIRST, 1), ENSURE_REQUIREMENTS, [plan_id=32], [shuffle_writer_type=hash] -(339) InputAdapter +(349) InputAdapter Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] -(340) InputIteratorTransformer +(350) InputIteratorTransformer Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] -(341) SortExecTransformer +(351) SortExecTransformer Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: [product_name#110 ASC NULLS FIRST, store_name#112 ASC NULLS FIRST, cnt#202 ASC NULLS FIRST, s1#124 ASC NULLS FIRST, s1#203 ASC NULLS FIRST], true, 0 -(342) WholeStageCodegenTransformer (64) +(352) WholeStageCodegenTransformer (64) Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] Arguments: false -(343) VeloxColumnarToRow +(353) VeloxColumnarToRow Input [21]: [product_name#110, store_name#112, store_zip#113, b_street_number#114, b_streen_name#115, b_city#116, b_zip#117, c_street_number#118, c_street_name#119, c_city#120, c_zip#121, syear#122, cnt#123, s1#124, s2#125, s3#126, s1#203, s2#204, s3#205, syear#201, cnt#202] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#14, [id=#1] -VeloxColumnarToRow (355) -+- ^ RegularHashAggregateExecTransformer (353) - +- ^ InputIteratorTransformer (352) - +- ColumnarExchange (350) - +- VeloxResizeBatches (349) - +- ^ FlushableHashAggregateExecTransformer (347) - +- ^ ProjectExecTransformer (346) - +- ^ FilterExecTransformer (345) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (344) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#14, [id=#1] +ObjectHashAggregate (364) ++- VeloxColumnarToRow (363) + +- ColumnarExchange (362) + +- VeloxResizeBatches (361) + +- RowToVeloxColumnar (360) + +- ObjectHashAggregate (359) + +- VeloxColumnarToRow (358) + +- ^ ProjectExecTransformer (356) + +- ^ FilterExecTransformer (355) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (354) -(344) FileSourceScanExecTransformer parquet spark_catalog.default.item +(354) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [3]: [i_item_sk#89, i_current_price#90, i_color#91] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood ,floral ,indian ,medium ,purple ,spring ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)] ReadSchema: struct -(345) FilterExecTransformer +(355) FilterExecTransformer Input [3]: [i_item_sk#89, i_current_price#90, i_color#91] Arguments: ((((((isnotnull(i_current_price#90) AND i_color#91 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#90 >= 64.00)) AND (i_current_price#90 <= 74.00)) AND (i_current_price#90 >= 65.00)) AND (i_current_price#90 <= 79.00)) AND isnotnull(i_item_sk#89)) -(346) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#89, 42) AS _pre_9#206] +(356) ProjectExecTransformer +Output [1]: [i_item_sk#89] Input [3]: [i_item_sk#89, i_current_price#90, i_color#91] -(347) FlushableHashAggregateExecTransformer -Input [1]: [_pre_9#206] +(357) WholeStageCodegenTransformer (1) +Input [1]: [i_item_sk#89] +Arguments: false + +(358) VeloxColumnarToRow +Input [1]: [i_item_sk#89] + +(359) ObjectHashAggregate +Input [1]: [i_item_sk#89] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_9#206, 1250, 30121, 0, 0)] -Aggregate Attributes [1]: [buf#207] -Results [1]: [buf#208] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] +Aggregate Attributes [1]: [buf#206] +Results [1]: [buf#207] -(348) WholeStageCodegenTransformer (1) -Input [1]: [buf#208] -Arguments: false +(360) RowToVeloxColumnar +Input [1]: [buf#207] -(349) VeloxResizeBatches -Input [1]: [buf#208] +(361) VeloxResizeBatches +Input [1]: [buf#207] Arguments: 1024, 2147483647, 10485760 -(350) ColumnarExchange -Input [1]: [buf#208] +(362) ColumnarExchange +Input [1]: [buf#207] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=33], [shuffle_writer_type=hash] -(351) InputAdapter -Input [1]: [buf#208] +(363) VeloxColumnarToRow +Input [1]: [buf#207] -(352) InputIteratorTransformer -Input [1]: [buf#208] - -(353) RegularHashAggregateExecTransformer -Input [1]: [buf#208] +(364) ObjectHashAggregate +Input [1]: [buf#207] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#209] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#209 AS bloomFilter#210] - -(354) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#210] -Arguments: false - -(355) VeloxColumnarToRow -Input [1]: [bloomFilter#210] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#208] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#89, 42), 1250, 30121, 0, 0)#208 AS bloomFilter#209] Subquery:2 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13 -ColumnarBroadcastExchange (359) -+- ^ FilterExecTransformer (357) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (356) +ColumnarBroadcastExchange (368) ++- ^ FilterExecTransformer (366) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (365) -(356) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(365) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#45, d_year#46] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct -(357) FilterExecTransformer +(366) FilterExecTransformer Input [2]: [d_date_sk#45, d_year#46] Arguments: ((isnotnull(d_year#46) AND (d_year#46 = 1999)) AND isnotnull(d_date_sk#45)) -(358) WholeStageCodegenTransformer (3) +(367) WholeStageCodegenTransformer (2) Input [2]: [d_date_sk#45, d_year#46] Arguments: false -(359) ColumnarBroadcastExchange +(368) ColumnarBroadcastExchange Input [2]: [d_date_sk#45, d_year#46] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=34] -Subquery:3 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#14, [id=#1] -VeloxColumnarToRow (355) -+- ^ RegularHashAggregateExecTransformer (353) - +- ^ InputIteratorTransformer (352) - +- ColumnarExchange (350) - +- VeloxResizeBatches (349) - +- ^ FlushableHashAggregateExecTransformer (347) - +- ^ ProjectExecTransformer (346) - +- ^ FilterExecTransformer (345) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (344) - +Subquery:3 Hosting operator id = 210 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] -Subquery:4 Hosting operator id = 203 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] +Subquery:4 Hosting operator id = 207 Hosting Expression = ss_sold_date_sk#138 IN dynamicpruning#139 +ColumnarBroadcastExchange (372) ++- ^ FilterExecTransformer (370) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (369) -Subquery:5 Hosting operator id = 202 Hosting Expression = ss_sold_date_sk#138 IN dynamicpruning#139 -ColumnarBroadcastExchange (363) -+- ^ FilterExecTransformer (361) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (360) - -(360) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +(369) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim Output [2]: [d_date_sk#144, d_year#145] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct -(361) FilterExecTransformer +(370) FilterExecTransformer Input [2]: [d_date_sk#144, d_year#145] Arguments: ((isnotnull(d_year#145) AND (d_year#145 = 2000)) AND isnotnull(d_date_sk#144)) -(362) WholeStageCodegenTransformer (34) +(371) WholeStageCodegenTransformer (33) Input [2]: [d_date_sk#144, d_year#145] Arguments: false -(363) ColumnarBroadcastExchange +(372) ColumnarBroadcastExchange Input [2]: [d_date_sk#144, d_year#145] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=35] -Subquery:6 Hosting operator id = 202 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1] - diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/simplified.txt index b8ad5a9d7c4..b141fdc39fa 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q64.sf100/simplified.txt @@ -87,39 +87,32 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (4) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - FilterExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #11 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_color,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (3) - FilterExecTransformer [d_year,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 1250, 30121, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #11 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_color,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_color,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price,i_color] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (3) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #10 + WholeStageCodegenTransformer (2) + FilterExecTransformer [d_year,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] InputIteratorTransformer InputAdapter ColumnarExchange [sr_item_sk,sr_ticket_number] #12 @@ -319,15 +312,21 @@ VeloxColumnarToRow VeloxResizeBatches WholeStageCodegenTransformer (35) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - FilterExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] - ReusedSubquery [bloomFilter] #2 - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #3 - ColumnarBroadcastExchange #34 - WholeStageCodegenTransformer (34) - FilterExecTransformer [d_year,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] - ReusedSubquery [bloomFilter] #2 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [ss_item_sk,ss_ticket_number,ss_store_sk,ss_customer_sk,ss_cdemo_sk,ss_promo_sk,ss_hdemo_sk,ss_addr_sk] + ReusedSubquery [bloomFilter] #2 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (34) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_customer_sk,ss_cdemo_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_wholesale_cost,ss_list_price,ss_coupon_amt,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #3 + ColumnarBroadcastExchange #34 + WholeStageCodegenTransformer (33) + FilterExecTransformer [d_year,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_year] InputIteratorTransformer InputAdapter ReusedExchange [sr_item_sk,sr_ticket_number] #12 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/explain.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/explain.txt index 07dfc031cef..53ca6905ba3 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/explain.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/explain.txt @@ -1,284 +1,293 @@ == Physical Plan == -VeloxColumnarToRow (372) -+- TakeOrderedAndProjectExecTransformer (371) - +- ^ RegularHashAggregateExecTransformer (369) - +- ^ InputIteratorTransformer (368) - +- ColumnarExchange (366) - +- VeloxResizeBatches (365) - +- ^ ProjectExecTransformer (363) - +- ^ FlushableHashAggregateExecTransformer (362) - +- ^ InputIteratorTransformer (361) - +- ColumnarUnion (359) - :- ^ ProjectExecTransformer (173) - : +- ^ RegularHashAggregateExecTransformer (172) - : +- ^ InputIteratorTransformer (171) - : +- ColumnarExchange (169) - : +- VeloxResizeBatches (168) - : +- ^ ProjectExecTransformer (166) - : +- ^ FlushableHashAggregateExecTransformer (165) - : +- ^ InputIteratorTransformer (164) - : +- ColumnarUnion (162) - : :- ^ ProjectExecTransformer (58) - : : +- ^ RegularHashAggregateExecTransformer (57) - : : +- ^ InputIteratorTransformer (56) - : : +- ColumnarExchange (54) - : : +- VeloxResizeBatches (53) - : : +- ^ ProjectExecTransformer (51) - : : +- ^ FlushableHashAggregateExecTransformer (50) - : : +- ^ ProjectExecTransformer (49) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (48) - : : :- ^ ProjectExecTransformer (41) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (40) - : : : :- ^ ProjectExecTransformer (36) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (35) - : : : : :- ^ ProjectExecTransformer (27) - : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (26) - : : : : : :- ^ ProjectExecTransformer (18) - : : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (17) - : : : : : : :- ^ InputIteratorTransformer (8) - : : : : : : : +- ColumnarExchange (6) - : : : : : : : +- VeloxResizeBatches (5) - : : : : : : : +- ^ ProjectExecTransformer (3) - : : : : : : : +- ^ FilterExecTransformer (2) - : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) - : : : : : : +- ^ InputIteratorTransformer (16) - : : : : : : +- ColumnarExchange (14) - : : : : : : +- VeloxResizeBatches (13) - : : : : : : +- ^ ProjectExecTransformer (11) - : : : : : : +- ^ FilterExecTransformer (10) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (9) - : : : : : +- ^ InputIteratorTransformer (25) - : : : : : +- ColumnarBroadcastExchange (23) - : : : : : +- ^ ProjectExecTransformer (21) - : : : : : +- ^ FilterExecTransformer (20) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (19) - : : : : +- ^ InputIteratorTransformer (34) - : : : : +- ColumnarBroadcastExchange (32) - : : : : +- ^ ProjectExecTransformer (30) - : : : : +- ^ FilterExecTransformer (29) - : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (28) - : : : +- ^ InputIteratorTransformer (39) - : : : +- ReusedExchange (37) - : : +- ^ InputIteratorTransformer (47) - : : +- ColumnarBroadcastExchange (45) - : : +- ^ FilterExecTransformer (43) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (42) - : :- ^ ProjectExecTransformer (109) - : : +- ^ RegularHashAggregateExecTransformer (108) - : : +- ^ InputIteratorTransformer (107) - : : +- ColumnarExchange (105) - : : +- VeloxResizeBatches (104) - : : +- ^ ProjectExecTransformer (102) - : : +- ^ FlushableHashAggregateExecTransformer (101) - : : +- ^ ProjectExecTransformer (100) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (99) - : : :- ^ ProjectExecTransformer (92) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (91) - : : : :- ^ ProjectExecTransformer (87) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (86) - : : : : :- ^ ProjectExecTransformer (82) - : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (81) - : : : : : :- ^ ProjectExecTransformer (77) - : : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (76) - : : : : : : :- ^ InputIteratorTransformer (67) - : : : : : : : +- ColumnarExchange (65) - : : : : : : : +- VeloxResizeBatches (64) - : : : : : : : +- ^ ProjectExecTransformer (62) - : : : : : : : +- ^ FilterExecTransformer (61) - : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (60) - : : : : : : +- ^ InputIteratorTransformer (75) - : : : : : : +- ColumnarExchange (73) - : : : : : : +- VeloxResizeBatches (72) - : : : : : : +- ^ ProjectExecTransformer (70) - : : : : : : +- ^ FilterExecTransformer (69) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (68) - : : : : : +- ^ InputIteratorTransformer (80) - : : : : : +- ReusedExchange (78) - : : : : +- ^ InputIteratorTransformer (85) - : : : : +- ReusedExchange (83) - : : : +- ^ InputIteratorTransformer (90) - : : : +- ReusedExchange (88) - : : +- ^ InputIteratorTransformer (98) - : : +- ColumnarBroadcastExchange (96) - : : +- ^ FilterExecTransformer (94) - : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page (93) - : +- ^ ProjectExecTransformer (160) - : +- ^ RegularHashAggregateExecTransformer (159) - : +- ^ InputIteratorTransformer (158) - : +- ColumnarExchange (156) - : +- VeloxResizeBatches (155) - : +- ^ ProjectExecTransformer (153) - : +- ^ FlushableHashAggregateExecTransformer (152) - : +- ^ ProjectExecTransformer (151) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (150) - : :- ^ ProjectExecTransformer (143) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (142) - : : :- ^ ProjectExecTransformer (138) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (137) - : : : :- ^ ProjectExecTransformer (133) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (132) - : : : : :- ^ ProjectExecTransformer (128) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (127) - : : : : : :- ^ InputIteratorTransformer (118) - : : : : : : +- ColumnarExchange (116) - : : : : : : +- VeloxResizeBatches (115) - : : : : : : +- ^ ProjectExecTransformer (113) - : : : : : : +- ^ FilterExecTransformer (112) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (111) - : : : : : +- ^ InputIteratorTransformer (126) - : : : : : +- ColumnarExchange (124) - : : : : : +- VeloxResizeBatches (123) - : : : : : +- ^ ProjectExecTransformer (121) - : : : : : +- ^ FilterExecTransformer (120) - : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (119) - : : : : +- ^ InputIteratorTransformer (131) - : : : : +- ReusedExchange (129) - : : : +- ^ InputIteratorTransformer (136) - : : : +- ReusedExchange (134) - : : +- ^ InputIteratorTransformer (141) - : : +- ReusedExchange (139) - : +- ^ InputIteratorTransformer (149) - : +- ColumnarBroadcastExchange (147) - : +- ^ FilterExecTransformer (145) - : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (144) - :- ^ ProjectExecTransformer (250) - : +- ^ RegularHashAggregateExecTransformer (249) - : +- ^ InputIteratorTransformer (248) - : +- ColumnarExchange (246) - : +- VeloxResizeBatches (245) - : +- ^ ProjectExecTransformer (243) - : +- ^ FlushableHashAggregateExecTransformer (242) - : +- ^ ProjectExecTransformer (241) - : +- ^ RegularHashAggregateExecTransformer (240) - : +- ^ InputIteratorTransformer (239) - : +- ColumnarExchange (237) - : +- VeloxResizeBatches (236) - : +- ^ ProjectExecTransformer (234) - : +- ^ FlushableHashAggregateExecTransformer (233) - : +- ^ InputIteratorTransformer (232) - : +- ColumnarUnion (230) - : :- ^ ProjectExecTransformer (179) - : : +- ^ RegularHashAggregateExecTransformer (178) - : : +- ^ InputIteratorTransformer (177) - : : +- ReusedExchange (175) - : :- ^ ProjectExecTransformer (185) - : : +- ^ RegularHashAggregateExecTransformer (184) - : : +- ^ InputIteratorTransformer (183) - : : +- ReusedExchange (181) - : +- ^ ProjectExecTransformer (228) - : +- ^ RegularHashAggregateExecTransformer (227) - : +- ^ InputIteratorTransformer (226) - : +- ColumnarExchange (224) - : +- VeloxResizeBatches (223) - : +- ^ ProjectExecTransformer (221) - : +- ^ FlushableHashAggregateExecTransformer (220) - : +- ^ ProjectExecTransformer (219) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (218) - : :- ^ ProjectExecTransformer (214) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (213) - : : :- ^ ProjectExecTransformer (209) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (208) - : : : :- ^ ProjectExecTransformer (204) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (203) - : : : : :- ^ ProjectExecTransformer (199) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (198) - : : : : : :- ^ InputIteratorTransformer (194) - : : : : : : +- ColumnarExchange (192) - : : : : : : +- VeloxResizeBatches (191) - : : : : : : +- ^ ProjectExecTransformer (189) - : : : : : : +- ^ FilterExecTransformer (188) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (187) - : : : : : +- ^ InputIteratorTransformer (197) - : : : : : +- ReusedExchange (195) - : : : : +- ^ InputIteratorTransformer (202) - : : : : +- ReusedExchange (200) - : : : +- ^ InputIteratorTransformer (207) - : : : +- ReusedExchange (205) - : : +- ^ InputIteratorTransformer (212) - : : +- ReusedExchange (210) - : +- ^ InputIteratorTransformer (217) - : +- ReusedExchange (215) - +- ^ ProjectExecTransformer (357) - +- ^ RegularHashAggregateExecTransformer (356) - +- ^ ProjectExecTransformer (355) - +- ^ RegularHashAggregateExecTransformer (354) - +- ^ InputIteratorTransformer (353) - +- ColumnarExchange (351) - +- VeloxResizeBatches (350) - +- ^ ProjectExecTransformer (348) - +- ^ FlushableHashAggregateExecTransformer (347) - +- ^ InputIteratorTransformer (346) - +- ColumnarUnion (344) - :- ^ ProjectExecTransformer (293) - : +- ^ RegularHashAggregateExecTransformer (292) - : +- ^ InputIteratorTransformer (291) - : +- ColumnarExchange (289) - : +- VeloxResizeBatches (288) - : +- ^ ProjectExecTransformer (286) - : +- ^ FlushableHashAggregateExecTransformer (285) - : +- ^ ProjectExecTransformer (284) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) - : :- ^ ProjectExecTransformer (279) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (278) - : : :- ^ ProjectExecTransformer (274) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (273) - : : : :- ^ ProjectExecTransformer (269) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (268) - : : : : :- ^ ProjectExecTransformer (264) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (263) - : : : : : :- ^ InputIteratorTransformer (259) - : : : : : : +- ColumnarExchange (257) - : : : : : : +- VeloxResizeBatches (256) - : : : : : : +- ^ ProjectExecTransformer (254) - : : : : : : +- ^ FilterExecTransformer (253) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (252) - : : : : : +- ^ InputIteratorTransformer (262) - : : : : : +- ReusedExchange (260) - : : : : +- ^ InputIteratorTransformer (267) - : : : : +- ReusedExchange (265) - : : : +- ^ InputIteratorTransformer (272) - : : : +- ReusedExchange (270) - : : +- ^ InputIteratorTransformer (277) - : : +- ReusedExchange (275) - : +- ^ InputIteratorTransformer (282) - : +- ReusedExchange (280) - :- ^ ProjectExecTransformer (336) - : +- ^ RegularHashAggregateExecTransformer (335) - : +- ^ InputIteratorTransformer (334) - : +- ColumnarExchange (332) - : +- VeloxResizeBatches (331) - : +- ^ ProjectExecTransformer (329) - : +- ^ FlushableHashAggregateExecTransformer (328) - : +- ^ ProjectExecTransformer (327) - : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (326) - : :- ^ ProjectExecTransformer (322) - : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (321) - : : :- ^ ProjectExecTransformer (317) - : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (316) - : : : :- ^ ProjectExecTransformer (312) - : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (311) - : : : : :- ^ ProjectExecTransformer (307) - : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (306) - : : : : : :- ^ InputIteratorTransformer (302) - : : : : : : +- ColumnarExchange (300) - : : : : : : +- VeloxResizeBatches (299) - : : : : : : +- ^ ProjectExecTransformer (297) - : : : : : : +- ^ FilterExecTransformer (296) - : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (295) - : : : : : +- ^ InputIteratorTransformer (305) - : : : : : +- ReusedExchange (303) - : : : : +- ^ InputIteratorTransformer (310) - : : : : +- ReusedExchange (308) - : : : +- ^ InputIteratorTransformer (315) - : : : +- ReusedExchange (313) - : : +- ^ InputIteratorTransformer (320) - : : +- ReusedExchange (318) - : +- ^ InputIteratorTransformer (325) - : +- ReusedExchange (323) - +- ^ ProjectExecTransformer (342) - +- ^ RegularHashAggregateExecTransformer (341) - +- ^ InputIteratorTransformer (340) - +- ReusedExchange (338) +VeloxColumnarToRow (387) ++- TakeOrderedAndProjectExecTransformer (386) + +- ^ RegularHashAggregateExecTransformer (384) + +- ^ InputIteratorTransformer (383) + +- ColumnarExchange (381) + +- VeloxResizeBatches (380) + +- ^ ProjectExecTransformer (378) + +- ^ FlushableHashAggregateExecTransformer (377) + +- ^ InputIteratorTransformer (376) + +- ColumnarUnion (374) + :- ^ ProjectExecTransformer (188) + : +- ^ RegularHashAggregateExecTransformer (187) + : +- ^ InputIteratorTransformer (186) + : +- ColumnarExchange (184) + : +- VeloxResizeBatches (183) + : +- ^ ProjectExecTransformer (181) + : +- ^ FlushableHashAggregateExecTransformer (180) + : +- ^ InputIteratorTransformer (179) + : +- ColumnarUnion (177) + : :- ^ ProjectExecTransformer (63) + : : +- ^ RegularHashAggregateExecTransformer (62) + : : +- ^ InputIteratorTransformer (61) + : : +- ColumnarExchange (59) + : : +- VeloxResizeBatches (58) + : : +- ^ ProjectExecTransformer (56) + : : +- ^ FlushableHashAggregateExecTransformer (55) + : : +- ^ ProjectExecTransformer (54) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (53) + : : :- ^ ProjectExecTransformer (46) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (45) + : : : :- ^ ProjectExecTransformer (41) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (40) + : : : : :- ^ ProjectExecTransformer (32) + : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (31) + : : : : : :- ^ ProjectExecTransformer (23) + : : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (22) + : : : : : : :- ^ InputIteratorTransformer (13) + : : : : : : : +- ColumnarExchange (11) + : : : : : : : +- VeloxResizeBatches (10) + : : : : : : : +- ^ ProjectExecTransformer (8) + : : : : : : : +- ^ InputIteratorTransformer (7) + : : : : : : : +- RowToVeloxColumnar (5) + : : : : : : : +- * Filter (4) + : : : : : : : +- VeloxColumnarToRow (3) + : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1) + : : : : : : +- ^ InputIteratorTransformer (21) + : : : : : : +- ColumnarExchange (19) + : : : : : : +- VeloxResizeBatches (18) + : : : : : : +- ^ ProjectExecTransformer (16) + : : : : : : +- ^ FilterExecTransformer (15) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (14) + : : : : : +- ^ InputIteratorTransformer (30) + : : : : : +- ColumnarBroadcastExchange (28) + : : : : : +- ^ ProjectExecTransformer (26) + : : : : : +- ^ FilterExecTransformer (25) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (24) + : : : : +- ^ InputIteratorTransformer (39) + : : : : +- ColumnarBroadcastExchange (37) + : : : : +- ^ ProjectExecTransformer (35) + : : : : +- ^ FilterExecTransformer (34) + : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (33) + : : : +- ^ InputIteratorTransformer (44) + : : : +- ReusedExchange (42) + : : +- ^ InputIteratorTransformer (52) + : : +- ColumnarBroadcastExchange (50) + : : +- ^ FilterExecTransformer (48) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (47) + : :- ^ ProjectExecTransformer (119) + : : +- ^ RegularHashAggregateExecTransformer (118) + : : +- ^ InputIteratorTransformer (117) + : : +- ColumnarExchange (115) + : : +- VeloxResizeBatches (114) + : : +- ^ ProjectExecTransformer (112) + : : +- ^ FlushableHashAggregateExecTransformer (111) + : : +- ^ ProjectExecTransformer (110) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (109) + : : :- ^ ProjectExecTransformer (102) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (101) + : : : :- ^ ProjectExecTransformer (97) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (96) + : : : : :- ^ ProjectExecTransformer (92) + : : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (91) + : : : : : :- ^ ProjectExecTransformer (87) + : : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (86) + : : : : : : :- ^ InputIteratorTransformer (77) + : : : : : : : +- ColumnarExchange (75) + : : : : : : : +- VeloxResizeBatches (74) + : : : : : : : +- ^ ProjectExecTransformer (72) + : : : : : : : +- ^ InputIteratorTransformer (71) + : : : : : : : +- RowToVeloxColumnar (69) + : : : : : : : +- * Filter (68) + : : : : : : : +- VeloxColumnarToRow (67) + : : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (65) + : : : : : : +- ^ InputIteratorTransformer (85) + : : : : : : +- ColumnarExchange (83) + : : : : : : +- VeloxResizeBatches (82) + : : : : : : +- ^ ProjectExecTransformer (80) + : : : : : : +- ^ FilterExecTransformer (79) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (78) + : : : : : +- ^ InputIteratorTransformer (90) + : : : : : +- ReusedExchange (88) + : : : : +- ^ InputIteratorTransformer (95) + : : : : +- ReusedExchange (93) + : : : +- ^ InputIteratorTransformer (100) + : : : +- ReusedExchange (98) + : : +- ^ InputIteratorTransformer (108) + : : +- ColumnarBroadcastExchange (106) + : : +- ^ FilterExecTransformer (104) + : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page (103) + : +- ^ ProjectExecTransformer (175) + : +- ^ RegularHashAggregateExecTransformer (174) + : +- ^ InputIteratorTransformer (173) + : +- ColumnarExchange (171) + : +- VeloxResizeBatches (170) + : +- ^ ProjectExecTransformer (168) + : +- ^ FlushableHashAggregateExecTransformer (167) + : +- ^ ProjectExecTransformer (166) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (165) + : :- ^ ProjectExecTransformer (158) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (157) + : : :- ^ ProjectExecTransformer (153) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (152) + : : : :- ^ ProjectExecTransformer (148) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (147) + : : : : :- ^ ProjectExecTransformer (143) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (142) + : : : : : :- ^ InputIteratorTransformer (133) + : : : : : : +- ColumnarExchange (131) + : : : : : : +- VeloxResizeBatches (130) + : : : : : : +- ^ ProjectExecTransformer (128) + : : : : : : +- ^ InputIteratorTransformer (127) + : : : : : : +- RowToVeloxColumnar (125) + : : : : : : +- * Filter (124) + : : : : : : +- VeloxColumnarToRow (123) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (121) + : : : : : +- ^ InputIteratorTransformer (141) + : : : : : +- ColumnarExchange (139) + : : : : : +- VeloxResizeBatches (138) + : : : : : +- ^ ProjectExecTransformer (136) + : : : : : +- ^ FilterExecTransformer (135) + : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (134) + : : : : +- ^ InputIteratorTransformer (146) + : : : : +- ReusedExchange (144) + : : : +- ^ InputIteratorTransformer (151) + : : : +- ReusedExchange (149) + : : +- ^ InputIteratorTransformer (156) + : : +- ReusedExchange (154) + : +- ^ InputIteratorTransformer (164) + : +- ColumnarBroadcastExchange (162) + : +- ^ FilterExecTransformer (160) + : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (159) + :- ^ ProjectExecTransformer (265) + : +- ^ RegularHashAggregateExecTransformer (264) + : +- ^ InputIteratorTransformer (263) + : +- ColumnarExchange (261) + : +- VeloxResizeBatches (260) + : +- ^ ProjectExecTransformer (258) + : +- ^ FlushableHashAggregateExecTransformer (257) + : +- ^ ProjectExecTransformer (256) + : +- ^ RegularHashAggregateExecTransformer (255) + : +- ^ InputIteratorTransformer (254) + : +- ColumnarExchange (252) + : +- VeloxResizeBatches (251) + : +- ^ ProjectExecTransformer (249) + : +- ^ FlushableHashAggregateExecTransformer (248) + : +- ^ InputIteratorTransformer (247) + : +- ColumnarUnion (245) + : :- ^ ProjectExecTransformer (194) + : : +- ^ RegularHashAggregateExecTransformer (193) + : : +- ^ InputIteratorTransformer (192) + : : +- ReusedExchange (190) + : :- ^ ProjectExecTransformer (200) + : : +- ^ RegularHashAggregateExecTransformer (199) + : : +- ^ InputIteratorTransformer (198) + : : +- ReusedExchange (196) + : +- ^ ProjectExecTransformer (243) + : +- ^ RegularHashAggregateExecTransformer (242) + : +- ^ InputIteratorTransformer (241) + : +- ColumnarExchange (239) + : +- VeloxResizeBatches (238) + : +- ^ ProjectExecTransformer (236) + : +- ^ FlushableHashAggregateExecTransformer (235) + : +- ^ ProjectExecTransformer (234) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (233) + : :- ^ ProjectExecTransformer (229) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (228) + : : :- ^ ProjectExecTransformer (224) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (223) + : : : :- ^ ProjectExecTransformer (219) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (218) + : : : : :- ^ ProjectExecTransformer (214) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (213) + : : : : : :- ^ InputIteratorTransformer (209) + : : : : : : +- ColumnarExchange (207) + : : : : : : +- VeloxResizeBatches (206) + : : : : : : +- ^ ProjectExecTransformer (204) + : : : : : : +- ^ FilterExecTransformer (203) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (202) + : : : : : +- ^ InputIteratorTransformer (212) + : : : : : +- ReusedExchange (210) + : : : : +- ^ InputIteratorTransformer (217) + : : : : +- ReusedExchange (215) + : : : +- ^ InputIteratorTransformer (222) + : : : +- ReusedExchange (220) + : : +- ^ InputIteratorTransformer (227) + : : +- ReusedExchange (225) + : +- ^ InputIteratorTransformer (232) + : +- ReusedExchange (230) + +- ^ ProjectExecTransformer (372) + +- ^ RegularHashAggregateExecTransformer (371) + +- ^ ProjectExecTransformer (370) + +- ^ RegularHashAggregateExecTransformer (369) + +- ^ InputIteratorTransformer (368) + +- ColumnarExchange (366) + +- VeloxResizeBatches (365) + +- ^ ProjectExecTransformer (363) + +- ^ FlushableHashAggregateExecTransformer (362) + +- ^ InputIteratorTransformer (361) + +- ColumnarUnion (359) + :- ^ ProjectExecTransformer (308) + : +- ^ RegularHashAggregateExecTransformer (307) + : +- ^ InputIteratorTransformer (306) + : +- ColumnarExchange (304) + : +- VeloxResizeBatches (303) + : +- ^ ProjectExecTransformer (301) + : +- ^ FlushableHashAggregateExecTransformer (300) + : +- ^ ProjectExecTransformer (299) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (298) + : :- ^ ProjectExecTransformer (294) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (293) + : : :- ^ ProjectExecTransformer (289) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (288) + : : : :- ^ ProjectExecTransformer (284) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (283) + : : : : :- ^ ProjectExecTransformer (279) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (278) + : : : : : :- ^ InputIteratorTransformer (274) + : : : : : : +- ColumnarExchange (272) + : : : : : : +- VeloxResizeBatches (271) + : : : : : : +- ^ ProjectExecTransformer (269) + : : : : : : +- ^ FilterExecTransformer (268) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (267) + : : : : : +- ^ InputIteratorTransformer (277) + : : : : : +- ReusedExchange (275) + : : : : +- ^ InputIteratorTransformer (282) + : : : : +- ReusedExchange (280) + : : : +- ^ InputIteratorTransformer (287) + : : : +- ReusedExchange (285) + : : +- ^ InputIteratorTransformer (292) + : : +- ReusedExchange (290) + : +- ^ InputIteratorTransformer (297) + : +- ReusedExchange (295) + :- ^ ProjectExecTransformer (351) + : +- ^ RegularHashAggregateExecTransformer (350) + : +- ^ InputIteratorTransformer (349) + : +- ColumnarExchange (347) + : +- VeloxResizeBatches (346) + : +- ^ ProjectExecTransformer (344) + : +- ^ FlushableHashAggregateExecTransformer (343) + : +- ^ ProjectExecTransformer (342) + : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (341) + : :- ^ ProjectExecTransformer (337) + : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (336) + : : :- ^ ProjectExecTransformer (332) + : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (331) + : : : :- ^ ProjectExecTransformer (327) + : : : : +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (326) + : : : : :- ^ ProjectExecTransformer (322) + : : : : : +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildRight (321) + : : : : : :- ^ InputIteratorTransformer (317) + : : : : : : +- ColumnarExchange (315) + : : : : : : +- VeloxResizeBatches (314) + : : : : : : +- ^ ProjectExecTransformer (312) + : : : : : : +- ^ FilterExecTransformer (311) + : : : : : : +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (310) + : : : : : +- ^ InputIteratorTransformer (320) + : : : : : +- ReusedExchange (318) + : : : : +- ^ InputIteratorTransformer (325) + : : : : +- ReusedExchange (323) + : : : +- ^ InputIteratorTransformer (330) + : : : +- ReusedExchange (328) + : : +- ^ InputIteratorTransformer (335) + : : +- ReusedExchange (333) + : +- ^ InputIteratorTransformer (340) + : +- ReusedExchange (338) + +- ^ ProjectExecTransformer (357) + +- ^ RegularHashAggregateExecTransformer (356) + +- ^ InputIteratorTransformer (355) + +- ReusedExchange (353) (1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales @@ -289,252 +298,268 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sol PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)] ReadSchema: struct -(2) FilterExecTransformer +(2) WholeStageCodegenTransformer (4) +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] +Arguments: false + +(3) VeloxColumnarToRow +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(4) Filter [codegen id : 1] +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] +Condition : ((((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3)) AND might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ss_item_sk#1, 42))) AND might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ss_promo_sk#3, 42))) + +(5) RowToVeloxColumnar Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -Arguments: ((((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3)) AND velox_might_contain(Subquery scalar-subquery#9, [id=#1], xxhash64(ss_item_sk#1, 42))) AND velox_might_contain(Subquery scalar-subquery#10, [id=#2], xxhash64(ss_promo_sk#3, 42))) -(3) ProjectExecTransformer +(6) InputAdapter +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(7) InputIteratorTransformer +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] + +(8) ProjectExecTransformer Output [8]: [hash(ss_item_sk#1, ss_ticket_number#4, 42) AS hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(4) WholeStageCodegenTransformer (6) +(9) WholeStageCodegenTransformer (5) Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: false -(5) VeloxResizeBatches +(10) VeloxResizeBatches Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: 1024, 2147483647, 10485760 -(6) ColumnarExchange +(11) ColumnarExchange Input [8]: [hash_partition_key#11, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7], [plan_id=3], [shuffle_writer_type=hash] -(7) InputAdapter +(12) InputAdapter Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(8) InputIteratorTransformer +(13) InputIteratorTransformer Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns +(14) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns Output [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] Batched: true Location: CatalogFileIndex [{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct -(10) FilterExecTransformer +(15) FilterExecTransformer Input [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] Arguments: (isnotnull(sr_item_sk#12) AND isnotnull(sr_ticket_number#13)) -(11) ProjectExecTransformer +(16) ProjectExecTransformer Output [5]: [hash(sr_item_sk#12, sr_ticket_number#13, 42) AS hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Input [5]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15, sr_returned_date_sk#16] -(12) WholeStageCodegenTransformer (7) +(17) WholeStageCodegenTransformer (6) Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: false -(13) VeloxResizeBatches +(18) VeloxResizeBatches Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: 1024, 2147483647, 10485760 -(14) ColumnarExchange +(19) ColumnarExchange Input [5]: [hash_partition_key#17, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] Arguments: hashpartitioning(sr_item_sk#12, sr_ticket_number#13, 1), ENSURE_REQUIREMENTS, [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15], [plan_id=4], [shuffle_writer_type=hash] -(15) InputAdapter +(20) InputAdapter Input [4]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(16) InputIteratorTransformer +(21) InputIteratorTransformer Input [4]: [sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(17) ShuffledHashJoinExecTransformer +(22) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#1, ss_ticket_number#4] Right keys [2]: [sr_item_sk#12, sr_ticket_number#13] Join type: LeftOuter Join condition: None -(18) ProjectExecTransformer +(23) ProjectExecTransformer Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#12, sr_ticket_number#13, sr_return_amt#14, sr_net_loss#15] -(19) FileSourceScanExecTransformer parquet spark_catalog.default.item +(24) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct -(20) FilterExecTransformer +(25) FilterExecTransformer Input [2]: [i_item_sk#18, i_current_price#19] Arguments: ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) -(21) ProjectExecTransformer +(26) ProjectExecTransformer Output [1]: [i_item_sk#18] Input [2]: [i_item_sk#18, i_current_price#19] -(22) WholeStageCodegenTransformer (8) +(27) WholeStageCodegenTransformer (7) Input [1]: [i_item_sk#18] Arguments: false -(23) ColumnarBroadcastExchange +(28) ColumnarBroadcastExchange Input [1]: [i_item_sk#18] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -(24) InputAdapter +(29) InputAdapter Input [1]: [i_item_sk#18] -(25) InputIteratorTransformer +(30) InputIteratorTransformer Input [1]: [i_item_sk#18] -(26) BroadcastHashJoinExecTransformer +(31) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#1] Right keys [1]: [i_item_sk#18] Join type: Inner Join condition: None -(27) ProjectExecTransformer +(32) ProjectExecTransformer Output [7]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, i_item_sk#18] -(28) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(33) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct -(29) FilterExecTransformer +(34) FilterExecTransformer Input [2]: [p_promo_sk#20, p_channel_tv#21] Arguments: ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) -(30) ProjectExecTransformer +(35) ProjectExecTransformer Output [1]: [p_promo_sk#20] Input [2]: [p_promo_sk#20, p_channel_tv#21] -(31) WholeStageCodegenTransformer (9) +(36) WholeStageCodegenTransformer (8) Input [1]: [p_promo_sk#20] Arguments: false -(32) ColumnarBroadcastExchange +(37) ColumnarBroadcastExchange Input [1]: [p_promo_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -(33) InputAdapter +(38) InputAdapter Input [1]: [p_promo_sk#20] -(34) InputIteratorTransformer +(39) InputIteratorTransformer Input [1]: [p_promo_sk#20] -(35) BroadcastHashJoinExecTransformer +(40) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#3] Right keys [1]: [p_promo_sk#20] Join type: Inner Join condition: None -(36) ProjectExecTransformer +(41) ProjectExecTransformer Output [6]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15] Input [8]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, p_promo_sk#20] -(37) ReusedExchange [Reuses operator id: 401] +(42) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#22] -(38) InputAdapter +(43) InputAdapter Input [1]: [d_date_sk#22] -(39) InputIteratorTransformer +(44) InputIteratorTransformer Input [1]: [d_date_sk#22] -(40) BroadcastHashJoinExecTransformer +(45) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#7] Right keys [1]: [d_date_sk#22] Join type: Inner Join condition: None -(41) ProjectExecTransformer +(46) ProjectExecTransformer Output [5]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#14, sr_net_loss#15] Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#14, sr_net_loss#15, d_date_sk#22] -(42) FileSourceScanExecTransformer parquet spark_catalog.default.store +(47) FileSourceScanExecTransformer parquet spark_catalog.default.store Output [2]: [s_store_sk#23, s_store_id#24] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct -(43) FilterExecTransformer +(48) FilterExecTransformer Input [2]: [s_store_sk#23, s_store_id#24] Arguments: isnotnull(s_store_sk#23) -(44) WholeStageCodegenTransformer (11) +(49) WholeStageCodegenTransformer (10) Input [2]: [s_store_sk#23, s_store_id#24] Arguments: false -(45) ColumnarBroadcastExchange +(50) ColumnarBroadcastExchange Input [2]: [s_store_sk#23, s_store_id#24] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] -(46) InputAdapter +(51) InputAdapter Input [2]: [s_store_sk#23, s_store_id#24] -(47) InputIteratorTransformer +(52) InputIteratorTransformer Input [2]: [s_store_sk#23, s_store_id#24] -(48) BroadcastHashJoinExecTransformer +(53) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#2] Right keys [1]: [s_store_sk#23] Join type: Inner Join condition: None -(49) ProjectExecTransformer +(54) ProjectExecTransformer Output [4]: [s_store_id#24, UnscaledValue(ss_ext_sales_price#5) AS _pre_1#25, coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00) AS _pre_2#26, (ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)) AS _pre_3#27] Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#14, sr_net_loss#15, s_store_sk#23, s_store_id#24] -(50) FlushableHashAggregateExecTransformer +(55) FlushableHashAggregateExecTransformer Input [4]: [s_store_id#24, _pre_1#25, _pre_2#26, _pre_3#27] Keys [1]: [s_store_id#24] Functions [3]: [partial_sum(_pre_1#25), partial_sum(_pre_2#26), partial_sum(_pre_3#27)] Aggregate Attributes [5]: [sum#28, sum#29, isEmpty#30, sum#31, isEmpty#32] Results [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(51) ProjectExecTransformer +(56) ProjectExecTransformer Output [7]: [hash(s_store_id#24, 42) AS hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(52) WholeStageCodegenTransformer (12) +(57) WholeStageCodegenTransformer (11) Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: false -(53) VeloxResizeBatches +(58) VeloxResizeBatches Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: 1024, 2147483647, 10485760 -(54) ColumnarExchange +(59) ColumnarExchange Input [7]: [hash_partition_key#38, s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Arguments: hashpartitioning(s_store_id#24, 1), ENSURE_REQUIREMENTS, [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37], [plan_id=8], [shuffle_writer_type=hash] -(55) InputAdapter +(60) InputAdapter Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(56) InputIteratorTransformer +(61) InputIteratorTransformer Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] -(57) RegularHashAggregateExecTransformer +(62) RegularHashAggregateExecTransformer Input [6]: [s_store_id#24, sum#33, sum#34, isEmpty#35, sum#36, isEmpty#37] Keys [1]: [s_store_id#24] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00)), sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] Results [4]: [s_store_id#24, sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] -(58) ProjectExecTransformer +(63) ProjectExecTransformer Output [5]: [store channel AS channel#42, concat(store, s_store_id#24) AS id#43, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#39,17,2) AS sales#44, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40 AS returns#45, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41 AS profit#46] Input [4]: [s_store_id#24, sum(UnscaledValue(ss_ext_sales_price#5))#39, sum(coalesce(cast(sr_return_amt#14 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#15 as decimal(12,2)), 0.00)))#41] -(59) WholeStageCodegenTransformer (13) +(64) WholeStageCodegenTransformer (12) Input [5]: [channel#42, id#43, sales#44, returns#45, profit#46] Arguments: false -(60) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(65) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Batched: true Location: InMemoryFileIndex [] @@ -542,212 +567,228 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#53), dynamicpruningexpression(cs_so PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)] ReadSchema: struct -(61) FilterExecTransformer +(66) WholeStageCodegenTransformer (16) +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] +Arguments: false + +(67) VeloxColumnarToRow Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -Arguments: ((((isnotnull(cs_catalog_page_sk#47) AND isnotnull(cs_item_sk#48)) AND isnotnull(cs_promo_sk#49)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(cs_item_sk#48, 42))) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(cs_promo_sk#49, 42))) -(62) ProjectExecTransformer +(68) Filter [codegen id : 2] +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] +Condition : ((((isnotnull(cs_catalog_page_sk#47) AND isnotnull(cs_item_sk#48)) AND isnotnull(cs_promo_sk#49)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(cs_item_sk#48, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(cs_promo_sk#49, 42))) + +(69) RowToVeloxColumnar +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(70) InputAdapter +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(71) InputIteratorTransformer +Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] + +(72) ProjectExecTransformer Output [8]: [hash(cs_item_sk#48, cs_order_number#50, 42) AS hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(63) WholeStageCodegenTransformer (19) +(73) WholeStageCodegenTransformer (17) Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: false -(64) VeloxResizeBatches +(74) VeloxResizeBatches Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: 1024, 2147483647, 10485760 -(65) ColumnarExchange +(75) ColumnarExchange Input [8]: [hash_partition_key#54, cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] Arguments: hashpartitioning(cs_item_sk#48, cs_order_number#50, 1), ENSURE_REQUIREMENTS, [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53], [plan_id=9], [shuffle_writer_type=hash] -(66) InputAdapter +(76) InputAdapter Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(67) InputIteratorTransformer +(77) InputIteratorTransformer Input [7]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53] -(68) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns +(78) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns Output [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] Batched: true Location: CatalogFileIndex [{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct -(69) FilterExecTransformer +(79) FilterExecTransformer Input [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] Arguments: (isnotnull(cr_item_sk#55) AND isnotnull(cr_order_number#56)) -(70) ProjectExecTransformer +(80) ProjectExecTransformer Output [5]: [hash(cr_item_sk#55, cr_order_number#56, 42) AS hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Input [5]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58, cr_returned_date_sk#59] -(71) WholeStageCodegenTransformer (20) +(81) WholeStageCodegenTransformer (18) Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: false -(72) VeloxResizeBatches +(82) VeloxResizeBatches Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: 1024, 2147483647, 10485760 -(73) ColumnarExchange +(83) ColumnarExchange Input [5]: [hash_partition_key#60, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] Arguments: hashpartitioning(cr_item_sk#55, cr_order_number#56, 1), ENSURE_REQUIREMENTS, [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58], [plan_id=10], [shuffle_writer_type=hash] -(74) InputAdapter +(84) InputAdapter Input [4]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(75) InputIteratorTransformer +(85) InputIteratorTransformer Input [4]: [cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(76) ShuffledHashJoinExecTransformer +(86) ShuffledHashJoinExecTransformer Left keys [2]: [cs_item_sk#48, cs_order_number#50] Right keys [2]: [cr_item_sk#55, cr_order_number#56] Join type: LeftOuter Join condition: None -(77) ProjectExecTransformer +(87) ProjectExecTransformer Output [8]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [11]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_order_number#50, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_item_sk#55, cr_order_number#56, cr_return_amount#57, cr_net_loss#58] -(78) ReusedExchange [Reuses operator id: 23] +(88) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#61] -(79) InputAdapter +(89) InputAdapter Input [1]: [i_item_sk#61] -(80) InputIteratorTransformer +(90) InputIteratorTransformer Input [1]: [i_item_sk#61] -(81) BroadcastHashJoinExecTransformer +(91) BroadcastHashJoinExecTransformer Left keys [1]: [cs_item_sk#48] Right keys [1]: [i_item_sk#61] Join type: Inner Join condition: None -(82) ProjectExecTransformer +(92) ProjectExecTransformer Output [7]: [cs_catalog_page_sk#47, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [9]: [cs_catalog_page_sk#47, cs_item_sk#48, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, i_item_sk#61] -(83) ReusedExchange [Reuses operator id: 32] +(93) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#62] -(84) InputAdapter +(94) InputAdapter Input [1]: [p_promo_sk#62] -(85) InputIteratorTransformer +(95) InputIteratorTransformer Input [1]: [p_promo_sk#62] -(86) BroadcastHashJoinExecTransformer +(96) BroadcastHashJoinExecTransformer Left keys [1]: [cs_promo_sk#49] Right keys [1]: [p_promo_sk#62] Join type: Inner Join condition: None -(87) ProjectExecTransformer +(97) ProjectExecTransformer Output [6]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58] Input [8]: [cs_catalog_page_sk#47, cs_promo_sk#49, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, p_promo_sk#62] -(88) ReusedExchange [Reuses operator id: 401] +(98) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#63] -(89) InputAdapter +(99) InputAdapter Input [1]: [d_date_sk#63] -(90) InputIteratorTransformer +(100) InputIteratorTransformer Input [1]: [d_date_sk#63] -(91) BroadcastHashJoinExecTransformer +(101) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#53] Right keys [1]: [d_date_sk#63] Join type: Inner Join condition: None -(92) ProjectExecTransformer +(102) ProjectExecTransformer Output [5]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cr_return_amount#57, cr_net_loss#58] Input [7]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cs_sold_date_sk#53, cr_return_amount#57, cr_net_loss#58, d_date_sk#63] -(93) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page +(103) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page Output [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct -(94) FilterExecTransformer +(104) FilterExecTransformer Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: isnotnull(cp_catalog_page_sk#64) -(95) WholeStageCodegenTransformer (24) +(105) WholeStageCodegenTransformer (22) Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: false -(96) ColumnarBroadcastExchange +(106) ColumnarBroadcastExchange Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=11] -(97) InputAdapter +(107) InputAdapter Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -(98) InputIteratorTransformer +(108) InputIteratorTransformer Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -(99) BroadcastHashJoinExecTransformer +(109) BroadcastHashJoinExecTransformer Left keys [1]: [cs_catalog_page_sk#47] Right keys [1]: [cp_catalog_page_sk#64] Join type: Inner Join condition: None -(100) ProjectExecTransformer +(110) ProjectExecTransformer Output [4]: [cp_catalog_page_id#65, UnscaledValue(cs_ext_sales_price#51) AS _pre_4#66, coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00) AS _pre_5#67, (cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)) AS _pre_6#68] Input [7]: [cs_catalog_page_sk#47, cs_ext_sales_price#51, cs_net_profit#52, cr_return_amount#57, cr_net_loss#58, cp_catalog_page_sk#64, cp_catalog_page_id#65] -(101) FlushableHashAggregateExecTransformer +(111) FlushableHashAggregateExecTransformer Input [4]: [cp_catalog_page_id#65, _pre_4#66, _pre_5#67, _pre_6#68] Keys [1]: [cp_catalog_page_id#65] Functions [3]: [partial_sum(_pre_4#66), partial_sum(_pre_5#67), partial_sum(_pre_6#68)] Aggregate Attributes [5]: [sum#69, sum#70, isEmpty#71, sum#72, isEmpty#73] Results [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(102) ProjectExecTransformer +(112) ProjectExecTransformer Output [7]: [hash(cp_catalog_page_id#65, 42) AS hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(103) WholeStageCodegenTransformer (25) +(113) WholeStageCodegenTransformer (23) Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: false -(104) VeloxResizeBatches +(114) VeloxResizeBatches Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: 1024, 2147483647, 10485760 -(105) ColumnarExchange +(115) ColumnarExchange Input [7]: [hash_partition_key#79, cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Arguments: hashpartitioning(cp_catalog_page_id#65, 1), ENSURE_REQUIREMENTS, [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78], [plan_id=12], [shuffle_writer_type=hash] -(106) InputAdapter +(116) InputAdapter Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(107) InputIteratorTransformer +(117) InputIteratorTransformer Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -(108) RegularHashAggregateExecTransformer +(118) RegularHashAggregateExecTransformer Input [6]: [cp_catalog_page_id#65, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] Keys [1]: [cp_catalog_page_id#65] Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#51)), sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00)), sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] Results [4]: [cp_catalog_page_id#65, sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] -(109) ProjectExecTransformer +(119) ProjectExecTransformer Output [5]: [catalog channel AS channel#83, concat(catalog_page, cp_catalog_page_id#65) AS id#84, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#51))#80,17,2) AS sales#85, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81 AS returns#86, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82 AS profit#87] Input [4]: [cp_catalog_page_id#65, sum(UnscaledValue(cs_ext_sales_price#51))#80, sum(coalesce(cast(cr_return_amount#57 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#52 - coalesce(cast(cr_net_loss#58 as decimal(12,2)), 0.00)))#82] -(110) WholeStageCodegenTransformer (26) +(120) WholeStageCodegenTransformer (24) Input [5]: [channel#83, id#84, sales#85, returns#86, profit#87] Arguments: false -(111) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(121) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Batched: true Location: InMemoryFileIndex [] @@ -755,313 +796,329 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#94), dynamicpruningexpression(ws_so PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)] ReadSchema: struct -(112) FilterExecTransformer +(122) WholeStageCodegenTransformer (28) +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Arguments: false + +(123) VeloxColumnarToRow Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Arguments: ((((isnotnull(ws_web_site_sk#89) AND isnotnull(ws_item_sk#88)) AND isnotnull(ws_promo_sk#90)) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(ws_item_sk#88, 42))) AND velox_might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(ws_promo_sk#90, 42))) -(113) ProjectExecTransformer +(124) Filter [codegen id : 3] +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Condition : ((((isnotnull(ws_web_site_sk#89) AND isnotnull(ws_item_sk#88)) AND isnotnull(ws_promo_sk#90)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#1], xxhash64(ws_item_sk#88, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#10, [id=#2], xxhash64(ws_promo_sk#90, 42))) + +(125) RowToVeloxColumnar +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(126) InputAdapter +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(127) InputIteratorTransformer +Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] + +(128) ProjectExecTransformer Output [8]: [hash(ws_item_sk#88, ws_order_number#91, 42) AS hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(114) WholeStageCodegenTransformer (32) +(129) WholeStageCodegenTransformer (29) Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: false -(115) VeloxResizeBatches +(130) VeloxResizeBatches Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: 1024, 2147483647, 10485760 -(116) ColumnarExchange +(131) ColumnarExchange Input [8]: [hash_partition_key#95, ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] Arguments: hashpartitioning(ws_item_sk#88, ws_order_number#91, 1), ENSURE_REQUIREMENTS, [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94], [plan_id=13], [shuffle_writer_type=hash] -(117) InputAdapter +(132) InputAdapter Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(118) InputIteratorTransformer +(133) InputIteratorTransformer Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -(119) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns +(134) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns Output [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] Batched: true Location: CatalogFileIndex [{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number)] ReadSchema: struct -(120) FilterExecTransformer +(135) FilterExecTransformer Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] Arguments: (isnotnull(wr_item_sk#96) AND isnotnull(wr_order_number#97)) -(121) ProjectExecTransformer +(136) ProjectExecTransformer Output [5]: [hash(wr_item_sk#96, wr_order_number#97, 42) AS hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -(122) WholeStageCodegenTransformer (33) +(137) WholeStageCodegenTransformer (30) Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: false -(123) VeloxResizeBatches +(138) VeloxResizeBatches Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: 1024, 2147483647, 10485760 -(124) ColumnarExchange +(139) ColumnarExchange Input [5]: [hash_partition_key#101, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] Arguments: hashpartitioning(wr_item_sk#96, wr_order_number#97, 1), ENSURE_REQUIREMENTS, [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99], [plan_id=14], [shuffle_writer_type=hash] -(125) InputAdapter +(140) InputAdapter Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(126) InputIteratorTransformer +(141) InputIteratorTransformer Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(127) ShuffledHashJoinExecTransformer +(142) ShuffledHashJoinExecTransformer Left keys [2]: [ws_item_sk#88, ws_order_number#91] Right keys [2]: [wr_item_sk#96, wr_order_number#97] Join type: LeftOuter Join condition: None -(128) ProjectExecTransformer +(143) ProjectExecTransformer Output [8]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [11]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -(129) ReusedExchange [Reuses operator id: 23] +(144) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#102] -(130) InputAdapter +(145) InputAdapter Input [1]: [i_item_sk#102] -(131) InputIteratorTransformer +(146) InputIteratorTransformer Input [1]: [i_item_sk#102] -(132) BroadcastHashJoinExecTransformer +(147) BroadcastHashJoinExecTransformer Left keys [1]: [ws_item_sk#88] Right keys [1]: [i_item_sk#102] Join type: Inner Join condition: None -(133) ProjectExecTransformer +(148) ProjectExecTransformer Output [7]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [9]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, i_item_sk#102] -(134) ReusedExchange [Reuses operator id: 32] +(149) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#103] -(135) InputAdapter +(150) InputAdapter Input [1]: [p_promo_sk#103] -(136) InputIteratorTransformer +(151) InputIteratorTransformer Input [1]: [p_promo_sk#103] -(137) BroadcastHashJoinExecTransformer +(152) BroadcastHashJoinExecTransformer Left keys [1]: [ws_promo_sk#90] Right keys [1]: [p_promo_sk#103] Join type: Inner Join condition: None -(138) ProjectExecTransformer +(153) ProjectExecTransformer Output [6]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] Input [8]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, p_promo_sk#103] -(139) ReusedExchange [Reuses operator id: 401] +(154) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#104] -(140) InputAdapter +(155) InputAdapter Input [1]: [d_date_sk#104] -(141) InputIteratorTransformer +(156) InputIteratorTransformer Input [1]: [d_date_sk#104] -(142) BroadcastHashJoinExecTransformer +(157) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#94] Right keys [1]: [d_date_sk#104] Join type: Inner Join condition: None -(143) ProjectExecTransformer +(158) ProjectExecTransformer Output [5]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99] Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, d_date_sk#104] -(144) FileSourceScanExecTransformer parquet spark_catalog.default.web_site +(159) FileSourceScanExecTransformer parquet spark_catalog.default.web_site Output [2]: [web_site_sk#105, web_site_id#106] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct -(145) FilterExecTransformer +(160) FilterExecTransformer Input [2]: [web_site_sk#105, web_site_id#106] Arguments: isnotnull(web_site_sk#105) -(146) WholeStageCodegenTransformer (37) +(161) WholeStageCodegenTransformer (34) Input [2]: [web_site_sk#105, web_site_id#106] Arguments: false -(147) ColumnarBroadcastExchange +(162) ColumnarBroadcastExchange Input [2]: [web_site_sk#105, web_site_id#106] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -(148) InputAdapter +(163) InputAdapter Input [2]: [web_site_sk#105, web_site_id#106] -(149) InputIteratorTransformer +(164) InputIteratorTransformer Input [2]: [web_site_sk#105, web_site_id#106] -(150) BroadcastHashJoinExecTransformer +(165) BroadcastHashJoinExecTransformer Left keys [1]: [ws_web_site_sk#89] Right keys [1]: [web_site_sk#105] Join type: Inner Join condition: None -(151) ProjectExecTransformer +(166) ProjectExecTransformer Output [4]: [web_site_id#106, UnscaledValue(ws_ext_sales_price#92) AS _pre_7#107, coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00) AS _pre_8#108, (ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)) AS _pre_9#109] Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_sk#105, web_site_id#106] -(152) FlushableHashAggregateExecTransformer +(167) FlushableHashAggregateExecTransformer Input [4]: [web_site_id#106, _pre_7#107, _pre_8#108, _pre_9#109] Keys [1]: [web_site_id#106] Functions [3]: [partial_sum(_pre_7#107), partial_sum(_pre_8#108), partial_sum(_pre_9#109)] Aggregate Attributes [5]: [sum#110, sum#111, isEmpty#112, sum#113, isEmpty#114] Results [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(153) ProjectExecTransformer +(168) ProjectExecTransformer Output [7]: [hash(web_site_id#106, 42) AS hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(154) WholeStageCodegenTransformer (38) +(169) WholeStageCodegenTransformer (35) Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: false -(155) VeloxResizeBatches +(170) VeloxResizeBatches Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: 1024, 2147483647, 10485760 -(156) ColumnarExchange +(171) ColumnarExchange Input [7]: [hash_partition_key#120, web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Arguments: hashpartitioning(web_site_id#106, 1), ENSURE_REQUIREMENTS, [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119], [plan_id=16], [shuffle_writer_type=hash] -(157) InputAdapter +(172) InputAdapter Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(158) InputIteratorTransformer +(173) InputIteratorTransformer Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -(159) RegularHashAggregateExecTransformer +(174) RegularHashAggregateExecTransformer Input [6]: [web_site_id#106, sum#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Keys [1]: [web_site_id#106] Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#92)), sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00)), sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] Results [4]: [web_site_id#106, sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] -(160) ProjectExecTransformer +(175) ProjectExecTransformer Output [5]: [web channel AS channel#124, concat(web_site, web_site_id#106) AS id#125, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#92))#121,17,2) AS sales#126, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122 AS returns#127, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123 AS profit#128] Input [4]: [web_site_id#106, sum(UnscaledValue(ws_ext_sales_price#92))#121, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#93 - coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00)))#123] -(161) WholeStageCodegenTransformer (39) +(176) WholeStageCodegenTransformer (36) Input [5]: [channel#124, id#125, sales#126, returns#127, profit#128] Arguments: false -(162) ColumnarUnion +(177) ColumnarUnion Arguments: UnknownPartitioning(0) -(163) InputAdapter +(178) InputAdapter Input [5]: [channel#42, id#43, sales#44, returns#45, profit#46] -(164) InputIteratorTransformer +(179) InputIteratorTransformer Input [5]: [channel#42, id#43, sales#44, returns#45, profit#46] -(165) FlushableHashAggregateExecTransformer +(180) FlushableHashAggregateExecTransformer Input [5]: [channel#42, id#43, sales#44, returns#45, profit#46] Keys [2]: [channel#42, id#43] Functions [3]: [partial_sum(sales#44), partial_sum(returns#45), partial_sum(profit#46)] Aggregate Attributes [6]: [sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] Results [8]: [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] -(166) ProjectExecTransformer +(181) ProjectExecTransformer Output [9]: [hash(channel#42, id#43, 42) AS hash_partition_key#141, channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] Input [8]: [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] -(167) WholeStageCodegenTransformer (40) +(182) WholeStageCodegenTransformer (37) Input [9]: [hash_partition_key#141, channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] Arguments: false -(168) VeloxResizeBatches +(183) VeloxResizeBatches Input [9]: [hash_partition_key#141, channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] Arguments: 1024, 2147483647, 10485760 -(169) ColumnarExchange +(184) ColumnarExchange Input [9]: [hash_partition_key#141, channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] Arguments: hashpartitioning(channel#42, id#43, 1), ENSURE_REQUIREMENTS, [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140], [plan_id=17], [shuffle_writer_type=hash] -(170) InputAdapter +(185) InputAdapter Input [8]: [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] -(171) InputIteratorTransformer +(186) InputIteratorTransformer Input [8]: [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] -(172) RegularHashAggregateExecTransformer +(187) RegularHashAggregateExecTransformer Input [8]: [channel#42, id#43, sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] Keys [2]: [channel#42, id#43] Functions [3]: [sum(sales#44), sum(returns#45), sum(profit#46)] Aggregate Attributes [3]: [sum(sales#44)#142, sum(returns#45)#143, sum(profit#46)#144] Results [5]: [channel#42, id#43, sum(sales#44)#142, sum(returns#45)#143, sum(profit#46)#144] -(173) ProjectExecTransformer +(188) ProjectExecTransformer Output [5]: [channel#42, id#43, cast(sum(sales#44)#142 as decimal(37,2)) AS sales#145, cast(sum(returns#45)#143 as decimal(38,2)) AS returns#146, cast(sum(profit#46)#144 as decimal(38,2)) AS profit#147] Input [5]: [channel#42, id#43, sum(sales#44)#142, sum(returns#45)#143, sum(profit#46)#144] -(174) WholeStageCodegenTransformer (41) +(189) WholeStageCodegenTransformer (38) Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Arguments: false -(175) ReusedExchange [Reuses operator id: 54] +(190) ReusedExchange [Reuses operator id: 59] Output [6]: [s_store_id#148, sum#149, sum#150, isEmpty#151, sum#152, isEmpty#153] -(176) InputAdapter +(191) InputAdapter Input [6]: [s_store_id#148, sum#149, sum#150, isEmpty#151, sum#152, isEmpty#153] -(177) InputIteratorTransformer +(192) InputIteratorTransformer Input [6]: [s_store_id#148, sum#149, sum#150, isEmpty#151, sum#152, isEmpty#153] -(178) RegularHashAggregateExecTransformer +(193) RegularHashAggregateExecTransformer Input [6]: [s_store_id#148, sum#149, sum#150, isEmpty#151, sum#152, isEmpty#153] Keys [1]: [s_store_id#148] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#154)), sum(coalesce(cast(sr_return_amt#155 as decimal(12,2)), 0.00)), sum((ss_net_profit#156 - coalesce(cast(sr_net_loss#157 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#154))#39, sum(coalesce(cast(sr_return_amt#155 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#156 - coalesce(cast(sr_net_loss#157 as decimal(12,2)), 0.00)))#41] Results [4]: [s_store_id#148, sum(UnscaledValue(ss_ext_sales_price#154))#39, sum(coalesce(cast(sr_return_amt#155 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#156 - coalesce(cast(sr_net_loss#157 as decimal(12,2)), 0.00)))#41] -(179) ProjectExecTransformer +(194) ProjectExecTransformer Output [5]: [store channel AS channel#158, concat(store, s_store_id#148) AS id#159, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#154))#39,17,2) AS sales#160, sum(coalesce(cast(sr_return_amt#155 as decimal(12,2)), 0.00))#40 AS returns#161, sum((ss_net_profit#156 - coalesce(cast(sr_net_loss#157 as decimal(12,2)), 0.00)))#41 AS profit#162] Input [4]: [s_store_id#148, sum(UnscaledValue(ss_ext_sales_price#154))#39, sum(coalesce(cast(sr_return_amt#155 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#156 - coalesce(cast(sr_net_loss#157 as decimal(12,2)), 0.00)))#41] -(180) WholeStageCodegenTransformer (54) +(195) WholeStageCodegenTransformer (50) Input [5]: [channel#158, id#159, sales#160, returns#161, profit#162] Arguments: false -(181) ReusedExchange [Reuses operator id: 105] +(196) ReusedExchange [Reuses operator id: 115] Output [6]: [cp_catalog_page_id#163, sum#164, sum#165, isEmpty#166, sum#167, isEmpty#168] -(182) InputAdapter +(197) InputAdapter Input [6]: [cp_catalog_page_id#163, sum#164, sum#165, isEmpty#166, sum#167, isEmpty#168] -(183) InputIteratorTransformer +(198) InputIteratorTransformer Input [6]: [cp_catalog_page_id#163, sum#164, sum#165, isEmpty#166, sum#167, isEmpty#168] -(184) RegularHashAggregateExecTransformer +(199) RegularHashAggregateExecTransformer Input [6]: [cp_catalog_page_id#163, sum#164, sum#165, isEmpty#166, sum#167, isEmpty#168] Keys [1]: [cp_catalog_page_id#163] Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#169)), sum(coalesce(cast(cr_return_amount#170 as decimal(12,2)), 0.00)), sum((cs_net_profit#171 - coalesce(cast(cr_net_loss#172 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#169))#80, sum(coalesce(cast(cr_return_amount#170 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#171 - coalesce(cast(cr_net_loss#172 as decimal(12,2)), 0.00)))#82] Results [4]: [cp_catalog_page_id#163, sum(UnscaledValue(cs_ext_sales_price#169))#80, sum(coalesce(cast(cr_return_amount#170 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#171 - coalesce(cast(cr_net_loss#172 as decimal(12,2)), 0.00)))#82] -(185) ProjectExecTransformer +(200) ProjectExecTransformer Output [5]: [catalog channel AS channel#173, concat(catalog_page, cp_catalog_page_id#163) AS id#174, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#169))#80,17,2) AS sales#175, sum(coalesce(cast(cr_return_amount#170 as decimal(12,2)), 0.00))#81 AS returns#176, sum((cs_net_profit#171 - coalesce(cast(cr_net_loss#172 as decimal(12,2)), 0.00)))#82 AS profit#177] Input [4]: [cp_catalog_page_id#163, sum(UnscaledValue(cs_ext_sales_price#169))#80, sum(coalesce(cast(cr_return_amount#170 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#171 - coalesce(cast(cr_net_loss#172 as decimal(12,2)), 0.00)))#82] -(186) WholeStageCodegenTransformer (67) +(201) WholeStageCodegenTransformer (62) Input [5]: [channel#173, id#174, sales#175, returns#176, profit#177] Arguments: false -(187) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales +(202) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales Output [7]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Batched: true Location: InMemoryFileIndex [] @@ -1069,265 +1126,265 @@ PartitionFilters: [isnotnull(ws_sold_date_sk#184), dynamicpruningexpression(ws_s PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)] ReadSchema: struct -(188) FilterExecTransformer +(203) FilterExecTransformer Input [7]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Arguments: ((isnotnull(ws_web_site_sk#179) AND isnotnull(ws_item_sk#178)) AND isnotnull(ws_promo_sk#180)) -(189) ProjectExecTransformer +(204) ProjectExecTransformer Output [8]: [hash(ws_item_sk#178, ws_order_number#181, 42) AS hash_partition_key#185, ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Input [7]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] -(190) WholeStageCodegenTransformer (69) +(205) WholeStageCodegenTransformer (64) Input [8]: [hash_partition_key#185, ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Arguments: false -(191) VeloxResizeBatches +(206) VeloxResizeBatches Input [8]: [hash_partition_key#185, ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Arguments: 1024, 2147483647, 10485760 -(192) ColumnarExchange +(207) ColumnarExchange Input [8]: [hash_partition_key#185, ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] Arguments: hashpartitioning(ws_item_sk#178, ws_order_number#181, 1), ENSURE_REQUIREMENTS, [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184], [plan_id=18], [shuffle_writer_type=hash] -(193) InputAdapter +(208) InputAdapter Input [7]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] -(194) InputIteratorTransformer +(209) InputIteratorTransformer Input [7]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184] -(195) ReusedExchange [Reuses operator id: 124] +(210) ReusedExchange [Reuses operator id: 139] Output [4]: [wr_item_sk#186, wr_order_number#187, wr_return_amt#188, wr_net_loss#189] -(196) InputAdapter +(211) InputAdapter Input [4]: [wr_item_sk#186, wr_order_number#187, wr_return_amt#188, wr_net_loss#189] -(197) InputIteratorTransformer +(212) InputIteratorTransformer Input [4]: [wr_item_sk#186, wr_order_number#187, wr_return_amt#188, wr_net_loss#189] -(198) ShuffledHashJoinExecTransformer +(213) ShuffledHashJoinExecTransformer Left keys [2]: [ws_item_sk#178, ws_order_number#181] Right keys [2]: [wr_item_sk#186, wr_order_number#187] Join type: LeftOuter Join condition: None -(199) ProjectExecTransformer +(214) ProjectExecTransformer Output [8]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189] Input [11]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_order_number#181, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_item_sk#186, wr_order_number#187, wr_return_amt#188, wr_net_loss#189] -(200) ReusedExchange [Reuses operator id: 23] +(215) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#190] -(201) InputAdapter +(216) InputAdapter Input [1]: [i_item_sk#190] -(202) InputIteratorTransformer +(217) InputIteratorTransformer Input [1]: [i_item_sk#190] -(203) BroadcastHashJoinExecTransformer +(218) BroadcastHashJoinExecTransformer Left keys [1]: [ws_item_sk#178] Right keys [1]: [i_item_sk#190] Join type: Inner Join condition: None -(204) ProjectExecTransformer +(219) ProjectExecTransformer Output [7]: [ws_web_site_sk#179, ws_promo_sk#180, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189] Input [9]: [ws_item_sk#178, ws_web_site_sk#179, ws_promo_sk#180, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189, i_item_sk#190] -(205) ReusedExchange [Reuses operator id: 32] +(220) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#191] -(206) InputAdapter +(221) InputAdapter Input [1]: [p_promo_sk#191] -(207) InputIteratorTransformer +(222) InputIteratorTransformer Input [1]: [p_promo_sk#191] -(208) BroadcastHashJoinExecTransformer +(223) BroadcastHashJoinExecTransformer Left keys [1]: [ws_promo_sk#180] Right keys [1]: [p_promo_sk#191] Join type: Inner Join condition: None -(209) ProjectExecTransformer +(224) ProjectExecTransformer Output [6]: [ws_web_site_sk#179, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189] Input [8]: [ws_web_site_sk#179, ws_promo_sk#180, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189, p_promo_sk#191] -(210) ReusedExchange [Reuses operator id: 401] +(225) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#192] -(211) InputAdapter +(226) InputAdapter Input [1]: [d_date_sk#192] -(212) InputIteratorTransformer +(227) InputIteratorTransformer Input [1]: [d_date_sk#192] -(213) BroadcastHashJoinExecTransformer +(228) BroadcastHashJoinExecTransformer Left keys [1]: [ws_sold_date_sk#184] Right keys [1]: [d_date_sk#192] Join type: Inner Join condition: None -(214) ProjectExecTransformer +(229) ProjectExecTransformer Output [5]: [ws_web_site_sk#179, ws_ext_sales_price#182, ws_net_profit#183, wr_return_amt#188, wr_net_loss#189] Input [7]: [ws_web_site_sk#179, ws_ext_sales_price#182, ws_net_profit#183, ws_sold_date_sk#184, wr_return_amt#188, wr_net_loss#189, d_date_sk#192] -(215) ReusedExchange [Reuses operator id: 147] +(230) ReusedExchange [Reuses operator id: 162] Output [2]: [web_site_sk#193, web_site_id#194] -(216) InputAdapter +(231) InputAdapter Input [2]: [web_site_sk#193, web_site_id#194] -(217) InputIteratorTransformer +(232) InputIteratorTransformer Input [2]: [web_site_sk#193, web_site_id#194] -(218) BroadcastHashJoinExecTransformer +(233) BroadcastHashJoinExecTransformer Left keys [1]: [ws_web_site_sk#179] Right keys [1]: [web_site_sk#193] Join type: Inner Join condition: None -(219) ProjectExecTransformer +(234) ProjectExecTransformer Output [4]: [web_site_id#194, UnscaledValue(ws_ext_sales_price#182) AS _pre_10#195, coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00) AS _pre_11#196, (ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)) AS _pre_12#197] Input [7]: [ws_web_site_sk#179, ws_ext_sales_price#182, ws_net_profit#183, wr_return_amt#188, wr_net_loss#189, web_site_sk#193, web_site_id#194] -(220) FlushableHashAggregateExecTransformer +(235) FlushableHashAggregateExecTransformer Input [4]: [web_site_id#194, _pre_10#195, _pre_11#196, _pre_12#197] Keys [1]: [web_site_id#194] Functions [3]: [partial_sum(_pre_10#195), partial_sum(_pre_11#196), partial_sum(_pre_12#197)] Aggregate Attributes [5]: [sum#198, sum#199, isEmpty#200, sum#201, isEmpty#202] Results [6]: [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] -(221) ProjectExecTransformer +(236) ProjectExecTransformer Output [7]: [hash(web_site_id#194, 42) AS hash_partition_key#208, web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] Input [6]: [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] -(222) WholeStageCodegenTransformer (75) +(237) WholeStageCodegenTransformer (70) Input [7]: [hash_partition_key#208, web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] Arguments: false -(223) VeloxResizeBatches +(238) VeloxResizeBatches Input [7]: [hash_partition_key#208, web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] Arguments: 1024, 2147483647, 10485760 -(224) ColumnarExchange +(239) ColumnarExchange Input [7]: [hash_partition_key#208, web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] Arguments: hashpartitioning(web_site_id#194, 1), ENSURE_REQUIREMENTS, [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207], [plan_id=19], [shuffle_writer_type=hash] -(225) InputAdapter +(240) InputAdapter Input [6]: [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] -(226) InputIteratorTransformer +(241) InputIteratorTransformer Input [6]: [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] -(227) RegularHashAggregateExecTransformer +(242) RegularHashAggregateExecTransformer Input [6]: [web_site_id#194, sum#203, sum#204, isEmpty#205, sum#206, isEmpty#207] Keys [1]: [web_site_id#194] Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#182)), sum(coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00)), sum((ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#182))#121, sum(coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)))#123] Results [4]: [web_site_id#194, sum(UnscaledValue(ws_ext_sales_price#182))#121, sum(coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)))#123] -(228) ProjectExecTransformer +(243) ProjectExecTransformer Output [5]: [web channel AS channel#209, concat(web_site, web_site_id#194) AS id#210, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#182))#121,17,2) AS sales#211, sum(coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00))#122 AS returns#212, sum((ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)))#123 AS profit#213] Input [4]: [web_site_id#194, sum(UnscaledValue(ws_ext_sales_price#182))#121, sum(coalesce(cast(wr_return_amt#188 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#183 - coalesce(cast(wr_net_loss#189 as decimal(12,2)), 0.00)))#123] -(229) WholeStageCodegenTransformer (76) +(244) WholeStageCodegenTransformer (71) Input [5]: [channel#209, id#210, sales#211, returns#212, profit#213] Arguments: false -(230) ColumnarUnion +(245) ColumnarUnion Arguments: UnknownPartitioning(0) -(231) InputAdapter +(246) InputAdapter Input [5]: [channel#158, id#159, sales#160, returns#161, profit#162] -(232) InputIteratorTransformer +(247) InputIteratorTransformer Input [5]: [channel#158, id#159, sales#160, returns#161, profit#162] -(233) FlushableHashAggregateExecTransformer +(248) FlushableHashAggregateExecTransformer Input [5]: [channel#158, id#159, sales#160, returns#161, profit#162] Keys [2]: [channel#158, id#159] Functions [3]: [partial_sum(sales#160), partial_sum(returns#161), partial_sum(profit#162)] Aggregate Attributes [6]: [sum#214, isEmpty#215, sum#216, isEmpty#217, sum#218, isEmpty#219] Results [8]: [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] -(234) ProjectExecTransformer +(249) ProjectExecTransformer Output [9]: [hash(channel#158, id#159, 42) AS hash_partition_key#226, channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] Input [8]: [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] -(235) WholeStageCodegenTransformer (77) +(250) WholeStageCodegenTransformer (72) Input [9]: [hash_partition_key#226, channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] Arguments: false -(236) VeloxResizeBatches +(251) VeloxResizeBatches Input [9]: [hash_partition_key#226, channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] Arguments: 1024, 2147483647, 10485760 -(237) ColumnarExchange +(252) ColumnarExchange Input [9]: [hash_partition_key#226, channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] Arguments: hashpartitioning(channel#158, id#159, 1), ENSURE_REQUIREMENTS, [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225], [plan_id=20], [shuffle_writer_type=hash] -(238) InputAdapter +(253) InputAdapter Input [8]: [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] -(239) InputIteratorTransformer +(254) InputIteratorTransformer Input [8]: [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] -(240) RegularHashAggregateExecTransformer +(255) RegularHashAggregateExecTransformer Input [8]: [channel#158, id#159, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225] Keys [2]: [channel#158, id#159] Functions [3]: [sum(sales#160), sum(returns#161), sum(profit#162)] Aggregate Attributes [3]: [sum(sales#160)#142, sum(returns#161)#143, sum(profit#162)#144] Results [5]: [channel#158, id#159, sum(sales#160)#142, sum(returns#161)#143, sum(profit#162)#144] -(241) ProjectExecTransformer +(256) ProjectExecTransformer Output [4]: [channel#158, sum(sales#160)#142 AS sales#227, sum(returns#161)#143 AS returns#228, sum(profit#162)#144 AS profit#229] Input [5]: [channel#158, id#159, sum(sales#160)#142, sum(returns#161)#143, sum(profit#162)#144] -(242) FlushableHashAggregateExecTransformer +(257) FlushableHashAggregateExecTransformer Input [4]: [channel#158, sales#227, returns#228, profit#229] Keys [1]: [channel#158] Functions [3]: [partial_sum(sales#227), partial_sum(returns#228), partial_sum(profit#229)] Aggregate Attributes [6]: [sum#230, isEmpty#231, sum#232, isEmpty#233, sum#234, isEmpty#235] Results [7]: [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] -(243) ProjectExecTransformer +(258) ProjectExecTransformer Output [8]: [hash(channel#158, 42) AS hash_partition_key#242, channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] Input [7]: [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] -(244) WholeStageCodegenTransformer (78) +(259) WholeStageCodegenTransformer (73) Input [8]: [hash_partition_key#242, channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] Arguments: false -(245) VeloxResizeBatches +(260) VeloxResizeBatches Input [8]: [hash_partition_key#242, channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] Arguments: 1024, 2147483647, 10485760 -(246) ColumnarExchange +(261) ColumnarExchange Input [8]: [hash_partition_key#242, channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] Arguments: hashpartitioning(channel#158, 1), ENSURE_REQUIREMENTS, [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241], [plan_id=21], [shuffle_writer_type=hash] -(247) InputAdapter +(262) InputAdapter Input [7]: [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] -(248) InputIteratorTransformer +(263) InputIteratorTransformer Input [7]: [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] -(249) RegularHashAggregateExecTransformer +(264) RegularHashAggregateExecTransformer Input [7]: [channel#158, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241] Keys [1]: [channel#158] Functions [3]: [sum(sales#227), sum(returns#228), sum(profit#229)] Aggregate Attributes [3]: [sum(sales#227)#243, sum(returns#228)#244, sum(profit#229)#245] Results [4]: [channel#158, sum(sales#227)#243, sum(returns#228)#244, sum(profit#229)#245] -(250) ProjectExecTransformer +(265) ProjectExecTransformer Output [5]: [channel#158, null AS id#246, sum(sales#227)#243 AS sales#247, sum(returns#228)#244 AS returns#248, sum(profit#229)#245 AS profit#249] Input [4]: [channel#158, sum(sales#227)#243, sum(returns#228)#244, sum(profit#229)#245] -(251) WholeStageCodegenTransformer (79) +(266) WholeStageCodegenTransformer (74) Input [5]: [channel#158, id#246, sales#247, returns#248, profit#249] Arguments: false -(252) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales +(267) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales Output [7]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Batched: true Location: InMemoryFileIndex [] @@ -1335,172 +1392,172 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#256), dynamicpruningexpression(ss_s PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)] ReadSchema: struct -(253) FilterExecTransformer +(268) FilterExecTransformer Input [7]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Arguments: ((isnotnull(ss_store_sk#251) AND isnotnull(ss_item_sk#250)) AND isnotnull(ss_promo_sk#252)) -(254) ProjectExecTransformer +(269) ProjectExecTransformer Output [8]: [hash(ss_item_sk#250, ss_ticket_number#253, 42) AS hash_partition_key#257, ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Input [7]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] -(255) WholeStageCodegenTransformer (81) +(270) WholeStageCodegenTransformer (76) Input [8]: [hash_partition_key#257, ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Arguments: false -(256) VeloxResizeBatches +(271) VeloxResizeBatches Input [8]: [hash_partition_key#257, ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Arguments: 1024, 2147483647, 10485760 -(257) ColumnarExchange +(272) ColumnarExchange Input [8]: [hash_partition_key#257, ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] Arguments: hashpartitioning(ss_item_sk#250, ss_ticket_number#253, 1), ENSURE_REQUIREMENTS, [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256], [plan_id=22], [shuffle_writer_type=hash] -(258) InputAdapter +(273) InputAdapter Input [7]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] -(259) InputIteratorTransformer +(274) InputIteratorTransformer Input [7]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256] -(260) ReusedExchange [Reuses operator id: 14] +(275) ReusedExchange [Reuses operator id: 19] Output [4]: [sr_item_sk#258, sr_ticket_number#259, sr_return_amt#260, sr_net_loss#261] -(261) InputAdapter +(276) InputAdapter Input [4]: [sr_item_sk#258, sr_ticket_number#259, sr_return_amt#260, sr_net_loss#261] -(262) InputIteratorTransformer +(277) InputIteratorTransformer Input [4]: [sr_item_sk#258, sr_ticket_number#259, sr_return_amt#260, sr_net_loss#261] -(263) ShuffledHashJoinExecTransformer +(278) ShuffledHashJoinExecTransformer Left keys [2]: [ss_item_sk#250, ss_ticket_number#253] Right keys [2]: [sr_item_sk#258, sr_ticket_number#259] Join type: LeftOuter Join condition: None -(264) ProjectExecTransformer +(279) ProjectExecTransformer Output [8]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261] Input [11]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ticket_number#253, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_item_sk#258, sr_ticket_number#259, sr_return_amt#260, sr_net_loss#261] -(265) ReusedExchange [Reuses operator id: 23] +(280) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#262] -(266) InputAdapter +(281) InputAdapter Input [1]: [i_item_sk#262] -(267) InputIteratorTransformer +(282) InputIteratorTransformer Input [1]: [i_item_sk#262] -(268) BroadcastHashJoinExecTransformer +(283) BroadcastHashJoinExecTransformer Left keys [1]: [ss_item_sk#250] Right keys [1]: [i_item_sk#262] Join type: Inner Join condition: None -(269) ProjectExecTransformer +(284) ProjectExecTransformer Output [7]: [ss_store_sk#251, ss_promo_sk#252, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261] Input [9]: [ss_item_sk#250, ss_store_sk#251, ss_promo_sk#252, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261, i_item_sk#262] -(270) ReusedExchange [Reuses operator id: 32] +(285) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#263] -(271) InputAdapter +(286) InputAdapter Input [1]: [p_promo_sk#263] -(272) InputIteratorTransformer +(287) InputIteratorTransformer Input [1]: [p_promo_sk#263] -(273) BroadcastHashJoinExecTransformer +(288) BroadcastHashJoinExecTransformer Left keys [1]: [ss_promo_sk#252] Right keys [1]: [p_promo_sk#263] Join type: Inner Join condition: None -(274) ProjectExecTransformer +(289) ProjectExecTransformer Output [6]: [ss_store_sk#251, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261] Input [8]: [ss_store_sk#251, ss_promo_sk#252, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261, p_promo_sk#263] -(275) ReusedExchange [Reuses operator id: 401] +(290) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#264] -(276) InputAdapter +(291) InputAdapter Input [1]: [d_date_sk#264] -(277) InputIteratorTransformer +(292) InputIteratorTransformer Input [1]: [d_date_sk#264] -(278) BroadcastHashJoinExecTransformer +(293) BroadcastHashJoinExecTransformer Left keys [1]: [ss_sold_date_sk#256] Right keys [1]: [d_date_sk#264] Join type: Inner Join condition: None -(279) ProjectExecTransformer +(294) ProjectExecTransformer Output [5]: [ss_store_sk#251, ss_ext_sales_price#254, ss_net_profit#255, sr_return_amt#260, sr_net_loss#261] Input [7]: [ss_store_sk#251, ss_ext_sales_price#254, ss_net_profit#255, ss_sold_date_sk#256, sr_return_amt#260, sr_net_loss#261, d_date_sk#264] -(280) ReusedExchange [Reuses operator id: 45] +(295) ReusedExchange [Reuses operator id: 50] Output [2]: [s_store_sk#265, s_store_id#266] -(281) InputAdapter +(296) InputAdapter Input [2]: [s_store_sk#265, s_store_id#266] -(282) InputIteratorTransformer +(297) InputIteratorTransformer Input [2]: [s_store_sk#265, s_store_id#266] -(283) BroadcastHashJoinExecTransformer +(298) BroadcastHashJoinExecTransformer Left keys [1]: [ss_store_sk#251] Right keys [1]: [s_store_sk#265] Join type: Inner Join condition: None -(284) ProjectExecTransformer +(299) ProjectExecTransformer Output [4]: [s_store_id#266, UnscaledValue(ss_ext_sales_price#254) AS _pre_13#267, coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00) AS _pre_14#268, (ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)) AS _pre_15#269] Input [7]: [ss_store_sk#251, ss_ext_sales_price#254, ss_net_profit#255, sr_return_amt#260, sr_net_loss#261, s_store_sk#265, s_store_id#266] -(285) FlushableHashAggregateExecTransformer +(300) FlushableHashAggregateExecTransformer Input [4]: [s_store_id#266, _pre_13#267, _pre_14#268, _pre_15#269] Keys [1]: [s_store_id#266] Functions [3]: [partial_sum(_pre_13#267), partial_sum(_pre_14#268), partial_sum(_pre_15#269)] Aggregate Attributes [5]: [sum#270, sum#271, isEmpty#272, sum#273, isEmpty#274] Results [6]: [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] -(286) ProjectExecTransformer +(301) ProjectExecTransformer Output [7]: [hash(s_store_id#266, 42) AS hash_partition_key#280, s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] Input [6]: [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] -(287) WholeStageCodegenTransformer (87) +(302) WholeStageCodegenTransformer (82) Input [7]: [hash_partition_key#280, s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] Arguments: false -(288) VeloxResizeBatches +(303) VeloxResizeBatches Input [7]: [hash_partition_key#280, s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] Arguments: 1024, 2147483647, 10485760 -(289) ColumnarExchange +(304) ColumnarExchange Input [7]: [hash_partition_key#280, s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] Arguments: hashpartitioning(s_store_id#266, 1), ENSURE_REQUIREMENTS, [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279], [plan_id=23], [shuffle_writer_type=hash] -(290) InputAdapter +(305) InputAdapter Input [6]: [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] -(291) InputIteratorTransformer +(306) InputIteratorTransformer Input [6]: [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] -(292) RegularHashAggregateExecTransformer +(307) RegularHashAggregateExecTransformer Input [6]: [s_store_id#266, sum#275, sum#276, isEmpty#277, sum#278, isEmpty#279] Keys [1]: [s_store_id#266] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#254)), sum(coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00)), sum((ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#254))#39, sum(coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)))#41] Results [4]: [s_store_id#266, sum(UnscaledValue(ss_ext_sales_price#254))#39, sum(coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)))#41] -(293) ProjectExecTransformer +(308) ProjectExecTransformer Output [5]: [store channel AS channel#281, concat(store, s_store_id#266) AS id#282, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#254))#39,17,2) AS sales#283, sum(coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00))#40 AS returns#284, sum((ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)))#41 AS profit#285] Input [4]: [s_store_id#266, sum(UnscaledValue(ss_ext_sales_price#254))#39, sum(coalesce(cast(sr_return_amt#260 as decimal(12,2)), 0.00))#40, sum((ss_net_profit#255 - coalesce(cast(sr_net_loss#261 as decimal(12,2)), 0.00)))#41] -(294) WholeStageCodegenTransformer (88) +(309) WholeStageCodegenTransformer (83) Input [5]: [channel#281, id#282, sales#283, returns#284, profit#285] Arguments: false -(295) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales +(310) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales Output [7]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Batched: true Location: InMemoryFileIndex [] @@ -1508,527 +1565,489 @@ PartitionFilters: [isnotnull(cs_sold_date_sk#292), dynamicpruningexpression(cs_s PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)] ReadSchema: struct -(296) FilterExecTransformer +(311) FilterExecTransformer Input [7]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Arguments: ((isnotnull(cs_catalog_page_sk#286) AND isnotnull(cs_item_sk#287)) AND isnotnull(cs_promo_sk#288)) -(297) ProjectExecTransformer +(312) ProjectExecTransformer Output [8]: [hash(cs_item_sk#287, cs_order_number#289, 42) AS hash_partition_key#293, cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Input [7]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] -(298) WholeStageCodegenTransformer (90) +(313) WholeStageCodegenTransformer (85) Input [8]: [hash_partition_key#293, cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Arguments: false -(299) VeloxResizeBatches +(314) VeloxResizeBatches Input [8]: [hash_partition_key#293, cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Arguments: 1024, 2147483647, 10485760 -(300) ColumnarExchange +(315) ColumnarExchange Input [8]: [hash_partition_key#293, cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] Arguments: hashpartitioning(cs_item_sk#287, cs_order_number#289, 1), ENSURE_REQUIREMENTS, [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292], [plan_id=24], [shuffle_writer_type=hash] -(301) InputAdapter +(316) InputAdapter Input [7]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] -(302) InputIteratorTransformer +(317) InputIteratorTransformer Input [7]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292] -(303) ReusedExchange [Reuses operator id: 73] +(318) ReusedExchange [Reuses operator id: 83] Output [4]: [cr_item_sk#294, cr_order_number#295, cr_return_amount#296, cr_net_loss#297] -(304) InputAdapter +(319) InputAdapter Input [4]: [cr_item_sk#294, cr_order_number#295, cr_return_amount#296, cr_net_loss#297] -(305) InputIteratorTransformer +(320) InputIteratorTransformer Input [4]: [cr_item_sk#294, cr_order_number#295, cr_return_amount#296, cr_net_loss#297] -(306) ShuffledHashJoinExecTransformer +(321) ShuffledHashJoinExecTransformer Left keys [2]: [cs_item_sk#287, cs_order_number#289] Right keys [2]: [cr_item_sk#294, cr_order_number#295] Join type: LeftOuter Join condition: None -(307) ProjectExecTransformer +(322) ProjectExecTransformer Output [8]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297] Input [11]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_order_number#289, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_item_sk#294, cr_order_number#295, cr_return_amount#296, cr_net_loss#297] -(308) ReusedExchange [Reuses operator id: 23] +(323) ReusedExchange [Reuses operator id: 28] Output [1]: [i_item_sk#298] -(309) InputAdapter +(324) InputAdapter Input [1]: [i_item_sk#298] -(310) InputIteratorTransformer +(325) InputIteratorTransformer Input [1]: [i_item_sk#298] -(311) BroadcastHashJoinExecTransformer +(326) BroadcastHashJoinExecTransformer Left keys [1]: [cs_item_sk#287] Right keys [1]: [i_item_sk#298] Join type: Inner Join condition: None -(312) ProjectExecTransformer +(327) ProjectExecTransformer Output [7]: [cs_catalog_page_sk#286, cs_promo_sk#288, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297] Input [9]: [cs_catalog_page_sk#286, cs_item_sk#287, cs_promo_sk#288, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297, i_item_sk#298] -(313) ReusedExchange [Reuses operator id: 32] +(328) ReusedExchange [Reuses operator id: 37] Output [1]: [p_promo_sk#299] -(314) InputAdapter +(329) InputAdapter Input [1]: [p_promo_sk#299] -(315) InputIteratorTransformer +(330) InputIteratorTransformer Input [1]: [p_promo_sk#299] -(316) BroadcastHashJoinExecTransformer +(331) BroadcastHashJoinExecTransformer Left keys [1]: [cs_promo_sk#288] Right keys [1]: [p_promo_sk#299] Join type: Inner Join condition: None -(317) ProjectExecTransformer +(332) ProjectExecTransformer Output [6]: [cs_catalog_page_sk#286, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297] Input [8]: [cs_catalog_page_sk#286, cs_promo_sk#288, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297, p_promo_sk#299] -(318) ReusedExchange [Reuses operator id: 401] +(333) ReusedExchange [Reuses operator id: 414] Output [1]: [d_date_sk#300] -(319) InputAdapter +(334) InputAdapter Input [1]: [d_date_sk#300] -(320) InputIteratorTransformer +(335) InputIteratorTransformer Input [1]: [d_date_sk#300] -(321) BroadcastHashJoinExecTransformer +(336) BroadcastHashJoinExecTransformer Left keys [1]: [cs_sold_date_sk#292] Right keys [1]: [d_date_sk#300] Join type: Inner Join condition: None -(322) ProjectExecTransformer +(337) ProjectExecTransformer Output [5]: [cs_catalog_page_sk#286, cs_ext_sales_price#290, cs_net_profit#291, cr_return_amount#296, cr_net_loss#297] Input [7]: [cs_catalog_page_sk#286, cs_ext_sales_price#290, cs_net_profit#291, cs_sold_date_sk#292, cr_return_amount#296, cr_net_loss#297, d_date_sk#300] -(323) ReusedExchange [Reuses operator id: 96] +(338) ReusedExchange [Reuses operator id: 106] Output [2]: [cp_catalog_page_sk#301, cp_catalog_page_id#302] -(324) InputAdapter +(339) InputAdapter Input [2]: [cp_catalog_page_sk#301, cp_catalog_page_id#302] -(325) InputIteratorTransformer +(340) InputIteratorTransformer Input [2]: [cp_catalog_page_sk#301, cp_catalog_page_id#302] -(326) BroadcastHashJoinExecTransformer +(341) BroadcastHashJoinExecTransformer Left keys [1]: [cs_catalog_page_sk#286] Right keys [1]: [cp_catalog_page_sk#301] Join type: Inner Join condition: None -(327) ProjectExecTransformer +(342) ProjectExecTransformer Output [4]: [cp_catalog_page_id#302, UnscaledValue(cs_ext_sales_price#290) AS _pre_16#303, coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00) AS _pre_17#304, (cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)) AS _pre_18#305] Input [7]: [cs_catalog_page_sk#286, cs_ext_sales_price#290, cs_net_profit#291, cr_return_amount#296, cr_net_loss#297, cp_catalog_page_sk#301, cp_catalog_page_id#302] -(328) FlushableHashAggregateExecTransformer +(343) FlushableHashAggregateExecTransformer Input [4]: [cp_catalog_page_id#302, _pre_16#303, _pre_17#304, _pre_18#305] Keys [1]: [cp_catalog_page_id#302] Functions [3]: [partial_sum(_pre_16#303), partial_sum(_pre_17#304), partial_sum(_pre_18#305)] Aggregate Attributes [5]: [sum#306, sum#307, isEmpty#308, sum#309, isEmpty#310] Results [6]: [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] -(329) ProjectExecTransformer +(344) ProjectExecTransformer Output [7]: [hash(cp_catalog_page_id#302, 42) AS hash_partition_key#316, cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] Input [6]: [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] -(330) WholeStageCodegenTransformer (96) +(345) WholeStageCodegenTransformer (91) Input [7]: [hash_partition_key#316, cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] Arguments: false -(331) VeloxResizeBatches +(346) VeloxResizeBatches Input [7]: [hash_partition_key#316, cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] Arguments: 1024, 2147483647, 10485760 -(332) ColumnarExchange +(347) ColumnarExchange Input [7]: [hash_partition_key#316, cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] Arguments: hashpartitioning(cp_catalog_page_id#302, 1), ENSURE_REQUIREMENTS, [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315], [plan_id=25], [shuffle_writer_type=hash] -(333) InputAdapter +(348) InputAdapter Input [6]: [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] -(334) InputIteratorTransformer +(349) InputIteratorTransformer Input [6]: [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] -(335) RegularHashAggregateExecTransformer +(350) RegularHashAggregateExecTransformer Input [6]: [cp_catalog_page_id#302, sum#311, sum#312, isEmpty#313, sum#314, isEmpty#315] Keys [1]: [cp_catalog_page_id#302] Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#290)), sum(coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00)), sum((cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#290))#80, sum(coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)))#82] Results [4]: [cp_catalog_page_id#302, sum(UnscaledValue(cs_ext_sales_price#290))#80, sum(coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)))#82] -(336) ProjectExecTransformer +(351) ProjectExecTransformer Output [5]: [catalog channel AS channel#317, concat(catalog_page, cp_catalog_page_id#302) AS id#318, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#290))#80,17,2) AS sales#319, sum(coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00))#81 AS returns#320, sum((cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)))#82 AS profit#321] Input [4]: [cp_catalog_page_id#302, sum(UnscaledValue(cs_ext_sales_price#290))#80, sum(coalesce(cast(cr_return_amount#296 as decimal(12,2)), 0.00))#81, sum((cs_net_profit#291 - coalesce(cast(cr_net_loss#297 as decimal(12,2)), 0.00)))#82] -(337) WholeStageCodegenTransformer (97) +(352) WholeStageCodegenTransformer (92) Input [5]: [channel#317, id#318, sales#319, returns#320, profit#321] Arguments: false -(338) ReusedExchange [Reuses operator id: 224] +(353) ReusedExchange [Reuses operator id: 239] Output [6]: [web_site_id#322, sum#323, sum#324, isEmpty#325, sum#326, isEmpty#327] -(339) InputAdapter +(354) InputAdapter Input [6]: [web_site_id#322, sum#323, sum#324, isEmpty#325, sum#326, isEmpty#327] -(340) InputIteratorTransformer +(355) InputIteratorTransformer Input [6]: [web_site_id#322, sum#323, sum#324, isEmpty#325, sum#326, isEmpty#327] -(341) RegularHashAggregateExecTransformer +(356) RegularHashAggregateExecTransformer Input [6]: [web_site_id#322, sum#323, sum#324, isEmpty#325, sum#326, isEmpty#327] Keys [1]: [web_site_id#322] Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#328)), sum(coalesce(cast(wr_return_amt#329 as decimal(12,2)), 0.00)), sum((ws_net_profit#330 - coalesce(cast(wr_net_loss#331 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#328))#121, sum(coalesce(cast(wr_return_amt#329 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#330 - coalesce(cast(wr_net_loss#331 as decimal(12,2)), 0.00)))#123] Results [4]: [web_site_id#322, sum(UnscaledValue(ws_ext_sales_price#328))#121, sum(coalesce(cast(wr_return_amt#329 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#330 - coalesce(cast(wr_net_loss#331 as decimal(12,2)), 0.00)))#123] -(342) ProjectExecTransformer +(357) ProjectExecTransformer Output [5]: [web channel AS channel#332, concat(web_site, web_site_id#322) AS id#333, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#328))#121,17,2) AS sales#334, sum(coalesce(cast(wr_return_amt#329 as decimal(12,2)), 0.00))#122 AS returns#335, sum((ws_net_profit#330 - coalesce(cast(wr_net_loss#331 as decimal(12,2)), 0.00)))#123 AS profit#336] Input [4]: [web_site_id#322, sum(UnscaledValue(ws_ext_sales_price#328))#121, sum(coalesce(cast(wr_return_amt#329 as decimal(12,2)), 0.00))#122, sum((ws_net_profit#330 - coalesce(cast(wr_net_loss#331 as decimal(12,2)), 0.00)))#123] -(343) WholeStageCodegenTransformer (106) +(358) WholeStageCodegenTransformer (101) Input [5]: [channel#332, id#333, sales#334, returns#335, profit#336] Arguments: false -(344) ColumnarUnion +(359) ColumnarUnion Arguments: UnknownPartitioning(0) -(345) InputAdapter +(360) InputAdapter Input [5]: [channel#281, id#282, sales#283, returns#284, profit#285] -(346) InputIteratorTransformer +(361) InputIteratorTransformer Input [5]: [channel#281, id#282, sales#283, returns#284, profit#285] -(347) FlushableHashAggregateExecTransformer +(362) FlushableHashAggregateExecTransformer Input [5]: [channel#281, id#282, sales#283, returns#284, profit#285] Keys [2]: [channel#281, id#282] Functions [3]: [partial_sum(sales#283), partial_sum(returns#284), partial_sum(profit#285)] Aggregate Attributes [6]: [sum#337, isEmpty#338, sum#339, isEmpty#340, sum#341, isEmpty#342] Results [8]: [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] -(348) ProjectExecTransformer +(363) ProjectExecTransformer Output [9]: [hash(channel#281, id#282, 42) AS hash_partition_key#349, channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] Input [8]: [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] -(349) WholeStageCodegenTransformer (107) +(364) WholeStageCodegenTransformer (102) Input [9]: [hash_partition_key#349, channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] Arguments: false -(350) VeloxResizeBatches +(365) VeloxResizeBatches Input [9]: [hash_partition_key#349, channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] Arguments: 1024, 2147483647, 10485760 -(351) ColumnarExchange +(366) ColumnarExchange Input [9]: [hash_partition_key#349, channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] Arguments: hashpartitioning(channel#281, id#282, 1), ENSURE_REQUIREMENTS, [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348], [plan_id=26], [shuffle_writer_type=hash] -(352) InputAdapter +(367) InputAdapter Input [8]: [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] -(353) InputIteratorTransformer +(368) InputIteratorTransformer Input [8]: [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] -(354) RegularHashAggregateExecTransformer +(369) RegularHashAggregateExecTransformer Input [8]: [channel#281, id#282, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348] Keys [2]: [channel#281, id#282] Functions [3]: [sum(sales#283), sum(returns#284), sum(profit#285)] Aggregate Attributes [3]: [sum(sales#283)#142, sum(returns#284)#143, sum(profit#285)#144] Results [5]: [channel#281, id#282, sum(sales#283)#142, sum(returns#284)#143, sum(profit#285)#144] -(355) ProjectExecTransformer +(370) ProjectExecTransformer Output [3]: [sum(sales#283)#142 AS sales#350, sum(returns#284)#143 AS returns#351, sum(profit#285)#144 AS profit#352] Input [5]: [channel#281, id#282, sum(sales#283)#142, sum(returns#284)#143, sum(profit#285)#144] -(356) RegularHashAggregateExecTransformer +(371) RegularHashAggregateExecTransformer Input [3]: [sales#350, returns#351, profit#352] Keys: [] Functions [3]: [sum(sales#350), sum(returns#351), sum(profit#352)] Aggregate Attributes [3]: [sum(sales#350)#353, sum(returns#351)#354, sum(profit#352)#355] Results [3]: [sum(sales#350)#353, sum(returns#351)#354, sum(profit#352)#355] -(357) ProjectExecTransformer +(372) ProjectExecTransformer Output [5]: [null AS channel#356, null AS id#357, sum(sales#350)#353 AS sales#358, sum(returns#351)#354 AS returns#359, sum(profit#352)#355 AS profit#360] Input [3]: [sum(sales#350)#353, sum(returns#351)#354, sum(profit#352)#355] -(358) WholeStageCodegenTransformer (108) +(373) WholeStageCodegenTransformer (103) Input [5]: [channel#356, id#357, sales#358, returns#359, profit#360] Arguments: false -(359) ColumnarUnion +(374) ColumnarUnion Arguments: UnknownPartitioning(0) -(360) InputAdapter +(375) InputAdapter Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(361) InputIteratorTransformer +(376) InputIteratorTransformer Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(362) FlushableHashAggregateExecTransformer +(377) FlushableHashAggregateExecTransformer Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Keys [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Functions: [] Aggregate Attributes: [] Results [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(363) ProjectExecTransformer +(378) ProjectExecTransformer Output [6]: [hash(channel#42, id#43, sales#145, returns#146, profit#147, 42) AS hash_partition_key#361, channel#42, id#43, sales#145, returns#146, profit#147] Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(364) WholeStageCodegenTransformer (109) +(379) WholeStageCodegenTransformer (104) Input [6]: [hash_partition_key#361, channel#42, id#43, sales#145, returns#146, profit#147] Arguments: false -(365) VeloxResizeBatches +(380) VeloxResizeBatches Input [6]: [hash_partition_key#361, channel#42, id#43, sales#145, returns#146, profit#147] Arguments: 1024, 2147483647, 10485760 -(366) ColumnarExchange +(381) ColumnarExchange Input [6]: [hash_partition_key#361, channel#42, id#43, sales#145, returns#146, profit#147] Arguments: hashpartitioning(channel#42, id#43, sales#145, returns#146, profit#147, 1), ENSURE_REQUIREMENTS, [channel#42, id#43, sales#145, returns#146, profit#147], [plan_id=27], [shuffle_writer_type=hash] -(367) InputAdapter +(382) InputAdapter Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(368) InputIteratorTransformer +(383) InputIteratorTransformer Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(369) RegularHashAggregateExecTransformer +(384) RegularHashAggregateExecTransformer Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Keys [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Functions: [] Aggregate Attributes: [] Results [5]: [channel#42, id#43, sales#145, returns#146, profit#147] -(370) WholeStageCodegenTransformer (110) +(385) WholeStageCodegenTransformer (105) Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Arguments: false -(371) TakeOrderedAndProjectExecTransformer +(386) TakeOrderedAndProjectExecTransformer Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] Arguments: 100, [channel#42 ASC NULLS FIRST, id#43 ASC NULLS FIRST], [channel#42, id#43, sales#145, returns#146, profit#147], 0 -(372) VeloxColumnarToRow +(387) VeloxColumnarToRow Input [5]: [channel#42, id#43, sales#145, returns#146, profit#147] ===== Subqueries ===== -Subquery:1 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (384) -+- ^ RegularHashAggregateExecTransformer (382) - +- ^ InputIteratorTransformer (381) - +- ColumnarExchange (379) - +- VeloxResizeBatches (378) - +- ^ FlushableHashAggregateExecTransformer (376) - +- ^ ProjectExecTransformer (375) - +- ^ FilterExecTransformer (374) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (373) +Subquery:1 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#9, [id=#1] +ObjectHashAggregate (398) ++- VeloxColumnarToRow (397) + +- ColumnarExchange (396) + +- VeloxResizeBatches (395) + +- RowToVeloxColumnar (394) + +- ObjectHashAggregate (393) + +- VeloxColumnarToRow (392) + +- ^ ProjectExecTransformer (390) + +- ^ FilterExecTransformer (389) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (388) -(373) FileSourceScanExecTransformer parquet spark_catalog.default.item +(388) FileSourceScanExecTransformer parquet spark_catalog.default.item Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct -(374) FilterExecTransformer +(389) FilterExecTransformer Input [2]: [i_item_sk#18, i_current_price#19] Arguments: ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) -(375) ProjectExecTransformer -Output [1]: [xxhash64(i_item_sk#18, 42) AS _pre_19#362] +(390) ProjectExecTransformer +Output [1]: [i_item_sk#18] Input [2]: [i_item_sk#18, i_current_price#19] -(376) FlushableHashAggregateExecTransformer -Input [1]: [_pre_19#362] -Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_19#362, 101823, 1521109, 0, 0)] -Aggregate Attributes [1]: [buf#363] -Results [1]: [buf#364] - -(377) WholeStageCodegenTransformer (1) -Input [1]: [buf#364] +(391) WholeStageCodegenTransformer (1) +Input [1]: [i_item_sk#18] Arguments: false -(378) VeloxResizeBatches -Input [1]: [buf#364] -Arguments: 1024, 2147483647, 10485760 - -(379) ColumnarExchange -Input [1]: [buf#364] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=28], [shuffle_writer_type=hash] - -(380) InputAdapter -Input [1]: [buf#364] - -(381) InputIteratorTransformer -Input [1]: [buf#364] +(392) VeloxColumnarToRow +Input [1]: [i_item_sk#18] -(382) RegularHashAggregateExecTransformer -Input [1]: [buf#364] +(393) ObjectHashAggregate +Input [1]: [i_item_sk#18] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#365] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#365 AS bloomFilter#366] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] +Aggregate Attributes [1]: [buf#362] +Results [1]: [buf#363] -(383) WholeStageCodegenTransformer (2) -Input [1]: [bloomFilter#366] -Arguments: false +(394) RowToVeloxColumnar +Input [1]: [buf#363] -(384) VeloxColumnarToRow -Input [1]: [bloomFilter#366] +(395) VeloxResizeBatches +Input [1]: [buf#363] +Arguments: 1024, 2147483647, 10485760 -Subquery:2 Hosting operator id = 2 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (396) -+- ^ RegularHashAggregateExecTransformer (394) - +- ^ InputIteratorTransformer (393) - +- ColumnarExchange (391) - +- VeloxResizeBatches (390) - +- ^ FlushableHashAggregateExecTransformer (388) - +- ^ ProjectExecTransformer (387) - +- ^ FilterExecTransformer (386) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (385) +(396) ColumnarExchange +Input [1]: [buf#363] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=28], [shuffle_writer_type=hash] +(397) VeloxColumnarToRow +Input [1]: [buf#363] -(385) FileSourceScanExecTransformer parquet spark_catalog.default.promotion +(398) ObjectHashAggregate +Input [1]: [buf#363] +Keys: [] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#364] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#364 AS bloomFilter#365] + +Subquery:2 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery#10, [id=#2] +ObjectHashAggregate (409) ++- VeloxColumnarToRow (408) + +- ColumnarExchange (407) + +- VeloxResizeBatches (406) + +- RowToVeloxColumnar (405) + +- ObjectHashAggregate (404) + +- VeloxColumnarToRow (403) + +- ^ ProjectExecTransformer (401) + +- ^ FilterExecTransformer (400) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (399) + + +(399) FileSourceScanExecTransformer parquet spark_catalog.default.promotion Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct -(386) FilterExecTransformer +(400) FilterExecTransformer Input [2]: [p_promo_sk#20, p_channel_tv#21] Arguments: ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) -(387) ProjectExecTransformer -Output [1]: [xxhash64(p_promo_sk#20, 42) AS _pre_20#367] +(401) ProjectExecTransformer +Output [1]: [p_promo_sk#20] Input [2]: [p_promo_sk#20, p_channel_tv#21] -(388) FlushableHashAggregateExecTransformer -Input [1]: [_pre_20#367] +(402) WholeStageCodegenTransformer (2) +Input [1]: [p_promo_sk#20] +Arguments: false + +(403) VeloxColumnarToRow +Input [1]: [p_promo_sk#20] + +(404) ObjectHashAggregate +Input [1]: [p_promo_sk#20] Keys: [] -Functions [1]: [partial_velox_bloom_filter_agg(_pre_20#367, 986, 24246, 0, 0)] -Aggregate Attributes [1]: [buf#368] -Results [1]: [buf#369] +Functions [1]: [partial_bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] +Aggregate Attributes [1]: [buf#366] +Results [1]: [buf#367] -(389) WholeStageCodegenTransformer (3) -Input [1]: [buf#369] -Arguments: false +(405) RowToVeloxColumnar +Input [1]: [buf#367] -(390) VeloxResizeBatches -Input [1]: [buf#369] +(406) VeloxResizeBatches +Input [1]: [buf#367] Arguments: 1024, 2147483647, 10485760 -(391) ColumnarExchange -Input [1]: [buf#369] +(407) ColumnarExchange +Input [1]: [buf#367] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=29], [shuffle_writer_type=hash] -(392) InputAdapter -Input [1]: [buf#369] +(408) VeloxColumnarToRow +Input [1]: [buf#367] -(393) InputIteratorTransformer -Input [1]: [buf#369] - -(394) RegularHashAggregateExecTransformer -Input [1]: [buf#369] +(409) ObjectHashAggregate +Input [1]: [buf#367] Keys: [] -Functions [1]: [velox_bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#370] -Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#370 AS bloomFilter#371] - -(395) WholeStageCodegenTransformer (4) -Input [1]: [bloomFilter#371] -Arguments: false - -(396) VeloxColumnarToRow -Input [1]: [bloomFilter#371] +Functions [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#368] +Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#368 AS bloomFilter#369] Subquery:3 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 -ColumnarBroadcastExchange (401) -+- ^ ProjectExecTransformer (399) - +- ^ FilterExecTransformer (398) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (397) +ColumnarBroadcastExchange (414) ++- ^ ProjectExecTransformer (412) + +- ^ FilterExecTransformer (411) + +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (410) -(397) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#22, d_date#372] +(410) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim +Output [2]: [d_date_sk#22, d_date#370] Batched: true Location: InMemoryFileIndex [{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1998-08-04), LessThanOrEqual(d_date,1998-09-03), IsNotNull(d_date_sk)] ReadSchema: struct -(398) FilterExecTransformer -Input [2]: [d_date_sk#22, d_date#372] -Arguments: (((isnotnull(d_date#372) AND (d_date#372 >= 1998-08-04)) AND (d_date#372 <= 1998-09-03)) AND isnotnull(d_date_sk#22)) +(411) FilterExecTransformer +Input [2]: [d_date_sk#22, d_date#370] +Arguments: (((isnotnull(d_date#370) AND (d_date#370 >= 1998-08-04)) AND (d_date#370 <= 1998-09-03)) AND isnotnull(d_date_sk#22)) -(399) ProjectExecTransformer +(412) ProjectExecTransformer Output [1]: [d_date_sk#22] -Input [2]: [d_date_sk#22, d_date#372] +Input [2]: [d_date_sk#22, d_date#370] -(400) WholeStageCodegenTransformer (5) +(413) WholeStageCodegenTransformer (3) Input [1]: [d_date_sk#22] Arguments: false -(401) ColumnarBroadcastExchange +(414) ColumnarBroadcastExchange Input [1]: [d_date_sk#22] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=30] -Subquery:4 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#9, [id=#1] -VeloxColumnarToRow (384) -+- ^ RegularHashAggregateExecTransformer (382) - +- ^ InputIteratorTransformer (381) - +- ColumnarExchange (379) - +- VeloxResizeBatches (378) - +- ^ FlushableHashAggregateExecTransformer (376) - +- ^ ProjectExecTransformer (375) - +- ^ FilterExecTransformer (374) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (373) - - -Subquery:5 Hosting operator id = 1 Hosting Expression = Subquery scalar-subquery#10, [id=#2] -VeloxColumnarToRow (396) -+- ^ RegularHashAggregateExecTransformer (394) - +- ^ InputIteratorTransformer (393) - +- ColumnarExchange (391) - +- VeloxResizeBatches (390) - +- ^ FlushableHashAggregateExecTransformer (388) - +- ^ ProjectExecTransformer (387) - +- ^ FilterExecTransformer (386) - +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (385) - - -Subquery:6 Hosting operator id = 61 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] - -Subquery:7 Hosting operator id = 61 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] - -Subquery:8 Hosting operator id = 60 Hosting Expression = cs_sold_date_sk#53 IN dynamicpruning#8 - -Subquery:9 Hosting operator id = 60 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] - -Subquery:10 Hosting operator id = 60 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:4 Hosting operator id = 68 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] -Subquery:11 Hosting operator id = 112 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] +Subquery:5 Hosting operator id = 68 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] -Subquery:12 Hosting operator id = 112 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:6 Hosting operator id = 65 Hosting Expression = cs_sold_date_sk#53 IN dynamicpruning#8 -Subquery:13 Hosting operator id = 111 Hosting Expression = ws_sold_date_sk#94 IN dynamicpruning#8 +Subquery:7 Hosting operator id = 124 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] -Subquery:14 Hosting operator id = 111 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#1] +Subquery:8 Hosting operator id = 124 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] -Subquery:15 Hosting operator id = 111 Hosting Expression = ReusedSubquery Subquery scalar-subquery#10, [id=#2] +Subquery:9 Hosting operator id = 121 Hosting Expression = ws_sold_date_sk#94 IN dynamicpruning#8 -Subquery:16 Hosting operator id = 187 Hosting Expression = ws_sold_date_sk#184 IN dynamicpruning#8 +Subquery:10 Hosting operator id = 202 Hosting Expression = ws_sold_date_sk#184 IN dynamicpruning#8 -Subquery:17 Hosting operator id = 252 Hosting Expression = ss_sold_date_sk#256 IN dynamicpruning#8 +Subquery:11 Hosting operator id = 267 Hosting Expression = ss_sold_date_sk#256 IN dynamicpruning#8 -Subquery:18 Hosting operator id = 295 Hosting Expression = cs_sold_date_sk#292 IN dynamicpruning#8 +Subquery:12 Hosting operator id = 310 Hosting Expression = cs_sold_date_sk#292 IN dynamicpruning#8 diff --git a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/simplified.txt b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/simplified.txt index 31b7a3bbe69..66a2c0a4388 100644 --- a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/simplified.txt +++ b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v2_7/q80a.sf100/simplified.txt @@ -1,38 +1,38 @@ VeloxColumnarToRow TakeOrderedAndProjectExecTransformer [channel,id,sales,returns,profit] - WholeStageCodegenTransformer (110) + WholeStageCodegenTransformer (105) RegularHashAggregateExecTransformer [channel,id,sales,returns,profit] InputIteratorTransformer InputAdapter ColumnarExchange [channel,id,sales,returns,profit] #1 VeloxResizeBatches - WholeStageCodegenTransformer (109) + WholeStageCodegenTransformer (104) ProjectExecTransformer [channel,id,sales,returns,profit] FlushableHashAggregateExecTransformer [channel,id,sales,returns,profit] InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (41) + WholeStageCodegenTransformer (38) ProjectExecTransformer [channel,id,sum(sales),sum(returns),sum(profit)] RegularHashAggregateExecTransformer [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] [sum(sales),sum(returns),sum(profit),sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] #2 VeloxResizeBatches - WholeStageCodegenTransformer (40) + WholeStageCodegenTransformer (37) ProjectExecTransformer [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [channel,id,sales,returns,profit] [sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (13) + WholeStageCodegenTransformer (12) ProjectExecTransformer [s_store_id,sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [s_store_id,sum,sum,isEmpty,sum,isEmpty] #3 VeloxResizeBatches - WholeStageCodegenTransformer (12) + WholeStageCodegenTransformer (11) ProjectExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [s_store_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [s_store_id,ss_ext_sales_price,sr_return_amt,ss_net_profit,sr_net_loss] @@ -49,87 +49,66 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] #4 VeloxResizeBatches - WholeStageCodegenTransformer (6) + WholeStageCodegenTransformer (5) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] - FilterExecTransformer [ss_store_sk,ss_item_sk,ss_promo_sk] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #6 - VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter - ColumnarExchange #7 - VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [p_promo_sk] - FilterExecTransformer [p_channel_tv,p_promo_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] - FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] - ColumnarSubqueryBroadcast [d_date_sk] #1 - ColumnarBroadcastExchange #5 - WholeStageCodegenTransformer (5) - ProjectExecTransformer [d_date_sk] - FilterExecTransformer [d_date,d_date_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] - Subquery #2 - VeloxColumnarToRow - WholeStageCodegenTransformer (2) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (1) + Filter [ss_store_sk,ss_item_sk,ss_promo_sk] + Subquery #2 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(i_item_sk, 42), 101823, 1521109, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #6 VeloxResizeBatches - WholeStageCodegenTransformer (1) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [i_item_sk] - FilterExecTransformer [i_current_price,i_item_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] - Subquery #3 - VeloxColumnarToRow - WholeStageCodegenTransformer (4) - RegularHashAggregateExecTransformer [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf,buf] - InputIteratorTransformer - InputAdapter + RowToVeloxColumnar + ObjectHashAggregate [i_item_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (1) + ProjectExecTransformer [i_item_sk] + FilterExecTransformer [i_current_price,i_item_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] + Subquery #3 + ObjectHashAggregate [buf] [bloom_filter_agg(xxhash64(p_promo_sk, 42), 986, 24246, 0, 0),bloomFilter,buf] + VeloxColumnarToRow ColumnarExchange #7 VeloxResizeBatches - WholeStageCodegenTransformer (3) - FlushableHashAggregateExecTransformer [_pre_x] [buf,buf,buf] - ProjectExecTransformer [p_promo_sk] - FilterExecTransformer [p_channel_tv,p_promo_sk] - FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] + RowToVeloxColumnar + ObjectHashAggregate [p_promo_sk] [buf,buf] + VeloxColumnarToRow + WholeStageCodegenTransformer (2) + ProjectExecTransformer [p_promo_sk] + FilterExecTransformer [p_channel_tv,p_promo_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (4) + FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] + ColumnarSubqueryBroadcast [d_date_sk] #1 + ColumnarBroadcastExchange #5 + WholeStageCodegenTransformer (3) + ProjectExecTransformer [d_date_sk] + FilterExecTransformer [d_date,d_date_sk] + FileSourceScanExecTransformer parquet spark_catalog.default.date_dim [d_date_sk,d_date] InputIteratorTransformer InputAdapter ColumnarExchange [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss] #8 VeloxResizeBatches - WholeStageCodegenTransformer (7) + WholeStageCodegenTransformer (6) ProjectExecTransformer [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss] FilterExecTransformer [sr_item_sk,sr_ticket_number] FileSourceScanExecTransformer parquet spark_catalog.default.store_returns [sr_item_sk,sr_ticket_number,sr_return_amt,sr_net_loss,sr_returned_date_sk] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #9 - WholeStageCodegenTransformer (8) + WholeStageCodegenTransformer (7) ProjectExecTransformer [i_item_sk] FilterExecTransformer [i_current_price,i_item_sk] FileSourceScanExecTransformer parquet spark_catalog.default.item [i_item_sk,i_current_price] InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #10 - WholeStageCodegenTransformer (9) + WholeStageCodegenTransformer (8) ProjectExecTransformer [p_promo_sk] FilterExecTransformer [p_channel_tv,p_promo_sk] FileSourceScanExecTransformer parquet spark_catalog.default.promotion [p_promo_sk,p_channel_tv] @@ -139,17 +118,17 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #11 - WholeStageCodegenTransformer (11) + WholeStageCodegenTransformer (10) FilterExecTransformer [s_store_sk] FileSourceScanExecTransformer parquet spark_catalog.default.store [s_store_sk,s_store_id] - WholeStageCodegenTransformer (26) + WholeStageCodegenTransformer (24) ProjectExecTransformer [cp_catalog_page_id,sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] #12 VeloxResizeBatches - WholeStageCodegenTransformer (25) + WholeStageCodegenTransformer (23) ProjectExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [cp_catalog_page_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [cp_catalog_page_id,cs_ext_sales_price,cr_return_amount,cs_net_profit,cr_net_loss] @@ -166,20 +145,25 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] #13 VeloxResizeBatches - WholeStageCodegenTransformer (19) + WholeStageCodegenTransformer (17) ProjectExecTransformer [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] - FilterExecTransformer [cs_catalog_page_sk,cs_item_sk,cs_promo_sk] - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 - FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_catalog_page_sk,cs_item_sk,cs_promo_sk,cs_order_number,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] - ReusedSubquery [d_date_sk] #1 - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (2) + Filter [cs_catalog_page_sk,cs_item_sk,cs_promo_sk] + ReusedSubquery [bloomFilter] #2 + ReusedSubquery [bloomFilter] #3 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (16) + FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_catalog_page_sk,cs_item_sk,cs_promo_sk,cs_order_number,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] + ReusedSubquery [d_date_sk] #1 InputIteratorTransformer InputAdapter ColumnarExchange [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss] #14 VeloxResizeBatches - WholeStageCodegenTransformer (20) + WholeStageCodegenTransformer (18) ProjectExecTransformer [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss] FilterExecTransformer [cr_item_sk,cr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns [cr_item_sk,cr_order_number,cr_return_amount,cr_net_loss,cr_returned_date_sk] @@ -195,17 +179,17 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #15 - WholeStageCodegenTransformer (24) + WholeStageCodegenTransformer (22) FilterExecTransformer [cp_catalog_page_sk] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page [cp_catalog_page_sk,cp_catalog_page_id] - WholeStageCodegenTransformer (39) + WholeStageCodegenTransformer (36) ProjectExecTransformer [web_site_id,sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [web_site_id,sum,sum,isEmpty,sum,isEmpty] #16 VeloxResizeBatches - WholeStageCodegenTransformer (38) + WholeStageCodegenTransformer (35) ProjectExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [web_site_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [web_site_id,ws_ext_sales_price,wr_return_amt,ws_net_profit,wr_net_loss] @@ -222,20 +206,25 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] #17 VeloxResizeBatches - WholeStageCodegenTransformer (32) + WholeStageCodegenTransformer (29) ProjectExecTransformer [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] - FilterExecTransformer [ws_web_site_sk,ws_item_sk,ws_promo_sk] - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 - FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_web_site_sk,ws_promo_sk,ws_order_number,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] - ReusedSubquery [d_date_sk] #1 - ReusedSubquery [bloomFilter] #2 - ReusedSubquery [bloomFilter] #3 + InputIteratorTransformer + InputAdapter + RowToVeloxColumnar + WholeStageCodegen (3) + Filter [ws_web_site_sk,ws_item_sk,ws_promo_sk] + ReusedSubquery [bloomFilter] #2 + ReusedSubquery [bloomFilter] #3 + InputAdapter + VeloxColumnarToRow + WholeStageCodegenTransformer (28) + FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_web_site_sk,ws_promo_sk,ws_order_number,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] + ReusedSubquery [d_date_sk] #1 InputIteratorTransformer InputAdapter ColumnarExchange [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss] #18 VeloxResizeBatches - WholeStageCodegenTransformer (33) + WholeStageCodegenTransformer (30) ProjectExecTransformer [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss] FilterExecTransformer [wr_item_sk,wr_order_number] FileSourceScanExecTransformer parquet spark_catalog.default.web_returns [wr_item_sk,wr_order_number,wr_return_amt,wr_net_loss,wr_returned_date_sk] @@ -251,17 +240,17 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ColumnarBroadcastExchange #19 - WholeStageCodegenTransformer (37) + WholeStageCodegenTransformer (34) FilterExecTransformer [web_site_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_site [web_site_sk,web_site_id] - WholeStageCodegenTransformer (79) + WholeStageCodegenTransformer (74) ProjectExecTransformer [channel,sum(sales),sum(returns),sum(profit)] RegularHashAggregateExecTransformer [channel,sum,isEmpty,sum,isEmpty,sum,isEmpty] [sum(sales),sum(returns),sum(profit),sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [channel,sum,isEmpty,sum,isEmpty,sum,isEmpty] #20 VeloxResizeBatches - WholeStageCodegenTransformer (78) + WholeStageCodegenTransformer (73) ProjectExecTransformer [channel,sum,isEmpty,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [channel,sales,returns,profit] [sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [channel,sum(sales),sum(returns),sum(profit)] @@ -270,32 +259,32 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] #21 VeloxResizeBatches - WholeStageCodegenTransformer (77) + WholeStageCodegenTransformer (72) ProjectExecTransformer [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [channel,id,sales,returns,profit] [sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (54) + WholeStageCodegenTransformer (50) ProjectExecTransformer [s_store_id,sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ReusedExchange [s_store_id,sum,sum,isEmpty,sum,isEmpty] #3 - WholeStageCodegenTransformer (67) + WholeStageCodegenTransformer (62) ProjectExecTransformer [cp_catalog_page_id,sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ReusedExchange [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] #12 - WholeStageCodegenTransformer (76) + WholeStageCodegenTransformer (71) ProjectExecTransformer [web_site_id,sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [web_site_id,sum,sum,isEmpty,sum,isEmpty] #22 VeloxResizeBatches - WholeStageCodegenTransformer (75) + WholeStageCodegenTransformer (70) ProjectExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [web_site_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [web_site_id,ws_ext_sales_price,wr_return_amt,ws_net_profit,wr_net_loss] @@ -312,7 +301,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] #23 VeloxResizeBatches - WholeStageCodegenTransformer (69) + WholeStageCodegenTransformer (64) ProjectExecTransformer [ws_item_sk,ws_order_number,ws_web_site_sk,ws_promo_sk,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] FilterExecTransformer [ws_web_site_sk,ws_item_sk,ws_promo_sk] FileSourceScanExecTransformer parquet spark_catalog.default.web_sales [ws_item_sk,ws_web_site_sk,ws_promo_sk,ws_order_number,ws_ext_sales_price,ws_net_profit,ws_sold_date_sk] @@ -332,7 +321,7 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ReusedExchange [web_site_sk,web_site_id] #19 - WholeStageCodegenTransformer (108) + WholeStageCodegenTransformer (103) ProjectExecTransformer [sum(sales),sum(returns),sum(profit)] RegularHashAggregateExecTransformer [sales,returns,profit] [sum(sales),sum(returns),sum(profit),sum,isEmpty,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [sum(sales),sum(returns),sum(profit)] @@ -341,20 +330,20 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] #24 VeloxResizeBatches - WholeStageCodegenTransformer (107) + WholeStageCodegenTransformer (102) ProjectExecTransformer [channel,id,sum,isEmpty,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [channel,id,sales,returns,profit] [sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarUnion - WholeStageCodegenTransformer (88) + WholeStageCodegenTransformer (83) ProjectExecTransformer [s_store_id,sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ss_ext_sales_price)),sum(coalesce(cast(sr_return_amt as decimal(12,2)), 0.00)),sum((ss_net_profit - coalesce(cast(sr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [s_store_id,sum,sum,isEmpty,sum,isEmpty] #25 VeloxResizeBatches - WholeStageCodegenTransformer (87) + WholeStageCodegenTransformer (82) ProjectExecTransformer [s_store_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [s_store_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [s_store_id,ss_ext_sales_price,sr_return_amt,ss_net_profit,sr_net_loss] @@ -371,7 +360,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] #26 VeloxResizeBatches - WholeStageCodegenTransformer (81) + WholeStageCodegenTransformer (76) ProjectExecTransformer [ss_item_sk,ss_ticket_number,ss_store_sk,ss_promo_sk,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] FilterExecTransformer [ss_store_sk,ss_item_sk,ss_promo_sk] FileSourceScanExecTransformer parquet spark_catalog.default.store_sales [ss_item_sk,ss_store_sk,ss_promo_sk,ss_ticket_number,ss_ext_sales_price,ss_net_profit,ss_sold_date_sk] @@ -391,14 +380,14 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ReusedExchange [s_store_sk,s_store_id] #11 - WholeStageCodegenTransformer (97) + WholeStageCodegenTransformer (92) ProjectExecTransformer [cp_catalog_page_id,sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(cs_ext_sales_price)),sum(coalesce(cast(cr_return_amount as decimal(12,2)), 0.00)),sum((cs_net_profit - coalesce(cast(cr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer InputAdapter ColumnarExchange [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] #27 VeloxResizeBatches - WholeStageCodegenTransformer (96) + WholeStageCodegenTransformer (91) ProjectExecTransformer [cp_catalog_page_id,sum,sum,isEmpty,sum,isEmpty] FlushableHashAggregateExecTransformer [cp_catalog_page_id,_pre_x,_pre_x,_pre_x] [sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty,sum,sum,isEmpty,sum,isEmpty] ProjectExecTransformer [cp_catalog_page_id,cs_ext_sales_price,cr_return_amount,cs_net_profit,cr_net_loss] @@ -415,7 +404,7 @@ VeloxColumnarToRow InputAdapter ColumnarExchange [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] #28 VeloxResizeBatches - WholeStageCodegenTransformer (90) + WholeStageCodegenTransformer (85) ProjectExecTransformer [cs_item_sk,cs_order_number,cs_catalog_page_sk,cs_promo_sk,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] FilterExecTransformer [cs_catalog_page_sk,cs_item_sk,cs_promo_sk] FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales [cs_catalog_page_sk,cs_item_sk,cs_promo_sk,cs_order_number,cs_ext_sales_price,cs_net_profit,cs_sold_date_sk] @@ -435,7 +424,7 @@ VeloxColumnarToRow InputIteratorTransformer InputAdapter ReusedExchange [cp_catalog_page_sk,cp_catalog_page_id] #15 - WholeStageCodegenTransformer (106) + WholeStageCodegenTransformer (101) ProjectExecTransformer [web_site_id,sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00)))] RegularHashAggregateExecTransformer [web_site_id,sum,sum,isEmpty,sum,isEmpty] [sum(UnscaledValue(ws_ext_sales_price)),sum(coalesce(cast(wr_return_amt as decimal(12,2)), 0.00)),sum((ws_net_profit - coalesce(cast(wr_net_loss as decimal(12,2)), 0.00))),sum,sum,isEmpty,sum,isEmpty] InputIteratorTransformer From 8e7f406ae84c56e33f96f2c6b43f8b6285019af4 Mon Sep 17 00:00:00 2001 From: brijrajk <22271048+brijrajk@users.noreply.github.com> Date: Wed, 1 Jul 2026 00:56:41 +0530 Subject: [PATCH 3/3] [GLUTEN-12013][VL] Add runtime verification test for bloom-filter JVM-mode subquery Add GlutenBloomFilterFallbackSuite test that directly inspects the executed plan's ObjectHashAggregateExec to confirm VeloxBloomFilterAggregate is the runtime function (not vanilla BloomFilterAggregate), and verifies correct query results without a version-mismatch exception. Co-Authored-By: Claude Sonnet 4.6 --- .../sql/GlutenBloomFilterFallbackSuite.scala | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/gluten-ut/test/src/test/scala/org/apache/gluten/sql/GlutenBloomFilterFallbackSuite.scala b/gluten-ut/test/src/test/scala/org/apache/gluten/sql/GlutenBloomFilterFallbackSuite.scala index c89e0144072..c809621c204 100644 --- a/gluten-ut/test/src/test/scala/org/apache/gluten/sql/GlutenBloomFilterFallbackSuite.scala +++ b/gluten-ut/test/src/test/scala/org/apache/gluten/sql/GlutenBloomFilterFallbackSuite.scala @@ -19,12 +19,14 @@ package org.apache.gluten.sql import org.apache.gluten.backendsapi.BackendsApiManager import org.apache.gluten.config.GlutenConfig import org.apache.gluten.execution.WholeStageTransformerSuite +import org.apache.gluten.expression.aggregate.VeloxBloomFilterAggregate import org.apache.spark.sql.Row import org.apache.spark.sql.catalyst.FunctionIdentifier import org.apache.spark.sql.catalyst.expressions.BloomFilterMightContain import org.apache.spark.sql.catalyst.expressions.ExpressionInfo import org.apache.spark.sql.catalyst.expressions.aggregate.BloomFilterAggregate +import org.apache.spark.sql.execution.aggregate.ObjectHashAggregateExec import org.apache.spark.sql.internal.SQLConf /** @@ -214,6 +216,74 @@ class GlutenBloomFilterFallbackSuite extends WholeStageTransformerSuite { } } + // GLUTEN-12013: verify that the bloom-filter subquery uses VeloxBloomFilterAggregate even when + // the aggregate node executes in JVM mode (ObjectHashAggregateExec). This is the exact plan + // shape shown in the q59 plan-stability golden for the runtime-filter path. + // + // When hash-aggregate offloading is disabled, the subquery runs as + // ObjectHashAggregateExec(VeloxBloomFilterAggregate). VeloxBloomFilterAggregate.eval() calls + // serialize(buffer) directly without a cardinality guard, so it always produces Velox-format + // (version=1) bytes. VeloxBloomFilterMightContain on the outer side reads those bytes correctly. + // + // This test also confirms that the q59 plan change (ObjectHashAggregate instead of + // RegularHashAggregateExecTransformer) is correct and does NOT corrupt bloom filter bytes. + test("GLUTEN-12013: VeloxBloomFilterAggregate in JVM subquery produces correct Velox bytes") { + if (BackendsApiManager.getSettings.requireBloomFilterAggMightContainJointFallback()) { + val table = "bloom_filter_test" + val numEstimatedItems = 5000000L + val sqlString = + s""" + |SELECT col positive_membership_test + |FROM $table + |WHERE might_contain( + | (SELECT bloom_filter_agg(col, + | cast($numEstimatedItems as long), + | cast($veloxBloomFilterMaxNumBits as long)) + | FROM $table), col) + |""".stripMargin + withTempView(table) { + (Seq(Long.MinValue, 0, Long.MaxValue) ++ (1L to 200000L)) + .toDF("col") + .createOrReplaceTempView(table) + // Disable hash-aggregate offloading: the bloom_filter_agg subquery executes in JVM mode as + // ObjectHashAggregateExec(VeloxBloomFilterAggregate). This mirrors the q59 golden shape. + withSQLConf( + GlutenConfig.COLUMNAR_HASHAGG_ENABLED.key -> "false", + SQLConf.ANSI_ENABLED.key -> "false" + ) { + val df = spark.sql(sqlString) + // Must not throw: java.io.IOException: Unexpected Bloom filter version number. + // VeloxBloomFilterAggregate.eval() produces Velox-format bytes even in JVM mode. + val result = df.collect() + assert(result.length == 200003, s"Expected 200003 rows, got ${result.length}") + + // Directly verify the subquery's aggregate function class at runtime. + // ObjectHashAggregateExec(VeloxBloomFilterAggregate) must be present — NOT vanilla + // BloomFilterAggregate — so we know the physical rewrite actually happened. + val subqueryVeloxAggs = collectWithSubqueries(df.queryExecution.executedPlan) { + case agg: ObjectHashAggregateExec + if agg.aggregateExpressions.exists( + _.aggregateFunction.isInstanceOf[VeloxBloomFilterAggregate]) => + agg + } + assert( + subqueryVeloxAggs.nonEmpty, + "Expected ObjectHashAggregateExec(VeloxBloomFilterAggregate) in the bloom-filter " + + "subquery. Actual subquery aggs: " + + collectWithSubqueries(df.queryExecution.executedPlan) { + case agg: ObjectHashAggregateExec => agg + }.map( + a => + a.aggregateExpressions + .map(_.aggregateFunction.getClass.getSimpleName) + .mkString(",")) + .mkString("; ") + ) + } + } + } + } + // SPARK-54336 / GLUTEN-12013: a might_contain whose value argument is a literal (not a column), // fed by a nested scalar subquery. This mirrors Spark's upstream // `BloomFilterAggregateQuerySuite."SPARK-54336"`. For a non-column value the rule must leave