diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala index 669fb4a63a2f4..246319703e7fa 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala @@ -52,6 +52,7 @@ abstract class Optimizer(catalogManager: CatalogManager) override protected val excludedOnceBatches: Set[String] = Set( "PartitionPruning", + "Rewrite Subquery", "Extract Python UDFs") protected def fixedPoint = @@ -214,7 +215,7 @@ abstract class Optimizer(catalogManager: CatalogManager) RewritePredicateSubquery, ColumnPruning, InferFiltersFromConstraints, - PushDownPredicate, + PushDownPredicates, CollapseProject, CombineFilters, PruneFilters, diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/RewriteSubquerySuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/RewriteSubquerySuite.scala index bd78eff7d5d1f..e3da9eb1ef4fb 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/RewriteSubquerySuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/RewriteSubquerySuite.scala @@ -35,7 +35,7 @@ class RewriteSubquerySuite extends PlanTest { RewritePredicateSubquery, ColumnPruning, InferFiltersFromConstraints, - PushDownPredicate, + PushDownPredicates, CollapseProject, CombineFilters, RemoveNoopOperators) :: Nil @@ -80,6 +80,7 @@ class RewriteSubquerySuite extends PlanTest { .where(IsNotNull('a)).select('a) .join(relInSubquery.where(IsNotNull('x) && IsNotNull('y) && 'y > 1).select('x), LeftSemi, Some('a === 'x)) + } test("NOT-IN subquery nested inside OR") { val relation1 = LocalRelation('a.int, 'b.int) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/explain.txt index 5bd420ff1a820..91d798fcea091 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/explain.txt @@ -63,7 +63,7 @@ TakeOrderedAndProject (58) Output [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -71,7 +71,7 @@ Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] (3) 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)) +Condition : ((isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4)) AND isnotnull(c_customer_sk#3)) (4) Exchange Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] @@ -85,7 +85,7 @@ Arguments: [c_customer_sk#3 ASC NULLS FIRST], false, 0 Output [2]: [ss_sold_date_sk#7, ss_customer_sk#8] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] @@ -93,13 +93,13 @@ Input [2]: [ss_sold_date_sk#7, ss_customer_sk#8] (8) Filter [codegen id : 4] Input [2]: [ss_sold_date_sk#7, ss_customer_sk#8] -Condition : isnotnull(ss_sold_date_sk#7) +Condition : (isnotnull(ss_sold_date_sk#7) AND isnotnull(ss_customer_sk#8)) (9) Scan parquet default.date_dim Output [3]: [d_date_sk#9, d_year#10, d_moy#11] Batched: true Location [not included in comparison]/{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)] +PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,1), LessThanOrEqual(d_moy,4), IsNotNull(d_date_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 3] @@ -107,7 +107,7 @@ Input [3]: [d_date_sk#9, d_year#10, d_moy#11] (11) Filter [codegen id : 3] Input [3]: [d_date_sk#9, d_year#10, d_moy#11] -Condition : (((((isnotnull(d_year#10) AND isnotnull(d_moy#11)) AND (d_year#10 = 2002)) AND (d_moy#11 >= 1)) AND (d_moy#11 <= 4)) AND isnotnull(d_date_sk#9)) +Condition : (((((isnotnull(d_moy#11) AND isnotnull(d_year#10)) AND (d_year#10 = 2002)) AND (d_moy#11 >= 1)) AND (d_moy#11 <= 4)) AND isnotnull(d_date_sk#9)) (12) Project [codegen id : 3] Output [1]: [d_date_sk#9] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/simplified.txt index 32dfbc7173529..3f8a5aaf4b479 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/simplified.txt @@ -26,7 +26,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep InputAdapter Exchange [c_customer_sk] #3 WholeStageCodegen (1) - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -37,7 +37,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep WholeStageCodegen (4) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/explain.txt index 56c1a25a07c5c..1c510f2609d48 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/explain.txt @@ -55,7 +55,7 @@ TakeOrderedAndProject (50) Output [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 9] @@ -63,13 +63,13 @@ Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] (3) Filter [codegen id : 9] 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)) +Condition : ((isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4)) AND isnotnull(c_customer_sk#3)) (4) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#6, ss_customer_sk#7] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (5) ColumnarToRow [codegen id : 2] @@ -77,7 +77,7 @@ Input [2]: [ss_sold_date_sk#6, ss_customer_sk#7] (6) Filter [codegen id : 2] Input [2]: [ss_sold_date_sk#6, ss_customer_sk#7] -Condition : isnotnull(ss_sold_date_sk#6) +Condition : (isnotnull(ss_sold_date_sk#6) AND isnotnull(ss_customer_sk#7)) (7) Scan parquet default.date_dim Output [3]: [d_date_sk#8, d_year#9, d_moy#10] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/simplified.txt index 19781433465a3..078b3501b35ea 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/simplified.txt @@ -14,7 +14,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep BroadcastHashJoin [c_customer_sk,cs_ship_customer_sk] BroadcastHashJoin [c_customer_sk,ws_bill_customer_sk] BroadcastHashJoin [c_customer_sk,ss_customer_sk] - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -23,7 +23,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep WholeStageCodegen (2) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/explain.txt index 49cdab6de1e4f..917d3548ff75c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/explain.txt @@ -158,7 +158,7 @@ Arguments: [ss_item_sk#2 ASC NULLS FIRST], false, 0 Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_class_id), IsNotNull(i_brand_id), IsNotNull(i_category_id)] +PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 17] @@ -166,7 +166,7 @@ Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (8) Filter [codegen id : 17] Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] -Condition : ((isnotnull(i_class_id#8) AND isnotnull(i_brand_id#7)) AND isnotnull(i_category_id#9)) +Condition : (((isnotnull(i_brand_id#7) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) AND isnotnull(i_item_sk#6)) (9) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#1, ss_item_sk#2] @@ -217,7 +217,7 @@ Input [3]: [ss_sold_date_sk#1, ss_item_sk#2, d_date_sk#10] Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_category_id), IsNotNull(i_brand_id), IsNotNull(i_class_id)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] @@ -225,7 +225,7 @@ Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (21) Filter [codegen id : 4] Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] -Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_category_id#9)) AND isnotnull(i_brand_id#7)) AND isnotnull(i_class_id#8)) +Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_brand_id#7)) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) (22) BroadcastExchange Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/simplified.txt index 71d4c167f6564..e5f7678bfa641 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/simplified.txt @@ -80,7 +80,7 @@ TakeOrderedAndProject [channel,i_brand_id,i_category_id,i_class_id,sum(number_sa WholeStageCodegen (17) Project [i_item_sk] BroadcastHashJoin [brand_id,category_id,class_id,i_brand_id,i_category_id,i_class_id] - Filter [i_brand_id,i_category_id,i_class_id] + Filter [i_brand_id,i_category_id,i_class_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_brand_id,i_category_id,i_class_id,i_item_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/explain.txt index 5332be30cb775..3744ddf87d2a4 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/explain.txt @@ -134,7 +134,7 @@ Condition : (isnotnull(ss_item_sk#2) AND isnotnull(ss_sold_date_sk#1)) Output [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_class_id), IsNotNull(i_brand_id), IsNotNull(i_category_id)] +PushedFilters: [IsNotNull(i_class_id), IsNotNull(i_brand_id), IsNotNull(i_category_id), IsNotNull(i_item_sk)] ReadSchema: struct (5) ColumnarToRow [codegen id : 11] @@ -142,7 +142,7 @@ Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] (6) Filter [codegen id : 11] Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] -Condition : ((isnotnull(i_class_id#7) AND isnotnull(i_brand_id#6)) AND isnotnull(i_category_id#8)) +Condition : (((isnotnull(i_class_id#7) AND isnotnull(i_brand_id#6)) AND isnotnull(i_category_id#8)) AND isnotnull(i_item_sk#5)) (7) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#1, ss_item_sk#2] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/simplified.txt index 9facf93115f1f..959237dcc8657 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/simplified.txt @@ -72,7 +72,7 @@ TakeOrderedAndProject [channel,i_brand_id,i_category_id,i_class_id,sum(number_sa WholeStageCodegen (11) Project [i_item_sk] BroadcastHashJoin [brand_id,category_id,class_id,i_brand_id,i_category_id,i_class_id] - Filter [i_brand_id,i_category_id,i_class_id] + Filter [i_brand_id,i_category_id,i_class_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_brand_id,i_category_id,i_class_id,i_item_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/explain.txt index 6d39c12011180..d82c87a455f06 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/explain.txt @@ -137,7 +137,7 @@ Arguments: [ss_item_sk#2 ASC NULLS FIRST], false, 0 Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_class_id), IsNotNull(i_brand_id), IsNotNull(i_category_id)] +PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 17] @@ -145,7 +145,7 @@ Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (8) Filter [codegen id : 17] Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] -Condition : ((isnotnull(i_class_id#8) AND isnotnull(i_brand_id#7)) AND isnotnull(i_category_id#9)) +Condition : (((isnotnull(i_brand_id#7) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) AND isnotnull(i_item_sk#6)) (9) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#1, ss_item_sk#2] @@ -196,7 +196,7 @@ Input [3]: [ss_sold_date_sk#1, ss_item_sk#2, d_date_sk#10] Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_category_id), IsNotNull(i_class_id)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_brand_id)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] @@ -204,7 +204,7 @@ Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (21) Filter [codegen id : 4] Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] -Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_brand_id#7)) AND isnotnull(i_category_id#9)) AND isnotnull(i_class_id#8)) +Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) AND isnotnull(i_brand_id#7)) (22) BroadcastExchange Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] @@ -437,7 +437,7 @@ Input [5]: [ss_sold_date_sk#1, ss_item_sk#2, ss_quantity#3, ss_list_price#4, d_d Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_category_id), IsNotNull(i_class_id)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_brand_id)] ReadSchema: struct (73) ColumnarToRow [codegen id : 20] @@ -445,7 +445,7 @@ Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (74) Filter [codegen id : 20] Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] -Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_brand_id#7)) AND isnotnull(i_category_id#9)) AND isnotnull(i_class_id#8)) +Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) AND isnotnull(i_brand_id#7)) (75) Exchange Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] @@ -766,7 +766,7 @@ Subquery:2 Hosting operator id = 67 Hosting Expression = Subquery scalar-subquer Output [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,2000), EqualTo(d_moy,12), EqualTo(d_dom,11)] +PushedFilters: [IsNotNull(d_dom), IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_year,2000), EqualTo(d_moy,12), EqualTo(d_dom,11)] ReadSchema: struct (138) ColumnarToRow [codegen id : 1] @@ -774,7 +774,7 @@ Input [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] (139) Filter [codegen id : 1] Input [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] -Condition : (((((isnotnull(d_year#11) AND isnotnull(d_moy#89)) AND isnotnull(d_dom#90)) AND (d_year#11 = 2000)) AND (d_moy#89 = 12)) AND (d_dom#90 = 11)) +Condition : (((((isnotnull(d_dom#90) AND isnotnull(d_moy#89)) AND isnotnull(d_year#11)) AND (d_year#11 = 2000)) AND (d_moy#89 = 12)) AND (d_dom#90 = 11)) (140) Project [codegen id : 1] Output [1]: [d_week_seq#29] @@ -793,7 +793,7 @@ Subquery:4 Hosting operator id = 95 Hosting Expression = Subquery scalar-subquer Output [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,1999), EqualTo(d_moy,12), EqualTo(d_dom,11)] +PushedFilters: [IsNotNull(d_dom), IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_year,1999), EqualTo(d_moy,12), EqualTo(d_dom,11)] ReadSchema: struct (142) ColumnarToRow [codegen id : 1] @@ -801,7 +801,7 @@ Input [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] (143) Filter [codegen id : 1] Input [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] -Condition : (((((isnotnull(d_year#11) AND isnotnull(d_moy#89)) AND isnotnull(d_dom#90)) AND (d_year#11 = 1999)) AND (d_moy#89 = 12)) AND (d_dom#90 = 11)) +Condition : (((((isnotnull(d_dom#90) AND isnotnull(d_moy#89)) AND isnotnull(d_year#11)) AND (d_year#11 = 1999)) AND (d_moy#89 = 12)) AND (d_dom#90 = 11)) (144) Project [codegen id : 1] Output [1]: [d_week_seq#29] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/simplified.txt index 5141d40e7325b..ee77670ddc6b3 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/simplified.txt @@ -72,7 +72,7 @@ TakeOrderedAndProject [channel,channel,i_brand_id,i_brand_id,i_category_id,i_cat WholeStageCodegen (17) Project [i_item_sk] BroadcastHashJoin [brand_id,category_id,class_id,i_brand_id,i_category_id,i_class_id] - Filter [i_brand_id,i_category_id,i_class_id] + Filter [i_brand_id,i_category_id,i_class_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_brand_id,i_category_id,i_class_id,i_item_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/explain.txt index dfe1892d80d61..87cb999eee6e7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/explain.txt @@ -119,7 +119,7 @@ Condition : (isnotnull(ss_item_sk#2) AND isnotnull(ss_sold_date_sk#1)) Output [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_class_id), IsNotNull(i_brand_id), IsNotNull(i_category_id)] +PushedFilters: [IsNotNull(i_class_id), IsNotNull(i_brand_id), IsNotNull(i_category_id), IsNotNull(i_item_sk)] ReadSchema: struct (5) ColumnarToRow [codegen id : 11] @@ -127,7 +127,7 @@ Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] (6) Filter [codegen id : 11] Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] -Condition : ((isnotnull(i_class_id#7) AND isnotnull(i_brand_id#6)) AND isnotnull(i_category_id#8)) +Condition : (((isnotnull(i_class_id#7) AND isnotnull(i_brand_id#6)) AND isnotnull(i_category_id#8)) AND isnotnull(i_item_sk#5)) (7) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#1, ss_item_sk#2] @@ -147,7 +147,7 @@ Condition : (isnotnull(ss_item_sk#2) AND isnotnull(ss_sold_date_sk#1)) Output [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_category_id), IsNotNull(i_class_id)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_category_id), IsNotNull(i_brand_id), IsNotNull(i_class_id)] ReadSchema: struct (11) ColumnarToRow [codegen id : 1] @@ -155,7 +155,7 @@ Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] (12) Filter [codegen id : 1] Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] -Condition : (((isnotnull(i_item_sk#5) AND isnotnull(i_brand_id#6)) AND isnotnull(i_category_id#8)) AND isnotnull(i_class_id#7)) +Condition : (((isnotnull(i_item_sk#5) AND isnotnull(i_category_id#8)) AND isnotnull(i_brand_id#6)) AND isnotnull(i_class_id#7)) (13) BroadcastExchange Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/simplified.txt index f1668ea399807..7892b6727f9a3 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/simplified.txt @@ -64,7 +64,7 @@ TakeOrderedAndProject [channel,channel,i_brand_id,i_brand_id,i_category_id,i_cat WholeStageCodegen (11) Project [i_item_sk] BroadcastHashJoin [brand_id,category_id,class_id,i_brand_id,i_category_id,i_class_id] - Filter [i_brand_id,i_category_id,i_class_id] + Filter [i_brand_id,i_category_id,i_class_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_brand_id,i_category_id,i_class_id,i_item_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/explain.txt index 509fb0133095b..5883fb489b832 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/explain.txt @@ -1,55 +1,57 @@ == Physical Plan == -TakeOrderedAndProject (44) -+- * HashAggregate (43) - +- Exchange (42) - +- * HashAggregate (41) - +- * HashAggregate (40) - +- * HashAggregate (39) - +- * Project (38) - +- * BroadcastHashJoin Inner BuildRight (37) - :- * Project (31) - : +- * BroadcastHashJoin Inner BuildRight (30) - : :- * Project (24) - : : +- * BroadcastHashJoin Inner BuildRight (23) - : : :- SortMergeJoin LeftAnti (17) - : : : :- * Project (12) - : : : : +- SortMergeJoin LeftSemi (11) +TakeOrderedAndProject (46) ++- * HashAggregate (45) + +- Exchange (44) + +- * HashAggregate (43) + +- * HashAggregate (42) + +- * HashAggregate (41) + +- * Project (40) + +- * BroadcastHashJoin Inner BuildRight (39) + :- * Project (33) + : +- * BroadcastHashJoin Inner BuildRight (32) + : :- * Project (26) + : : +- * BroadcastHashJoin Inner BuildRight (25) + : : :- SortMergeJoin LeftAnti (19) + : : : :- * Project (13) + : : : : +- SortMergeJoin LeftSemi (12) : : : : :- * Sort (5) : : : : : +- Exchange (4) : : : : : +- * Filter (3) : : : : : +- * ColumnarToRow (2) : : : : : +- Scan parquet default.catalog_sales (1) - : : : : +- * Sort (10) - : : : : +- Exchange (9) - : : : : +- * Project (8) - : : : : +- * ColumnarToRow (7) - : : : : +- Scan parquet default.catalog_sales (6) - : : : +- * Sort (16) - : : : +- Exchange (15) - : : : +- * ColumnarToRow (14) - : : : +- Scan parquet default.catalog_returns (13) - : : +- BroadcastExchange (22) - : : +- * Project (21) - : : +- * Filter (20) - : : +- * ColumnarToRow (19) - : : +- Scan parquet default.customer_address (18) - : +- BroadcastExchange (29) - : +- * Project (28) - : +- * Filter (27) - : +- * ColumnarToRow (26) - : +- Scan parquet default.call_center (25) - +- BroadcastExchange (36) - +- * Project (35) - +- * Filter (34) - +- * ColumnarToRow (33) - +- Scan parquet default.date_dim (32) + : : : : +- * Sort (11) + : : : : +- Exchange (10) + : : : : +- * Project (9) + : : : : +- * Filter (8) + : : : : +- * ColumnarToRow (7) + : : : : +- Scan parquet default.catalog_sales (6) + : : : +- * Sort (18) + : : : +- Exchange (17) + : : : +- * Filter (16) + : : : +- * ColumnarToRow (15) + : : : +- Scan parquet default.catalog_returns (14) + : : +- BroadcastExchange (24) + : : +- * Project (23) + : : +- * Filter (22) + : : +- * ColumnarToRow (21) + : : +- Scan parquet default.customer_address (20) + : +- BroadcastExchange (31) + : +- * Project (30) + : +- * Filter (29) + : +- * ColumnarToRow (28) + : +- Scan parquet default.call_center (27) + +- BroadcastExchange (38) + +- * Project (37) + +- * Filter (36) + +- * ColumnarToRow (35) + +- Scan parquet default.date_dim (34) (1) Scan parquet default.catalog_sales Output [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] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_ship_date_sk), IsNotNull(cs_ship_addr_sk), IsNotNull(cs_call_center_sk)] +PushedFilters: [IsNotNull(cs_ship_date_sk), IsNotNull(cs_ship_addr_sk), IsNotNull(cs_call_center_sk), IsNotNull(cs_order_number), IsNotNull(cs_warehouse_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -57,7 +59,7 @@ Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_wareho (3) Filter [codegen id : 1] 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] -Condition : ((isnotnull(cs_ship_date_sk#1) AND isnotnull(cs_ship_addr_sk#2)) AND isnotnull(cs_call_center_sk#3)) +Condition : ((((isnotnull(cs_ship_date_sk#1) AND isnotnull(cs_ship_addr_sk#2)) AND isnotnull(cs_call_center_sk#3)) AND isnotnull(cs_order_number#5)) AND isnotnull(cs_warehouse_sk#4)) (4) Exchange 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] @@ -71,180 +73,190 @@ Arguments: [cs_order_number#5 ASC NULLS FIRST], false, 0 Output [2]: [cs_warehouse_sk#4, cs_order_number#5] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] +PushedFilters: [IsNotNull(cs_order_number), IsNotNull(cs_warehouse_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] Input [2]: [cs_warehouse_sk#4, cs_order_number#5] -(8) Project [codegen id : 3] +(8) Filter [codegen id : 3] +Input [2]: [cs_warehouse_sk#4, cs_order_number#5] +Condition : (isnotnull(cs_order_number#5) AND isnotnull(cs_warehouse_sk#4)) + +(9) Project [codegen id : 3] Output [2]: [cs_warehouse_sk#4 AS cs_warehouse_sk#4#9, cs_order_number#5 AS cs_order_number#5#10] Input [2]: [cs_warehouse_sk#4, cs_order_number#5] -(9) Exchange +(10) Exchange Input [2]: [cs_warehouse_sk#4#9, cs_order_number#5#10] Arguments: hashpartitioning(cs_order_number#5#10, 5), true, [id=#11] -(10) Sort [codegen id : 4] +(11) Sort [codegen id : 4] Input [2]: [cs_warehouse_sk#4#9, cs_order_number#5#10] Arguments: [cs_order_number#5#10 ASC NULLS FIRST], false, 0 -(11) SortMergeJoin +(12) SortMergeJoin Left keys [1]: [cs_order_number#5] Right keys [1]: [cs_order_number#5#10] Join condition: NOT (cs_warehouse_sk#4 = cs_warehouse_sk#4#9) -(12) Project [codegen id : 5] +(13) Project [codegen id : 5] 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] -(13) Scan parquet default.catalog_returns +(14) Scan parquet default.catalog_returns Output [1]: [cr_order_number#12] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] +PushedFilters: [IsNotNull(cr_order_number)] ReadSchema: struct -(14) ColumnarToRow [codegen id : 6] +(15) ColumnarToRow [codegen id : 6] +Input [1]: [cr_order_number#12] + +(16) Filter [codegen id : 6] Input [1]: [cr_order_number#12] +Condition : isnotnull(cr_order_number#12) -(15) Exchange +(17) Exchange Input [1]: [cr_order_number#12] Arguments: hashpartitioning(cr_order_number#12, 5), true, [id=#13] -(16) Sort [codegen id : 7] +(18) Sort [codegen id : 7] Input [1]: [cr_order_number#12] Arguments: [cr_order_number#12 ASC NULLS FIRST], false, 0 -(17) SortMergeJoin +(19) SortMergeJoin Left keys [1]: [cs_order_number#5] Right keys [1]: [cr_order_number#12] Join condition: None -(18) Scan parquet default.customer_address +(20) Scan parquet default.customer_address Output [2]: [ca_address_sk#14, ca_state#15] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,GA), IsNotNull(ca_address_sk)] ReadSchema: struct -(19) ColumnarToRow [codegen id : 8] +(21) ColumnarToRow [codegen id : 8] Input [2]: [ca_address_sk#14, ca_state#15] -(20) Filter [codegen id : 8] +(22) Filter [codegen id : 8] Input [2]: [ca_address_sk#14, ca_state#15] Condition : ((isnotnull(ca_state#15) AND (ca_state#15 = GA)) AND isnotnull(ca_address_sk#14)) -(21) Project [codegen id : 8] +(23) Project [codegen id : 8] Output [1]: [ca_address_sk#14] Input [2]: [ca_address_sk#14, ca_state#15] -(22) BroadcastExchange +(24) BroadcastExchange Input [1]: [ca_address_sk#14] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16] -(23) BroadcastHashJoin [codegen id : 11] +(25) BroadcastHashJoin [codegen id : 11] Left keys [1]: [cs_ship_addr_sk#2] Right keys [1]: [ca_address_sk#14] Join condition: None -(24) Project [codegen id : 11] +(26) Project [codegen id : 11] 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#14] -(25) Scan parquet default.call_center +(27) Scan parquet default.call_center Output [2]: [cc_call_center_sk#17, cc_county#18] Batched: true Location [not included in comparison]/{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_county), EqualTo(cc_county,Williamson County), IsNotNull(cc_call_center_sk)] ReadSchema: struct -(26) ColumnarToRow [codegen id : 9] +(28) ColumnarToRow [codegen id : 9] Input [2]: [cc_call_center_sk#17, cc_county#18] -(27) Filter [codegen id : 9] +(29) Filter [codegen id : 9] Input [2]: [cc_call_center_sk#17, cc_county#18] Condition : ((isnotnull(cc_county#18) AND (cc_county#18 = Williamson County)) AND isnotnull(cc_call_center_sk#17)) -(28) Project [codegen id : 9] +(30) Project [codegen id : 9] Output [1]: [cc_call_center_sk#17] Input [2]: [cc_call_center_sk#17, cc_county#18] -(29) BroadcastExchange +(31) BroadcastExchange Input [1]: [cc_call_center_sk#17] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19] -(30) BroadcastHashJoin [codegen id : 11] +(32) BroadcastHashJoin [codegen id : 11] Left keys [1]: [cs_call_center_sk#3] Right keys [1]: [cc_call_center_sk#17] Join condition: None -(31) Project [codegen id : 11] +(33) Project [codegen id : 11] 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#17] -(32) Scan parquet default.date_dim +(34) Scan parquet default.date_dim Output [2]: [d_date_sk#20, d_date#21] Batched: true Location [not included in comparison]/{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 -(33) ColumnarToRow [codegen id : 10] +(35) ColumnarToRow [codegen id : 10] Input [2]: [d_date_sk#20, d_date#21] -(34) Filter [codegen id : 10] +(36) Filter [codegen id : 10] Input [2]: [d_date_sk#20, d_date#21] Condition : (((isnotnull(d_date#21) AND (d_date#21 >= 11719)) AND (d_date#21 <= 11779)) AND isnotnull(d_date_sk#20)) -(35) Project [codegen id : 10] +(37) Project [codegen id : 10] Output [1]: [d_date_sk#20] Input [2]: [d_date_sk#20, d_date#21] -(36) BroadcastExchange +(38) BroadcastExchange Input [1]: [d_date_sk#20] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] -(37) BroadcastHashJoin [codegen id : 11] +(39) BroadcastHashJoin [codegen id : 11] Left keys [1]: [cs_ship_date_sk#1] Right keys [1]: [d_date_sk#20] Join condition: None -(38) Project [codegen id : 11] +(40) Project [codegen id : 11] Output [3]: [cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [5]: [cs_ship_date_sk#1, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, d_date_sk#20] -(39) HashAggregate [codegen id : 11] +(41) HashAggregate [codegen id : 11] Input [3]: [cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Keys [1]: [cs_order_number#5] Functions [2]: [partial_sum(UnscaledValue(cs_ext_ship_cost#6)), partial_sum(UnscaledValue(cs_net_profit#7))] Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#23, sum(UnscaledValue(cs_net_profit#7))#24] Results [3]: [cs_order_number#5, sum#25, sum#26] -(40) HashAggregate [codegen id : 11] +(42) HashAggregate [codegen id : 11] Input [3]: [cs_order_number#5, sum#25, sum#26] 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))#23, sum(UnscaledValue(cs_net_profit#7))#24] Results [3]: [cs_order_number#5, sum#25, sum#26] -(41) HashAggregate [codegen id : 11] +(43) HashAggregate [codegen id : 11] Input [3]: [cs_order_number#5, sum#25, sum#26] 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))#23, sum(UnscaledValue(cs_net_profit#7))#24, count(cs_order_number#5)#27] Results [3]: [sum#25, sum#26, count#28] -(42) Exchange +(44) Exchange Input [3]: [sum#25, sum#26, count#28] Arguments: SinglePartition, true, [id=#29] -(43) HashAggregate [codegen id : 12] +(45) HashAggregate [codegen id : 12] Input [3]: [sum#25, sum#26, count#28] 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))#23, sum(UnscaledValue(cs_net_profit#7))#24, count(cs_order_number#5)#27] Results [3]: [count(cs_order_number#5)#27 AS order count #30, MakeDecimal(sum(UnscaledValue(cs_ext_ship_cost#6))#23,17,2) AS total shipping cost #31, MakeDecimal(sum(UnscaledValue(cs_net_profit#7))#24,17,2) AS total net profit #32] -(44) TakeOrderedAndProject +(46) TakeOrderedAndProject Input [3]: [order count #30, total shipping cost #31, total net profit #32] Arguments: 100, [order count #30 ASC NULLS FIRST], [order count #30, total shipping cost #31, total net profit #32] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/simplified.txt index dc78021b94fbf..cd1e095f6c334 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/simplified.txt @@ -24,7 +24,7 @@ TakeOrderedAndProject [order count ,total net profit ,total shipping cost ] InputAdapter Exchange [cs_order_number] #2 WholeStageCodegen (1) - Filter [cs_call_center_sk,cs_ship_addr_sk,cs_ship_date_sk] + Filter [cs_call_center_sk,cs_order_number,cs_ship_addr_sk,cs_ship_date_sk,cs_warehouse_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_call_center_sk,cs_ext_ship_cost,cs_net_profit,cs_order_number,cs_ship_addr_sk,cs_ship_date_sk,cs_warehouse_sk] @@ -34,17 +34,19 @@ TakeOrderedAndProject [order count ,total net profit ,total shipping cost ] Exchange [cs_order_number] #3 WholeStageCodegen (3) Project [cs_order_number,cs_warehouse_sk] - ColumnarToRow - InputAdapter - Scan parquet default.catalog_sales [cs_order_number,cs_warehouse_sk] + Filter [cs_order_number,cs_warehouse_sk] + ColumnarToRow + InputAdapter + Scan parquet default.catalog_sales [cs_order_number,cs_warehouse_sk] WholeStageCodegen (7) Sort [cr_order_number] InputAdapter Exchange [cr_order_number] #4 WholeStageCodegen (6) - ColumnarToRow - InputAdapter - Scan parquet default.catalog_returns [cr_order_number] + Filter [cr_order_number] + ColumnarToRow + InputAdapter + Scan parquet default.catalog_returns [cr_order_number] InputAdapter BroadcastExchange #5 WholeStageCodegen (8) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/explain.txt index 2ae939cfe41f3..a0fa910a6ee8d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/explain.txt @@ -1,52 +1,54 @@ == Physical Plan == -TakeOrderedAndProject (41) -+- * HashAggregate (40) - +- Exchange (39) - +- * HashAggregate (38) - +- * HashAggregate (37) - +- Exchange (36) - +- * HashAggregate (35) - +- * Project (34) - +- * BroadcastHashJoin Inner BuildRight (33) - :- * Project (27) - : +- * BroadcastHashJoin Inner BuildRight (26) - : :- * Project (20) - : : +- * BroadcastHashJoin Inner BuildRight (19) - : : :- * BroadcastHashJoin LeftAnti BuildRight (13) - : : : :- * Project (9) - : : : : +- * BroadcastHashJoin LeftSemi BuildRight (8) +TakeOrderedAndProject (43) ++- * HashAggregate (42) + +- Exchange (41) + +- * HashAggregate (40) + +- * HashAggregate (39) + +- Exchange (38) + +- * HashAggregate (37) + +- * Project (36) + +- * BroadcastHashJoin Inner BuildRight (35) + :- * Project (29) + : +- * BroadcastHashJoin Inner BuildRight (28) + : :- * Project (22) + : : +- * BroadcastHashJoin Inner BuildRight (21) + : : :- * BroadcastHashJoin LeftAnti BuildRight (15) + : : : :- * Project (10) + : : : : +- * BroadcastHashJoin LeftSemi BuildRight (9) : : : : :- * Filter (3) : : : : : +- * ColumnarToRow (2) : : : : : +- Scan parquet default.catalog_sales (1) - : : : : +- BroadcastExchange (7) - : : : : +- * Project (6) - : : : : +- * ColumnarToRow (5) - : : : : +- Scan parquet default.catalog_sales (4) - : : : +- BroadcastExchange (12) - : : : +- * ColumnarToRow (11) - : : : +- Scan parquet default.catalog_returns (10) - : : +- BroadcastExchange (18) - : : +- * Project (17) - : : +- * Filter (16) - : : +- * ColumnarToRow (15) - : : +- Scan parquet default.date_dim (14) - : +- BroadcastExchange (25) - : +- * Project (24) - : +- * Filter (23) - : +- * ColumnarToRow (22) - : +- Scan parquet default.customer_address (21) - +- BroadcastExchange (32) - +- * Project (31) - +- * Filter (30) - +- * ColumnarToRow (29) - +- Scan parquet default.call_center (28) + : : : : +- BroadcastExchange (8) + : : : : +- * Project (7) + : : : : +- * Filter (6) + : : : : +- * ColumnarToRow (5) + : : : : +- Scan parquet default.catalog_sales (4) + : : : +- BroadcastExchange (14) + : : : +- * Filter (13) + : : : +- * ColumnarToRow (12) + : : : +- Scan parquet default.catalog_returns (11) + : : +- BroadcastExchange (20) + : : +- * Project (19) + : : +- * Filter (18) + : : +- * ColumnarToRow (17) + : : +- Scan parquet default.date_dim (16) + : +- BroadcastExchange (27) + : +- * Project (26) + : +- * Filter (25) + : +- * ColumnarToRow (24) + : +- Scan parquet default.customer_address (23) + +- BroadcastExchange (34) + +- * Project (33) + +- * Filter (32) + +- * ColumnarToRow (31) + +- Scan parquet default.call_center (30) (1) Scan parquet default.catalog_sales Output [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] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_ship_date_sk), IsNotNull(cs_ship_addr_sk), IsNotNull(cs_call_center_sk)] +PushedFilters: [IsNotNull(cs_ship_date_sk), IsNotNull(cs_ship_addr_sk), IsNotNull(cs_call_center_sk), IsNotNull(cs_order_number), IsNotNull(cs_warehouse_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 6] @@ -54,182 +56,192 @@ Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_wareho (3) Filter [codegen id : 6] 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] -Condition : ((isnotnull(cs_ship_date_sk#1) AND isnotnull(cs_ship_addr_sk#2)) AND isnotnull(cs_call_center_sk#3)) +Condition : ((((isnotnull(cs_ship_date_sk#1) AND isnotnull(cs_ship_addr_sk#2)) AND isnotnull(cs_call_center_sk#3)) AND isnotnull(cs_order_number#5)) AND isnotnull(cs_warehouse_sk#4)) (4) Scan parquet default.catalog_sales Output [2]: [cs_warehouse_sk#4, cs_order_number#5] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] +PushedFilters: [IsNotNull(cs_warehouse_sk), IsNotNull(cs_order_number)] ReadSchema: struct (5) ColumnarToRow [codegen id : 1] Input [2]: [cs_warehouse_sk#4, cs_order_number#5] -(6) Project [codegen id : 1] +(6) Filter [codegen id : 1] +Input [2]: [cs_warehouse_sk#4, cs_order_number#5] +Condition : (isnotnull(cs_warehouse_sk#4) AND isnotnull(cs_order_number#5)) + +(7) Project [codegen id : 1] Output [2]: [cs_warehouse_sk#4 AS cs_warehouse_sk#4#8, cs_order_number#5 AS cs_order_number#5#9] Input [2]: [cs_warehouse_sk#4, cs_order_number#5] -(7) BroadcastExchange +(8) BroadcastExchange Input [2]: [cs_warehouse_sk#4#8, cs_order_number#5#9] Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#10] -(8) BroadcastHashJoin [codegen id : 6] +(9) BroadcastHashJoin [codegen id : 6] Left keys [1]: [cs_order_number#5] Right keys [1]: [cs_order_number#5#9] Join condition: NOT (cs_warehouse_sk#4 = cs_warehouse_sk#4#8) -(9) Project [codegen id : 6] +(10) Project [codegen id : 6] 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] -(10) Scan parquet default.catalog_returns +(11) Scan parquet default.catalog_returns Output [1]: [cr_order_number#11] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] +PushedFilters: [IsNotNull(cr_order_number)] ReadSchema: struct -(11) ColumnarToRow [codegen id : 2] +(12) ColumnarToRow [codegen id : 2] +Input [1]: [cr_order_number#11] + +(13) Filter [codegen id : 2] Input [1]: [cr_order_number#11] +Condition : isnotnull(cr_order_number#11) -(12) BroadcastExchange +(14) BroadcastExchange Input [1]: [cr_order_number#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#12] -(13) BroadcastHashJoin [codegen id : 6] +(15) BroadcastHashJoin [codegen id : 6] Left keys [1]: [cs_order_number#5] Right keys [1]: [cr_order_number#11] Join condition: None -(14) Scan parquet default.date_dim +(16) Scan parquet default.date_dim Output [2]: [d_date_sk#13, d_date#14] Batched: true Location [not included in comparison]/{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 -(15) ColumnarToRow [codegen id : 3] +(17) ColumnarToRow [codegen id : 3] Input [2]: [d_date_sk#13, d_date#14] -(16) Filter [codegen id : 3] +(18) Filter [codegen id : 3] Input [2]: [d_date_sk#13, d_date#14] Condition : (((isnotnull(d_date#14) AND (d_date#14 >= 11719)) AND (d_date#14 <= 11779)) AND isnotnull(d_date_sk#13)) -(17) Project [codegen id : 3] +(19) Project [codegen id : 3] Output [1]: [d_date_sk#13] Input [2]: [d_date_sk#13, d_date#14] -(18) BroadcastExchange +(20) BroadcastExchange Input [1]: [d_date_sk#13] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] -(19) BroadcastHashJoin [codegen id : 6] +(21) BroadcastHashJoin [codegen id : 6] Left keys [1]: [cs_ship_date_sk#1] Right keys [1]: [d_date_sk#13] Join condition: None -(20) Project [codegen id : 6] +(22) Project [codegen id : 6] Output [5]: [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_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, d_date_sk#13] -(21) Scan parquet default.customer_address +(23) Scan parquet default.customer_address Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,GA), IsNotNull(ca_address_sk)] ReadSchema: struct -(22) ColumnarToRow [codegen id : 4] +(24) ColumnarToRow [codegen id : 4] Input [2]: [ca_address_sk#16, ca_state#17] -(23) Filter [codegen id : 4] +(25) Filter [codegen id : 4] Input [2]: [ca_address_sk#16, ca_state#17] Condition : ((isnotnull(ca_state#17) AND (ca_state#17 = GA)) AND isnotnull(ca_address_sk#16)) -(24) Project [codegen id : 4] +(26) Project [codegen id : 4] Output [1]: [ca_address_sk#16] Input [2]: [ca_address_sk#16, ca_state#17] -(25) BroadcastExchange +(27) BroadcastExchange Input [1]: [ca_address_sk#16] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] -(26) BroadcastHashJoin [codegen id : 6] +(28) BroadcastHashJoin [codegen id : 6] Left keys [1]: [cs_ship_addr_sk#2] Right keys [1]: [ca_address_sk#16] Join condition: None -(27) Project [codegen id : 6] +(29) Project [codegen id : 6] Output [4]: [cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [6]: [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#16] -(28) Scan parquet default.call_center +(30) Scan parquet default.call_center Output [2]: [cc_call_center_sk#19, cc_county#20] Batched: true Location [not included in comparison]/{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_county), EqualTo(cc_county,Williamson County), IsNotNull(cc_call_center_sk)] ReadSchema: struct -(29) ColumnarToRow [codegen id : 5] +(31) ColumnarToRow [codegen id : 5] Input [2]: [cc_call_center_sk#19, cc_county#20] -(30) Filter [codegen id : 5] +(32) Filter [codegen id : 5] Input [2]: [cc_call_center_sk#19, cc_county#20] Condition : ((isnotnull(cc_county#20) AND (cc_county#20 = Williamson County)) AND isnotnull(cc_call_center_sk#19)) -(31) Project [codegen id : 5] +(33) Project [codegen id : 5] Output [1]: [cc_call_center_sk#19] Input [2]: [cc_call_center_sk#19, cc_county#20] -(32) BroadcastExchange +(34) BroadcastExchange Input [1]: [cc_call_center_sk#19] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21] -(33) BroadcastHashJoin [codegen id : 6] +(35) BroadcastHashJoin [codegen id : 6] Left keys [1]: [cs_call_center_sk#3] Right keys [1]: [cc_call_center_sk#19] Join condition: None -(34) Project [codegen id : 6] +(36) Project [codegen id : 6] Output [3]: [cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [5]: [cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cc_call_center_sk#19] -(35) HashAggregate [codegen id : 6] +(37) HashAggregate [codegen id : 6] Input [3]: [cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Keys [1]: [cs_order_number#5] Functions [2]: [partial_sum(UnscaledValue(cs_ext_ship_cost#6)), partial_sum(UnscaledValue(cs_net_profit#7))] Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#22, sum(UnscaledValue(cs_net_profit#7))#23] Results [3]: [cs_order_number#5, sum#24, sum#25] -(36) Exchange +(38) Exchange Input [3]: [cs_order_number#5, sum#24, sum#25] Arguments: hashpartitioning(cs_order_number#5, 5), true, [id=#26] -(37) HashAggregate [codegen id : 7] +(39) HashAggregate [codegen id : 7] Input [3]: [cs_order_number#5, sum#24, sum#25] 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))#22, sum(UnscaledValue(cs_net_profit#7))#23] Results [3]: [cs_order_number#5, sum#24, sum#25] -(38) HashAggregate [codegen id : 7] +(40) HashAggregate [codegen id : 7] Input [3]: [cs_order_number#5, sum#24, sum#25] 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))#22, sum(UnscaledValue(cs_net_profit#7))#23, count(cs_order_number#5)#27] Results [3]: [sum#24, sum#25, count#28] -(39) Exchange +(41) Exchange Input [3]: [sum#24, sum#25, count#28] Arguments: SinglePartition, true, [id=#29] -(40) HashAggregate [codegen id : 8] +(42) HashAggregate [codegen id : 8] Input [3]: [sum#24, sum#25, count#28] 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))#22, sum(UnscaledValue(cs_net_profit#7))#23, count(cs_order_number#5)#27] Results [3]: [count(cs_order_number#5)#27 AS order count #30, MakeDecimal(sum(UnscaledValue(cs_ext_ship_cost#6))#22,17,2) AS total shipping cost #31, MakeDecimal(sum(UnscaledValue(cs_net_profit#7))#23,17,2) AS total net profit #32] -(41) TakeOrderedAndProject +(43) TakeOrderedAndProject Input [3]: [order count #30, total shipping cost #31, total net profit #32] Arguments: 100, [order count #30 ASC NULLS FIRST], [order count #30, total shipping cost #31, total net profit #32] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/simplified.txt index cdf86a4813208..d90c0c1a7ab65 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/simplified.txt @@ -19,7 +19,7 @@ TakeOrderedAndProject [order count ,total net profit ,total shipping cost ] BroadcastHashJoin [cr_order_number,cs_order_number] Project [cs_call_center_sk,cs_ext_ship_cost,cs_net_profit,cs_order_number,cs_ship_addr_sk,cs_ship_date_sk] BroadcastHashJoin [cs_order_number,cs_order_number,cs_warehouse_sk,cs_warehouse_sk] - Filter [cs_call_center_sk,cs_ship_addr_sk,cs_ship_date_sk] + Filter [cs_call_center_sk,cs_order_number,cs_ship_addr_sk,cs_ship_date_sk,cs_warehouse_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_call_center_sk,cs_ext_ship_cost,cs_net_profit,cs_order_number,cs_ship_addr_sk,cs_ship_date_sk,cs_warehouse_sk] @@ -27,15 +27,17 @@ TakeOrderedAndProject [order count ,total net profit ,total shipping cost ] BroadcastExchange #3 WholeStageCodegen (1) Project [cs_order_number,cs_warehouse_sk] - ColumnarToRow - InputAdapter - Scan parquet default.catalog_sales [cs_order_number,cs_warehouse_sk] + Filter [cs_order_number,cs_warehouse_sk] + ColumnarToRow + InputAdapter + Scan parquet default.catalog_sales [cs_order_number,cs_warehouse_sk] InputAdapter BroadcastExchange #4 WholeStageCodegen (2) - ColumnarToRow - InputAdapter - Scan parquet default.catalog_returns [cr_order_number] + Filter [cr_order_number] + ColumnarToRow + InputAdapter + Scan parquet default.catalog_returns [cr_order_number] InputAdapter BroadcastExchange #5 WholeStageCodegen (3) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/explain.txt index c5988072f758d..cbcc501dc018c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/explain.txt @@ -97,7 +97,7 @@ CollectLimit (92) Output [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_sold_date_sk)] +PushedFilters: [IsNotNull(cs_sold_date_sk), IsNotNull(cs_item_sk), IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -105,7 +105,7 @@ Input [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity# (3) Filter [codegen id : 1] Input [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5] -Condition : isnotnull(cs_sold_date_sk#1) +Condition : ((isnotnull(cs_sold_date_sk#1) AND isnotnull(cs_item_sk#3)) AND isnotnull(cs_bill_customer_sk#2)) (4) Exchange Input [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5] @@ -369,7 +369,7 @@ Input [4]: [cs_sold_date_sk#1, cs_quantity#4, cs_list_price#5, d_date_sk#9] Output [5]: [ws_sold_date_sk#42, ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_sold_date_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_item_sk), IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (62) ColumnarToRow [codegen id : 19] @@ -377,7 +377,7 @@ Input [5]: [ws_sold_date_sk#42, ws_item_sk#43, ws_bill_customer_sk#44, ws_quanti (63) Filter [codegen id : 19] Input [5]: [ws_sold_date_sk#42, ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46] -Condition : isnotnull(ws_sold_date_sk#42) +Condition : ((isnotnull(ws_sold_date_sk#42) AND isnotnull(ws_item_sk#43)) AND isnotnull(ws_bill_customer_sk#44)) (64) Exchange Input [5]: [ws_sold_date_sk#42, ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/simplified.txt index 7b08c6a571b4c..01f77b0292853 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/simplified.txt @@ -26,7 +26,7 @@ CollectLimit InputAdapter Exchange [cs_item_sk] #3 WholeStageCodegen (1) - Filter [cs_sold_date_sk] + Filter [cs_bill_customer_sk,cs_item_sk,cs_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_bill_customer_sk,cs_item_sk,cs_list_price,cs_quantity,cs_sold_date_sk] @@ -167,7 +167,7 @@ CollectLimit InputAdapter Exchange [ws_item_sk] #16 WholeStageCodegen (19) - Filter [ws_sold_date_sk] + Filter [ws_bill_customer_sk,ws_item_sk,ws_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_bill_customer_sk,ws_item_sk,ws_list_price,ws_quantity,ws_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/explain.txt index 6d2b5b0013d8f..da4713d9efb9e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/explain.txt @@ -77,7 +77,7 @@ CollectLimit (72) Output [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_sold_date_sk)] +PushedFilters: [IsNotNull(cs_sold_date_sk), IsNotNull(cs_item_sk), IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 9] @@ -85,7 +85,7 @@ Input [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity# (3) Filter [codegen id : 9] Input [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5] -Condition : isnotnull(cs_sold_date_sk#1) +Condition : ((isnotnull(cs_sold_date_sk#1) AND isnotnull(cs_item_sk#3)) AND isnotnull(cs_bill_customer_sk#2)) (4) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#6, ss_item_sk#7] @@ -313,7 +313,7 @@ Input [4]: [cs_sold_date_sk#1, cs_quantity#4, cs_list_price#5, d_date_sk#8] Output [5]: [ws_sold_date_sk#41, ws_item_sk#42, ws_bill_customer_sk#43, ws_quantity#44, ws_list_price#45] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_sold_date_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_item_sk), IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (53) ColumnarToRow [codegen id : 18] @@ -321,7 +321,7 @@ Input [5]: [ws_sold_date_sk#41, ws_item_sk#42, ws_bill_customer_sk#43, ws_quanti (54) Filter [codegen id : 18] Input [5]: [ws_sold_date_sk#41, ws_item_sk#42, ws_bill_customer_sk#43, ws_quantity#44, ws_list_price#45] -Condition : isnotnull(ws_sold_date_sk#41) +Condition : ((isnotnull(ws_sold_date_sk#41) AND isnotnull(ws_item_sk#42)) AND isnotnull(ws_bill_customer_sk#43)) (55) ReusedExchange [Reuses operator id: 25] Output [1]: [item_sk#20] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/simplified.txt index a69293edd6218..bb065c04387ae 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/simplified.txt @@ -14,7 +14,7 @@ CollectLimit BroadcastHashJoin [c_customer_sk,cs_bill_customer_sk] Project [cs_bill_customer_sk,cs_list_price,cs_quantity,cs_sold_date_sk] BroadcastHashJoin [cs_item_sk,item_sk] - Filter [cs_sold_date_sk] + Filter [cs_bill_customer_sk,cs_item_sk,cs_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_bill_customer_sk,cs_item_sk,cs_list_price,cs_quantity,cs_sold_date_sk] @@ -124,7 +124,7 @@ CollectLimit BroadcastHashJoin [c_customer_sk,ws_bill_customer_sk] Project [ws_bill_customer_sk,ws_list_price,ws_quantity,ws_sold_date_sk] BroadcastHashJoin [item_sk,ws_item_sk] - Filter [ws_sold_date_sk] + Filter [ws_bill_customer_sk,ws_item_sk,ws_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_bill_customer_sk,ws_item_sk,ws_list_price,ws_quantity,ws_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/explain.txt index 51b85142f37ff..7a920a1d4eaa6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/explain.txt @@ -135,7 +135,7 @@ TakeOrderedAndProject (130) Output [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_sold_date_sk)] +PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_sold_date_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -143,7 +143,7 @@ Input [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity# (3) Filter [codegen id : 1] Input [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5] -Condition : (isnotnull(cs_bill_customer_sk#2) AND isnotnull(cs_sold_date_sk#1)) +Condition : ((isnotnull(cs_bill_customer_sk#2) AND isnotnull(cs_sold_date_sk#1)) AND isnotnull(cs_item_sk#3)) (4) Exchange Input [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5] @@ -510,7 +510,7 @@ Results [3]: [c_last_name#42, c_first_name#41, sum(CheckOverflow((promote_precis Output [5]: [ws_sold_date_sk#53, ws_item_sk#54, ws_bill_customer_sk#55, ws_quantity#56, ws_list_price#57] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_bill_customer_sk), IsNotNull(ws_sold_date_sk)] +PushedFilters: [IsNotNull(ws_bill_customer_sk), IsNotNull(ws_sold_date_sk), IsNotNull(ws_item_sk)] ReadSchema: struct (84) ColumnarToRow [codegen id : 29] @@ -518,7 +518,7 @@ Input [5]: [ws_sold_date_sk#53, ws_item_sk#54, ws_bill_customer_sk#55, ws_quanti (85) Filter [codegen id : 29] Input [5]: [ws_sold_date_sk#53, ws_item_sk#54, ws_bill_customer_sk#55, ws_quantity#56, ws_list_price#57] -Condition : (isnotnull(ws_bill_customer_sk#55) AND isnotnull(ws_sold_date_sk#53)) +Condition : ((isnotnull(ws_bill_customer_sk#55) AND isnotnull(ws_sold_date_sk#53)) AND isnotnull(ws_item_sk#54)) (86) Exchange Input [5]: [ws_sold_date_sk#53, ws_item_sk#54, ws_bill_customer_sk#55, ws_quantity#56, ws_list_price#57] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/simplified.txt index 3964f50895888..79999393ad374 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/simplified.txt @@ -27,7 +27,7 @@ TakeOrderedAndProject [c_first_name,c_last_name,sales] InputAdapter Exchange [cs_item_sk] #3 WholeStageCodegen (1) - Filter [cs_bill_customer_sk,cs_sold_date_sk] + Filter [cs_bill_customer_sk,cs_item_sk,cs_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_bill_customer_sk,cs_item_sk,cs_list_price,cs_quantity,cs_sold_date_sk] @@ -209,7 +209,7 @@ TakeOrderedAndProject [c_first_name,c_last_name,sales] InputAdapter Exchange [ws_item_sk] #19 WholeStageCodegen (29) - Filter [ws_bill_customer_sk,ws_sold_date_sk] + Filter [ws_bill_customer_sk,ws_item_sk,ws_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_bill_customer_sk,ws_item_sk,ws_list_price,ws_quantity,ws_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/explain.txt index b5213786c93bc..53df7be02cc1b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/explain.txt @@ -102,7 +102,7 @@ TakeOrderedAndProject (97) Output [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_sold_date_sk)] +PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_sold_date_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 13] @@ -110,7 +110,7 @@ Input [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity# (3) Filter [codegen id : 13] Input [5]: [cs_sold_date_sk#1, cs_bill_customer_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5] -Condition : (isnotnull(cs_bill_customer_sk#2) AND isnotnull(cs_sold_date_sk#1)) +Condition : ((isnotnull(cs_bill_customer_sk#2) AND isnotnull(cs_sold_date_sk#1)) AND isnotnull(cs_item_sk#3)) (4) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#6, ss_item_sk#7] @@ -406,7 +406,7 @@ Results [3]: [c_last_name#39, c_first_name#38, sum(CheckOverflow((promote_precis Output [5]: [ws_sold_date_sk#52, ws_item_sk#53, ws_bill_customer_sk#54, ws_quantity#55, ws_list_price#56] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_bill_customer_sk), IsNotNull(ws_sold_date_sk)] +PushedFilters: [IsNotNull(ws_bill_customer_sk), IsNotNull(ws_sold_date_sk), IsNotNull(ws_item_sk)] ReadSchema: struct (67) ColumnarToRow [codegen id : 27] @@ -414,7 +414,7 @@ Input [5]: [ws_sold_date_sk#52, ws_item_sk#53, ws_bill_customer_sk#54, ws_quanti (68) Filter [codegen id : 27] Input [5]: [ws_sold_date_sk#52, ws_item_sk#53, ws_bill_customer_sk#54, ws_quantity#55, ws_list_price#56] -Condition : (isnotnull(ws_bill_customer_sk#54) AND isnotnull(ws_sold_date_sk#52)) +Condition : ((isnotnull(ws_bill_customer_sk#54) AND isnotnull(ws_sold_date_sk#52)) AND isnotnull(ws_item_sk#53)) (69) ReusedExchange [Reuses operator id: 25] Output [1]: [item_sk#20] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/simplified.txt index 277966b363866..c444ac3c443a8 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/simplified.txt @@ -13,7 +13,7 @@ TakeOrderedAndProject [c_first_name,c_last_name,sales] BroadcastHashJoin [c_customer_sk,cs_bill_customer_sk] Project [cs_bill_customer_sk,cs_list_price,cs_quantity,cs_sold_date_sk] BroadcastHashJoin [cs_item_sk,item_sk] - Filter [cs_bill_customer_sk,cs_sold_date_sk] + Filter [cs_bill_customer_sk,cs_item_sk,cs_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_bill_customer_sk,cs_item_sk,cs_list_price,cs_quantity,cs_sold_date_sk] @@ -146,7 +146,7 @@ TakeOrderedAndProject [c_first_name,c_last_name,sales] BroadcastHashJoin [c_customer_sk,ws_bill_customer_sk] Project [ws_bill_customer_sk,ws_list_price,ws_quantity,ws_sold_date_sk] BroadcastHashJoin [item_sk,ws_item_sk] - Filter [ws_bill_customer_sk,ws_sold_date_sk] + Filter [ws_bill_customer_sk,ws_item_sk,ws_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_bill_customer_sk,ws_item_sk,ws_list_price,ws_quantity,ws_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/explain.txt index 8185680b58670..d02a446af95fb 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/explain.txt @@ -117,7 +117,7 @@ Input [5]: [ss_sold_date_sk#1, ss_item_sk#2, ss_addr_sk#3, ss_ext_sales_price#4, Output [2]: [i_item_sk#9, i_manufact_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_manufact_id)] ReadSchema: struct (12) ColumnarToRow [codegen id : 3] @@ -125,13 +125,13 @@ Input [2]: [i_item_sk#9, i_manufact_id#10] (13) Filter [codegen id : 3] Input [2]: [i_item_sk#9, i_manufact_id#10] -Condition : isnotnull(i_item_sk#9) +Condition : (isnotnull(i_item_sk#9) AND isnotnull(i_manufact_id#10)) (14) Scan parquet default.item Output [2]: [i_category#11, i_manufact_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Electronics)] +PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Electronics), IsNotNull(i_manufact_id)] ReadSchema: struct (15) ColumnarToRow [codegen id : 2] @@ -139,7 +139,7 @@ Input [2]: [i_category#11, i_manufact_id#10] (16) Filter [codegen id : 2] Input [2]: [i_category#11, i_manufact_id#10] -Condition : (isnotnull(i_category#11) AND (i_category#11 = Electronics)) +Condition : ((isnotnull(i_category#11) AND (i_category#11 = Electronics)) AND isnotnull(i_manufact_id#10)) (17) Project [codegen id : 2] Output [1]: [i_manufact_id#10 AS i_manufact_id#10#12] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/simplified.txt index e810c4bfbf62d..24d4255b9a5ef 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/simplified.txt @@ -35,7 +35,7 @@ TakeOrderedAndProject [i_manufact_id,total_sales] BroadcastExchange #4 WholeStageCodegen (3) BroadcastHashJoin [i_manufact_id,i_manufact_id] - Filter [i_item_sk] + Filter [i_item_sk,i_manufact_id] ColumnarToRow InputAdapter Scan parquet default.item [i_item_sk,i_manufact_id] @@ -43,7 +43,7 @@ TakeOrderedAndProject [i_manufact_id,total_sales] BroadcastExchange #5 WholeStageCodegen (2) Project [i_manufact_id] - Filter [i_category] + Filter [i_category,i_manufact_id] ColumnarToRow InputAdapter Scan parquet default.item [i_category,i_manufact_id] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/explain.txt index 8d1558a01cfde..6f0e1f57e5f29 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/explain.txt @@ -148,7 +148,7 @@ Input [4]: [ss_item_sk#2, ss_addr_sk#3, ss_ext_sales_price#4, ca_address_sk#9] Output [2]: [i_item_sk#12, i_manufact_id#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_manufact_id)] ReadSchema: struct (19) ColumnarToRow [codegen id : 4] @@ -156,13 +156,13 @@ Input [2]: [i_item_sk#12, i_manufact_id#13] (20) Filter [codegen id : 4] Input [2]: [i_item_sk#12, i_manufact_id#13] -Condition : isnotnull(i_item_sk#12) +Condition : (isnotnull(i_item_sk#12) AND isnotnull(i_manufact_id#13)) (21) Scan parquet default.item Output [2]: [i_category#14, i_manufact_id#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Electronics)] +PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Electronics), IsNotNull(i_manufact_id)] ReadSchema: struct (22) ColumnarToRow [codegen id : 3] @@ -170,7 +170,7 @@ Input [2]: [i_category#14, i_manufact_id#13] (23) Filter [codegen id : 3] Input [2]: [i_category#14, i_manufact_id#13] -Condition : (isnotnull(i_category#14) AND (i_category#14 = Electronics)) +Condition : ((isnotnull(i_category#14) AND (i_category#14 = Electronics)) AND isnotnull(i_manufact_id#13)) (24) Project [codegen id : 3] Output [1]: [i_manufact_id#13 AS i_manufact_id#13#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/simplified.txt index 5b0cca34b3c70..8bbcd24fc243b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/simplified.txt @@ -43,7 +43,7 @@ TakeOrderedAndProject [i_manufact_id,total_sales] BroadcastExchange #5 WholeStageCodegen (4) BroadcastHashJoin [i_manufact_id,i_manufact_id] - Filter [i_item_sk] + Filter [i_item_sk,i_manufact_id] ColumnarToRow InputAdapter Scan parquet default.item [i_item_sk,i_manufact_id] @@ -51,7 +51,7 @@ TakeOrderedAndProject [i_manufact_id,total_sales] BroadcastExchange #6 WholeStageCodegen (3) Project [i_manufact_id] - Filter [i_category] + Filter [i_category,i_manufact_id] ColumnarToRow InputAdapter Scan parquet default.item [i_category,i_manufact_id] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/explain.txt index 01f6c35a2178d..54459c137d058 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/explain.txt @@ -65,7 +65,7 @@ TakeOrderedAndProject (60) Output [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -73,7 +73,7 @@ Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] (3) 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)) +Condition : ((isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4)) AND isnotnull(c_customer_sk#3)) (4) Exchange Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] @@ -87,7 +87,7 @@ Arguments: [c_customer_sk#3 ASC NULLS FIRST], false, 0 Output [2]: [ss_sold_date_sk#7, ss_customer_sk#8] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] @@ -95,7 +95,7 @@ Input [2]: [ss_sold_date_sk#7, ss_customer_sk#8] (8) Filter [codegen id : 4] Input [2]: [ss_sold_date_sk#7, ss_customer_sk#8] -Condition : isnotnull(ss_sold_date_sk#7) +Condition : (isnotnull(ss_sold_date_sk#7) AND isnotnull(ss_customer_sk#8)) (9) Scan parquet default.date_dim Output [3]: [d_date_sk#9, d_year#10, d_qoy#11] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/simplified.txt index 35dc74b2ced18..53fb2b797b2c5 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/simplified.txt @@ -32,7 +32,7 @@ TakeOrderedAndProject [aggOrder,avg(cd_dep_college_count),avg(cd_dep_count),avg( InputAdapter Exchange [c_customer_sk] #4 WholeStageCodegen (1) - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -43,7 +43,7 @@ TakeOrderedAndProject [aggOrder,avg(cd_dep_college_count),avg(cd_dep_count),avg( WholeStageCodegen (4) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/explain.txt index 5370b6872abf6..6a6f3f3e27c0b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/explain.txt @@ -54,7 +54,7 @@ TakeOrderedAndProject (49) Output [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 9] @@ -62,13 +62,13 @@ Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] (3) Filter [codegen id : 9] 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)) +Condition : ((isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4)) AND isnotnull(c_customer_sk#3)) (4) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#6, ss_customer_sk#7] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (5) ColumnarToRow [codegen id : 2] @@ -76,7 +76,7 @@ Input [2]: [ss_sold_date_sk#6, ss_customer_sk#7] (6) Filter [codegen id : 2] Input [2]: [ss_sold_date_sk#6, ss_customer_sk#7] -Condition : isnotnull(ss_sold_date_sk#6) +Condition : (isnotnull(ss_sold_date_sk#6) AND isnotnull(ss_customer_sk#7)) (7) Scan parquet default.date_dim Output [3]: [d_date_sk#8, d_year#9, d_qoy#10] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/simplified.txt index 4f500e2b32b31..fb28975e221ab 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/simplified.txt @@ -14,7 +14,7 @@ TakeOrderedAndProject [aggOrder,avg(cd_dep_college_count),avg(cd_dep_count),avg( BroadcastHashJoin [c_customer_sk,cs_ship_customer_sk] BroadcastHashJoin [c_customer_sk,ws_bill_customer_sk] BroadcastHashJoin [c_customer_sk,ss_customer_sk] - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -23,7 +23,7 @@ TakeOrderedAndProject [aggOrder,avg(cd_dep_college_count),avg(cd_dep_count),avg( WholeStageCodegen (2) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/explain.txt index 55bd25c501294..7208c8165168a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/explain.txt @@ -86,6 +86,7 @@ TakeOrderedAndProject (81) Output [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -93,7 +94,7 @@ Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profi (3) Filter [codegen id : 1] Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4] -Condition : (isnotnull(cast(ss_sold_date_sk#1 as bigint)) AND isnotnull(cast(ss_store_sk#2 as bigint))) +Condition : (((isnotnull(ss_sold_date_sk#1) AND isnotnull(ss_store_sk#2)) AND isnotnull(cast(ss_sold_date_sk#1 as bigint))) AND isnotnull(cast(ss_store_sk#2 as bigint))) (4) Project [codegen id : 1] Output [6]: [cast(ss_store_sk#2 as bigint) AS store_sk#5, cast(ss_sold_date_sk#1 as bigint) AS date_sk#6, ss_ext_sales_price#3 AS sales_price#7, ss_net_profit#4 AS profit#8, 0.00 AS return_amt#9, 0.00 AS net_loss#10] @@ -294,7 +295,7 @@ Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#51))#77,17,2) AS sales#8 Output [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net_profit#89] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_web_site_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_web_site_sk)] ReadSchema: struct (48) ColumnarToRow [codegen id : 13] @@ -302,7 +303,7 @@ Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net (49) Filter [codegen id : 13] Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net_profit#89] -Condition : (isnotnull(cast(ws_sold_date_sk#86 as bigint)) AND isnotnull(ws_web_site_sk#87)) +Condition : ((isnotnull(ws_sold_date_sk#86) AND isnotnull(cast(ws_sold_date_sk#86 as bigint))) AND isnotnull(ws_web_site_sk#87)) (50) Project [codegen id : 13] Output [6]: [ws_web_site_sk#87 AS wsr_web_site_sk#90, cast(ws_sold_date_sk#86 as bigint) AS date_sk#91, ws_ext_sales_price#88 AS sales_price#92, ws_net_profit#89 AS profit#93, 0.00 AS return_amt#94, 0.00 AS net_loss#95] @@ -312,7 +313,7 @@ Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net Output [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return_amt#99, wr_net_loss#100] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] -PushedFilters: [IsNotNull(wr_returned_date_sk)] +PushedFilters: [IsNotNull(wr_returned_date_sk), IsNotNull(wr_item_sk), IsNotNull(wr_order_number)] ReadSchema: struct (52) ColumnarToRow [codegen id : 14] @@ -320,7 +321,7 @@ Input [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return (53) Filter [codegen id : 14] Input [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return_amt#99, wr_net_loss#100] -Condition : isnotnull(wr_returned_date_sk#96) +Condition : ((isnotnull(wr_returned_date_sk#96) AND isnotnull(wr_item_sk#97)) AND isnotnull(wr_order_number#98)) (54) Exchange Input [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return_amt#99, wr_net_loss#100] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/simplified.txt index 71e204433c6ef..c4d9339b11a15 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/simplified.txt @@ -107,7 +107,7 @@ TakeOrderedAndProject [channel,id,profit,returns,sales] InputAdapter Exchange [wr_item_sk,wr_order_number] #8 WholeStageCodegen (14) - Filter [wr_returned_date_sk] + Filter [wr_item_sk,wr_order_number,wr_returned_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_returns [wr_item_sk,wr_net_loss,wr_order_number,wr_return_amt,wr_returned_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/explain.txt index 15f0cda0b5f9f..2722867eeaa42 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/explain.txt @@ -83,6 +83,7 @@ TakeOrderedAndProject (78) Output [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -90,7 +91,7 @@ Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profi (3) Filter [codegen id : 1] Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4] -Condition : (isnotnull(cast(ss_sold_date_sk#1 as bigint)) AND isnotnull(cast(ss_store_sk#2 as bigint))) +Condition : (((isnotnull(ss_sold_date_sk#1) AND isnotnull(ss_store_sk#2)) AND isnotnull(cast(ss_sold_date_sk#1 as bigint))) AND isnotnull(cast(ss_store_sk#2 as bigint))) (4) Project [codegen id : 1] Output [6]: [cast(ss_store_sk#2 as bigint) AS store_sk#5, cast(ss_sold_date_sk#1 as bigint) AS date_sk#6, ss_ext_sales_price#3 AS sales_price#7, ss_net_profit#4 AS profit#8, 0.00 AS return_amt#9, 0.00 AS net_loss#10] @@ -291,7 +292,7 @@ Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#51))#77,17,2) AS sales#8 Output [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net_profit#89] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_web_site_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_web_site_sk)] ReadSchema: struct (48) ColumnarToRow [codegen id : 13] @@ -299,7 +300,7 @@ Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net (49) Filter [codegen id : 13] Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net_profit#89] -Condition : (isnotnull(cast(ws_sold_date_sk#86 as bigint)) AND isnotnull(ws_web_site_sk#87)) +Condition : ((isnotnull(ws_sold_date_sk#86) AND isnotnull(cast(ws_sold_date_sk#86 as bigint))) AND isnotnull(ws_web_site_sk#87)) (50) Project [codegen id : 13] Output [6]: [ws_web_site_sk#87 AS wsr_web_site_sk#90, cast(ws_sold_date_sk#86 as bigint) AS date_sk#91, ws_ext_sales_price#88 AS sales_price#92, ws_net_profit#89 AS profit#93, 0.00 AS return_amt#94, 0.00 AS net_loss#95] @@ -309,7 +310,7 @@ Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net Output [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return_amt#99, wr_net_loss#100] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] -PushedFilters: [IsNotNull(wr_returned_date_sk)] +PushedFilters: [IsNotNull(wr_returned_date_sk), IsNotNull(wr_order_number), IsNotNull(wr_item_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 15] @@ -317,7 +318,7 @@ Input [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return (53) Filter [codegen id : 15] Input [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return_amt#99, wr_net_loss#100] -Condition : isnotnull(wr_returned_date_sk#96) +Condition : ((isnotnull(wr_returned_date_sk#96) AND isnotnull(wr_order_number#98)) AND isnotnull(wr_item_sk#97)) (54) Scan parquet default.web_sales Output [3]: [ws_item_sk#101, ws_web_site_sk#87, ws_order_number#102] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/simplified.txt index 0bb6f48db3e12..8d21b523f30b0 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/simplified.txt @@ -101,7 +101,7 @@ TakeOrderedAndProject [channel,id,profit,returns,sales] WholeStageCodegen (15) Project [wr_net_loss,wr_return_amt,wr_returned_date_sk,ws_web_site_sk] BroadcastHashJoin [wr_item_sk,wr_order_number,ws_item_sk,ws_order_number] - Filter [wr_returned_date_sk] + Filter [wr_item_sk,wr_order_number,wr_returned_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_returns [wr_item_sk,wr_net_loss,wr_order_number,wr_return_amt,wr_returned_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/explain.txt index d0d64721100c3..09e0809338131 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/explain.txt @@ -148,7 +148,7 @@ Input [4]: [ss_item_sk#2, ss_addr_sk#3, ss_ext_sales_price#4, ca_address_sk#9] Output [2]: [i_item_sk#12, i_item_id#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_item_id)] ReadSchema: struct (19) ColumnarToRow [codegen id : 4] @@ -156,13 +156,13 @@ Input [2]: [i_item_sk#12, i_item_id#13] (20) Filter [codegen id : 4] Input [2]: [i_item_sk#12, i_item_id#13] -Condition : isnotnull(i_item_sk#12) +Condition : (isnotnull(i_item_sk#12) AND isnotnull(i_item_id#13)) (21) Scan parquet default.item Output [2]: [i_item_id#13, i_color#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [In(i_color, [slate,blanched,burnished])] +PushedFilters: [In(i_color, [slate,blanched,burnished]), IsNotNull(i_item_id)] ReadSchema: struct (22) ColumnarToRow [codegen id : 3] @@ -170,7 +170,7 @@ Input [2]: [i_item_id#13, i_color#14] (23) Filter [codegen id : 3] Input [2]: [i_item_id#13, i_color#14] -Condition : i_color#14 IN (slate,blanched,burnished) +Condition : (i_color#14 IN (slate,blanched,burnished) AND isnotnull(i_item_id#13)) (24) Project [codegen id : 3] Output [1]: [i_item_id#13 AS i_item_id#13#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/simplified.txt index f8bc60fffb502..1da85841df199 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/simplified.txt @@ -43,7 +43,7 @@ TakeOrderedAndProject [i_item_id,total_sales] BroadcastExchange #5 WholeStageCodegen (4) BroadcastHashJoin [i_item_id,i_item_id] - Filter [i_item_sk] + Filter [i_item_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_item_id,i_item_sk] @@ -51,7 +51,7 @@ TakeOrderedAndProject [i_item_id,total_sales] BroadcastExchange #6 WholeStageCodegen (3) Project [i_item_id] - Filter [i_color] + Filter [i_color,i_item_id] ColumnarToRow InputAdapter Scan parquet default.item [i_color,i_item_id] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/explain.txt index d0d64721100c3..09e0809338131 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/explain.txt @@ -148,7 +148,7 @@ Input [4]: [ss_item_sk#2, ss_addr_sk#3, ss_ext_sales_price#4, ca_address_sk#9] Output [2]: [i_item_sk#12, i_item_id#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_item_id)] ReadSchema: struct (19) ColumnarToRow [codegen id : 4] @@ -156,13 +156,13 @@ Input [2]: [i_item_sk#12, i_item_id#13] (20) Filter [codegen id : 4] Input [2]: [i_item_sk#12, i_item_id#13] -Condition : isnotnull(i_item_sk#12) +Condition : (isnotnull(i_item_sk#12) AND isnotnull(i_item_id#13)) (21) Scan parquet default.item Output [2]: [i_item_id#13, i_color#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [In(i_color, [slate,blanched,burnished])] +PushedFilters: [In(i_color, [slate,blanched,burnished]), IsNotNull(i_item_id)] ReadSchema: struct (22) ColumnarToRow [codegen id : 3] @@ -170,7 +170,7 @@ Input [2]: [i_item_id#13, i_color#14] (23) Filter [codegen id : 3] Input [2]: [i_item_id#13, i_color#14] -Condition : i_color#14 IN (slate,blanched,burnished) +Condition : (i_color#14 IN (slate,blanched,burnished) AND isnotnull(i_item_id#13)) (24) Project [codegen id : 3] Output [1]: [i_item_id#13 AS i_item_id#13#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/simplified.txt index f8bc60fffb502..1da85841df199 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/simplified.txt @@ -43,7 +43,7 @@ TakeOrderedAndProject [i_item_id,total_sales] BroadcastExchange #5 WholeStageCodegen (4) BroadcastHashJoin [i_item_id,i_item_id] - Filter [i_item_sk] + Filter [i_item_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_item_id,i_item_sk] @@ -51,7 +51,7 @@ TakeOrderedAndProject [i_item_id,total_sales] BroadcastExchange #6 WholeStageCodegen (3) Project [i_item_id] - Filter [i_color] + Filter [i_color,i_item_id] ColumnarToRow InputAdapter Scan parquet default.item [i_color,i_item_id] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/explain.txt index 8498e4397271f..a58590d0b8097 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/explain.txt @@ -98,7 +98,7 @@ Condition : (isnotnull(ss_item_sk#2) AND isnotnull(ss_sold_date_sk#1)) Output [2]: [d_date_sk#4, d_date#5] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_date_sk)] +PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_date)] ReadSchema: struct (5) ColumnarToRow [codegen id : 2] @@ -106,13 +106,13 @@ Input [2]: [d_date_sk#4, d_date#5] (6) Filter [codegen id : 2] Input [2]: [d_date_sk#4, d_date#5] -Condition : isnotnull(d_date_sk#4) +Condition : (isnotnull(d_date_sk#4) AND isnotnull(d_date#5)) (7) Scan parquet default.date_dim Output [2]: [d_date#5, d_week_seq#6] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_week_seq)] +PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (8) ColumnarToRow [codegen id : 1] @@ -120,7 +120,7 @@ Input [2]: [d_date#5, d_week_seq#6] (9) Filter [codegen id : 1] Input [2]: [d_date#5, d_week_seq#6] -Condition : (isnotnull(d_week_seq#6) AND (d_week_seq#6 = Subquery scalar-subquery#7, [id=#8])) +Condition : ((isnotnull(d_week_seq#6) AND (d_week_seq#6 = Subquery scalar-subquery#7, [id=#8])) AND isnotnull(d_date#5)) (10) Project [codegen id : 1] Output [1]: [d_date#5 AS d_date#5#9] @@ -219,7 +219,7 @@ Condition : (isnotnull(cs_item_sk#22) AND isnotnull(cs_sold_date_sk#21)) Output [2]: [d_date_sk#4, d_date#5] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_date_sk)] +PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_date)] ReadSchema: struct (31) ColumnarToRow [codegen id : 6] @@ -227,13 +227,13 @@ Input [2]: [d_date_sk#4, d_date#5] (32) Filter [codegen id : 6] Input [2]: [d_date_sk#4, d_date#5] -Condition : isnotnull(d_date_sk#4) +Condition : (isnotnull(d_date_sk#4) AND isnotnull(d_date#5)) (33) Scan parquet default.date_dim Output [2]: [d_date#5, d_week_seq#6] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_week_seq)] +PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (34) ColumnarToRow [codegen id : 5] @@ -241,7 +241,7 @@ Input [2]: [d_date#5, d_week_seq#6] (35) Filter [codegen id : 5] Input [2]: [d_date#5, d_week_seq#6] -Condition : (isnotnull(d_week_seq#6) AND (d_week_seq#6 = ReusedSubquery Subquery scalar-subquery#7, [id=#8])) +Condition : ((isnotnull(d_week_seq#6) AND (d_week_seq#6 = ReusedSubquery Subquery scalar-subquery#7, [id=#8])) AND isnotnull(d_date#5)) (36) Project [codegen id : 5] Output [1]: [d_date#5 AS d_date#5#24] @@ -314,7 +314,7 @@ Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id= (51) BroadcastHashJoin [codegen id : 15] Left keys [1]: [item_id#19] Right keys [1]: [item_id#31] -Join condition: ((((cast(ss_item_rev#20 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#32)), DecimalType(20,3), true)) AND (cast(cs_item_rev#32 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#20)), DecimalType(20,3), true))) AND (cast(ss_item_rev#20 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#32)), DecimalType(19,3), true))) AND (cast(cs_item_rev#32 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#20)), DecimalType(19,3), true))) +Join condition: ((((cast(cs_item_rev#32 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#20)), DecimalType(19,3), true)) AND (cast(ss_item_rev#20 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#32)), DecimalType(20,3), true))) AND (cast(ss_item_rev#20 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#32)), DecimalType(19,3), true))) AND (cast(cs_item_rev#32 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#20)), DecimalType(20,3), true))) (52) Project [codegen id : 15] Output [3]: [item_id#19, ss_item_rev#20, cs_item_rev#32] @@ -338,7 +338,7 @@ Condition : (isnotnull(ws_item_sk#35) AND isnotnull(ws_sold_date_sk#34)) Output [2]: [d_date_sk#4, d_date#5] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_date_sk)] +PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_date)] ReadSchema: struct (57) ColumnarToRow [codegen id : 11] @@ -346,13 +346,13 @@ Input [2]: [d_date_sk#4, d_date#5] (58) Filter [codegen id : 11] Input [2]: [d_date_sk#4, d_date#5] -Condition : isnotnull(d_date_sk#4) +Condition : (isnotnull(d_date_sk#4) AND isnotnull(d_date#5)) (59) Scan parquet default.date_dim Output [2]: [d_date#5, d_week_seq#6] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_week_seq)] +PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (60) ColumnarToRow [codegen id : 10] @@ -360,7 +360,7 @@ Input [2]: [d_date#5, d_week_seq#6] (61) Filter [codegen id : 10] Input [2]: [d_date#5, d_week_seq#6] -Condition : (isnotnull(d_week_seq#6) AND (d_week_seq#6 = ReusedSubquery Subquery scalar-subquery#7, [id=#8])) +Condition : ((isnotnull(d_week_seq#6) AND (d_week_seq#6 = ReusedSubquery Subquery scalar-subquery#7, [id=#8])) AND isnotnull(d_date#5)) (62) Project [codegen id : 10] Output [1]: [d_date#5 AS d_date#5#37] @@ -433,7 +433,7 @@ Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id= (77) BroadcastHashJoin [codegen id : 15] Left keys [1]: [item_id#19] Right keys [1]: [item_id#44] -Join condition: ((((((((cast(ws_item_rev#45 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#32)), DecimalType(20,3), true)) AND (cast(cs_item_rev#32 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#45)), DecimalType(20,3), true))) AND (cast(ws_item_rev#45 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#20)), DecimalType(19,3), true))) AND (cast(ws_item_rev#45 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#32)), DecimalType(19,3), true))) AND (cast(cs_item_rev#32 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#45)), DecimalType(19,3), true))) AND (cast(ss_item_rev#20 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#45)), DecimalType(20,3), true))) AND (cast(ws_item_rev#45 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#20)), DecimalType(20,3), true))) AND (cast(ss_item_rev#20 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#45)), DecimalType(19,3), true))) +Join condition: ((((((((cast(ws_item_rev#45 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#32)), DecimalType(20,3), true)) AND (cast(cs_item_rev#32 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#45)), DecimalType(19,3), true))) AND (cast(ws_item_rev#45 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#20)), DecimalType(19,3), true))) AND (cast(ss_item_rev#20 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#45)), DecimalType(20,3), true))) AND (cast(ws_item_rev#45 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#20)), DecimalType(20,3), true))) AND (cast(ws_item_rev#45 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#32)), DecimalType(19,3), true))) AND (cast(ss_item_rev#20 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#45)), DecimalType(19,3), true))) AND (cast(cs_item_rev#32 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#45)), DecimalType(20,3), true))) (78) Project [codegen id : 15] Output [8]: [item_id#19, ss_item_rev#20, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(ss_item_rev#20 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#20 as decimal(18,2))) + promote_precision(cast(cs_item_rev#32 as decimal(18,2)))), DecimalType(18,2), true) as decimal(19,2))) + promote_precision(cast(ws_item_rev#45 as decimal(19,2)))), DecimalType(19,2), true))), DecimalType(38,21), true)) / 3.000000000000000000000), DecimalType(38,21), true)) * 100.000000000000000000000), DecimalType(38,17), true) AS ss_dev#47, cs_item_rev#32, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(cs_item_rev#32 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#20 as decimal(18,2))) + promote_precision(cast(cs_item_rev#32 as decimal(18,2)))), DecimalType(18,2), true) as decimal(19,2))) + promote_precision(cast(ws_item_rev#45 as decimal(19,2)))), DecimalType(19,2), true))), DecimalType(38,21), true)) / 3.000000000000000000000), DecimalType(38,21), true)) * 100.000000000000000000000), DecimalType(38,17), true) AS cs_dev#48, ws_item_rev#45, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(ws_item_rev#45 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#20 as decimal(18,2))) + promote_precision(cast(cs_item_rev#32 as decimal(18,2)))), DecimalType(18,2), true) as decimal(19,2))) + promote_precision(cast(ws_item_rev#45 as decimal(19,2)))), DecimalType(19,2), true))), DecimalType(38,21), true)) / 3.000000000000000000000), DecimalType(38,21), true)) * 100.000000000000000000000), DecimalType(38,17), true) AS ws_dev#49, CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#20 as decimal(18,2))) + promote_precision(cast(cs_item_rev#32 as decimal(18,2)))), DecimalType(18,2), true) as decimal(19,2))) + promote_precision(cast(ws_item_rev#45 as decimal(19,2)))), DecimalType(19,2), true)) / 3.00), DecimalType(23,6), true) AS average#50] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/simplified.txt index 0b846774d3c97..e62f5ca5f3d02 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/simplified.txt @@ -23,7 +23,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ WholeStageCodegen (2) Project [d_date_sk] BroadcastHashJoin [d_date,d_date] - Filter [d_date_sk] + Filter [d_date,d_date_sk] ColumnarToRow InputAdapter Scan parquet default.date_dim [d_date,d_date_sk] @@ -31,7 +31,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ BroadcastExchange #3 WholeStageCodegen (1) Project [d_date] - Filter [d_week_seq] + Filter [d_date,d_week_seq] Subquery #1 WholeStageCodegen (1) Project [d_week_seq] @@ -71,7 +71,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ WholeStageCodegen (6) Project [d_date_sk] BroadcastHashJoin [d_date,d_date] - Filter [d_date_sk] + Filter [d_date,d_date_sk] ColumnarToRow InputAdapter Scan parquet default.date_dim [d_date,d_date_sk] @@ -79,7 +79,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ BroadcastExchange #8 WholeStageCodegen (5) Project [d_date] - Filter [d_week_seq] + Filter [d_date,d_week_seq] ReusedSubquery [d_week_seq] #1 ColumnarToRow InputAdapter @@ -108,7 +108,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ WholeStageCodegen (11) Project [d_date_sk] BroadcastHashJoin [d_date,d_date] - Filter [d_date_sk] + Filter [d_date,d_date_sk] ColumnarToRow InputAdapter Scan parquet default.date_dim [d_date,d_date_sk] @@ -116,7 +116,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ BroadcastExchange #12 WholeStageCodegen (10) Project [d_date] - Filter [d_week_seq] + Filter [d_date,d_week_seq] ReusedSubquery [d_week_seq] #1 ColumnarToRow InputAdapter diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/explain.txt index 40a6836aedae6..91c3d1f8509f2 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/explain.txt @@ -125,7 +125,7 @@ Input [5]: [ss_sold_date_sk#1, ss_item_sk#2, ss_ext_sales_price#3, i_item_sk#4, Output [2]: [d_date_sk#7, d_date#8] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_date_sk)] +PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_date)] ReadSchema: struct (11) ColumnarToRow [codegen id : 3] @@ -133,13 +133,13 @@ Input [2]: [d_date_sk#7, d_date#8] (12) Filter [codegen id : 3] Input [2]: [d_date_sk#7, d_date#8] -Condition : isnotnull(d_date_sk#7) +Condition : (isnotnull(d_date_sk#7) AND isnotnull(d_date#8)) (13) Scan parquet default.date_dim Output [2]: [d_date#8, d_week_seq#9] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_week_seq)] +PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (14) ColumnarToRow [codegen id : 2] @@ -147,7 +147,7 @@ Input [2]: [d_date#8, d_week_seq#9] (15) Filter [codegen id : 2] Input [2]: [d_date#8, d_week_seq#9] -Condition : (isnotnull(d_week_seq#9) AND (d_week_seq#9 = Subquery scalar-subquery#10, [id=#11])) +Condition : ((isnotnull(d_week_seq#9) AND (d_week_seq#9 = Subquery scalar-subquery#10, [id=#11])) AND isnotnull(d_date#8)) (16) Project [codegen id : 2] Output [1]: [d_date#8 AS d_date#8#12] @@ -231,7 +231,7 @@ Input [5]: [cs_sold_date_sk#21, cs_item_sk#22, cs_ext_sales_price#23, i_item_sk# Output [2]: [d_date_sk#7, d_date#8] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_date_sk)] +PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_date)] ReadSchema: struct (34) ColumnarToRow [codegen id : 7] @@ -239,13 +239,13 @@ Input [2]: [d_date_sk#7, d_date#8] (35) Filter [codegen id : 7] Input [2]: [d_date_sk#7, d_date#8] -Condition : isnotnull(d_date_sk#7) +Condition : (isnotnull(d_date_sk#7) AND isnotnull(d_date#8)) (36) Scan parquet default.date_dim Output [2]: [d_date#8, d_week_seq#9] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_week_seq)] +PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (37) ColumnarToRow [codegen id : 6] @@ -253,7 +253,7 @@ Input [2]: [d_date#8, d_week_seq#9] (38) Filter [codegen id : 6] Input [2]: [d_date#8, d_week_seq#9] -Condition : (isnotnull(d_week_seq#9) AND (d_week_seq#9 = ReusedSubquery Subquery scalar-subquery#10, [id=#11])) +Condition : ((isnotnull(d_week_seq#9) AND (d_week_seq#9 = ReusedSubquery Subquery scalar-subquery#10, [id=#11])) AND isnotnull(d_date#8)) (39) Project [codegen id : 6] Output [1]: [d_date#8 AS d_date#8#24] @@ -350,7 +350,7 @@ Input [5]: [ws_sold_date_sk#34, ws_item_sk#35, ws_ext_sales_price#36, i_item_sk# Output [2]: [d_date_sk#7, d_date#8] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_date_sk)] +PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_date)] ReadSchema: struct (60) ColumnarToRow [codegen id : 12] @@ -358,13 +358,13 @@ Input [2]: [d_date_sk#7, d_date#8] (61) Filter [codegen id : 12] Input [2]: [d_date_sk#7, d_date#8] -Condition : isnotnull(d_date_sk#7) +Condition : (isnotnull(d_date_sk#7) AND isnotnull(d_date#8)) (62) Scan parquet default.date_dim Output [2]: [d_date#8, d_week_seq#9] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_week_seq)] +PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (63) ColumnarToRow [codegen id : 11] @@ -372,7 +372,7 @@ Input [2]: [d_date#8, d_week_seq#9] (64) Filter [codegen id : 11] Input [2]: [d_date#8, d_week_seq#9] -Condition : (isnotnull(d_week_seq#9) AND (d_week_seq#9 = ReusedSubquery Subquery scalar-subquery#10, [id=#11])) +Condition : ((isnotnull(d_week_seq#9) AND (d_week_seq#9 = ReusedSubquery Subquery scalar-subquery#10, [id=#11])) AND isnotnull(d_date#8)) (65) Project [codegen id : 11] Output [1]: [d_date#8 AS d_date#8#37] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/simplified.txt index 11295424fc7e3..7e9f64a684aca 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/simplified.txt @@ -30,7 +30,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ WholeStageCodegen (3) Project [d_date_sk] BroadcastHashJoin [d_date,d_date] - Filter [d_date_sk] + Filter [d_date,d_date_sk] ColumnarToRow InputAdapter Scan parquet default.date_dim [d_date,d_date_sk] @@ -38,7 +38,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ BroadcastExchange #4 WholeStageCodegen (2) Project [d_date] - Filter [d_week_seq] + Filter [d_date,d_week_seq] Subquery #1 WholeStageCodegen (1) Project [d_week_seq] @@ -73,7 +73,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ WholeStageCodegen (7) Project [d_date_sk] BroadcastHashJoin [d_date,d_date] - Filter [d_date_sk] + Filter [d_date,d_date_sk] ColumnarToRow InputAdapter Scan parquet default.date_dim [d_date,d_date_sk] @@ -81,7 +81,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ BroadcastExchange #8 WholeStageCodegen (6) Project [d_date] - Filter [d_week_seq] + Filter [d_date,d_week_seq] ReusedSubquery [d_week_seq] #1 ColumnarToRow InputAdapter @@ -110,7 +110,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ WholeStageCodegen (12) Project [d_date_sk] BroadcastHashJoin [d_date,d_date] - Filter [d_date_sk] + Filter [d_date,d_date_sk] ColumnarToRow InputAdapter Scan parquet default.date_dim [d_date,d_date_sk] @@ -118,7 +118,7 @@ TakeOrderedAndProject [average,cs_dev,cs_item_rev,item_id,ss_dev,ss_item_rev,ws_ BroadcastExchange #12 WholeStageCodegen (11) Project [d_date] - Filter [d_week_seq] + Filter [d_date,d_week_seq] ReusedSubquery [d_week_seq] #1 ColumnarToRow InputAdapter diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/explain.txt index f838f8f1a18af..112c2c652c260 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/explain.txt @@ -148,7 +148,7 @@ Input [4]: [ss_item_sk#2, ss_addr_sk#3, ss_ext_sales_price#4, ca_address_sk#9] Output [2]: [i_item_sk#12, i_item_id#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_item_id)] ReadSchema: struct (19) ColumnarToRow [codegen id : 4] @@ -156,13 +156,13 @@ Input [2]: [i_item_sk#12, i_item_id#13] (20) Filter [codegen id : 4] Input [2]: [i_item_sk#12, i_item_id#13] -Condition : isnotnull(i_item_sk#12) +Condition : (isnotnull(i_item_sk#12) AND isnotnull(i_item_id#13)) (21) Scan parquet default.item Output [2]: [i_item_id#13, i_category#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Music)] +PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Music), IsNotNull(i_item_id)] ReadSchema: struct (22) ColumnarToRow [codegen id : 3] @@ -170,7 +170,7 @@ Input [2]: [i_item_id#13, i_category#14] (23) Filter [codegen id : 3] Input [2]: [i_item_id#13, i_category#14] -Condition : (isnotnull(i_category#14) AND (i_category#14 = Music)) +Condition : ((isnotnull(i_category#14) AND (i_category#14 = Music)) AND isnotnull(i_item_id#13)) (24) Project [codegen id : 3] Output [1]: [i_item_id#13 AS i_item_id#13#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/simplified.txt index d49bf8669bea5..3eb81f44edd45 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/simplified.txt @@ -43,7 +43,7 @@ TakeOrderedAndProject [i_item_id,total_sales] BroadcastExchange #5 WholeStageCodegen (4) BroadcastHashJoin [i_item_id,i_item_id] - Filter [i_item_sk] + Filter [i_item_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_item_id,i_item_sk] @@ -51,7 +51,7 @@ TakeOrderedAndProject [i_item_id,total_sales] BroadcastExchange #6 WholeStageCodegen (3) Project [i_item_id] - Filter [i_category] + Filter [i_category,i_item_id] ColumnarToRow InputAdapter Scan parquet default.item [i_category,i_item_id] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/explain.txt index f838f8f1a18af..112c2c652c260 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/explain.txt @@ -148,7 +148,7 @@ Input [4]: [ss_item_sk#2, ss_addr_sk#3, ss_ext_sales_price#4, ca_address_sk#9] Output [2]: [i_item_sk#12, i_item_id#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_item_id)] ReadSchema: struct (19) ColumnarToRow [codegen id : 4] @@ -156,13 +156,13 @@ Input [2]: [i_item_sk#12, i_item_id#13] (20) Filter [codegen id : 4] Input [2]: [i_item_sk#12, i_item_id#13] -Condition : isnotnull(i_item_sk#12) +Condition : (isnotnull(i_item_sk#12) AND isnotnull(i_item_id#13)) (21) Scan parquet default.item Output [2]: [i_item_id#13, i_category#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Music)] +PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Music), IsNotNull(i_item_id)] ReadSchema: struct (22) ColumnarToRow [codegen id : 3] @@ -170,7 +170,7 @@ Input [2]: [i_item_id#13, i_category#14] (23) Filter [codegen id : 3] Input [2]: [i_item_id#13, i_category#14] -Condition : (isnotnull(i_category#14) AND (i_category#14 = Music)) +Condition : ((isnotnull(i_category#14) AND (i_category#14 = Music)) AND isnotnull(i_item_id#13)) (24) Project [codegen id : 3] Output [1]: [i_item_id#13 AS i_item_id#13#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/simplified.txt index d49bf8669bea5..3eb81f44edd45 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/simplified.txt @@ -43,7 +43,7 @@ TakeOrderedAndProject [i_item_id,total_sales] BroadcastExchange #5 WholeStageCodegen (4) BroadcastHashJoin [i_item_id,i_item_id] - Filter [i_item_sk] + Filter [i_item_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_item_id,i_item_sk] @@ -51,7 +51,7 @@ TakeOrderedAndProject [i_item_id,total_sales] BroadcastExchange #6 WholeStageCodegen (3) Project [i_item_id] - Filter [i_category] + Filter [i_category,i_item_id] ColumnarToRow InputAdapter Scan parquet default.item [i_category,i_item_id] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/explain.txt index 10867c980b22a..65dbe162455d2 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/explain.txt @@ -59,7 +59,7 @@ TakeOrderedAndProject (54) Output [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -67,7 +67,7 @@ Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (3) 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)) +Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND isnotnull(c_customer_sk#1)) (4) Exchange Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] @@ -81,7 +81,7 @@ Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0 Output [2]: [ss_sold_date_sk#5, ss_customer_sk#6] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] @@ -89,13 +89,13 @@ Input [2]: [ss_sold_date_sk#5, ss_customer_sk#6] (8) Filter [codegen id : 4] Input [2]: [ss_sold_date_sk#5, ss_customer_sk#6] -Condition : isnotnull(ss_sold_date_sk#5) +Condition : (isnotnull(ss_sold_date_sk#5) AND isnotnull(ss_customer_sk#6)) (9) Scan parquet default.date_dim Output [3]: [d_date_sk#7, d_year#8, d_moy#9] Batched: true Location [not included in comparison]/{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)] +PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_year,2001), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,6), IsNotNull(d_date_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 3] @@ -103,7 +103,7 @@ Input [3]: [d_date_sk#7, d_year#8, d_moy#9] (11) Filter [codegen id : 3] Input [3]: [d_date_sk#7, d_year#8, d_moy#9] -Condition : (((((isnotnull(d_year#8) AND isnotnull(d_moy#9)) AND (d_year#8 = 2001)) AND (d_moy#9 >= 4)) AND (d_moy#9 <= 6)) AND isnotnull(d_date_sk#7)) +Condition : (((((isnotnull(d_moy#9) AND isnotnull(d_year#8)) AND (d_year#8 = 2001)) AND (d_moy#9 >= 4)) AND (d_moy#9 <= 6)) AND isnotnull(d_date_sk#7)) (12) Project [codegen id : 3] Output [1]: [d_date_sk#7] @@ -139,7 +139,7 @@ Join condition: None Output [2]: [ws_sold_date_sk#12, ws_bill_customer_sk#13] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_sold_date_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 7] @@ -147,7 +147,7 @@ Input [2]: [ws_sold_date_sk#12, ws_bill_customer_sk#13] (21) Filter [codegen id : 7] Input [2]: [ws_sold_date_sk#12, ws_bill_customer_sk#13] -Condition : isnotnull(ws_sold_date_sk#12) +Condition : (isnotnull(ws_sold_date_sk#12) AND isnotnull(ws_bill_customer_sk#13)) (22) ReusedExchange [Reuses operator id: 13] Output [1]: [d_date_sk#7] @@ -178,7 +178,7 @@ Join condition: None Output [2]: [cs_sold_date_sk#15, cs_ship_customer_sk#16] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_sold_date_sk)] +PushedFilters: [IsNotNull(cs_sold_date_sk), IsNotNull(cs_ship_customer_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 10] @@ -186,7 +186,7 @@ Input [2]: [cs_sold_date_sk#15, cs_ship_customer_sk#16] (30) Filter [codegen id : 10] Input [2]: [cs_sold_date_sk#15, cs_ship_customer_sk#16] -Condition : isnotnull(cs_sold_date_sk#15) +Condition : (isnotnull(cs_sold_date_sk#15) AND isnotnull(cs_ship_customer_sk#16)) (31) ReusedExchange [Reuses operator id: 13] Output [1]: [d_date_sk#7] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/simplified.txt index 0d637a4674e69..687b50277f095 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/simplified.txt @@ -22,7 +22,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_education_status,cd_gender,cd_marital InputAdapter Exchange [c_customer_sk] #3 WholeStageCodegen (1) - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -33,7 +33,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_education_status,cd_gender,cd_marital WholeStageCodegen (4) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] @@ -52,7 +52,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_education_status,cd_gender,cd_marital WholeStageCodegen (7) Project [ws_bill_customer_sk] BroadcastHashJoin [d_date_sk,ws_sold_date_sk] - Filter [ws_sold_date_sk] + Filter [ws_bill_customer_sk,ws_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_bill_customer_sk,ws_sold_date_sk] @@ -65,7 +65,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_education_status,cd_gender,cd_marital WholeStageCodegen (10) Project [cs_ship_customer_sk] BroadcastHashJoin [cs_sold_date_sk,d_date_sk] - Filter [cs_sold_date_sk] + Filter [cs_ship_customer_sk,cs_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_ship_customer_sk,cs_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/explain.txt index ca9400b9875ef..b1ef9df7c4d10 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/explain.txt @@ -54,7 +54,7 @@ TakeOrderedAndProject (49) Output [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 9] @@ -62,13 +62,13 @@ Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (3) Filter [codegen id : 9] 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)) +Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND isnotnull(c_customer_sk#1)) (4) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#4, ss_customer_sk#5] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (5) ColumnarToRow [codegen id : 2] @@ -76,7 +76,7 @@ Input [2]: [ss_sold_date_sk#4, ss_customer_sk#5] (6) Filter [codegen id : 2] Input [2]: [ss_sold_date_sk#4, ss_customer_sk#5] -Condition : isnotnull(ss_sold_date_sk#4) +Condition : (isnotnull(ss_sold_date_sk#4) AND isnotnull(ss_customer_sk#5)) (7) Scan parquet default.date_dim Output [3]: [d_date_sk#6, d_year#7, d_moy#8] @@ -122,7 +122,7 @@ Join condition: None Output [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_sold_date_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 4] @@ -130,7 +130,7 @@ Input [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12] (18) Filter [codegen id : 4] Input [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12] -Condition : isnotnull(ws_sold_date_sk#11) +Condition : (isnotnull(ws_sold_date_sk#11) AND isnotnull(ws_bill_customer_sk#12)) (19) ReusedExchange [Reuses operator id: 11] Output [1]: [d_date_sk#6] @@ -157,7 +157,7 @@ Join condition: None Output [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_sold_date_sk)] +PushedFilters: [IsNotNull(cs_sold_date_sk), IsNotNull(cs_ship_customer_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 6] @@ -165,7 +165,7 @@ Input [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15] (26) Filter [codegen id : 6] Input [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15] -Condition : isnotnull(cs_sold_date_sk#14) +Condition : (isnotnull(cs_sold_date_sk#14) AND isnotnull(cs_ship_customer_sk#15)) (27) ReusedExchange [Reuses operator id: 11] Output [1]: [d_date_sk#6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/simplified.txt index 765e6a7524dea..de2e26d62d40c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/simplified.txt @@ -13,7 +13,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_education_status,cd_gender,cd_marital BroadcastHashJoin [c_customer_sk,cs_ship_customer_sk] BroadcastHashJoin [c_customer_sk,ws_bill_customer_sk] BroadcastHashJoin [c_customer_sk,ss_customer_sk] - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -22,7 +22,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_education_status,cd_gender,cd_marital WholeStageCodegen (2) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] @@ -39,7 +39,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_education_status,cd_gender,cd_marital WholeStageCodegen (4) Project [ws_bill_customer_sk] BroadcastHashJoin [d_date_sk,ws_sold_date_sk] - Filter [ws_sold_date_sk] + Filter [ws_bill_customer_sk,ws_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_bill_customer_sk,ws_sold_date_sk] @@ -50,7 +50,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_education_status,cd_gender,cd_marital WholeStageCodegen (6) Project [cs_ship_customer_sk] BroadcastHashJoin [cs_sold_date_sk,d_date_sk] - Filter [cs_sold_date_sk] + Filter [cs_ship_customer_sk,cs_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_ship_customer_sk,cs_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/explain.txt index 00f691230ff69..73ed31330b08c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/explain.txt @@ -97,7 +97,7 @@ Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_net_profit#3, d_date_sk#4] Output [3]: [s_store_sk#7, s_county#8, s_state#9] Batched: true Location [not included in comparison]/{warehouse_dir}/store] -PushedFilters: [IsNotNull(s_store_sk)] +PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_state)] ReadSchema: struct (12) ColumnarToRow [codegen id : 8] @@ -105,7 +105,7 @@ Input [3]: [s_store_sk#7, s_county#8, s_state#9] (13) Filter [codegen id : 8] Input [3]: [s_store_sk#7, s_county#8, s_state#9] -Condition : isnotnull(s_store_sk#7) +Condition : (isnotnull(s_store_sk#7) AND isnotnull(s_state#9)) (14) Scan parquet default.store_sales Output [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_net_profit#3] @@ -192,7 +192,7 @@ Arguments: [rank(_w2#16) windowspecdefinition(s_state#9, _w2#16 DESC NULLS LAST, (32) Filter [codegen id : 7] Input [4]: [s_state#15, s_state#9, _w2#16, ranking#18] -Condition : (isnotnull(ranking#18) AND (ranking#18 <= 5)) +Condition : ((isnotnull(ranking#18) AND (ranking#18 <= 5)) AND isnotnull(s_state#15)) (33) Project [codegen id : 7] Output [1]: [s_state#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/simplified.txt index 1b14fd24d1aee..7e6819143c9c8 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/simplified.txt @@ -34,7 +34,7 @@ TakeOrderedAndProject [lochierarchy,rank_within_parent,s_county,s_state,total_su BroadcastExchange #4 WholeStageCodegen (8) BroadcastHashJoin [s_state,s_state] - Filter [s_store_sk] + Filter [s_state,s_store_sk] ColumnarToRow InputAdapter Scan parquet default.store [s_county,s_state,s_store_sk] @@ -42,7 +42,7 @@ TakeOrderedAndProject [lochierarchy,rank_within_parent,s_county,s_state,total_su BroadcastExchange #5 WholeStageCodegen (7) Project [s_state] - Filter [ranking] + Filter [ranking,s_state] InputAdapter Window [_w2,s_state] WholeStageCodegen (6) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/explain.txt index 05b533aa65a63..abc8193270c6e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/explain.txt @@ -97,7 +97,7 @@ Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_net_profit#3, d_date_sk#4] Output [3]: [s_store_sk#7, s_county#8, s_state#9] Batched: true Location [not included in comparison]/{warehouse_dir}/store] -PushedFilters: [IsNotNull(s_store_sk)] +PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_state)] ReadSchema: struct (12) ColumnarToRow [codegen id : 8] @@ -105,7 +105,7 @@ Input [3]: [s_store_sk#7, s_county#8, s_state#9] (13) Filter [codegen id : 8] Input [3]: [s_store_sk#7, s_county#8, s_state#9] -Condition : isnotnull(s_store_sk#7) +Condition : (isnotnull(s_store_sk#7) AND isnotnull(s_state#9)) (14) Scan parquet default.store_sales Output [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_net_profit#3] @@ -192,7 +192,7 @@ Arguments: [rank(_w2#16) windowspecdefinition(s_state#9, _w2#16 DESC NULLS LAST, (32) Filter [codegen id : 7] Input [4]: [s_state#15, s_state#9, _w2#16, ranking#18] -Condition : (isnotnull(ranking#18) AND (ranking#18 <= 5)) +Condition : ((isnotnull(ranking#18) AND (ranking#18 <= 5)) AND isnotnull(s_state#15)) (33) Project [codegen id : 7] Output [1]: [s_state#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/simplified.txt index 1587213842374..1098d50936195 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/simplified.txt @@ -34,7 +34,7 @@ TakeOrderedAndProject [lochierarchy,rank_within_parent,s_county,s_state,total_su BroadcastExchange #4 WholeStageCodegen (8) BroadcastHashJoin [s_state,s_state] - Filter [s_store_sk] + Filter [s_state,s_store_sk] ColumnarToRow InputAdapter Scan parquet default.store [s_county,s_state,s_store_sk] @@ -42,7 +42,7 @@ TakeOrderedAndProject [lochierarchy,rank_within_parent,s_county,s_state,total_su BroadcastExchange #5 WholeStageCodegen (7) Project [s_state] - Filter [ranking] + Filter [ranking,s_state] InputAdapter Window [_w2,s_state] WholeStageCodegen (6) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/explain.txt index c41efb82d904c..9bf1a000b3fe0 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/explain.txt @@ -1,65 +1,66 @@ == Physical Plan == -TakeOrderedAndProject (61) -+- * Project (60) - +- * BroadcastHashJoin Inner BuildRight (59) - :- * Project (45) - : +- * BroadcastHashJoin Inner BuildRight (44) - : :- * HashAggregate (30) - : : +- Exchange (29) - : : +- * HashAggregate (28) - : : +- * Project (27) - : : +- * BroadcastHashJoin Inner BuildRight (26) - : : :- * Project (21) - : : : +- * BroadcastHashJoin Inner BuildRight (20) +TakeOrderedAndProject (62) ++- * Project (61) + +- * BroadcastHashJoin Inner BuildRight (60) + :- * Project (46) + : +- * BroadcastHashJoin Inner BuildRight (45) + : :- * HashAggregate (31) + : : +- Exchange (30) + : : +- * HashAggregate (29) + : : +- * Project (28) + : : +- * BroadcastHashJoin Inner BuildRight (27) + : : :- * Project (22) + : : : +- * BroadcastHashJoin Inner BuildRight (21) : : : :- * Filter (3) : : : : +- * ColumnarToRow (2) : : : : +- Scan parquet default.store_returns (1) - : : : +- BroadcastExchange (19) - : : : +- * Project (18) - : : : +- * BroadcastHashJoin LeftSemi BuildRight (17) + : : : +- BroadcastExchange (20) + : : : +- * Project (19) + : : : +- * BroadcastHashJoin LeftSemi BuildRight (18) : : : :- * Filter (6) : : : : +- * ColumnarToRow (5) : : : : +- Scan parquet default.date_dim (4) - : : : +- BroadcastExchange (16) - : : : +- * Project (15) - : : : +- * BroadcastHashJoin LeftSemi BuildRight (14) - : : : :- * ColumnarToRow (8) - : : : : +- Scan parquet default.date_dim (7) - : : : +- BroadcastExchange (13) - : : : +- * Project (12) - : : : +- * Filter (11) - : : : +- * ColumnarToRow (10) - : : : +- Scan parquet default.date_dim (9) - : : +- BroadcastExchange (25) - : : +- * Filter (24) - : : +- * ColumnarToRow (23) - : : +- Scan parquet default.item (22) - : +- BroadcastExchange (43) - : +- * HashAggregate (42) - : +- Exchange (41) - : +- * HashAggregate (40) - : +- * Project (39) - : +- * BroadcastHashJoin Inner BuildRight (38) - : :- * Project (36) - : : +- * BroadcastHashJoin Inner BuildRight (35) - : : :- * Filter (33) - : : : +- * ColumnarToRow (32) - : : : +- Scan parquet default.catalog_returns (31) - : : +- ReusedExchange (34) - : +- ReusedExchange (37) - +- BroadcastExchange (58) - +- * HashAggregate (57) - +- Exchange (56) - +- * HashAggregate (55) - +- * Project (54) - +- * BroadcastHashJoin Inner BuildRight (53) - :- * Project (51) - : +- * BroadcastHashJoin Inner BuildRight (50) - : :- * Filter (48) - : : +- * ColumnarToRow (47) - : : +- Scan parquet default.web_returns (46) - : +- ReusedExchange (49) - +- ReusedExchange (52) + : : : +- BroadcastExchange (17) + : : : +- * Project (16) + : : : +- * BroadcastHashJoin LeftSemi BuildRight (15) + : : : :- * Filter (9) + : : : : +- * ColumnarToRow (8) + : : : : +- Scan parquet default.date_dim (7) + : : : +- BroadcastExchange (14) + : : : +- * Project (13) + : : : +- * Filter (12) + : : : +- * ColumnarToRow (11) + : : : +- Scan parquet default.date_dim (10) + : : +- BroadcastExchange (26) + : : +- * Filter (25) + : : +- * ColumnarToRow (24) + : : +- Scan parquet default.item (23) + : +- BroadcastExchange (44) + : +- * HashAggregate (43) + : +- Exchange (42) + : +- * HashAggregate (41) + : +- * Project (40) + : +- * BroadcastHashJoin Inner BuildRight (39) + : :- * Project (37) + : : +- * BroadcastHashJoin Inner BuildRight (36) + : : :- * Filter (34) + : : : +- * ColumnarToRow (33) + : : : +- Scan parquet default.catalog_returns (32) + : : +- ReusedExchange (35) + : +- ReusedExchange (38) + +- BroadcastExchange (59) + +- * HashAggregate (58) + +- Exchange (57) + +- * HashAggregate (56) + +- * Project (55) + +- * BroadcastHashJoin Inner BuildRight (54) + :- * Project (52) + : +- * BroadcastHashJoin Inner BuildRight (51) + : :- * Filter (49) + : : +- * ColumnarToRow (48) + : : +- Scan parquet default.web_returns (47) + : +- ReusedExchange (50) + +- ReusedExchange (53) (1) Scan parquet default.store_returns @@ -80,7 +81,7 @@ Condition : (isnotnull(sr_item_sk#2) AND isnotnull(sr_returned_date_sk#1)) Output [2]: [d_date_sk#4, d_date#5] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_date_sk)] +PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_date)] ReadSchema: struct (5) ColumnarToRow [codegen id : 3] @@ -88,257 +89,263 @@ Input [2]: [d_date_sk#4, d_date#5] (6) Filter [codegen id : 3] Input [2]: [d_date_sk#4, d_date#5] -Condition : isnotnull(d_date_sk#4) +Condition : (isnotnull(d_date_sk#4) AND isnotnull(d_date#5)) (7) Scan parquet default.date_dim Output [2]: [d_date#5, d_week_seq#6] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] +PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (8) ColumnarToRow [codegen id : 2] Input [2]: [d_date#5, d_week_seq#6] -(9) Scan parquet default.date_dim +(9) Filter [codegen id : 2] +Input [2]: [d_date#5, d_week_seq#6] +Condition : (isnotnull(d_week_seq#6) AND isnotnull(d_date#5)) + +(10) Scan parquet default.date_dim Output [2]: [d_date#5, d_week_seq#6] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] +PushedFilters: [IsNotNull(d_week_seq)] ReadSchema: struct -(10) ColumnarToRow [codegen id : 1] +(11) ColumnarToRow [codegen id : 1] Input [2]: [d_date#5, d_week_seq#6] -(11) Filter [codegen id : 1] +(12) Filter [codegen id : 1] Input [2]: [d_date#5, d_week_seq#6] -Condition : cast(d_date#5 as string) IN (2000-06-30,2000-09-27,2000-11-17) +Condition : (cast(d_date#5 as string) IN (2000-06-30,2000-09-27,2000-11-17) AND isnotnull(d_week_seq#6)) -(12) Project [codegen id : 1] +(13) Project [codegen id : 1] Output [1]: [d_week_seq#6 AS d_week_seq#6#7] Input [2]: [d_date#5, d_week_seq#6] -(13) BroadcastExchange +(14) BroadcastExchange Input [1]: [d_week_seq#6#7] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8] -(14) BroadcastHashJoin [codegen id : 2] +(15) BroadcastHashJoin [codegen id : 2] Left keys [1]: [d_week_seq#6] Right keys [1]: [d_week_seq#6#7] Join condition: None -(15) Project [codegen id : 2] +(16) Project [codegen id : 2] Output [1]: [d_date#5 AS d_date#5#9] Input [2]: [d_date#5, d_week_seq#6] -(16) BroadcastExchange +(17) BroadcastExchange Input [1]: [d_date#5#9] Arguments: HashedRelationBroadcastMode(List(input[0, date, true]),false), [id=#10] -(17) BroadcastHashJoin [codegen id : 3] +(18) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date#5] Right keys [1]: [d_date#5#9] Join condition: None -(18) Project [codegen id : 3] +(19) Project [codegen id : 3] Output [1]: [d_date_sk#4] Input [2]: [d_date_sk#4, d_date#5] -(19) BroadcastExchange +(20) BroadcastExchange Input [1]: [d_date_sk#4] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11] -(20) BroadcastHashJoin [codegen id : 5] +(21) BroadcastHashJoin [codegen id : 5] Left keys [1]: [sr_returned_date_sk#1] Right keys [1]: [cast(d_date_sk#4 as bigint)] Join condition: None -(21) Project [codegen id : 5] +(22) Project [codegen id : 5] Output [2]: [sr_item_sk#2, sr_return_quantity#3] Input [4]: [sr_returned_date_sk#1, sr_item_sk#2, sr_return_quantity#3, d_date_sk#4] -(22) Scan parquet default.item +(23) Scan parquet default.item Output [2]: [i_item_sk#12, i_item_id#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_item_id)] ReadSchema: struct -(23) ColumnarToRow [codegen id : 4] +(24) ColumnarToRow [codegen id : 4] Input [2]: [i_item_sk#12, i_item_id#13] -(24) Filter [codegen id : 4] +(25) Filter [codegen id : 4] Input [2]: [i_item_sk#12, i_item_id#13] Condition : (isnotnull(i_item_sk#12) AND isnotnull(i_item_id#13)) -(25) BroadcastExchange +(26) BroadcastExchange Input [2]: [i_item_sk#12, i_item_id#13] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] -(26) BroadcastHashJoin [codegen id : 5] +(27) BroadcastHashJoin [codegen id : 5] Left keys [1]: [sr_item_sk#2] Right keys [1]: [cast(i_item_sk#12 as bigint)] Join condition: None -(27) Project [codegen id : 5] +(28) Project [codegen id : 5] Output [2]: [sr_return_quantity#3, i_item_id#13] Input [4]: [sr_item_sk#2, sr_return_quantity#3, i_item_sk#12, i_item_id#13] -(28) HashAggregate [codegen id : 5] +(29) HashAggregate [codegen id : 5] Input [2]: [sr_return_quantity#3, i_item_id#13] Keys [1]: [i_item_id#13] Functions [1]: [partial_sum(cast(sr_return_quantity#3 as bigint))] Aggregate Attributes [1]: [sum#15] Results [2]: [i_item_id#13, sum#16] -(29) Exchange +(30) Exchange Input [2]: [i_item_id#13, sum#16] Arguments: hashpartitioning(i_item_id#13, 5), true, [id=#17] -(30) HashAggregate [codegen id : 18] +(31) HashAggregate [codegen id : 18] Input [2]: [i_item_id#13, sum#16] Keys [1]: [i_item_id#13] Functions [1]: [sum(cast(sr_return_quantity#3 as bigint))] Aggregate Attributes [1]: [sum(cast(sr_return_quantity#3 as bigint))#18] Results [2]: [i_item_id#13 AS item_id#19, sum(cast(sr_return_quantity#3 as bigint))#18 AS sr_item_qty#20] -(31) Scan parquet default.catalog_returns +(32) Scan parquet default.catalog_returns Output [3]: [cr_returned_date_sk#21, cr_item_sk#22, cr_return_quantity#23] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_returned_date_sk)] ReadSchema: struct -(32) ColumnarToRow [codegen id : 10] +(33) ColumnarToRow [codegen id : 10] Input [3]: [cr_returned_date_sk#21, cr_item_sk#22, cr_return_quantity#23] -(33) Filter [codegen id : 10] +(34) Filter [codegen id : 10] Input [3]: [cr_returned_date_sk#21, cr_item_sk#22, cr_return_quantity#23] Condition : (isnotnull(cr_item_sk#22) AND isnotnull(cr_returned_date_sk#21)) -(34) ReusedExchange [Reuses operator id: 19] +(35) ReusedExchange [Reuses operator id: 20] Output [1]: [d_date_sk#4] -(35) BroadcastHashJoin [codegen id : 10] +(36) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cr_returned_date_sk#21] Right keys [1]: [d_date_sk#4] Join condition: None -(36) Project [codegen id : 10] +(37) Project [codegen id : 10] Output [2]: [cr_item_sk#22, cr_return_quantity#23] Input [4]: [cr_returned_date_sk#21, cr_item_sk#22, cr_return_quantity#23, d_date_sk#4] -(37) ReusedExchange [Reuses operator id: 25] +(38) ReusedExchange [Reuses operator id: 26] Output [2]: [i_item_sk#12, i_item_id#13] -(38) BroadcastHashJoin [codegen id : 10] +(39) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cr_item_sk#22] Right keys [1]: [i_item_sk#12] Join condition: None -(39) Project [codegen id : 10] +(40) Project [codegen id : 10] Output [2]: [cr_return_quantity#23, i_item_id#13] Input [4]: [cr_item_sk#22, cr_return_quantity#23, i_item_sk#12, i_item_id#13] -(40) HashAggregate [codegen id : 10] +(41) HashAggregate [codegen id : 10] Input [2]: [cr_return_quantity#23, i_item_id#13] Keys [1]: [i_item_id#13] Functions [1]: [partial_sum(cast(cr_return_quantity#23 as bigint))] Aggregate Attributes [1]: [sum#24] Results [2]: [i_item_id#13, sum#25] -(41) Exchange +(42) Exchange Input [2]: [i_item_id#13, sum#25] Arguments: hashpartitioning(i_item_id#13, 5), true, [id=#26] -(42) HashAggregate [codegen id : 11] +(43) HashAggregate [codegen id : 11] Input [2]: [i_item_id#13, sum#25] Keys [1]: [i_item_id#13] Functions [1]: [sum(cast(cr_return_quantity#23 as bigint))] Aggregate Attributes [1]: [sum(cast(cr_return_quantity#23 as bigint))#27] Results [2]: [i_item_id#13 AS item_id#28, sum(cast(cr_return_quantity#23 as bigint))#27 AS cr_item_qty#29] -(43) BroadcastExchange +(44) BroadcastExchange Input [2]: [item_id#28, cr_item_qty#29] Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#30] -(44) BroadcastHashJoin [codegen id : 18] +(45) BroadcastHashJoin [codegen id : 18] Left keys [1]: [item_id#19] Right keys [1]: [item_id#28] Join condition: None -(45) Project [codegen id : 18] +(46) Project [codegen id : 18] Output [3]: [item_id#19, sr_item_qty#20, cr_item_qty#29] Input [4]: [item_id#19, sr_item_qty#20, item_id#28, cr_item_qty#29] -(46) Scan parquet default.web_returns +(47) Scan parquet default.web_returns Output [3]: [wr_returned_date_sk#31, wr_item_sk#32, wr_return_quantity#33] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_returned_date_sk)] ReadSchema: struct -(47) ColumnarToRow [codegen id : 16] +(48) ColumnarToRow [codegen id : 16] Input [3]: [wr_returned_date_sk#31, wr_item_sk#32, wr_return_quantity#33] -(48) Filter [codegen id : 16] +(49) Filter [codegen id : 16] Input [3]: [wr_returned_date_sk#31, wr_item_sk#32, wr_return_quantity#33] Condition : (isnotnull(wr_item_sk#32) AND isnotnull(wr_returned_date_sk#31)) -(49) ReusedExchange [Reuses operator id: 19] +(50) ReusedExchange [Reuses operator id: 20] Output [1]: [d_date_sk#4] -(50) BroadcastHashJoin [codegen id : 16] +(51) BroadcastHashJoin [codegen id : 16] Left keys [1]: [wr_returned_date_sk#31] Right keys [1]: [cast(d_date_sk#4 as bigint)] Join condition: None -(51) Project [codegen id : 16] +(52) Project [codegen id : 16] Output [2]: [wr_item_sk#32, wr_return_quantity#33] Input [4]: [wr_returned_date_sk#31, wr_item_sk#32, wr_return_quantity#33, d_date_sk#4] -(52) ReusedExchange [Reuses operator id: 25] +(53) ReusedExchange [Reuses operator id: 26] Output [2]: [i_item_sk#12, i_item_id#13] -(53) BroadcastHashJoin [codegen id : 16] +(54) BroadcastHashJoin [codegen id : 16] Left keys [1]: [wr_item_sk#32] Right keys [1]: [cast(i_item_sk#12 as bigint)] Join condition: None -(54) Project [codegen id : 16] +(55) Project [codegen id : 16] Output [2]: [wr_return_quantity#33, i_item_id#13] Input [4]: [wr_item_sk#32, wr_return_quantity#33, i_item_sk#12, i_item_id#13] -(55) HashAggregate [codegen id : 16] +(56) HashAggregate [codegen id : 16] Input [2]: [wr_return_quantity#33, i_item_id#13] Keys [1]: [i_item_id#13] Functions [1]: [partial_sum(cast(wr_return_quantity#33 as bigint))] Aggregate Attributes [1]: [sum#34] Results [2]: [i_item_id#13, sum#35] -(56) Exchange +(57) Exchange Input [2]: [i_item_id#13, sum#35] Arguments: hashpartitioning(i_item_id#13, 5), true, [id=#36] -(57) HashAggregate [codegen id : 17] +(58) HashAggregate [codegen id : 17] Input [2]: [i_item_id#13, sum#35] Keys [1]: [i_item_id#13] Functions [1]: [sum(cast(wr_return_quantity#33 as bigint))] Aggregate Attributes [1]: [sum(cast(wr_return_quantity#33 as bigint))#37] Results [2]: [i_item_id#13 AS item_id#38, sum(cast(wr_return_quantity#33 as bigint))#37 AS wr_item_qty#39] -(58) BroadcastExchange +(59) BroadcastExchange Input [2]: [item_id#38, wr_item_qty#39] Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#40] -(59) BroadcastHashJoin [codegen id : 18] +(60) BroadcastHashJoin [codegen id : 18] Left keys [1]: [item_id#19] Right keys [1]: [item_id#38] Join condition: None -(60) Project [codegen id : 18] +(61) Project [codegen id : 18] Output [8]: [item_id#19, sr_item_qty#20, (((cast(sr_item_qty#20 as double) / cast(((sr_item_qty#20 + cr_item_qty#29) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS sr_dev#41, cr_item_qty#29, (((cast(cr_item_qty#29 as double) / cast(((sr_item_qty#20 + cr_item_qty#29) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS cr_dev#42, wr_item_qty#39, (((cast(wr_item_qty#39 as double) / cast(((sr_item_qty#20 + cr_item_qty#29) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS wr_dev#43, CheckOverflow((promote_precision(cast(cast(((sr_item_qty#20 + cr_item_qty#29) + wr_item_qty#39) as decimal(20,0)) as decimal(21,1))) / 3.0), DecimalType(27,6), true) AS average#44] Input [5]: [item_id#19, sr_item_qty#20, cr_item_qty#29, item_id#38, wr_item_qty#39] -(61) TakeOrderedAndProject +(62) TakeOrderedAndProject Input [8]: [item_id#19, sr_item_qty#20, sr_dev#41, cr_item_qty#29, cr_dev#42, wr_item_qty#39, wr_dev#43, average#44] Arguments: 100, [item_id#19 ASC NULLS FIRST, sr_item_qty#20 ASC NULLS FIRST], [item_id#19, sr_item_qty#20, sr_dev#41, cr_item_qty#29, cr_dev#42, wr_item_qty#39, wr_dev#43, average#44] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/simplified.txt index 294bc6bea32d6..6f694b8952329 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/simplified.txt @@ -22,7 +22,7 @@ TakeOrderedAndProject [average,cr_dev,cr_item_qty,item_id,sr_dev,sr_item_qty,wr_ WholeStageCodegen (3) Project [d_date_sk] BroadcastHashJoin [d_date,d_date] - Filter [d_date_sk] + Filter [d_date,d_date_sk] ColumnarToRow InputAdapter Scan parquet default.date_dim [d_date,d_date_sk] @@ -31,14 +31,15 @@ TakeOrderedAndProject [average,cr_dev,cr_item_qty,item_id,sr_dev,sr_item_qty,wr_ WholeStageCodegen (2) Project [d_date] BroadcastHashJoin [d_week_seq,d_week_seq] - ColumnarToRow - InputAdapter - Scan parquet default.date_dim [d_date,d_week_seq] + Filter [d_date,d_week_seq] + ColumnarToRow + InputAdapter + Scan parquet default.date_dim [d_date,d_week_seq] InputAdapter BroadcastExchange #4 WholeStageCodegen (1) Project [d_week_seq] - Filter [d_date] + Filter [d_date,d_week_seq] ColumnarToRow InputAdapter Scan parquet default.date_dim [d_date,d_week_seq] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/explain.txt index 0d44a01466dd9..e36eff1d3bc68 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/explain.txt @@ -1,14 +1,14 @@ == Physical Plan == -TakeOrderedAndProject (61) -+- * Project (60) - +- * BroadcastHashJoin Inner BuildRight (59) - :- * Project (45) - : +- * BroadcastHashJoin Inner BuildRight (44) - : :- * HashAggregate (30) - : : +- Exchange (29) - : : +- * HashAggregate (28) - : : +- * Project (27) - : : +- * BroadcastHashJoin Inner BuildRight (26) +TakeOrderedAndProject (62) ++- * Project (61) + +- * BroadcastHashJoin Inner BuildRight (60) + :- * Project (46) + : +- * BroadcastHashJoin Inner BuildRight (45) + : :- * HashAggregate (31) + : : +- Exchange (30) + : : +- * HashAggregate (29) + : : +- * Project (28) + : : +- * BroadcastHashJoin Inner BuildRight (27) : : :- * Project (9) : : : +- * BroadcastHashJoin Inner BuildRight (8) : : : :- * Filter (3) @@ -18,48 +18,49 @@ TakeOrderedAndProject (61) : : : +- * Filter (6) : : : +- * ColumnarToRow (5) : : : +- Scan parquet default.item (4) - : : +- BroadcastExchange (25) - : : +- * Project (24) - : : +- * BroadcastHashJoin LeftSemi BuildRight (23) + : : +- BroadcastExchange (26) + : : +- * Project (25) + : : +- * BroadcastHashJoin LeftSemi BuildRight (24) : : :- * Filter (12) : : : +- * ColumnarToRow (11) : : : +- Scan parquet default.date_dim (10) - : : +- BroadcastExchange (22) - : : +- * Project (21) - : : +- * BroadcastHashJoin LeftSemi BuildRight (20) - : : :- * ColumnarToRow (14) - : : : +- Scan parquet default.date_dim (13) - : : +- BroadcastExchange (19) - : : +- * Project (18) - : : +- * Filter (17) - : : +- * ColumnarToRow (16) - : : +- Scan parquet default.date_dim (15) - : +- BroadcastExchange (43) - : +- * HashAggregate (42) - : +- Exchange (41) - : +- * HashAggregate (40) - : +- * Project (39) - : +- * BroadcastHashJoin Inner BuildRight (38) - : :- * Project (36) - : : +- * BroadcastHashJoin Inner BuildRight (35) - : : :- * Filter (33) - : : : +- * ColumnarToRow (32) - : : : +- Scan parquet default.catalog_returns (31) - : : +- ReusedExchange (34) - : +- ReusedExchange (37) - +- BroadcastExchange (58) - +- * HashAggregate (57) - +- Exchange (56) - +- * HashAggregate (55) - +- * Project (54) - +- * BroadcastHashJoin Inner BuildRight (53) - :- * Project (51) - : +- * BroadcastHashJoin Inner BuildRight (50) - : :- * Filter (48) - : : +- * ColumnarToRow (47) - : : +- Scan parquet default.web_returns (46) - : +- ReusedExchange (49) - +- ReusedExchange (52) + : : +- BroadcastExchange (23) + : : +- * Project (22) + : : +- * BroadcastHashJoin LeftSemi BuildRight (21) + : : :- * Filter (15) + : : : +- * ColumnarToRow (14) + : : : +- Scan parquet default.date_dim (13) + : : +- BroadcastExchange (20) + : : +- * Project (19) + : : +- * Filter (18) + : : +- * ColumnarToRow (17) + : : +- Scan parquet default.date_dim (16) + : +- BroadcastExchange (44) + : +- * HashAggregate (43) + : +- Exchange (42) + : +- * HashAggregate (41) + : +- * Project (40) + : +- * BroadcastHashJoin Inner BuildRight (39) + : :- * Project (37) + : : +- * BroadcastHashJoin Inner BuildRight (36) + : : :- * Filter (34) + : : : +- * ColumnarToRow (33) + : : : +- Scan parquet default.catalog_returns (32) + : : +- ReusedExchange (35) + : +- ReusedExchange (38) + +- BroadcastExchange (59) + +- * HashAggregate (58) + +- Exchange (57) + +- * HashAggregate (56) + +- * Project (55) + +- * BroadcastHashJoin Inner BuildRight (54) + :- * Project (52) + : +- * BroadcastHashJoin Inner BuildRight (51) + : :- * Filter (49) + : : +- * ColumnarToRow (48) + : : +- Scan parquet default.web_returns (47) + : +- ReusedExchange (50) + +- ReusedExchange (53) (1) Scan parquet default.store_returns @@ -107,7 +108,7 @@ Input [5]: [sr_returned_date_sk#1, sr_item_sk#2, sr_return_quantity#3, i_item_sk Output [2]: [d_date_sk#7, d_date#8] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_date_sk)] +PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_date)] ReadSchema: struct (11) ColumnarToRow [codegen id : 4] @@ -115,230 +116,236 @@ Input [2]: [d_date_sk#7, d_date#8] (12) Filter [codegen id : 4] Input [2]: [d_date_sk#7, d_date#8] -Condition : isnotnull(d_date_sk#7) +Condition : (isnotnull(d_date_sk#7) AND isnotnull(d_date#8)) (13) Scan parquet default.date_dim Output [2]: [d_date#8, d_week_seq#9] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] +PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] Input [2]: [d_date#8, d_week_seq#9] -(15) Scan parquet default.date_dim +(15) Filter [codegen id : 3] +Input [2]: [d_date#8, d_week_seq#9] +Condition : (isnotnull(d_week_seq#9) AND isnotnull(d_date#8)) + +(16) Scan parquet default.date_dim Output [2]: [d_date#8, d_week_seq#9] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] +PushedFilters: [IsNotNull(d_week_seq)] ReadSchema: struct -(16) ColumnarToRow [codegen id : 2] +(17) ColumnarToRow [codegen id : 2] Input [2]: [d_date#8, d_week_seq#9] -(17) Filter [codegen id : 2] +(18) Filter [codegen id : 2] Input [2]: [d_date#8, d_week_seq#9] -Condition : cast(d_date#8 as string) IN (2000-06-30,2000-09-27,2000-11-17) +Condition : (cast(d_date#8 as string) IN (2000-06-30,2000-09-27,2000-11-17) AND isnotnull(d_week_seq#9)) -(18) Project [codegen id : 2] +(19) Project [codegen id : 2] Output [1]: [d_week_seq#9 AS d_week_seq#9#10] Input [2]: [d_date#8, d_week_seq#9] -(19) BroadcastExchange +(20) BroadcastExchange Input [1]: [d_week_seq#9#10] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11] -(20) BroadcastHashJoin [codegen id : 3] +(21) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_week_seq#9] Right keys [1]: [d_week_seq#9#10] Join condition: None -(21) Project [codegen id : 3] +(22) Project [codegen id : 3] Output [1]: [d_date#8 AS d_date#8#12] Input [2]: [d_date#8, d_week_seq#9] -(22) BroadcastExchange +(23) BroadcastExchange Input [1]: [d_date#8#12] Arguments: HashedRelationBroadcastMode(List(input[0, date, true]),false), [id=#13] -(23) BroadcastHashJoin [codegen id : 4] +(24) BroadcastHashJoin [codegen id : 4] Left keys [1]: [d_date#8] Right keys [1]: [d_date#8#12] Join condition: None -(24) Project [codegen id : 4] +(25) Project [codegen id : 4] Output [1]: [d_date_sk#7] Input [2]: [d_date_sk#7, d_date#8] -(25) BroadcastExchange +(26) BroadcastExchange Input [1]: [d_date_sk#7] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] -(26) BroadcastHashJoin [codegen id : 5] +(27) BroadcastHashJoin [codegen id : 5] Left keys [1]: [sr_returned_date_sk#1] Right keys [1]: [cast(d_date_sk#7 as bigint)] Join condition: None -(27) Project [codegen id : 5] +(28) Project [codegen id : 5] Output [2]: [sr_return_quantity#3, i_item_id#5] Input [4]: [sr_returned_date_sk#1, sr_return_quantity#3, i_item_id#5, d_date_sk#7] -(28) HashAggregate [codegen id : 5] +(29) HashAggregate [codegen id : 5] Input [2]: [sr_return_quantity#3, i_item_id#5] Keys [1]: [i_item_id#5] Functions [1]: [partial_sum(cast(sr_return_quantity#3 as bigint))] Aggregate Attributes [1]: [sum#15] Results [2]: [i_item_id#5, sum#16] -(29) Exchange +(30) Exchange Input [2]: [i_item_id#5, sum#16] Arguments: hashpartitioning(i_item_id#5, 5), true, [id=#17] -(30) HashAggregate [codegen id : 18] +(31) HashAggregate [codegen id : 18] Input [2]: [i_item_id#5, sum#16] Keys [1]: [i_item_id#5] Functions [1]: [sum(cast(sr_return_quantity#3 as bigint))] Aggregate Attributes [1]: [sum(cast(sr_return_quantity#3 as bigint))#18] Results [2]: [i_item_id#5 AS item_id#19, sum(cast(sr_return_quantity#3 as bigint))#18 AS sr_item_qty#20] -(31) Scan parquet default.catalog_returns +(32) Scan parquet default.catalog_returns Output [3]: [cr_returned_date_sk#21, cr_item_sk#22, cr_return_quantity#23] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_returned_date_sk)] ReadSchema: struct -(32) ColumnarToRow [codegen id : 10] +(33) ColumnarToRow [codegen id : 10] Input [3]: [cr_returned_date_sk#21, cr_item_sk#22, cr_return_quantity#23] -(33) Filter [codegen id : 10] +(34) Filter [codegen id : 10] Input [3]: [cr_returned_date_sk#21, cr_item_sk#22, cr_return_quantity#23] Condition : (isnotnull(cr_item_sk#22) AND isnotnull(cr_returned_date_sk#21)) -(34) ReusedExchange [Reuses operator id: 7] +(35) ReusedExchange [Reuses operator id: 7] Output [2]: [i_item_sk#4, i_item_id#5] -(35) BroadcastHashJoin [codegen id : 10] +(36) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cr_item_sk#22] Right keys [1]: [i_item_sk#4] Join condition: None -(36) Project [codegen id : 10] +(37) Project [codegen id : 10] Output [3]: [cr_returned_date_sk#21, cr_return_quantity#23, i_item_id#5] Input [5]: [cr_returned_date_sk#21, cr_item_sk#22, cr_return_quantity#23, i_item_sk#4, i_item_id#5] -(37) ReusedExchange [Reuses operator id: 25] +(38) ReusedExchange [Reuses operator id: 26] Output [1]: [d_date_sk#7] -(38) BroadcastHashJoin [codegen id : 10] +(39) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cr_returned_date_sk#21] Right keys [1]: [d_date_sk#7] Join condition: None -(39) Project [codegen id : 10] +(40) Project [codegen id : 10] Output [2]: [cr_return_quantity#23, i_item_id#5] Input [4]: [cr_returned_date_sk#21, cr_return_quantity#23, i_item_id#5, d_date_sk#7] -(40) HashAggregate [codegen id : 10] +(41) HashAggregate [codegen id : 10] Input [2]: [cr_return_quantity#23, i_item_id#5] Keys [1]: [i_item_id#5] Functions [1]: [partial_sum(cast(cr_return_quantity#23 as bigint))] Aggregate Attributes [1]: [sum#24] Results [2]: [i_item_id#5, sum#25] -(41) Exchange +(42) Exchange Input [2]: [i_item_id#5, sum#25] Arguments: hashpartitioning(i_item_id#5, 5), true, [id=#26] -(42) HashAggregate [codegen id : 11] +(43) HashAggregate [codegen id : 11] Input [2]: [i_item_id#5, sum#25] Keys [1]: [i_item_id#5] Functions [1]: [sum(cast(cr_return_quantity#23 as bigint))] Aggregate Attributes [1]: [sum(cast(cr_return_quantity#23 as bigint))#27] Results [2]: [i_item_id#5 AS item_id#28, sum(cast(cr_return_quantity#23 as bigint))#27 AS cr_item_qty#29] -(43) BroadcastExchange +(44) BroadcastExchange Input [2]: [item_id#28, cr_item_qty#29] Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#30] -(44) BroadcastHashJoin [codegen id : 18] +(45) BroadcastHashJoin [codegen id : 18] Left keys [1]: [item_id#19] Right keys [1]: [item_id#28] Join condition: None -(45) Project [codegen id : 18] +(46) Project [codegen id : 18] Output [3]: [item_id#19, sr_item_qty#20, cr_item_qty#29] Input [4]: [item_id#19, sr_item_qty#20, item_id#28, cr_item_qty#29] -(46) Scan parquet default.web_returns +(47) Scan parquet default.web_returns Output [3]: [wr_returned_date_sk#31, wr_item_sk#32, wr_return_quantity#33] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_returned_date_sk)] ReadSchema: struct -(47) ColumnarToRow [codegen id : 16] +(48) ColumnarToRow [codegen id : 16] Input [3]: [wr_returned_date_sk#31, wr_item_sk#32, wr_return_quantity#33] -(48) Filter [codegen id : 16] +(49) Filter [codegen id : 16] Input [3]: [wr_returned_date_sk#31, wr_item_sk#32, wr_return_quantity#33] Condition : (isnotnull(wr_item_sk#32) AND isnotnull(wr_returned_date_sk#31)) -(49) ReusedExchange [Reuses operator id: 7] +(50) ReusedExchange [Reuses operator id: 7] Output [2]: [i_item_sk#4, i_item_id#5] -(50) BroadcastHashJoin [codegen id : 16] +(51) BroadcastHashJoin [codegen id : 16] Left keys [1]: [wr_item_sk#32] Right keys [1]: [cast(i_item_sk#4 as bigint)] Join condition: None -(51) Project [codegen id : 16] +(52) Project [codegen id : 16] Output [3]: [wr_returned_date_sk#31, wr_return_quantity#33, i_item_id#5] Input [5]: [wr_returned_date_sk#31, wr_item_sk#32, wr_return_quantity#33, i_item_sk#4, i_item_id#5] -(52) ReusedExchange [Reuses operator id: 25] +(53) ReusedExchange [Reuses operator id: 26] Output [1]: [d_date_sk#7] -(53) BroadcastHashJoin [codegen id : 16] +(54) BroadcastHashJoin [codegen id : 16] Left keys [1]: [wr_returned_date_sk#31] Right keys [1]: [cast(d_date_sk#7 as bigint)] Join condition: None -(54) Project [codegen id : 16] +(55) Project [codegen id : 16] Output [2]: [wr_return_quantity#33, i_item_id#5] Input [4]: [wr_returned_date_sk#31, wr_return_quantity#33, i_item_id#5, d_date_sk#7] -(55) HashAggregate [codegen id : 16] +(56) HashAggregate [codegen id : 16] Input [2]: [wr_return_quantity#33, i_item_id#5] Keys [1]: [i_item_id#5] Functions [1]: [partial_sum(cast(wr_return_quantity#33 as bigint))] Aggregate Attributes [1]: [sum#34] Results [2]: [i_item_id#5, sum#35] -(56) Exchange +(57) Exchange Input [2]: [i_item_id#5, sum#35] Arguments: hashpartitioning(i_item_id#5, 5), true, [id=#36] -(57) HashAggregate [codegen id : 17] +(58) HashAggregate [codegen id : 17] Input [2]: [i_item_id#5, sum#35] Keys [1]: [i_item_id#5] Functions [1]: [sum(cast(wr_return_quantity#33 as bigint))] Aggregate Attributes [1]: [sum(cast(wr_return_quantity#33 as bigint))#37] Results [2]: [i_item_id#5 AS item_id#38, sum(cast(wr_return_quantity#33 as bigint))#37 AS wr_item_qty#39] -(58) BroadcastExchange +(59) BroadcastExchange Input [2]: [item_id#38, wr_item_qty#39] Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#40] -(59) BroadcastHashJoin [codegen id : 18] +(60) BroadcastHashJoin [codegen id : 18] Left keys [1]: [item_id#19] Right keys [1]: [item_id#38] Join condition: None -(60) Project [codegen id : 18] +(61) Project [codegen id : 18] Output [8]: [item_id#19, sr_item_qty#20, (((cast(sr_item_qty#20 as double) / cast(((sr_item_qty#20 + cr_item_qty#29) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS sr_dev#41, cr_item_qty#29, (((cast(cr_item_qty#29 as double) / cast(((sr_item_qty#20 + cr_item_qty#29) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS cr_dev#42, wr_item_qty#39, (((cast(wr_item_qty#39 as double) / cast(((sr_item_qty#20 + cr_item_qty#29) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS wr_dev#43, CheckOverflow((promote_precision(cast(cast(((sr_item_qty#20 + cr_item_qty#29) + wr_item_qty#39) as decimal(20,0)) as decimal(21,1))) / 3.0), DecimalType(27,6), true) AS average#44] Input [5]: [item_id#19, sr_item_qty#20, cr_item_qty#29, item_id#38, wr_item_qty#39] -(61) TakeOrderedAndProject +(62) TakeOrderedAndProject Input [8]: [item_id#19, sr_item_qty#20, sr_dev#41, cr_item_qty#29, cr_dev#42, wr_item_qty#39, wr_dev#43, average#44] Arguments: 100, [item_id#19 ASC NULLS FIRST, sr_item_qty#20 ASC NULLS FIRST], [item_id#19, sr_item_qty#20, sr_dev#41, cr_item_qty#29, cr_dev#42, wr_item_qty#39, wr_dev#43, average#44] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/simplified.txt index d0639eada79ae..97e1b70fcaec0 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/simplified.txt @@ -29,7 +29,7 @@ TakeOrderedAndProject [average,cr_dev,cr_item_qty,item_id,sr_dev,sr_item_qty,wr_ WholeStageCodegen (4) Project [d_date_sk] BroadcastHashJoin [d_date,d_date] - Filter [d_date_sk] + Filter [d_date,d_date_sk] ColumnarToRow InputAdapter Scan parquet default.date_dim [d_date,d_date_sk] @@ -38,14 +38,15 @@ TakeOrderedAndProject [average,cr_dev,cr_item_qty,item_id,sr_dev,sr_item_qty,wr_ WholeStageCodegen (3) Project [d_date] BroadcastHashJoin [d_week_seq,d_week_seq] - ColumnarToRow - InputAdapter - Scan parquet default.date_dim [d_date,d_week_seq] + Filter [d_date,d_week_seq] + ColumnarToRow + InputAdapter + Scan parquet default.date_dim [d_date,d_week_seq] InputAdapter BroadcastExchange #5 WholeStageCodegen (2) Project [d_week_seq] - Filter [d_date] + Filter [d_date,d_week_seq] ColumnarToRow InputAdapter Scan parquet default.date_dim [d_date,d_week_seq] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/explain.txt index 5b4635e0bd67a..8d3532d969f67 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/explain.txt @@ -1,10 +1,10 @@ == Physical Plan == -TakeOrderedAndProject (22) -+- * HashAggregate (21) - +- Exchange (20) - +- * HashAggregate (19) - +- * Project (18) - +- * SortMergeJoin Inner (17) +TakeOrderedAndProject (23) ++- * HashAggregate (22) + +- Exchange (21) + +- * HashAggregate (20) + +- * Project (19) + +- * SortMergeJoin Inner (18) :- * Sort (12) : +- Exchange (11) : +- * Project (10) @@ -17,10 +17,11 @@ TakeOrderedAndProject (22) : +- * Filter (6) : +- * ColumnarToRow (5) : +- Scan parquet default.reason (4) - +- * Sort (16) - +- Exchange (15) - +- * ColumnarToRow (14) - +- Scan parquet default.store_sales (13) + +- * Sort (17) + +- Exchange (16) + +- * Filter (15) + +- * ColumnarToRow (14) + +- Scan parquet default.store_sales (13) (1) Scan parquet default.store_returns @@ -80,47 +81,52 @@ Arguments: [sr_item_sk#1 ASC NULLS FIRST, sr_ticket_number#3 ASC NULLS FIRST], f Output [5]: [ss_item_sk#9, ss_customer_sk#10, ss_ticket_number#11, ss_quantity#12, ss_sales_price#13] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] +PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number)] ReadSchema: struct (14) ColumnarToRow [codegen id : 4] Input [5]: [ss_item_sk#9, ss_customer_sk#10, ss_ticket_number#11, ss_quantity#12, ss_sales_price#13] -(15) Exchange +(15) Filter [codegen id : 4] +Input [5]: [ss_item_sk#9, ss_customer_sk#10, ss_ticket_number#11, ss_quantity#12, ss_sales_price#13] +Condition : (isnotnull(ss_item_sk#9) AND isnotnull(ss_ticket_number#11)) + +(16) Exchange Input [5]: [ss_item_sk#9, ss_customer_sk#10, ss_ticket_number#11, ss_quantity#12, ss_sales_price#13] Arguments: hashpartitioning(cast(ss_item_sk#9 as bigint), cast(ss_ticket_number#11 as bigint), 5), true, [id=#14] -(16) Sort [codegen id : 5] +(17) Sort [codegen id : 5] Input [5]: [ss_item_sk#9, ss_customer_sk#10, ss_ticket_number#11, ss_quantity#12, ss_sales_price#13] Arguments: [cast(ss_item_sk#9 as bigint) ASC NULLS FIRST, cast(ss_ticket_number#11 as bigint) ASC NULLS FIRST], false, 0 -(17) SortMergeJoin [codegen id : 6] +(18) SortMergeJoin [codegen id : 6] Left keys [2]: [sr_item_sk#1, sr_ticket_number#3] Right keys [2]: [cast(ss_item_sk#9 as bigint), cast(ss_ticket_number#11 as bigint)] Join condition: None -(18) Project [codegen id : 6] +(19) Project [codegen id : 6] Output [2]: [ss_customer_sk#10, CASE WHEN isnotnull(sr_return_quantity#4) THEN CheckOverflow((promote_precision(cast(cast((ss_quantity#12 - sr_return_quantity#4) as decimal(10,0)) as decimal(12,2))) * promote_precision(cast(ss_sales_price#13 as decimal(12,2)))), DecimalType(18,2), true) ELSE CheckOverflow((promote_precision(cast(cast(ss_quantity#12 as decimal(10,0)) as decimal(12,2))) * promote_precision(cast(ss_sales_price#13 as decimal(12,2)))), DecimalType(18,2), true) END AS act_sales#15] Input [8]: [sr_item_sk#1, sr_ticket_number#3, sr_return_quantity#4, ss_item_sk#9, ss_customer_sk#10, ss_ticket_number#11, ss_quantity#12, ss_sales_price#13] -(19) HashAggregate [codegen id : 6] +(20) HashAggregate [codegen id : 6] Input [2]: [ss_customer_sk#10, act_sales#15] Keys [1]: [ss_customer_sk#10] Functions [1]: [partial_sum(act_sales#15)] Aggregate Attributes [2]: [sum#16, isEmpty#17] Results [3]: [ss_customer_sk#10, sum#18, isEmpty#19] -(20) Exchange +(21) Exchange Input [3]: [ss_customer_sk#10, sum#18, isEmpty#19] Arguments: hashpartitioning(ss_customer_sk#10, 5), true, [id=#20] -(21) HashAggregate [codegen id : 7] +(22) HashAggregate [codegen id : 7] Input [3]: [ss_customer_sk#10, sum#18, isEmpty#19] Keys [1]: [ss_customer_sk#10] Functions [1]: [sum(act_sales#15)] Aggregate Attributes [1]: [sum(act_sales#15)#21] Results [2]: [ss_customer_sk#10, sum(act_sales#15)#21 AS sumsales#22] -(22) TakeOrderedAndProject +(23) TakeOrderedAndProject Input [2]: [ss_customer_sk#10, sumsales#22] Arguments: 100, [sumsales#22 ASC NULLS FIRST, ss_customer_sk#10 ASC NULLS FIRST], [ss_customer_sk#10, sumsales#22] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/simplified.txt index e1144076af8c6..7ec2694d371ee 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/simplified.txt @@ -33,6 +33,7 @@ TakeOrderedAndProject [ss_customer_sk,sumsales] InputAdapter Exchange [ss_item_sk,ss_ticket_number] #4 WholeStageCodegen (4) - ColumnarToRow - InputAdapter - Scan parquet default.store_sales [ss_customer_sk,ss_item_sk,ss_quantity,ss_sales_price,ss_ticket_number] + Filter [ss_item_sk,ss_ticket_number] + ColumnarToRow + InputAdapter + Scan parquet default.store_sales [ss_customer_sk,ss_item_sk,ss_quantity,ss_sales_price,ss_ticket_number] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/explain.txt index 620aa672770e1..896ae9edcc95a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/explain.txt @@ -1,111 +1,117 @@ == Physical Plan == -TakeOrderedAndProject (19) -+- * HashAggregate (18) - +- Exchange (17) - +- * HashAggregate (16) - +- * Project (15) - +- * BroadcastHashJoin Inner BuildRight (14) - :- * Project (8) - : +- * BroadcastHashJoin Inner BuildRight (7) - : :- * ColumnarToRow (2) - : : +- Scan parquet default.store_sales (1) - : +- BroadcastExchange (6) - : +- * Filter (5) - : +- * ColumnarToRow (4) - : +- Scan parquet default.store_returns (3) - +- BroadcastExchange (13) - +- * Project (12) - +- * Filter (11) - +- * ColumnarToRow (10) - +- Scan parquet default.reason (9) +TakeOrderedAndProject (20) ++- * HashAggregate (19) + +- Exchange (18) + +- * HashAggregate (17) + +- * Project (16) + +- * BroadcastHashJoin Inner BuildRight (15) + :- * Project (9) + : +- * BroadcastHashJoin Inner BuildRight (8) + : :- * Filter (3) + : : +- * ColumnarToRow (2) + : : +- Scan parquet default.store_sales (1) + : +- BroadcastExchange (7) + : +- * Filter (6) + : +- * ColumnarToRow (5) + : +- Scan parquet default.store_returns (4) + +- BroadcastExchange (14) + +- * Project (13) + +- * Filter (12) + +- * ColumnarToRow (11) + +- Scan parquet default.reason (10) (1) Scan parquet default.store_sales Output [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] +PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number)] ReadSchema: struct (2) ColumnarToRow [codegen id : 3] Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5] -(3) Scan parquet default.store_returns +(3) Filter [codegen id : 3] +Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5] +Condition : (isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#3)) + +(4) Scan parquet default.store_returns Output [4]: [sr_item_sk#6, sr_reason_sk#7, sr_ticket_number#8, sr_return_quantity#9] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number), IsNotNull(sr_reason_sk)] ReadSchema: struct -(4) ColumnarToRow [codegen id : 1] +(5) ColumnarToRow [codegen id : 1] Input [4]: [sr_item_sk#6, sr_reason_sk#7, sr_ticket_number#8, sr_return_quantity#9] -(5) Filter [codegen id : 1] +(6) Filter [codegen id : 1] Input [4]: [sr_item_sk#6, sr_reason_sk#7, sr_ticket_number#8, sr_return_quantity#9] Condition : ((isnotnull(sr_item_sk#6) AND isnotnull(sr_ticket_number#8)) AND isnotnull(sr_reason_sk#7)) -(6) BroadcastExchange +(7) BroadcastExchange Input [4]: [sr_item_sk#6, sr_reason_sk#7, sr_ticket_number#8, sr_return_quantity#9] Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false], input[2, bigint, false]),false), [id=#10] -(7) BroadcastHashJoin [codegen id : 3] +(8) BroadcastHashJoin [codegen id : 3] Left keys [2]: [cast(ss_item_sk#1 as bigint), cast(ss_ticket_number#3 as bigint)] Right keys [2]: [sr_item_sk#6, sr_ticket_number#8] Join condition: None -(8) Project [codegen id : 3] +(9) Project [codegen id : 3] Output [5]: [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#7, sr_return_quantity#9] Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5, sr_item_sk#6, sr_reason_sk#7, sr_ticket_number#8, sr_return_quantity#9] -(9) Scan parquet default.reason +(10) Scan parquet default.reason Output [2]: [r_reason_sk#11, r_reason_desc#12] Batched: true Location [not included in comparison]/{warehouse_dir}/reason] PushedFilters: [IsNotNull(r_reason_desc), EqualTo(r_reason_desc,reason 28), IsNotNull(r_reason_sk)] ReadSchema: struct -(10) ColumnarToRow [codegen id : 2] +(11) ColumnarToRow [codegen id : 2] Input [2]: [r_reason_sk#11, r_reason_desc#12] -(11) Filter [codegen id : 2] +(12) Filter [codegen id : 2] Input [2]: [r_reason_sk#11, r_reason_desc#12] Condition : ((isnotnull(r_reason_desc#12) AND (r_reason_desc#12 = reason 28)) AND isnotnull(r_reason_sk#11)) -(12) Project [codegen id : 2] +(13) Project [codegen id : 2] Output [1]: [r_reason_sk#11] Input [2]: [r_reason_sk#11, r_reason_desc#12] -(13) BroadcastExchange +(14) BroadcastExchange Input [1]: [r_reason_sk#11] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] -(14) BroadcastHashJoin [codegen id : 3] +(15) BroadcastHashJoin [codegen id : 3] Left keys [1]: [sr_reason_sk#7] Right keys [1]: [cast(r_reason_sk#11 as bigint)] Join condition: None -(15) Project [codegen id : 3] +(16) Project [codegen id : 3] Output [2]: [ss_customer_sk#2, CASE WHEN isnotnull(sr_return_quantity#9) THEN CheckOverflow((promote_precision(cast(cast((ss_quantity#4 - sr_return_quantity#9) as decimal(10,0)) as decimal(12,2))) * promote_precision(cast(ss_sales_price#5 as decimal(12,2)))), DecimalType(18,2), true) ELSE CheckOverflow((promote_precision(cast(cast(ss_quantity#4 as decimal(10,0)) as decimal(12,2))) * promote_precision(cast(ss_sales_price#5 as decimal(12,2)))), DecimalType(18,2), true) END AS act_sales#14] Input [6]: [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#7, sr_return_quantity#9, r_reason_sk#11] -(16) HashAggregate [codegen id : 3] +(17) HashAggregate [codegen id : 3] Input [2]: [ss_customer_sk#2, act_sales#14] Keys [1]: [ss_customer_sk#2] Functions [1]: [partial_sum(act_sales#14)] Aggregate Attributes [2]: [sum#15, isEmpty#16] Results [3]: [ss_customer_sk#2, sum#17, isEmpty#18] -(17) Exchange +(18) Exchange Input [3]: [ss_customer_sk#2, sum#17, isEmpty#18] Arguments: hashpartitioning(ss_customer_sk#2, 5), true, [id=#19] -(18) HashAggregate [codegen id : 4] +(19) HashAggregate [codegen id : 4] Input [3]: [ss_customer_sk#2, sum#17, isEmpty#18] Keys [1]: [ss_customer_sk#2] Functions [1]: [sum(act_sales#14)] Aggregate Attributes [1]: [sum(act_sales#14)#20] Results [2]: [ss_customer_sk#2, sum(act_sales#14)#20 AS sumsales#21] -(19) TakeOrderedAndProject +(20) TakeOrderedAndProject Input [2]: [ss_customer_sk#2, sumsales#21] Arguments: 100, [sumsales#21 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST], [ss_customer_sk#2, sumsales#21] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/simplified.txt index 05e17cc4b3bd8..7511c2363db3a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/simplified.txt @@ -9,9 +9,10 @@ TakeOrderedAndProject [ss_customer_sk,sumsales] BroadcastHashJoin [r_reason_sk,sr_reason_sk] Project [sr_reason_sk,sr_return_quantity,ss_customer_sk,ss_quantity,ss_sales_price] BroadcastHashJoin [sr_item_sk,sr_ticket_number,ss_item_sk,ss_ticket_number] - ColumnarToRow - InputAdapter - Scan parquet default.store_sales [ss_customer_sk,ss_item_sk,ss_quantity,ss_sales_price,ss_ticket_number] + Filter [ss_item_sk,ss_ticket_number] + ColumnarToRow + InputAdapter + Scan parquet default.store_sales [ss_customer_sk,ss_item_sk,ss_quantity,ss_sales_price,ss_ticket_number] InputAdapter BroadcastExchange #2 WholeStageCodegen (1) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/explain.txt index 7720d9dee4170..843464c8bd24e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/explain.txt @@ -1,58 +1,60 @@ == Physical Plan == -TakeOrderedAndProject (47) -+- * HashAggregate (46) - +- Exchange (45) - +- * HashAggregate (44) - +- * HashAggregate (43) - +- Exchange (42) - +- * HashAggregate (41) - +- * Project (40) - +- * BroadcastHashJoin Inner BuildRight (39) - :- * Project (33) - : +- * BroadcastHashJoin Inner BuildRight (32) - : :- * Project (26) - : : +- * BroadcastHashJoin Inner BuildRight (25) - : : :- SortMergeJoin LeftAnti (19) - : : : :- * Sort (14) - : : : : +- Exchange (13) - : : : : +- * Project (12) - : : : : +- SortMergeJoin LeftSemi (11) +TakeOrderedAndProject (49) ++- * HashAggregate (48) + +- Exchange (47) + +- * HashAggregate (46) + +- * HashAggregate (45) + +- Exchange (44) + +- * HashAggregate (43) + +- * Project (42) + +- * BroadcastHashJoin Inner BuildRight (41) + :- * Project (35) + : +- * BroadcastHashJoin Inner BuildRight (34) + : :- * Project (28) + : : +- * BroadcastHashJoin Inner BuildRight (27) + : : :- SortMergeJoin LeftAnti (21) + : : : :- * Sort (15) + : : : : +- Exchange (14) + : : : : +- * Project (13) + : : : : +- SortMergeJoin LeftSemi (12) : : : : :- * Sort (5) : : : : : +- Exchange (4) : : : : : +- * Filter (3) : : : : : +- * ColumnarToRow (2) : : : : : +- Scan parquet default.web_sales (1) - : : : : +- * Sort (10) - : : : : +- Exchange (9) - : : : : +- * Project (8) - : : : : +- * ColumnarToRow (7) - : : : : +- Scan parquet default.web_sales (6) - : : : +- * Sort (18) - : : : +- Exchange (17) - : : : +- * ColumnarToRow (16) - : : : +- Scan parquet default.web_returns (15) - : : +- BroadcastExchange (24) - : : +- * Project (23) - : : +- * Filter (22) - : : +- * ColumnarToRow (21) - : : +- Scan parquet default.customer_address (20) - : +- BroadcastExchange (31) - : +- * Project (30) - : +- * Filter (29) - : +- * ColumnarToRow (28) - : +- Scan parquet default.web_site (27) - +- BroadcastExchange (38) - +- * Project (37) - +- * Filter (36) - +- * ColumnarToRow (35) - +- Scan parquet default.date_dim (34) + : : : : +- * Sort (11) + : : : : +- Exchange (10) + : : : : +- * Project (9) + : : : : +- * Filter (8) + : : : : +- * ColumnarToRow (7) + : : : : +- Scan parquet default.web_sales (6) + : : : +- * Sort (20) + : : : +- Exchange (19) + : : : +- * Filter (18) + : : : +- * ColumnarToRow (17) + : : : +- Scan parquet default.web_returns (16) + : : +- BroadcastExchange (26) + : : +- * Project (25) + : : +- * Filter (24) + : : +- * ColumnarToRow (23) + : : +- Scan parquet default.customer_address (22) + : +- BroadcastExchange (33) + : +- * Project (32) + : +- * Filter (31) + : +- * ColumnarToRow (30) + : +- Scan parquet default.web_site (29) + +- BroadcastExchange (40) + +- * Project (39) + +- * Filter (38) + +- * ColumnarToRow (37) + +- Scan parquet default.date_dim (36) (1) Scan parquet default.web_sales Output [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] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk)] +PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk), IsNotNull(ws_warehouse_sk), IsNotNull(ws_order_number)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -60,7 +62,7 @@ Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse (3) Filter [codegen id : 1] 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] -Condition : ((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) +Condition : ((((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND isnotnull(ws_warehouse_sk#4)) AND isnotnull(ws_order_number#5)) (4) Exchange 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] @@ -74,192 +76,202 @@ Arguments: [ws_order_number#5 ASC NULLS FIRST], false, 0 Output [2]: [ws_warehouse_sk#4, ws_order_number#5] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] +PushedFilters: [IsNotNull(ws_order_number), IsNotNull(ws_warehouse_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] Input [2]: [ws_warehouse_sk#4, ws_order_number#5] -(8) Project [codegen id : 3] +(8) Filter [codegen id : 3] +Input [2]: [ws_warehouse_sk#4, ws_order_number#5] +Condition : (isnotnull(ws_order_number#5) AND isnotnull(ws_warehouse_sk#4)) + +(9) Project [codegen id : 3] Output [2]: [ws_warehouse_sk#4 AS ws_warehouse_sk#4#9, ws_order_number#5 AS ws_order_number#5#10] Input [2]: [ws_warehouse_sk#4, ws_order_number#5] -(9) Exchange +(10) Exchange Input [2]: [ws_warehouse_sk#4#9, ws_order_number#5#10] Arguments: hashpartitioning(ws_order_number#5#10, 5), true, [id=#11] -(10) Sort [codegen id : 4] +(11) Sort [codegen id : 4] Input [2]: [ws_warehouse_sk#4#9, ws_order_number#5#10] Arguments: [ws_order_number#5#10 ASC NULLS FIRST], false, 0 -(11) SortMergeJoin +(12) SortMergeJoin Left keys [1]: [ws_order_number#5] Right keys [1]: [ws_order_number#5#10] Join condition: NOT (ws_warehouse_sk#4 = ws_warehouse_sk#4#9) -(12) Project [codegen id : 5] +(13) Project [codegen id : 5] 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] -(13) Exchange +(14) Exchange Input [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] Arguments: hashpartitioning(cast(ws_order_number#5 as bigint), 5), true, [id=#12] -(14) Sort [codegen id : 6] +(15) Sort [codegen id : 6] Input [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] Arguments: [cast(ws_order_number#5 as bigint) ASC NULLS FIRST], false, 0 -(15) Scan parquet default.web_returns +(16) Scan parquet default.web_returns Output [1]: [wr_order_number#13] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] +PushedFilters: [IsNotNull(wr_order_number)] ReadSchema: struct -(16) ColumnarToRow [codegen id : 7] +(17) ColumnarToRow [codegen id : 7] +Input [1]: [wr_order_number#13] + +(18) Filter [codegen id : 7] Input [1]: [wr_order_number#13] +Condition : isnotnull(wr_order_number#13) -(17) Exchange +(19) Exchange Input [1]: [wr_order_number#13] Arguments: hashpartitioning(wr_order_number#13, 5), true, [id=#14] -(18) Sort [codegen id : 8] +(20) Sort [codegen id : 8] Input [1]: [wr_order_number#13] Arguments: [wr_order_number#13 ASC NULLS FIRST], false, 0 -(19) SortMergeJoin +(21) SortMergeJoin Left keys [1]: [cast(ws_order_number#5 as bigint)] Right keys [1]: [wr_order_number#13] Join condition: None -(20) Scan parquet default.customer_address +(22) Scan parquet default.customer_address Output [2]: [ca_address_sk#15, ca_state#16] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct -(21) ColumnarToRow [codegen id : 9] +(23) ColumnarToRow [codegen id : 9] Input [2]: [ca_address_sk#15, ca_state#16] -(22) Filter [codegen id : 9] +(24) Filter [codegen id : 9] Input [2]: [ca_address_sk#15, ca_state#16] Condition : ((isnotnull(ca_state#16) AND (ca_state#16 = IL)) AND isnotnull(ca_address_sk#15)) -(23) Project [codegen id : 9] +(25) Project [codegen id : 9] Output [1]: [ca_address_sk#15] Input [2]: [ca_address_sk#15, ca_state#16] -(24) BroadcastExchange +(26) BroadcastExchange Input [1]: [ca_address_sk#15] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] -(25) BroadcastHashJoin [codegen id : 12] +(27) BroadcastHashJoin [codegen id : 12] Left keys [1]: [ws_ship_addr_sk#2] Right keys [1]: [ca_address_sk#15] Join condition: None -(26) Project [codegen id : 12] +(28) Project [codegen id : 12] 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#15] -(27) Scan parquet default.web_site +(29) Scan parquet default.web_site Output [2]: [web_site_sk#18, web_company_name#19] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri), IsNotNull(web_site_sk)] ReadSchema: struct -(28) ColumnarToRow [codegen id : 10] +(30) ColumnarToRow [codegen id : 10] Input [2]: [web_site_sk#18, web_company_name#19] -(29) Filter [codegen id : 10] +(31) Filter [codegen id : 10] Input [2]: [web_site_sk#18, web_company_name#19] Condition : ((isnotnull(web_company_name#19) AND (web_company_name#19 = pri)) AND isnotnull(web_site_sk#18)) -(30) Project [codegen id : 10] +(32) Project [codegen id : 10] Output [1]: [web_site_sk#18] Input [2]: [web_site_sk#18, web_company_name#19] -(31) BroadcastExchange +(33) BroadcastExchange Input [1]: [web_site_sk#18] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20] -(32) BroadcastHashJoin [codegen id : 12] +(34) BroadcastHashJoin [codegen id : 12] Left keys [1]: [ws_web_site_sk#3] Right keys [1]: [web_site_sk#18] Join condition: None -(33) Project [codegen id : 12] +(35) Project [codegen id : 12] 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#18] -(34) Scan parquet default.date_dim +(36) Scan parquet default.date_dim Output [2]: [d_date_sk#21, d_date#22] Batched: true Location [not included in comparison]/{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 -(35) ColumnarToRow [codegen id : 11] +(37) ColumnarToRow [codegen id : 11] Input [2]: [d_date_sk#21, d_date#22] -(36) Filter [codegen id : 11] +(38) Filter [codegen id : 11] Input [2]: [d_date_sk#21, d_date#22] Condition : (((isnotnull(d_date#22) AND (d_date#22 >= 10623)) AND (d_date#22 <= 10683)) AND isnotnull(d_date_sk#21)) -(37) Project [codegen id : 11] +(39) Project [codegen id : 11] Output [1]: [d_date_sk#21] Input [2]: [d_date_sk#21, d_date#22] -(38) BroadcastExchange +(40) BroadcastExchange Input [1]: [d_date_sk#21] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23] -(39) BroadcastHashJoin [codegen id : 12] +(41) BroadcastHashJoin [codegen id : 12] Left keys [1]: [ws_ship_date_sk#1] Right keys [1]: [d_date_sk#21] Join condition: None -(40) Project [codegen id : 12] +(42) Project [codegen id : 12] Output [3]: [ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [5]: [ws_ship_date_sk#1, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, d_date_sk#21] -(41) HashAggregate [codegen id : 12] +(43) HashAggregate [codegen id : 12] Input [3]: [ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Keys [1]: [ws_order_number#5] Functions [2]: [partial_sum(UnscaledValue(ws_ext_ship_cost#6)), partial_sum(UnscaledValue(ws_net_profit#7))] Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#24, sum(UnscaledValue(ws_net_profit#7))#25] Results [3]: [ws_order_number#5, sum#26, sum#27] -(42) Exchange +(44) Exchange Input [3]: [ws_order_number#5, sum#26, sum#27] Arguments: hashpartitioning(ws_order_number#5, 5), true, [id=#28] -(43) HashAggregate [codegen id : 13] +(45) HashAggregate [codegen id : 13] Input [3]: [ws_order_number#5, sum#26, sum#27] 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))#24, sum(UnscaledValue(ws_net_profit#7))#25] Results [3]: [ws_order_number#5, sum#26, sum#27] -(44) HashAggregate [codegen id : 13] +(46) HashAggregate [codegen id : 13] Input [3]: [ws_order_number#5, sum#26, sum#27] 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))#24, sum(UnscaledValue(ws_net_profit#7))#25, count(ws_order_number#5)#29] Results [3]: [sum#26, sum#27, count#30] -(45) Exchange +(47) Exchange Input [3]: [sum#26, sum#27, count#30] Arguments: SinglePartition, true, [id=#31] -(46) HashAggregate [codegen id : 14] +(48) HashAggregate [codegen id : 14] Input [3]: [sum#26, sum#27, count#30] 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))#24, sum(UnscaledValue(ws_net_profit#7))#25, count(ws_order_number#5)#29] Results [3]: [count(ws_order_number#5)#29 AS order count #32, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#6))#24,17,2) AS total shipping cost #33, MakeDecimal(sum(UnscaledValue(ws_net_profit#7))#25,17,2) AS total net profit #34] -(47) TakeOrderedAndProject +(49) TakeOrderedAndProject Input [3]: [order count #32, total shipping cost #33, total net profit #34] Arguments: 100, [order count #32 ASC NULLS FIRST], [order count #32, total shipping cost #33, total net profit #34] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/simplified.txt index 95ff0dbb4ad50..7b2c6568adfad 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/simplified.txt @@ -31,7 +31,7 @@ TakeOrderedAndProject [order count ,total net profit ,total shipping cost ] InputAdapter Exchange [ws_order_number] #4 WholeStageCodegen (1) - Filter [ws_ship_addr_sk,ws_ship_date_sk,ws_web_site_sk] + Filter [ws_order_number,ws_ship_addr_sk,ws_ship_date_sk,ws_warehouse_sk,ws_web_site_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_ext_ship_cost,ws_net_profit,ws_order_number,ws_ship_addr_sk,ws_ship_date_sk,ws_warehouse_sk,ws_web_site_sk] @@ -41,17 +41,19 @@ TakeOrderedAndProject [order count ,total net profit ,total shipping cost ] Exchange [ws_order_number] #5 WholeStageCodegen (3) Project [ws_order_number,ws_warehouse_sk] - ColumnarToRow - InputAdapter - Scan parquet default.web_sales [ws_order_number,ws_warehouse_sk] + Filter [ws_order_number,ws_warehouse_sk] + ColumnarToRow + InputAdapter + Scan parquet default.web_sales [ws_order_number,ws_warehouse_sk] WholeStageCodegen (8) Sort [wr_order_number] InputAdapter Exchange [wr_order_number] #6 WholeStageCodegen (7) - ColumnarToRow - InputAdapter - Scan parquet default.web_returns [wr_order_number] + Filter [wr_order_number] + ColumnarToRow + InputAdapter + Scan parquet default.web_returns [wr_order_number] InputAdapter BroadcastExchange #7 WholeStageCodegen (9) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/explain.txt index a94e74f66b201..828e0f58aed75 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/explain.txt @@ -1,52 +1,54 @@ == Physical Plan == -TakeOrderedAndProject (41) -+- * HashAggregate (40) - +- Exchange (39) - +- * HashAggregate (38) - +- * HashAggregate (37) - +- Exchange (36) - +- * HashAggregate (35) - +- * Project (34) - +- * BroadcastHashJoin Inner BuildRight (33) - :- * Project (27) - : +- * BroadcastHashJoin Inner BuildRight (26) - : :- * Project (20) - : : +- * BroadcastHashJoin Inner BuildRight (19) - : : :- * BroadcastHashJoin LeftAnti BuildRight (13) - : : : :- * Project (9) - : : : : +- * BroadcastHashJoin LeftSemi BuildRight (8) +TakeOrderedAndProject (43) ++- * HashAggregate (42) + +- Exchange (41) + +- * HashAggregate (40) + +- * HashAggregate (39) + +- Exchange (38) + +- * HashAggregate (37) + +- * Project (36) + +- * BroadcastHashJoin Inner BuildRight (35) + :- * Project (29) + : +- * BroadcastHashJoin Inner BuildRight (28) + : :- * Project (22) + : : +- * BroadcastHashJoin Inner BuildRight (21) + : : :- * BroadcastHashJoin LeftAnti BuildRight (15) + : : : :- * Project (10) + : : : : +- * BroadcastHashJoin LeftSemi BuildRight (9) : : : : :- * Filter (3) : : : : : +- * ColumnarToRow (2) : : : : : +- Scan parquet default.web_sales (1) - : : : : +- BroadcastExchange (7) - : : : : +- * Project (6) - : : : : +- * ColumnarToRow (5) - : : : : +- Scan parquet default.web_sales (4) - : : : +- BroadcastExchange (12) - : : : +- * ColumnarToRow (11) - : : : +- Scan parquet default.web_returns (10) - : : +- BroadcastExchange (18) - : : +- * Project (17) - : : +- * Filter (16) - : : +- * ColumnarToRow (15) - : : +- Scan parquet default.date_dim (14) - : +- BroadcastExchange (25) - : +- * Project (24) - : +- * Filter (23) - : +- * ColumnarToRow (22) - : +- Scan parquet default.customer_address (21) - +- BroadcastExchange (32) - +- * Project (31) - +- * Filter (30) - +- * ColumnarToRow (29) - +- Scan parquet default.web_site (28) + : : : : +- BroadcastExchange (8) + : : : : +- * Project (7) + : : : : +- * Filter (6) + : : : : +- * ColumnarToRow (5) + : : : : +- Scan parquet default.web_sales (4) + : : : +- BroadcastExchange (14) + : : : +- * Filter (13) + : : : +- * ColumnarToRow (12) + : : : +- Scan parquet default.web_returns (11) + : : +- BroadcastExchange (20) + : : +- * Project (19) + : : +- * Filter (18) + : : +- * ColumnarToRow (17) + : : +- Scan parquet default.date_dim (16) + : +- BroadcastExchange (27) + : +- * Project (26) + : +- * Filter (25) + : +- * ColumnarToRow (24) + : +- Scan parquet default.customer_address (23) + +- BroadcastExchange (34) + +- * Project (33) + +- * Filter (32) + +- * ColumnarToRow (31) + +- Scan parquet default.web_site (30) (1) Scan parquet default.web_sales Output [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] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk)] +PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk), IsNotNull(ws_order_number), IsNotNull(ws_warehouse_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 6] @@ -54,182 +56,192 @@ Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse (3) Filter [codegen id : 6] 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] -Condition : ((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) +Condition : ((((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND isnotnull(ws_order_number#5)) AND isnotnull(ws_warehouse_sk#4)) (4) Scan parquet default.web_sales Output [2]: [ws_warehouse_sk#4, ws_order_number#5] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] +PushedFilters: [IsNotNull(ws_order_number), IsNotNull(ws_warehouse_sk)] ReadSchema: struct (5) ColumnarToRow [codegen id : 1] Input [2]: [ws_warehouse_sk#4, ws_order_number#5] -(6) Project [codegen id : 1] +(6) Filter [codegen id : 1] +Input [2]: [ws_warehouse_sk#4, ws_order_number#5] +Condition : (isnotnull(ws_order_number#5) AND isnotnull(ws_warehouse_sk#4)) + +(7) Project [codegen id : 1] Output [2]: [ws_warehouse_sk#4 AS ws_warehouse_sk#4#8, ws_order_number#5 AS ws_order_number#5#9] Input [2]: [ws_warehouse_sk#4, ws_order_number#5] -(7) BroadcastExchange +(8) BroadcastExchange Input [2]: [ws_warehouse_sk#4#8, ws_order_number#5#9] Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#10] -(8) BroadcastHashJoin [codegen id : 6] +(9) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ws_order_number#5] Right keys [1]: [ws_order_number#5#9] Join condition: NOT (ws_warehouse_sk#4 = ws_warehouse_sk#4#8) -(9) Project [codegen id : 6] +(10) Project [codegen id : 6] 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] -(10) Scan parquet default.web_returns +(11) Scan parquet default.web_returns Output [1]: [wr_order_number#11] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] +PushedFilters: [IsNotNull(wr_order_number)] ReadSchema: struct -(11) ColumnarToRow [codegen id : 2] +(12) ColumnarToRow [codegen id : 2] +Input [1]: [wr_order_number#11] + +(13) Filter [codegen id : 2] Input [1]: [wr_order_number#11] +Condition : isnotnull(wr_order_number#11) -(12) BroadcastExchange +(14) BroadcastExchange Input [1]: [wr_order_number#11] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#12] -(13) BroadcastHashJoin [codegen id : 6] +(15) BroadcastHashJoin [codegen id : 6] Left keys [1]: [cast(ws_order_number#5 as bigint)] Right keys [1]: [wr_order_number#11] Join condition: None -(14) Scan parquet default.date_dim +(16) Scan parquet default.date_dim Output [2]: [d_date_sk#13, d_date#14] Batched: true Location [not included in comparison]/{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 -(15) ColumnarToRow [codegen id : 3] +(17) ColumnarToRow [codegen id : 3] Input [2]: [d_date_sk#13, d_date#14] -(16) Filter [codegen id : 3] +(18) Filter [codegen id : 3] Input [2]: [d_date_sk#13, d_date#14] Condition : (((isnotnull(d_date#14) AND (d_date#14 >= 10623)) AND (d_date#14 <= 10683)) AND isnotnull(d_date_sk#13)) -(17) Project [codegen id : 3] +(19) Project [codegen id : 3] Output [1]: [d_date_sk#13] Input [2]: [d_date_sk#13, d_date#14] -(18) BroadcastExchange +(20) BroadcastExchange Input [1]: [d_date_sk#13] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] -(19) BroadcastHashJoin [codegen id : 6] +(21) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ws_ship_date_sk#1] Right keys [1]: [d_date_sk#13] Join condition: None -(20) Project [codegen id : 6] +(22) Project [codegen id : 6] Output [5]: [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_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, d_date_sk#13] -(21) Scan parquet default.customer_address +(23) Scan parquet default.customer_address Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct -(22) ColumnarToRow [codegen id : 4] +(24) ColumnarToRow [codegen id : 4] Input [2]: [ca_address_sk#16, ca_state#17] -(23) Filter [codegen id : 4] +(25) Filter [codegen id : 4] Input [2]: [ca_address_sk#16, ca_state#17] Condition : ((isnotnull(ca_state#17) AND (ca_state#17 = IL)) AND isnotnull(ca_address_sk#16)) -(24) Project [codegen id : 4] +(26) Project [codegen id : 4] Output [1]: [ca_address_sk#16] Input [2]: [ca_address_sk#16, ca_state#17] -(25) BroadcastExchange +(27) BroadcastExchange Input [1]: [ca_address_sk#16] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] -(26) BroadcastHashJoin [codegen id : 6] +(28) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ws_ship_addr_sk#2] Right keys [1]: [ca_address_sk#16] Join condition: None -(27) Project [codegen id : 6] +(29) Project [codegen id : 6] Output [4]: [ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [6]: [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#16] -(28) Scan parquet default.web_site +(30) Scan parquet default.web_site Output [2]: [web_site_sk#19, web_company_name#20] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri), IsNotNull(web_site_sk)] ReadSchema: struct -(29) ColumnarToRow [codegen id : 5] +(31) ColumnarToRow [codegen id : 5] Input [2]: [web_site_sk#19, web_company_name#20] -(30) Filter [codegen id : 5] +(32) Filter [codegen id : 5] Input [2]: [web_site_sk#19, web_company_name#20] Condition : ((isnotnull(web_company_name#20) AND (web_company_name#20 = pri)) AND isnotnull(web_site_sk#19)) -(31) Project [codegen id : 5] +(33) Project [codegen id : 5] Output [1]: [web_site_sk#19] Input [2]: [web_site_sk#19, web_company_name#20] -(32) BroadcastExchange +(34) BroadcastExchange Input [1]: [web_site_sk#19] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21] -(33) BroadcastHashJoin [codegen id : 6] +(35) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ws_web_site_sk#3] Right keys [1]: [web_site_sk#19] Join condition: None -(34) Project [codegen id : 6] +(36) Project [codegen id : 6] Output [3]: [ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [5]: [ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, web_site_sk#19] -(35) HashAggregate [codegen id : 6] +(37) HashAggregate [codegen id : 6] Input [3]: [ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Keys [1]: [ws_order_number#5] Functions [2]: [partial_sum(UnscaledValue(ws_ext_ship_cost#6)), partial_sum(UnscaledValue(ws_net_profit#7))] Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#22, sum(UnscaledValue(ws_net_profit#7))#23] Results [3]: [ws_order_number#5, sum#24, sum#25] -(36) Exchange +(38) Exchange Input [3]: [ws_order_number#5, sum#24, sum#25] Arguments: hashpartitioning(ws_order_number#5, 5), true, [id=#26] -(37) HashAggregate [codegen id : 7] +(39) HashAggregate [codegen id : 7] Input [3]: [ws_order_number#5, sum#24, sum#25] 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))#22, sum(UnscaledValue(ws_net_profit#7))#23] Results [3]: [ws_order_number#5, sum#24, sum#25] -(38) HashAggregate [codegen id : 7] +(40) HashAggregate [codegen id : 7] Input [3]: [ws_order_number#5, sum#24, sum#25] 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))#22, sum(UnscaledValue(ws_net_profit#7))#23, count(ws_order_number#5)#27] Results [3]: [sum#24, sum#25, count#28] -(39) Exchange +(41) Exchange Input [3]: [sum#24, sum#25, count#28] Arguments: SinglePartition, true, [id=#29] -(40) HashAggregate [codegen id : 8] +(42) HashAggregate [codegen id : 8] Input [3]: [sum#24, sum#25, count#28] 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))#22, sum(UnscaledValue(ws_net_profit#7))#23, count(ws_order_number#5)#27] Results [3]: [count(ws_order_number#5)#27 AS order count #30, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#6))#22,17,2) AS total shipping cost #31, MakeDecimal(sum(UnscaledValue(ws_net_profit#7))#23,17,2) AS total net profit #32] -(41) TakeOrderedAndProject +(43) TakeOrderedAndProject Input [3]: [order count #30, total shipping cost #31, total net profit #32] Arguments: 100, [order count #30 ASC NULLS FIRST], [order count #30, total shipping cost #31, total net profit #32] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/simplified.txt index fda5a9f037ad4..4b086d9a90f34 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/simplified.txt @@ -19,7 +19,7 @@ TakeOrderedAndProject [order count ,total net profit ,total shipping cost ] BroadcastHashJoin [wr_order_number,ws_order_number] Project [ws_ext_ship_cost,ws_net_profit,ws_order_number,ws_ship_addr_sk,ws_ship_date_sk,ws_web_site_sk] BroadcastHashJoin [ws_order_number,ws_order_number,ws_warehouse_sk,ws_warehouse_sk] - Filter [ws_ship_addr_sk,ws_ship_date_sk,ws_web_site_sk] + Filter [ws_order_number,ws_ship_addr_sk,ws_ship_date_sk,ws_warehouse_sk,ws_web_site_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_ext_ship_cost,ws_net_profit,ws_order_number,ws_ship_addr_sk,ws_ship_date_sk,ws_warehouse_sk,ws_web_site_sk] @@ -27,15 +27,17 @@ TakeOrderedAndProject [order count ,total net profit ,total shipping cost ] BroadcastExchange #3 WholeStageCodegen (1) Project [ws_order_number,ws_warehouse_sk] - ColumnarToRow - InputAdapter - Scan parquet default.web_sales [ws_order_number,ws_warehouse_sk] + Filter [ws_order_number,ws_warehouse_sk] + ColumnarToRow + InputAdapter + Scan parquet default.web_sales [ws_order_number,ws_warehouse_sk] InputAdapter BroadcastExchange #4 WholeStageCodegen (2) - ColumnarToRow - InputAdapter - Scan parquet default.web_returns [wr_order_number] + Filter [wr_order_number] + ColumnarToRow + InputAdapter + Scan parquet default.web_returns [wr_order_number] InputAdapter BroadcastExchange #5 WholeStageCodegen (3) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/explain.txt index eae118d46245d..493ccfb43b0e8 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/explain.txt @@ -68,7 +68,7 @@ TakeOrderedAndProject (63) Output [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] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk)] +PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk), IsNotNull(ws_order_number)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -76,7 +76,7 @@ Input [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_num (3) Filter [codegen id : 1] 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] -Condition : ((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) +Condition : (((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND isnotnull(ws_order_number#4)) (4) Exchange 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] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/simplified.txt index 420cd6f89b02a..b7787108bebd6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/simplified.txt @@ -28,7 +28,7 @@ TakeOrderedAndProject [order count ,total net profit ,total shipping cost ] InputAdapter Exchange [ws_order_number] #4 WholeStageCodegen (1) - Filter [ws_ship_addr_sk,ws_ship_date_sk,ws_web_site_sk] + Filter [ws_order_number,ws_ship_addr_sk,ws_ship_date_sk,ws_web_site_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_ext_ship_cost,ws_net_profit,ws_order_number,ws_ship_addr_sk,ws_ship_date_sk,ws_web_site_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/explain.txt index 3a24e83aff256..ff3c0bc9079ba 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/explain.txt @@ -61,7 +61,7 @@ TakeOrderedAndProject (56) Output [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] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk)] +PushedFilters: [IsNotNull(ws_ship_date_sk), IsNotNull(ws_ship_addr_sk), IsNotNull(ws_web_site_sk), IsNotNull(ws_order_number)] ReadSchema: struct (2) ColumnarToRow [codegen id : 9] @@ -69,7 +69,7 @@ Input [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_num (3) Filter [codegen id : 9] 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] -Condition : ((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) +Condition : (((isnotnull(ws_ship_date_sk#1) AND isnotnull(ws_ship_addr_sk#2)) AND isnotnull(ws_web_site_sk#3)) AND isnotnull(ws_order_number#4)) (4) Scan parquet default.web_sales Output [2]: [ws_warehouse_sk#7, ws_order_number#4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/simplified.txt index 00f1e8cc15922..b5470d530a411 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/simplified.txt @@ -18,7 +18,7 @@ TakeOrderedAndProject [order count ,total net profit ,total shipping cost ] BroadcastHashJoin [d_date_sk,ws_ship_date_sk] BroadcastHashJoin [wr_order_number,ws_order_number] BroadcastHashJoin [ws_order_number,ws_order_number] - Filter [ws_ship_addr_sk,ws_ship_date_sk,ws_web_site_sk] + Filter [ws_order_number,ws_ship_addr_sk,ws_ship_date_sk,ws_web_site_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_ext_ship_cost,ws_net_profit,ws_order_number,ws_ship_addr_sk,ws_ship_date_sk,ws_web_site_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/explain.txt index f0aa032e0f2b6..9e10df6258a30 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/explain.txt @@ -57,7 +57,7 @@ TakeOrderedAndProject (52) Output [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -65,7 +65,7 @@ Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (3) 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)) +Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND isnotnull(c_customer_sk#1)) (4) Exchange Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] @@ -79,7 +79,7 @@ Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0 Output [2]: [ss_sold_date_sk#5, ss_customer_sk#6] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] @@ -87,13 +87,13 @@ Input [2]: [ss_sold_date_sk#5, ss_customer_sk#6] (8) Filter [codegen id : 4] Input [2]: [ss_sold_date_sk#5, ss_customer_sk#6] -Condition : isnotnull(ss_sold_date_sk#5) +Condition : (isnotnull(ss_sold_date_sk#5) AND isnotnull(ss_customer_sk#6)) (9) Scan parquet default.date_dim Output [3]: [d_date_sk#7, d_year#8, d_moy#9] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,7), IsNotNull(d_date_sk)] +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 (10) ColumnarToRow [codegen id : 3] @@ -101,7 +101,7 @@ Input [3]: [d_date_sk#7, d_year#8, d_moy#9] (11) Filter [codegen id : 3] Input [3]: [d_date_sk#7, d_year#8, d_moy#9] -Condition : (((((isnotnull(d_moy#9) AND isnotnull(d_year#8)) AND (d_year#8 = 2002)) AND (d_moy#9 >= 4)) AND (d_moy#9 <= 7)) AND isnotnull(d_date_sk#7)) +Condition : (((((isnotnull(d_year#8) AND isnotnull(d_moy#9)) AND (d_year#8 = 2002)) AND (d_moy#9 >= 4)) AND (d_moy#9 <= 7)) AND isnotnull(d_date_sk#7)) (12) Project [codegen id : 3] Output [1]: [d_date_sk#7] @@ -137,7 +137,7 @@ Join condition: None Output [2]: [ws_sold_date_sk#12, ws_bill_customer_sk#13] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_sold_date_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 7] @@ -145,7 +145,7 @@ Input [2]: [ws_sold_date_sk#12, ws_bill_customer_sk#13] (21) Filter [codegen id : 7] Input [2]: [ws_sold_date_sk#12, ws_bill_customer_sk#13] -Condition : isnotnull(ws_sold_date_sk#12) +Condition : (isnotnull(ws_sold_date_sk#12) AND isnotnull(ws_bill_customer_sk#13)) (22) ReusedExchange [Reuses operator id: 13] Output [1]: [d_date_sk#7] @@ -163,7 +163,7 @@ Input [3]: [ws_sold_date_sk#12, ws_bill_customer_sk#13, d_date_sk#7] Output [2]: [cs_sold_date_sk#15, cs_ship_customer_sk#16] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_sold_date_sk)] +PushedFilters: [IsNotNull(cs_sold_date_sk), IsNotNull(cs_ship_customer_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 9] @@ -171,7 +171,7 @@ Input [2]: [cs_sold_date_sk#15, cs_ship_customer_sk#16] (27) Filter [codegen id : 9] Input [2]: [cs_sold_date_sk#15, cs_ship_customer_sk#16] -Condition : isnotnull(cs_sold_date_sk#15) +Condition : (isnotnull(cs_sold_date_sk#15) AND isnotnull(cs_ship_customer_sk#16)) (28) ReusedExchange [Reuses operator id: 13] Output [1]: [d_date_sk#7] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/simplified.txt index 9a144aee5f12d..828e7cb4081e4 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/simplified.txt @@ -21,7 +21,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep InputAdapter Exchange [c_customer_sk] #3 WholeStageCodegen (1) - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -32,7 +32,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep WholeStageCodegen (4) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] @@ -52,7 +52,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep WholeStageCodegen (7) Project [ws_bill_customer_sk] BroadcastHashJoin [d_date_sk,ws_sold_date_sk] - Filter [ws_sold_date_sk] + Filter [ws_bill_customer_sk,ws_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_bill_customer_sk,ws_sold_date_sk] @@ -61,7 +61,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep WholeStageCodegen (9) Project [cs_ship_customer_sk] BroadcastHashJoin [cs_sold_date_sk,d_date_sk] - Filter [cs_sold_date_sk] + Filter [cs_ship_customer_sk,cs_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_ship_customer_sk,cs_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/explain.txt index 182e040762cdb..4c279c5f7afc4 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/explain.txt @@ -53,7 +53,7 @@ TakeOrderedAndProject (48) Output [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 9] @@ -61,13 +61,13 @@ Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (3) Filter [codegen id : 9] 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)) +Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND isnotnull(c_customer_sk#1)) (4) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#4, ss_customer_sk#5] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (5) ColumnarToRow [codegen id : 2] @@ -75,7 +75,7 @@ Input [2]: [ss_sold_date_sk#4, ss_customer_sk#5] (6) Filter [codegen id : 2] Input [2]: [ss_sold_date_sk#4, ss_customer_sk#5] -Condition : isnotnull(ss_sold_date_sk#4) +Condition : (isnotnull(ss_sold_date_sk#4) AND isnotnull(ss_customer_sk#5)) (7) Scan parquet default.date_dim Output [3]: [d_date_sk#6, d_year#7, d_moy#8] @@ -121,7 +121,7 @@ Join condition: None Output [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_sold_date_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 4] @@ -129,7 +129,7 @@ Input [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12] (18) Filter [codegen id : 4] Input [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12] -Condition : isnotnull(ws_sold_date_sk#11) +Condition : (isnotnull(ws_sold_date_sk#11) AND isnotnull(ws_bill_customer_sk#12)) (19) ReusedExchange [Reuses operator id: 11] Output [1]: [d_date_sk#6] @@ -147,7 +147,7 @@ Input [3]: [ws_sold_date_sk#11, ws_bill_customer_sk#12, d_date_sk#6] Output [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_sold_date_sk)] +PushedFilters: [IsNotNull(cs_sold_date_sk), IsNotNull(cs_ship_customer_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 6] @@ -155,7 +155,7 @@ Input [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15] (24) Filter [codegen id : 6] Input [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15] -Condition : isnotnull(cs_sold_date_sk#14) +Condition : (isnotnull(cs_sold_date_sk#14) AND isnotnull(cs_ship_customer_sk#15)) (25) ReusedExchange [Reuses operator id: 11] Output [1]: [d_date_sk#6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/simplified.txt index 90105ffd73ea8..b3bbbcb360422 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/simplified.txt @@ -12,7 +12,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep Project [c_current_addr_sk,c_current_cdemo_sk] BroadcastHashJoin [c_customer_sk,customer_sk] BroadcastHashJoin [c_customer_sk,ss_customer_sk] - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -21,7 +21,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep WholeStageCodegen (2) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] @@ -39,7 +39,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep WholeStageCodegen (4) Project [ws_bill_customer_sk] BroadcastHashJoin [d_date_sk,ws_sold_date_sk] - Filter [ws_sold_date_sk] + Filter [ws_bill_customer_sk,ws_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_bill_customer_sk,ws_sold_date_sk] @@ -48,7 +48,7 @@ TakeOrderedAndProject [cd_credit_rating,cd_dep_college_count,cd_dep_count,cd_dep WholeStageCodegen (6) Project [cs_ship_customer_sk] BroadcastHashJoin [cs_sold_date_sk,d_date_sk] - Filter [cs_sold_date_sk] + Filter [cs_ship_customer_sk,cs_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_ship_customer_sk,cs_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/explain.txt index 583f88961a836..29051a217e88c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/explain.txt @@ -137,7 +137,7 @@ Arguments: [ss_item_sk#2 ASC NULLS FIRST], false, 0 Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_category_id), IsNotNull(i_class_id)] +PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 17] @@ -145,7 +145,7 @@ Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (8) Filter [codegen id : 17] Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] -Condition : ((isnotnull(i_brand_id#7) AND isnotnull(i_category_id#9)) AND isnotnull(i_class_id#8)) +Condition : (((isnotnull(i_brand_id#7) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) AND isnotnull(i_item_sk#6)) (9) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#1, ss_item_sk#2] @@ -196,7 +196,7 @@ Input [3]: [ss_sold_date_sk#1, ss_item_sk#2, d_date_sk#10] Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_category_id), IsNotNull(i_class_id), IsNotNull(i_brand_id)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_brand_id)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] @@ -204,7 +204,7 @@ Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (21) Filter [codegen id : 4] Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] -Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_category_id#9)) AND isnotnull(i_class_id#8)) AND isnotnull(i_brand_id#7)) +Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) AND isnotnull(i_brand_id#7)) (22) BroadcastExchange Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] @@ -437,7 +437,7 @@ Input [5]: [ss_sold_date_sk#1, ss_item_sk#2, ss_quantity#3, ss_list_price#4, d_d Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_category_id), IsNotNull(i_class_id), IsNotNull(i_brand_id)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_category_id), IsNotNull(i_brand_id), IsNotNull(i_class_id)] ReadSchema: struct (73) ColumnarToRow [codegen id : 20] @@ -445,7 +445,7 @@ Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (74) Filter [codegen id : 20] Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] -Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_category_id#9)) AND isnotnull(i_class_id#8)) AND isnotnull(i_brand_id#7)) +Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_category_id#9)) AND isnotnull(i_brand_id#7)) AND isnotnull(i_class_id#8)) (75) Exchange Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] @@ -766,7 +766,7 @@ Subquery:2 Hosting operator id = 67 Hosting Expression = Subquery scalar-subquer Output [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_moy), IsNotNull(d_dom), IsNotNull(d_year), EqualTo(d_year,1999), EqualTo(d_moy,12), EqualTo(d_dom,16)] +PushedFilters: [IsNotNull(d_year), IsNotNull(d_dom), IsNotNull(d_moy), EqualTo(d_year,1999), EqualTo(d_moy,12), EqualTo(d_dom,16)] ReadSchema: struct (138) ColumnarToRow [codegen id : 1] @@ -774,7 +774,7 @@ Input [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] (139) Filter [codegen id : 1] Input [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] -Condition : (((((isnotnull(d_moy#89) AND isnotnull(d_dom#90)) AND isnotnull(d_year#11)) AND (d_year#11 = 1999)) AND (d_moy#89 = 12)) AND (d_dom#90 = 16)) +Condition : (((((isnotnull(d_year#11) AND isnotnull(d_dom#90)) AND isnotnull(d_moy#89)) AND (d_year#11 = 1999)) AND (d_moy#89 = 12)) AND (d_dom#90 = 16)) (140) Project [codegen id : 1] Output [1]: [d_week_seq#29] @@ -793,7 +793,7 @@ Subquery:4 Hosting operator id = 95 Hosting Expression = Subquery scalar-subquer Output [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] -PushedFilters: [IsNotNull(d_moy), IsNotNull(d_dom), IsNotNull(d_year), EqualTo(d_year,1998), EqualTo(d_moy,12), EqualTo(d_dom,16)] +PushedFilters: [IsNotNull(d_year), IsNotNull(d_dom), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,12), EqualTo(d_dom,16)] ReadSchema: struct (142) ColumnarToRow [codegen id : 1] @@ -801,7 +801,7 @@ Input [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] (143) Filter [codegen id : 1] Input [4]: [d_week_seq#29, d_year#11, d_moy#89, d_dom#90] -Condition : (((((isnotnull(d_moy#89) AND isnotnull(d_dom#90)) AND isnotnull(d_year#11)) AND (d_year#11 = 1998)) AND (d_moy#89 = 12)) AND (d_dom#90 = 16)) +Condition : (((((isnotnull(d_year#11) AND isnotnull(d_dom#90)) AND isnotnull(d_moy#89)) AND (d_year#11 = 1998)) AND (d_moy#89 = 12)) AND (d_dom#90 = 16)) (144) Project [codegen id : 1] Output [1]: [d_week_seq#29] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/simplified.txt index 5141d40e7325b..ee77670ddc6b3 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/simplified.txt @@ -72,7 +72,7 @@ TakeOrderedAndProject [channel,channel,i_brand_id,i_brand_id,i_category_id,i_cat WholeStageCodegen (17) Project [i_item_sk] BroadcastHashJoin [brand_id,category_id,class_id,i_brand_id,i_category_id,i_class_id] - Filter [i_brand_id,i_category_id,i_class_id] + Filter [i_brand_id,i_category_id,i_class_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_brand_id,i_category_id,i_class_id,i_item_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/explain.txt index 983e96981c031..f9780c6463471 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/explain.txt @@ -119,7 +119,7 @@ Condition : (isnotnull(ss_item_sk#2) AND isnotnull(ss_sold_date_sk#1)) Output [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_brand_id)] +PushedFilters: [IsNotNull(i_class_id), IsNotNull(i_brand_id), IsNotNull(i_category_id), IsNotNull(i_item_sk)] ReadSchema: struct (5) ColumnarToRow [codegen id : 11] @@ -127,7 +127,7 @@ Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] (6) Filter [codegen id : 11] Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] -Condition : ((isnotnull(i_class_id#7) AND isnotnull(i_category_id#8)) AND isnotnull(i_brand_id#6)) +Condition : (((isnotnull(i_class_id#7) AND isnotnull(i_brand_id#6)) AND isnotnull(i_category_id#8)) AND isnotnull(i_item_sk#5)) (7) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#1, ss_item_sk#2] @@ -147,7 +147,7 @@ Condition : (isnotnull(ss_item_sk#2) AND isnotnull(ss_sold_date_sk#1)) Output [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_category_id), IsNotNull(i_class_id)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_brand_id)] ReadSchema: struct (11) ColumnarToRow [codegen id : 1] @@ -155,7 +155,7 @@ Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] (12) Filter [codegen id : 1] Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] -Condition : (((isnotnull(i_item_sk#5) AND isnotnull(i_brand_id#6)) AND isnotnull(i_category_id#8)) AND isnotnull(i_class_id#7)) +Condition : (((isnotnull(i_item_sk#5) AND isnotnull(i_class_id#7)) AND isnotnull(i_category_id#8)) AND isnotnull(i_brand_id#6)) (13) BroadcastExchange Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/simplified.txt index f1668ea399807..7892b6727f9a3 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/simplified.txt @@ -64,7 +64,7 @@ TakeOrderedAndProject [channel,channel,i_brand_id,i_brand_id,i_category_id,i_cat WholeStageCodegen (11) Project [i_item_sk] BroadcastHashJoin [brand_id,category_id,class_id,i_brand_id,i_category_id,i_class_id] - Filter [i_brand_id,i_category_id,i_class_id] + Filter [i_brand_id,i_category_id,i_class_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_brand_id,i_category_id,i_class_id,i_item_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/explain.txt index 0a76360d004ca..564d9e26c14ec 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/explain.txt @@ -249,7 +249,7 @@ Arguments: [ss_item_sk#2 ASC NULLS FIRST], false, 0 Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_category_id), IsNotNull(i_class_id)] +PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 17] @@ -257,7 +257,7 @@ Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (8) Filter [codegen id : 17] Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] -Condition : ((isnotnull(i_brand_id#7) AND isnotnull(i_category_id#9)) AND isnotnull(i_class_id#8)) +Condition : (((isnotnull(i_brand_id#7) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) AND isnotnull(i_item_sk#6)) (9) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#1, ss_item_sk#2] @@ -308,7 +308,7 @@ Input [3]: [ss_sold_date_sk#1, ss_item_sk#2, d_date_sk#10] Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_category_id), IsNotNull(i_class_id)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_brand_id)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] @@ -316,7 +316,7 @@ Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (21) Filter [codegen id : 4] Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] -Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_brand_id#7)) AND isnotnull(i_category_id#9)) AND isnotnull(i_class_id#8)) +Condition : (((isnotnull(i_item_sk#6) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) AND isnotnull(i_brand_id#7)) (22) BroadcastExchange Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/simplified.txt index 7a78f19e5cc99..7788bce034636 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/simplified.txt @@ -117,7 +117,7 @@ TakeOrderedAndProject [channel,i_brand_id,i_category_id,i_class_id,number_sales, WholeStageCodegen (17) Project [i_item_sk] BroadcastHashJoin [brand_id,category_id,class_id,i_brand_id,i_category_id,i_class_id] - Filter [i_brand_id,i_category_id,i_class_id] + Filter [i_brand_id,i_category_id,i_class_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_brand_id,i_category_id,i_class_id,i_item_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/explain.txt index e5afd3736c60c..659b589d961c7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/explain.txt @@ -225,7 +225,7 @@ Condition : (isnotnull(ss_item_sk#2) AND isnotnull(ss_sold_date_sk#1)) Output [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_brand_id)] +PushedFilters: [IsNotNull(i_class_id), IsNotNull(i_brand_id), IsNotNull(i_category_id), IsNotNull(i_item_sk)] ReadSchema: struct (5) ColumnarToRow [codegen id : 11] @@ -233,7 +233,7 @@ Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] (6) Filter [codegen id : 11] Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] -Condition : ((isnotnull(i_class_id#7) AND isnotnull(i_category_id#8)) AND isnotnull(i_brand_id#6)) +Condition : (((isnotnull(i_class_id#7) AND isnotnull(i_brand_id#6)) AND isnotnull(i_category_id#8)) AND isnotnull(i_item_sk#5)) (7) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#1, ss_item_sk#2] @@ -253,7 +253,7 @@ Condition : (isnotnull(ss_item_sk#2) AND isnotnull(ss_sold_date_sk#1)) Output [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] Batched: true Location [not included in comparison]/{warehouse_dir}/item] -PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] +PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_class_id), IsNotNull(i_brand_id), IsNotNull(i_category_id)] ReadSchema: struct (11) ColumnarToRow [codegen id : 1] @@ -261,7 +261,7 @@ Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] (12) Filter [codegen id : 1] Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] -Condition : (((isnotnull(i_item_sk#5) AND isnotnull(i_brand_id#6)) AND isnotnull(i_class_id#7)) AND isnotnull(i_category_id#8)) +Condition : (((isnotnull(i_item_sk#5) AND isnotnull(i_class_id#7)) AND isnotnull(i_brand_id#6)) AND isnotnull(i_category_id#8)) (13) BroadcastExchange Input [4]: [i_item_sk#5, i_brand_id#6, i_class_id#7, i_category_id#8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/simplified.txt index a329e40a70bbe..213437e439b4d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/simplified.txt @@ -109,7 +109,7 @@ TakeOrderedAndProject [channel,i_brand_id,i_category_id,i_class_id,number_sales, WholeStageCodegen (11) Project [i_item_sk] BroadcastHashJoin [brand_id,category_id,class_id,i_brand_id,i_category_id,i_class_id] - Filter [i_brand_id,i_category_id,i_class_id] + Filter [i_brand_id,i_category_id,i_class_id,i_item_sk] ColumnarToRow InputAdapter Scan parquet default.item [i_brand_id,i_category_id,i_class_id,i_item_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/explain.txt index d38804d4f0422..13c11898fd691 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/explain.txt @@ -65,7 +65,7 @@ TakeOrderedAndProject (60) Output [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -73,7 +73,7 @@ Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] (3) 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)) +Condition : ((isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4)) AND isnotnull(c_customer_sk#3)) (4) Exchange Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] @@ -87,7 +87,7 @@ Arguments: [c_customer_sk#3 ASC NULLS FIRST], false, 0 Output [2]: [ss_sold_date_sk#7, ss_customer_sk#8] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] @@ -95,7 +95,7 @@ Input [2]: [ss_sold_date_sk#7, ss_customer_sk#8] (8) Filter [codegen id : 4] Input [2]: [ss_sold_date_sk#7, ss_customer_sk#8] -Condition : isnotnull(ss_sold_date_sk#7) +Condition : (isnotnull(ss_sold_date_sk#7) AND isnotnull(ss_customer_sk#8)) (9) Scan parquet default.date_dim Output [3]: [d_date_sk#9, d_year#10, d_qoy#11] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/simplified.txt index 3e21f6dae18d6..0be550ebfbc7b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/simplified.txt @@ -32,7 +32,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em InputAdapter Exchange [c_customer_sk] #4 WholeStageCodegen (1) - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -43,7 +43,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em WholeStageCodegen (4) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/explain.txt index e091e512afba8..ea10515b45d04 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/explain.txt @@ -54,7 +54,7 @@ TakeOrderedAndProject (49) Output [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 9] @@ -62,13 +62,13 @@ Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] (3) Filter [codegen id : 9] 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)) +Condition : ((isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4)) AND isnotnull(c_customer_sk#3)) (4) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#6, ss_customer_sk#7] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (5) ColumnarToRow [codegen id : 2] @@ -76,7 +76,7 @@ Input [2]: [ss_sold_date_sk#6, ss_customer_sk#7] (6) Filter [codegen id : 2] Input [2]: [ss_sold_date_sk#6, ss_customer_sk#7] -Condition : isnotnull(ss_sold_date_sk#6) +Condition : (isnotnull(ss_sold_date_sk#6) AND isnotnull(ss_customer_sk#7)) (7) Scan parquet default.date_dim Output [3]: [d_date_sk#8, d_year#9, d_qoy#10] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/simplified.txt index 2da6d615fe17d..a674baaa478a5 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/simplified.txt @@ -14,7 +14,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em BroadcastHashJoin [c_customer_sk,cs_ship_customer_sk] BroadcastHashJoin [c_customer_sk,ws_bill_customer_sk] BroadcastHashJoin [c_customer_sk,ss_customer_sk] - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -23,7 +23,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em WholeStageCodegen (2) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/explain.txt index b08d2174e5974..c78e6bfdc5652 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/explain.txt @@ -62,7 +62,7 @@ TakeOrderedAndProject (57) Output [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -70,7 +70,7 @@ Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (3) 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)) +Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND isnotnull(c_customer_sk#1)) (4) Exchange Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] @@ -84,7 +84,7 @@ Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0 Output [2]: [ss_sold_date_sk#5, ss_customer_sk#6] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] @@ -92,7 +92,7 @@ Input [2]: [ss_sold_date_sk#5, ss_customer_sk#6] (8) Filter [codegen id : 4] Input [2]: [ss_sold_date_sk#5, ss_customer_sk#6] -Condition : isnotnull(ss_sold_date_sk#5) +Condition : (isnotnull(ss_sold_date_sk#5) AND isnotnull(ss_customer_sk#6)) (9) Scan parquet default.date_dim Output [3]: [d_date_sk#7, d_year#8, d_qoy#9] @@ -142,7 +142,7 @@ Join condition: None Output [2]: [ws_sold_date_sk#12, ws_bill_customer_sk#13] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_sold_date_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 7] @@ -150,7 +150,7 @@ Input [2]: [ws_sold_date_sk#12, ws_bill_customer_sk#13] (21) Filter [codegen id : 7] Input [2]: [ws_sold_date_sk#12, ws_bill_customer_sk#13] -Condition : isnotnull(ws_sold_date_sk#12) +Condition : (isnotnull(ws_sold_date_sk#12) AND isnotnull(ws_bill_customer_sk#13)) (22) ReusedExchange [Reuses operator id: 13] Output [1]: [d_date_sk#7] @@ -168,7 +168,7 @@ Input [3]: [ws_sold_date_sk#12, ws_bill_customer_sk#13, d_date_sk#7] Output [2]: [cs_sold_date_sk#15, cs_ship_customer_sk#16] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_sold_date_sk)] +PushedFilters: [IsNotNull(cs_sold_date_sk), IsNotNull(cs_ship_customer_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 9] @@ -176,7 +176,7 @@ Input [2]: [cs_sold_date_sk#15, cs_ship_customer_sk#16] (27) Filter [codegen id : 9] Input [2]: [cs_sold_date_sk#15, cs_ship_customer_sk#16] -Condition : isnotnull(cs_sold_date_sk#15) +Condition : (isnotnull(cs_sold_date_sk#15) AND isnotnull(cs_ship_customer_sk#16)) (28) ReusedExchange [Reuses operator id: 13] Output [1]: [d_date_sk#7] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/simplified.txt index 2840f275ff2b7..92541f5d2c17c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/simplified.txt @@ -30,7 +30,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em InputAdapter Exchange [c_customer_sk] #4 WholeStageCodegen (1) - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -41,7 +41,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em WholeStageCodegen (4) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] @@ -61,7 +61,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em WholeStageCodegen (7) Project [ws_bill_customer_sk] BroadcastHashJoin [d_date_sk,ws_sold_date_sk] - Filter [ws_sold_date_sk] + Filter [ws_bill_customer_sk,ws_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_bill_customer_sk,ws_sold_date_sk] @@ -70,7 +70,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em WholeStageCodegen (9) Project [cs_ship_customer_sk] BroadcastHashJoin [cs_sold_date_sk,d_date_sk] - Filter [cs_sold_date_sk] + Filter [cs_ship_customer_sk,cs_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_ship_customer_sk,cs_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/explain.txt index 847b5cf66c3e0..d46d73d05c068 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/explain.txt @@ -52,7 +52,7 @@ TakeOrderedAndProject (47) Output [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] -PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk)] +PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 9] @@ -60,13 +60,13 @@ Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (3) Filter [codegen id : 9] 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)) +Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) AND isnotnull(c_customer_sk#1)) (4) Scan parquet default.store_sales Output [2]: [ss_sold_date_sk#4, ss_customer_sk#5] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] -PushedFilters: [IsNotNull(ss_sold_date_sk)] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (5) ColumnarToRow [codegen id : 2] @@ -74,7 +74,7 @@ Input [2]: [ss_sold_date_sk#4, ss_customer_sk#5] (6) Filter [codegen id : 2] Input [2]: [ss_sold_date_sk#4, ss_customer_sk#5] -Condition : isnotnull(ss_sold_date_sk#4) +Condition : (isnotnull(ss_sold_date_sk#4) AND isnotnull(ss_customer_sk#5)) (7) Scan parquet default.date_dim Output [3]: [d_date_sk#6, d_year#7, d_qoy#8] @@ -120,7 +120,7 @@ Join condition: None Output [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_sold_date_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 4] @@ -128,7 +128,7 @@ Input [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12] (18) Filter [codegen id : 4] Input [2]: [ws_sold_date_sk#11, ws_bill_customer_sk#12] -Condition : isnotnull(ws_sold_date_sk#11) +Condition : (isnotnull(ws_sold_date_sk#11) AND isnotnull(ws_bill_customer_sk#12)) (19) ReusedExchange [Reuses operator id: 11] Output [1]: [d_date_sk#6] @@ -146,7 +146,7 @@ Input [3]: [ws_sold_date_sk#11, ws_bill_customer_sk#12, d_date_sk#6] Output [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] -PushedFilters: [IsNotNull(cs_sold_date_sk)] +PushedFilters: [IsNotNull(cs_sold_date_sk), IsNotNull(cs_ship_customer_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 6] @@ -154,7 +154,7 @@ Input [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15] (24) Filter [codegen id : 6] Input [2]: [cs_sold_date_sk#14, cs_ship_customer_sk#15] -Condition : isnotnull(cs_sold_date_sk#14) +Condition : (isnotnull(cs_sold_date_sk#14) AND isnotnull(cs_ship_customer_sk#15)) (25) ReusedExchange [Reuses operator id: 11] Output [1]: [d_date_sk#6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/simplified.txt index 054296501acf2..a39818d9aa65e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/simplified.txt @@ -12,7 +12,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em Project [c_current_addr_sk,c_current_cdemo_sk] BroadcastHashJoin [c_customer_sk,customsk] BroadcastHashJoin [c_customer_sk,ss_customer_sk] - Filter [c_current_addr_sk,c_current_cdemo_sk] + Filter [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] ColumnarToRow InputAdapter Scan parquet default.customer [c_current_addr_sk,c_current_cdemo_sk,c_customer_sk] @@ -21,7 +21,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em WholeStageCodegen (2) Project [ss_customer_sk] BroadcastHashJoin [d_date_sk,ss_sold_date_sk] - Filter [ss_sold_date_sk] + Filter [ss_customer_sk,ss_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk] @@ -39,7 +39,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em WholeStageCodegen (4) Project [ws_bill_customer_sk] BroadcastHashJoin [d_date_sk,ws_sold_date_sk] - Filter [ws_sold_date_sk] + Filter [ws_bill_customer_sk,ws_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_sales [ws_bill_customer_sk,ws_sold_date_sk] @@ -48,7 +48,7 @@ TakeOrderedAndProject [avg(cd_dep_college_count),avg(cd_dep_count),avg(cd_dep_em WholeStageCodegen (6) Project [cs_ship_customer_sk] BroadcastHashJoin [cs_sold_date_sk,d_date_sk] - Filter [cs_sold_date_sk] + Filter [cs_ship_customer_sk,cs_sold_date_sk] ColumnarToRow InputAdapter Scan parquet default.catalog_sales [cs_ship_customer_sk,cs_sold_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/explain.txt index 471d38c89e601..009aaa83217cb 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/explain.txt @@ -103,6 +103,7 @@ TakeOrderedAndProject (98) Output [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -110,7 +111,7 @@ Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profi (3) Filter [codegen id : 1] Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4] -Condition : (isnotnull(cast(ss_sold_date_sk#1 as bigint)) AND isnotnull(cast(ss_store_sk#2 as bigint))) +Condition : (((isnotnull(ss_sold_date_sk#1) AND isnotnull(ss_store_sk#2)) AND isnotnull(cast(ss_sold_date_sk#1 as bigint))) AND isnotnull(cast(ss_store_sk#2 as bigint))) (4) Project [codegen id : 1] Output [6]: [cast(ss_store_sk#2 as bigint) AS store_sk#5, cast(ss_sold_date_sk#1 as bigint) AS date_sk#6, ss_ext_sales_price#3 AS sales_price#7, ss_net_profit#4 AS profit#8, 0.00 AS return_amt#9, 0.00 AS net_loss#10] @@ -311,7 +312,7 @@ Results [5]: [catalog channel AS channel#81, concat(catalog_page, cp_catalog_pag Output [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net_profit#89] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_web_site_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_web_site_sk)] ReadSchema: struct (48) ColumnarToRow [codegen id : 13] @@ -319,7 +320,7 @@ Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net (49) Filter [codegen id : 13] Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net_profit#89] -Condition : (isnotnull(cast(ws_sold_date_sk#86 as bigint)) AND isnotnull(ws_web_site_sk#87)) +Condition : ((isnotnull(ws_sold_date_sk#86) AND isnotnull(cast(ws_sold_date_sk#86 as bigint))) AND isnotnull(ws_web_site_sk#87)) (50) Project [codegen id : 13] Output [6]: [ws_web_site_sk#87 AS wsr_web_site_sk#90, cast(ws_sold_date_sk#86 as bigint) AS date_sk#91, ws_ext_sales_price#88 AS sales_price#92, ws_net_profit#89 AS profit#93, 0.00 AS return_amt#94, 0.00 AS net_loss#95] @@ -329,7 +330,7 @@ Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net Output [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return_amt#99, wr_net_loss#100] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] -PushedFilters: [IsNotNull(wr_returned_date_sk)] +PushedFilters: [IsNotNull(wr_returned_date_sk), IsNotNull(wr_item_sk), IsNotNull(wr_order_number)] ReadSchema: struct (52) ColumnarToRow [codegen id : 14] @@ -337,7 +338,7 @@ Input [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return (53) Filter [codegen id : 14] Input [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return_amt#99, wr_net_loss#100] -Condition : isnotnull(wr_returned_date_sk#96) +Condition : ((isnotnull(wr_returned_date_sk#96) AND isnotnull(wr_item_sk#97)) AND isnotnull(wr_order_number#98)) (54) Exchange Input [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return_amt#99, wr_net_loss#100] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/simplified.txt index 209f65e8d333e..12e3c2ed8403c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/simplified.txt @@ -122,7 +122,7 @@ TakeOrderedAndProject [channel,id,profit,returns,sales] InputAdapter Exchange [wr_item_sk,wr_order_number] #10 WholeStageCodegen (14) - Filter [wr_returned_date_sk] + Filter [wr_item_sk,wr_order_number,wr_returned_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_returns [wr_item_sk,wr_net_loss,wr_order_number,wr_return_amt,wr_returned_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/explain.txt index fa2435de73e02..7b6710815283b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/explain.txt @@ -100,6 +100,7 @@ TakeOrderedAndProject (95) Output [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] +PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (2) ColumnarToRow [codegen id : 1] @@ -107,7 +108,7 @@ Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profi (3) Filter [codegen id : 1] Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4] -Condition : (isnotnull(cast(ss_sold_date_sk#1 as bigint)) AND isnotnull(cast(ss_store_sk#2 as bigint))) +Condition : (((isnotnull(ss_sold_date_sk#1) AND isnotnull(ss_store_sk#2)) AND isnotnull(cast(ss_sold_date_sk#1 as bigint))) AND isnotnull(cast(ss_store_sk#2 as bigint))) (4) Project [codegen id : 1] Output [6]: [cast(ss_store_sk#2 as bigint) AS store_sk#5, cast(ss_sold_date_sk#1 as bigint) AS date_sk#6, ss_ext_sales_price#3 AS sales_price#7, ss_net_profit#4 AS profit#8, 0.00 AS return_amt#9, 0.00 AS net_loss#10] @@ -308,7 +309,7 @@ Results [5]: [catalog channel AS channel#81, concat(catalog_page, cp_catalog_pag Output [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net_profit#89] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] -PushedFilters: [IsNotNull(ws_web_site_sk)] +PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_web_site_sk)] ReadSchema: struct (48) ColumnarToRow [codegen id : 13] @@ -316,7 +317,7 @@ Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net (49) Filter [codegen id : 13] Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net_profit#89] -Condition : (isnotnull(cast(ws_sold_date_sk#86 as bigint)) AND isnotnull(ws_web_site_sk#87)) +Condition : ((isnotnull(ws_sold_date_sk#86) AND isnotnull(cast(ws_sold_date_sk#86 as bigint))) AND isnotnull(ws_web_site_sk#87)) (50) Project [codegen id : 13] Output [6]: [ws_web_site_sk#87 AS wsr_web_site_sk#90, cast(ws_sold_date_sk#86 as bigint) AS date_sk#91, ws_ext_sales_price#88 AS sales_price#92, ws_net_profit#89 AS profit#93, 0.00 AS return_amt#94, 0.00 AS net_loss#95] @@ -326,7 +327,7 @@ Input [4]: [ws_sold_date_sk#86, ws_web_site_sk#87, ws_ext_sales_price#88, ws_net Output [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return_amt#99, wr_net_loss#100] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] -PushedFilters: [IsNotNull(wr_returned_date_sk)] +PushedFilters: [IsNotNull(wr_returned_date_sk), IsNotNull(wr_order_number), IsNotNull(wr_item_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 15] @@ -334,7 +335,7 @@ Input [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return (53) Filter [codegen id : 15] Input [5]: [wr_returned_date_sk#96, wr_item_sk#97, wr_order_number#98, wr_return_amt#99, wr_net_loss#100] -Condition : isnotnull(wr_returned_date_sk#96) +Condition : ((isnotnull(wr_returned_date_sk#96) AND isnotnull(wr_order_number#98)) AND isnotnull(wr_item_sk#97)) (54) Scan parquet default.web_sales Output [3]: [ws_item_sk#101, ws_web_site_sk#87, ws_order_number#102] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/simplified.txt index 77d7d6f938665..deb094d75b305 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/simplified.txt @@ -116,7 +116,7 @@ TakeOrderedAndProject [channel,id,profit,returns,sales] WholeStageCodegen (15) Project [wr_net_loss,wr_return_amt,wr_returned_date_sk,ws_web_site_sk] BroadcastHashJoin [wr_item_sk,wr_order_number,ws_item_sk,ws_order_number] - Filter [wr_returned_date_sk] + Filter [wr_item_sk,wr_order_number,wr_returned_date_sk] ColumnarToRow InputAdapter Scan parquet default.web_returns [wr_item_sk,wr_net_loss,wr_order_number,wr_return_amt,wr_returned_date_sk] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/explain.txt index 628ca0ad4711c..d0728d4a991c2 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/explain.txt @@ -114,7 +114,7 @@ Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_net_profit#3, d_date_sk#4] Output [3]: [s_store_sk#7, s_county#8, s_state#9] Batched: true Location [not included in comparison]/{warehouse_dir}/store] -PushedFilters: [IsNotNull(s_store_sk)] +PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_state)] ReadSchema: struct (12) ColumnarToRow [codegen id : 8] @@ -122,7 +122,7 @@ Input [3]: [s_store_sk#7, s_county#8, s_state#9] (13) Filter [codegen id : 8] Input [3]: [s_store_sk#7, s_county#8, s_state#9] -Condition : isnotnull(s_store_sk#7) +Condition : (isnotnull(s_store_sk#7) AND isnotnull(s_state#9)) (14) Scan parquet default.store_sales Output [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_net_profit#3] @@ -209,7 +209,7 @@ Arguments: [rank(_w2#16) windowspecdefinition(s_state#9, _w2#16 DESC NULLS LAST, (32) Filter [codegen id : 7] Input [4]: [s_state#15, s_state#9, _w2#16, ranking#18] -Condition : (isnotnull(ranking#18) AND (ranking#18 <= 5)) +Condition : ((isnotnull(ranking#18) AND (ranking#18 <= 5)) AND isnotnull(s_state#15)) (33) Project [codegen id : 7] Output [1]: [s_state#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/simplified.txt index f99d2b02f8429..b7ae9cc169011 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/simplified.txt @@ -49,7 +49,7 @@ TakeOrderedAndProject [lochierarchy,rank_within_parent,s_county,s_state,total_su BroadcastExchange #6 WholeStageCodegen (8) BroadcastHashJoin [s_state,s_state] - Filter [s_store_sk] + Filter [s_state,s_store_sk] ColumnarToRow InputAdapter Scan parquet default.store [s_county,s_state,s_store_sk] @@ -57,7 +57,7 @@ TakeOrderedAndProject [lochierarchy,rank_within_parent,s_county,s_state,total_su BroadcastExchange #7 WholeStageCodegen (7) Project [s_state] - Filter [ranking] + Filter [ranking,s_state] InputAdapter Window [_w2,s_state] WholeStageCodegen (6) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/explain.txt index 705d1b3f91342..ce27c26cf3100 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/explain.txt @@ -114,7 +114,7 @@ Input [4]: [ss_sold_date_sk#1, ss_store_sk#2, ss_net_profit#3, d_date_sk#4] Output [3]: [s_store_sk#7, s_county#8, s_state#9] Batched: true Location [not included in comparison]/{warehouse_dir}/store] -PushedFilters: [IsNotNull(s_store_sk)] +PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_state)] ReadSchema: struct (12) ColumnarToRow [codegen id : 8] @@ -122,7 +122,7 @@ Input [3]: [s_store_sk#7, s_county#8, s_state#9] (13) Filter [codegen id : 8] Input [3]: [s_store_sk#7, s_county#8, s_state#9] -Condition : isnotnull(s_store_sk#7) +Condition : (isnotnull(s_store_sk#7) AND isnotnull(s_state#9)) (14) Scan parquet default.store_sales Output [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_net_profit#3] @@ -209,7 +209,7 @@ Arguments: [rank(_w2#16) windowspecdefinition(s_state#9, _w2#16 DESC NULLS LAST, (32) Filter [codegen id : 7] Input [4]: [s_state#15, s_state#9, _w2#16, ranking#18] -Condition : (isnotnull(ranking#18) AND (ranking#18 <= 5)) +Condition : ((isnotnull(ranking#18) AND (ranking#18 <= 5)) AND isnotnull(s_state#15)) (33) Project [codegen id : 7] Output [1]: [s_state#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/simplified.txt index 1cf0fbbea7ac6..7bf6770f4bb98 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/simplified.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/simplified.txt @@ -49,7 +49,7 @@ TakeOrderedAndProject [lochierarchy,rank_within_parent,s_county,s_state,total_su BroadcastExchange #6 WholeStageCodegen (8) BroadcastHashJoin [s_state,s_state] - Filter [s_store_sk] + Filter [s_state,s_store_sk] ColumnarToRow InputAdapter Scan parquet default.store [s_county,s_state,s_store_sk] @@ -57,7 +57,7 @@ TakeOrderedAndProject [lochierarchy,rank_within_parent,s_county,s_state,total_su BroadcastExchange #7 WholeStageCodegen (7) Project [s_state] - Filter [ranking] + Filter [ranking,s_state] InputAdapter Window [_w2,s_state] WholeStageCodegen (6)