Skip to content

TPCDS Queries

Harish Butani edited this page Nov 22, 2020 · 4 revisions

generated at Sat Nov 21 21:22:43 PST 2020; commit is 6204be5c0f5ff827c1ea318df1cf897484ab5539

[[TOC]]

Query q1

Spark SQL

 with customer_total_return as
(select sr_customer_sk as ctr_customer_sk
,sr_store_sk as ctr_store_sk
,sum(SR_RETURN_AMT) as ctr_total_return
from store_returns
,date_dim
where sr_returned_date_sk = d_date_sk
and d_year =2000
group by sr_customer_sk
,sr_store_sk)
 select  c_customer_id
from customer_total_return ctr1
,store
,customer
where ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2
from customer_total_return ctr2
where ctr1.ctr_store_sk = ctr2.ctr_store_sk)
and s_store_sk = ctr1.ctr_store_sk
and s_state = 'TN'
and ctr1.ctr_customer_sk = c_customer_sk
order by c_customer_id
 limit 100; 

Spark Plan with Pushdown turned on

== Physical Plan ==
TakeOrderedAndProject (3)
+- * Project (2)
   +- BatchScan (1)


(1) BatchScan
Output [1]: [c_customer_id#279]
OraPlan: 00 OraSingleQueryBlock [c_customer_id#279], [oracolumnref(c_customer_id#279)], orabinaryopexpression((isnotnull(ctr_total_return#200) AND (isnotnull(S_STATE#273) AND (S_STATE#273 = TN))))
01 :- OraSingleQueryBlock [sr_customer_sk#204 AS ctr_customer_sk#198, sr_store_sk#208 AS ctr_store_sk#199, sum(SR_RETURN_AMT#212) AS ctr_total_return#200], [oraalias(sr_customer_sk#204 AS ctr_customer_sk#198), oraalias(sr_store_sk#208 AS ctr_store_sk#199), oraalias(sum(SR_RETURN_AMT#212) AS ctr_total_return#200)], orabinaryopexpression(((isnotnull(SR_STORE_SK#208) AND isnotnull(SR_CUSTOMER_SK#204)) AND (isnotnull(D_YEAR#227) AND (D_YEAR#227 = 2000.000000000000000000)))), List(oracolumnref(sr_customer_sk#204), oracolumnref(sr_store_sk#208))
02 :  :- OraTableScan TPCDS.STORE_RETURNS, [SR_CUSTOMER_SK#204, SR_STORE_SK#208, SR_RETURN_AMT#212, SR_RETURNED_DATE_SK#201]
03 :  +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#221, D_YEAR#227]
04 :- OraSingleQueryBlock [(CAST(avg(ctr_total_return) AS DECIMAL(38,22)) * CAST(1.2 AS DECIMAL(38,22)))#347, ctr_store_sk#199#349], [oracolumnref((CAST(avg(ctr_total_return) AS DECIMAL(38,22)) * CAST(1.2 AS DECIMAL(38,22)))#347), oracolumnref(ctr_store_sk#199#349)], orapostfixunaryopexpression(isnotnull((CAST(avg(ctr_total_return) AS DECIMAL(38,22)) * CAST(1.2 AS DECIMAL(38,22)))#347))
05 :  +- OraSingleQueryBlock [CheckOverflow((promote_precision(avg(ctr_total_return#200)) * 1.2000000000000000000000), DecimalType(38,20), true) AS (CAST(avg(ctr_total_return) AS DECIMAL(38,22)) * CAST(1.2 AS DECIMAL(38,22)))#347, ctr_store_sk#199 AS ctr_store_sk#199#349], [oraalias(CheckOverflow((promote_precision(avg(ctr_total_return#200)) * 1.2000000000000000000000), DecimalType(38,20), true) AS (CAST(avg(ctr_total_return) AS DECIMAL(38,22)) * CAST(1.2 AS DECIMAL(38,22)))#347), oraalias(ctr_store_sk#199 AS ctr_store_sk#199#349)], List(oracolumnref(ctr_store_sk#199))
06 :     +- OraSingleQueryBlock [sr_store_sk#304 AS ctr_store_sk#199, sum(SR_RETURN_AMT#308) AS ctr_total_return#200], [oraalias(sr_store_sk#304 AS ctr_store_sk#199), oraalias(sum(SR_RETURN_AMT#308) AS ctr_total_return#200)], orabinaryopexpression((isnotnull(SR_STORE_SK#304) AND (isnotnull(D_YEAR#323) AND (D_YEAR#323 = 2000.000000000000000000)))), List(oracolumnref(sr_customer_sk#300), oracolumnref(sr_store_sk#304))
07 :        :- OraTableScan TPCDS.STORE_RETURNS, [SR_CUSTOMER_SK#300, SR_STORE_SK#304, SR_RETURN_AMT#308, SR_RETURNED_DATE_SK#297]
08 :        +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#317, D_YEAR#323]
09 :- OraTableScan TPCDS.STORE, [S_STORE_SK#249, S_STATE#273]
10 +- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#278, C_CUSTOMER_ID#279]
ReadSchema: struct<c_customer_id:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2000.000000000000000000, 2000.000000000000000000, TN
oraPushdownSQL: select "C_CUSTOMER_ID"
from ( select "SR_CUSTOMER_SK" AS "ctr_customer_sk", "SR_STORE_SK" AS "ctr_store_sk", SUM("SR_RETURN_AMT") AS "ctr_total_return"
from TPCDS.STORE_RETURNS  join TPCDS.DATE_DIM  on ("SR_RETURNED_DATE_SK" = "D_DATE_SK")
where ((("SR_STORE_SK" IS NOT NULL AND "SR_CUSTOMER_SK" IS NOT NULL) AND "SR_RETURNED_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "SR_CUSTOMER_SK", "SR_STORE_SK" )  join ( select "1_sparkora", "2_sparkora"
from ( select (AVG("ctr_total_return") * 1.2000000000000000000000) AS "1_sparkora", "ctr_store_sk" AS "2_sparkora"
from ( select "SR_STORE_SK" AS "ctr_store_sk", SUM("SR_RETURN_AMT") AS "ctr_total_return"
from TPCDS.STORE_RETURNS  join TPCDS.DATE_DIM  on ("SR_RETURNED_DATE_SK" = "D_DATE_SK")
where (("SR_STORE_SK" IS NOT NULL AND ("SR_RETURNED_DATE_SK" IS NOT NULL AND "SR_RETURNED_DATE_SK" IS NOT NULL)) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "SR_CUSTOMER_SK", "SR_STORE_SK" )  group by "ctr_store_sk" ) 
where "1_sparkora" IS NOT NULL )  on (("ctr_store_sk" = "2_sparkora") AND ("ctr_total_return" > "1_sparkora")) join TPCDS.STORE  on ("ctr_store_sk" = "S_STORE_SK") join TPCDS.CUSTOMER  on ("ctr_customer_sk" = "C_CUSTOMER_SK")
where ("ctr_total_return" IS NOT NULL AND ("S_STATE" IS NOT NULL AND ("S_STATE" = ?)))

(2) Project [codegen id : 1]
Output [1]: [c_customer_id#279]
Input [1]: [c_customer_id#279]

(3) TakeOrderedAndProject
Input [1]: [c_customer_id#279]
Arguments: 100, [c_customer_id#279 ASC NULLS FIRST], [c_customer_id#279]


Pushed oracle sqls

select "C_CUSTOMER_ID"
from ( select "SR_CUSTOMER_SK" AS "ctr_customer_sk", "SR_STORE_SK" AS "ctr_store_sk", SUM("SR_RETURN_AMT") AS "ctr_total_return"
from TPCDS.STORE_RETURNS  join TPCDS.DATE_DIM  on ("SR_RETURNED_DATE_SK" = "D_DATE_SK")
where ((("SR_STORE_SK" IS NOT NULL AND "SR_CUSTOMER_SK" IS NOT NULL) AND "SR_RETURNED_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2000.000000000000000000))) group by "SR_CUSTOMER_SK", "SR_STORE_SK" )  join ( select "1_sparkora", "2_sparkora"
from ( select (AVG("ctr_total_return") * 1.2000000000000000000000) AS "1_sparkora", "ctr_store_sk" AS "2_sparkora"
from ( select "SR_STORE_SK" AS "ctr_store_sk", SUM("SR_RETURN_AMT") AS "ctr_total_return"
from TPCDS.STORE_RETURNS  join TPCDS.DATE_DIM  on ("SR_RETURNED_DATE_SK" = "D_DATE_SK")
where (("SR_STORE_SK" IS NOT NULL AND ("SR_RETURNED_DATE_SK" IS NOT NULL AND "SR_RETURNED_DATE_SK" IS NOT NULL)) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2000.000000000000000000))) group by "SR_CUSTOMER_SK", "SR_STORE_SK" )  group by "ctr_store_sk" ) 
where "1_sparkora" IS NOT NULL )  on (("ctr_store_sk" = "2_sparkora") AND ("ctr_total_return" > "1_sparkora")) join TPCDS.STORE  on ("ctr_store_sk" = "S_STORE_SK") join TPCDS.CUSTOMER  on ("ctr_customer_sk" = "C_CUSTOMER_SK")
where ("ctr_total_return" IS NOT NULL AND ("S_STATE" IS NOT NULL AND ("S_STATE" = 'TN')))

Spark Plan with Pushdown turned off

== Physical Plan ==
TakeOrderedAndProject (43)
+- * Project (42)
   +- * SortMergeJoin Inner (41)
      :- * Sort (37)
      :  +- * Project (36)
      :     +- * SortMergeJoin Inner (35)
      :        :- * Project (30)
      :        :  +- * SortMergeJoin Inner (29)
      :        :     :- * Sort (13)
      :        :     :  +- * Filter (12)
      :        :     :     +- * HashAggregate (11)
      :        :     :        +- * HashAggregate (10)
      :        :     :           +- * Project (9)
      :        :     :              +- * SortMergeJoin Inner (8)
      :        :     :                 :- * Sort (3)
      :        :     :                 :  +- * Filter (2)
      :        :     :                 :     +- BatchScan (1)
      :        :     :                 +- * Sort (7)
      :        :     :                    +- * Project (6)
      :        :     :                       +- * Filter (5)
      :        :     :                          +- BatchScan (4)
      :        :     +- * Sort (28)
      :        :        +- * Filter (27)
      :        :           +- * HashAggregate (26)
      :        :              +- * HashAggregate (25)
      :        :                 +- * HashAggregate (24)
      :        :                    +- * HashAggregate (23)
      :        :                       +- * Project (22)
      :        :                          +- * SortMergeJoin Inner (21)
      :        :                             :- * Sort (16)
      :        :                             :  +- * Filter (15)
      :        :                             :     +- BatchScan (14)
      :        :                             +- * Sort (20)
      :        :                                +- * Project (19)
      :        :                                   +- * Filter (18)
      :        :                                      +- BatchScan (17)
      :        +- * Sort (34)
      :           +- * Project (33)
      :              +- * Filter (32)
      :                 +- BatchScan (31)
      +- * Sort (40)
         +- * Project (39)
            +- BatchScan (38)


(1) BatchScan
Output [4]: [SR_CUSTOMER_SK#7, SR_STORE_SK#11, SR_RETURN_AMT#15, SR_RETURNED_DATE_SK#4]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_RETURNS, [SR_CUSTOMER_SK#165, SR_STORE_SK#166, SR_RETURN_AMT#167, SR_RETURNED_DATE_SK#168], [oracolumnref(SR_CUSTOMER_SK#165), oracolumnref(SR_STORE_SK#166), oracolumnref(SR_RETURN_AMT#167), oracolumnref(SR_RETURNED_DATE_SK#168)], orabinaryopexpression((isnotnull(SR_STORE_SK#11) AND isnotnull(SR_CUSTOMER_SK#7)))
PartitionSchema: struct<SR_RETURNED_DATE_SK:decimal(38,18)>
ReadSchema: struct<SR_CUSTOMER_SK:decimal(38,18),SR_STORE_SK:decimal(38,18),SR_RETURN_AMT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SR_CUSTOMER_SK", "SR_STORE_SK", "SR_RETURN_AMT", "SR_RETURNED_DATE_SK"
from TPCDS.STORE_RETURNS
where ("SR_STORE_SK" IS NOT NULL AND "SR_CUSTOMER_SK" IS NOT NULL) and "SR_RETURNED_DATE_SK" IS NOT NULL

(2) Filter [codegen id : 1]
Input [4]: [SR_CUSTOMER_SK#7, SR_STORE_SK#11, SR_RETURN_AMT#15, SR_RETURNED_DATE_SK#4]
Condition : (isnotnull(SR_STORE_SK#11) AND isnotnull(SR_CUSTOMER_SK#7))

(3) Sort [codegen id : 1]
Input [4]: [SR_CUSTOMER_SK#7, SR_STORE_SK#11, SR_RETURN_AMT#15, SR_RETURNED_DATE_SK#4]
Arguments: [sr_returned_date_sk#4 ASC NULLS FIRST], false, 0

(4) BatchScan
Output [2]: [D_DATE_SK#24, D_YEAR#30]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#173, D_YEAR#174], [oracolumnref(D_DATE_SK#173), oracolumnref(D_YEAR#174)], orabinaryopexpression((isnotnull(D_YEAR#30) AND (D_YEAR#30 = 2000.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2000.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(5) Filter [codegen id : 2]
Input [2]: [D_DATE_SK#24, D_YEAR#30]
Condition : (isnotnull(D_YEAR#30) AND (D_YEAR#30 = 2000.000000000000000000))

(6) Project [codegen id : 2]
Output [1]: [D_DATE_SK#24]
Input [2]: [D_DATE_SK#24, D_YEAR#30]

(7) Sort [codegen id : 2]
Input [1]: [D_DATE_SK#24]
Arguments: [d_date_sk#24 ASC NULLS FIRST], false, 0

(8) SortMergeJoin [codegen id : 3]
Left keys [1]: [sr_returned_date_sk#4]
Right keys [1]: [d_date_sk#24]
Join condition: None

(9) Project [codegen id : 3]
Output [3]: [SR_CUSTOMER_SK#7, SR_STORE_SK#11, SR_RETURN_AMT#15]
Input [5]: [SR_CUSTOMER_SK#7, SR_STORE_SK#11, SR_RETURN_AMT#15, SR_RETURNED_DATE_SK#4, D_DATE_SK#24]

(10) HashAggregate [codegen id : 3]
Input [3]: [SR_CUSTOMER_SK#7, SR_STORE_SK#11, SR_RETURN_AMT#15]
Keys [2]: [sr_customer_sk#7, sr_store_sk#11]
Functions [1]: [partial_sum(SR_RETURN_AMT#15)]
Aggregate Attributes [2]: [sum#185, isEmpty#186]
Results [4]: [sr_customer_sk#7, sr_store_sk#11, sum#187, isEmpty#188]

(11) HashAggregate [codegen id : 3]
Input [4]: [sr_customer_sk#7, sr_store_sk#11, sum#187, isEmpty#188]
Keys [2]: [sr_customer_sk#7, sr_store_sk#11]
Functions [1]: [sum(SR_RETURN_AMT#15)]
Aggregate Attributes [1]: [sum(SR_RETURN_AMT#15)#99]
Results [3]: [sr_customer_sk#7 AS ctr_customer_sk#1, sr_store_sk#11 AS ctr_store_sk#2, sum(SR_RETURN_AMT#15)#99 AS ctr_total_return#3]

(12) Filter [codegen id : 3]
Input [3]: [ctr_customer_sk#1, ctr_store_sk#2, ctr_total_return#3]
Condition : isnotnull(ctr_total_return#3)

(13) Sort [codegen id : 3]
Input [3]: [ctr_customer_sk#1, ctr_store_sk#2, ctr_total_return#3]
Arguments: [ctr_store_sk#2 ASC NULLS FIRST], false, 0

(14) BatchScan
Output [4]: [SR_CUSTOMER_SK#103, SR_STORE_SK#107, SR_RETURN_AMT#111, SR_RETURNED_DATE_SK#100]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_RETURNS, [SR_CUSTOMER_SK#153, SR_STORE_SK#154, SR_RETURN_AMT#155, SR_RETURNED_DATE_SK#156], [oracolumnref(SR_CUSTOMER_SK#153), oracolumnref(SR_STORE_SK#154), oracolumnref(SR_RETURN_AMT#155), oracolumnref(SR_RETURNED_DATE_SK#156)], orapostfixunaryopexpression(isnotnull(SR_STORE_SK#107))
PartitionSchema: struct<SR_RETURNED_DATE_SK:decimal(38,18)>
ReadSchema: struct<SR_CUSTOMER_SK:decimal(38,18),SR_STORE_SK:decimal(38,18),SR_RETURN_AMT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SR_CUSTOMER_SK", "SR_STORE_SK", "SR_RETURN_AMT", "SR_RETURNED_DATE_SK"
from TPCDS.STORE_RETURNS
where "SR_STORE_SK" IS NOT NULL and ("SR_RETURNED_DATE_SK" IS NOT NULL AND "SR_RETURNED_DATE_SK" IS NOT NULL)

(15) Filter [codegen id : 4]
Input [4]: [SR_CUSTOMER_SK#103, SR_STORE_SK#107, SR_RETURN_AMT#111, SR_RETURNED_DATE_SK#100]
Condition : isnotnull(sr_store_sk#107)

(16) Sort [codegen id : 4]
Input [4]: [SR_CUSTOMER_SK#103, SR_STORE_SK#107, SR_RETURN_AMT#111, SR_RETURNED_DATE_SK#100]
Arguments: [sr_returned_date_sk#100 ASC NULLS FIRST], false, 0

(17) BatchScan
Output [2]: [D_DATE_SK#120, D_YEAR#126]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#161, D_YEAR#162], [oracolumnref(D_DATE_SK#161), oracolumnref(D_YEAR#162)], orabinaryopexpression((isnotnull(D_YEAR#126) AND (D_YEAR#126 = 2000.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2000.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(18) Filter [codegen id : 5]
Input [2]: [D_DATE_SK#120, D_YEAR#126]
Condition : (isnotnull(D_YEAR#126) AND (D_YEAR#126 = 2000.000000000000000000))

(19) Project [codegen id : 5]
Output [1]: [D_DATE_SK#120]
Input [2]: [D_DATE_SK#120, D_YEAR#126]

(20) Sort [codegen id : 5]
Input [1]: [D_DATE_SK#120]
Arguments: [d_date_sk#120 ASC NULLS FIRST], false, 0

(21) SortMergeJoin [codegen id : 6]
Left keys [1]: [sr_returned_date_sk#100]
Right keys [1]: [d_date_sk#120]
Join condition: None

(22) Project [codegen id : 6]
Output [3]: [SR_CUSTOMER_SK#103, SR_STORE_SK#107, SR_RETURN_AMT#111]
Input [5]: [SR_CUSTOMER_SK#103, SR_STORE_SK#107, SR_RETURN_AMT#111, SR_RETURNED_DATE_SK#100, D_DATE_SK#120]

(23) HashAggregate [codegen id : 6]
Input [3]: [SR_CUSTOMER_SK#103, SR_STORE_SK#107, SR_RETURN_AMT#111]
Keys [2]: [sr_customer_sk#103, sr_store_sk#107]
Functions [1]: [partial_sum(SR_RETURN_AMT#111)]
Aggregate Attributes [2]: [sum#193, isEmpty#194]
Results [4]: [sr_customer_sk#103, sr_store_sk#107, sum#195, isEmpty#196]

(24) HashAggregate [codegen id : 6]
Input [4]: [sr_customer_sk#103, sr_store_sk#107, sum#195, isEmpty#196]
Keys [2]: [sr_customer_sk#103, sr_store_sk#107]
Functions [1]: [sum(SR_RETURN_AMT#111)]
Aggregate Attributes [1]: [sum(SR_RETURN_AMT#111)#148]
Results [2]: [sr_store_sk#107 AS ctr_store_sk#2, sum(SR_RETURN_AMT#111)#148 AS ctr_total_return#3]

(25) HashAggregate [codegen id : 6]
Input [2]: [ctr_store_sk#2, ctr_total_return#3]
Keys [1]: [ctr_store_sk#2]
Functions [1]: [partial_avg(ctr_total_return#3)]
Aggregate Attributes [2]: [sum#189, count#190L]
Results [3]: [ctr_store_sk#2, sum#191, count#192L]

(26) HashAggregate [codegen id : 6]
Input [3]: [ctr_store_sk#2, sum#191, count#192L]
Keys [1]: [ctr_store_sk#2]
Functions [1]: [avg(ctr_total_return#3)]
Aggregate Attributes [1]: [avg(ctr_total_return#3)#149]
Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#3)#149) * 1.2000000000000000000000), DecimalType(38,20), true) AS (CAST(avg(ctr_total_return) AS DECIMAL(38,22)) * CAST(1.2 AS DECIMAL(38,22)))#150, ctr_store_sk#2 AS ctr_store_sk#2#152]

(27) Filter [codegen id : 6]
Input [2]: [(CAST(avg(ctr_total_return) AS DECIMAL(38,22)) * CAST(1.2 AS DECIMAL(38,22)))#150, ctr_store_sk#2#152]
Condition : isnotnull((CAST(avg(ctr_total_return) AS DECIMAL(38,22)) * CAST(1.2 AS DECIMAL(38,22)))#150)

(28) Sort [codegen id : 6]
Input [2]: [(CAST(avg(ctr_total_return) AS DECIMAL(38,22)) * CAST(1.2 AS DECIMAL(38,22)))#150, ctr_store_sk#2#152]
Arguments: [ctr_store_sk#2#152 ASC NULLS FIRST], false, 0

(29) SortMergeJoin [codegen id : 7]
Left keys [1]: [ctr_store_sk#2]
Right keys [1]: [ctr_store_sk#2#152]
Join condition: (cast(ctr_total_return#3 as decimal(38,20)) > (CAST(avg(ctr_total_return) AS DECIMAL(38,22)) * CAST(1.2 AS DECIMAL(38,22)))#150)

(30) Project [codegen id : 7]
Output [2]: [ctr_customer_sk#1, ctr_store_sk#2]
Input [5]: [ctr_customer_sk#1, ctr_store_sk#2, ctr_total_return#3, (CAST(avg(ctr_total_return) AS DECIMAL(38,22)) * CAST(1.2 AS DECIMAL(38,22)))#150, ctr_store_sk#2#152]

(31) BatchScan
Output [2]: [S_STORE_SK#52, S_STATE#76]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE, [S_STORE_SK#177, S_STATE#178], [oracolumnref(S_STORE_SK#177), oracolumnref(S_STATE#178)], orabinaryopexpression((isnotnull(S_STATE#76) AND (S_STATE#76 = TN)))
PartitionSchema: struct<>
ReadSchema: struct<S_STORE_SK:decimal(38,18),S_STATE:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: TN
oraPushdownSQL: select "S_STORE_SK", "S_STATE"
from TPCDS.STORE
where ("S_STATE" IS NOT NULL AND ("S_STATE" = ?))

(32) Filter [codegen id : 8]
Input [2]: [S_STORE_SK#52, S_STATE#76]
Condition : (isnotnull(S_STATE#76) AND (S_STATE#76 = TN))

(33) Project [codegen id : 8]
Output [1]: [S_STORE_SK#52]
Input [2]: [S_STORE_SK#52, S_STATE#76]

(34) Sort [codegen id : 8]
Input [1]: [S_STORE_SK#52]
Arguments: [s_store_sk#52 ASC NULLS FIRST], false, 0

(35) SortMergeJoin [codegen id : 9]
Left keys [1]: [ctr_store_sk#2]
Right keys [1]: [s_store_sk#52]
Join condition: None

(36) Project [codegen id : 9]
Output [1]: [ctr_customer_sk#1]
Input [3]: [ctr_customer_sk#1, ctr_store_sk#2, S_STORE_SK#52]

(37) Sort [codegen id : 9]
Input [1]: [ctr_customer_sk#1]
Arguments: [ctr_customer_sk#1 ASC NULLS FIRST], false, 0

(38) BatchScan
Output [2]: [C_CUSTOMER_SK#81, C_CUSTOMER_ID#82]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#181, C_CUSTOMER_ID#182], [oracolumnref(C_CUSTOMER_SK#181), oracolumnref(C_CUSTOMER_ID#182)]
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CUSTOMER_ID:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CUSTOMER_ID"
from TPCDS.CUSTOMER

(39) Project [codegen id : 10]
Output [2]: [C_CUSTOMER_SK#81, C_CUSTOMER_ID#82]
Input [2]: [C_CUSTOMER_SK#81, C_CUSTOMER_ID#82]

(40) Sort [codegen id : 10]
Input [2]: [C_CUSTOMER_SK#81, C_CUSTOMER_ID#82]
Arguments: [c_customer_sk#81 ASC NULLS FIRST], false, 0

(41) SortMergeJoin [codegen id : 11]
Left keys [1]: [ctr_customer_sk#1]
Right keys [1]: [c_customer_sk#81]
Join condition: None

(42) Project [codegen id : 11]
Output [1]: [c_customer_id#82]
Input [3]: [ctr_customer_sk#1, C_CUSTOMER_SK#81, C_CUSTOMER_ID#82]

(43) TakeOrderedAndProject
Input [1]: [c_customer_id#82]
Arguments: 100, [c_customer_id#82 ASC NULLS FIRST], [c_customer_id#82]


Query q2

Spark SQL

  with wscs as
 (select sold_date_sk
        ,sales_price
  from  (select ws_sold_date_sk sold_date_sk
              ,ws_ext_sales_price sales_price
        from web_sales
        union all
        select cs_sold_date_sk sold_date_sk
              ,cs_ext_sales_price sales_price
        from catalog_sales) x ),
 wswscs as
 (select d_week_seq,
        sum(case when (d_day_name='Sunday') then sales_price else null end) sun_sales,
        sum(case when (d_day_name='Monday') then sales_price else null end) mon_sales,
        sum(case when (d_day_name='Tuesday') then sales_price else  null end) tue_sales,
        sum(case when (d_day_name='Wednesday') then sales_price else null end) wed_sales,
        sum(case when (d_day_name='Thursday') then sales_price else null end) thu_sales,
        sum(case when (d_day_name='Friday') then sales_price else null end) fri_sales,
        sum(case when (d_day_name='Saturday') then sales_price else null end) sat_sales
 from wscs
     ,date_dim
 where d_date_sk = sold_date_sk
 group by d_week_seq)
 select d_week_seq1
       ,round(sun_sales1/sun_sales2,2)
       ,round(mon_sales1/mon_sales2,2)
       ,round(tue_sales1/tue_sales2,2)
       ,round(wed_sales1/wed_sales2,2)
       ,round(thu_sales1/thu_sales2,2)
       ,round(fri_sales1/fri_sales2,2)
       ,round(sat_sales1/sat_sales2,2)
 from
 (select wswscs.d_week_seq d_week_seq1
        ,sun_sales sun_sales1
        ,mon_sales mon_sales1
        ,tue_sales tue_sales1
        ,wed_sales wed_sales1
        ,thu_sales thu_sales1
        ,fri_sales fri_sales1
        ,sat_sales sat_sales1
  from wswscs,date_dim
  where date_dim.d_week_seq = wswscs.d_week_seq and
        d_year = 2001) y,
 (select wswscs.d_week_seq d_week_seq2
        ,sun_sales sun_sales2
        ,mon_sales mon_sales2
        ,tue_sales tue_sales2
        ,wed_sales wed_sales2
        ,thu_sales thu_sales2
        ,fri_sales fri_sales2
        ,sat_sales sat_sales2
  from wswscs
      ,date_dim
  where date_dim.d_week_seq = wswscs.d_week_seq and
        d_year = 2001+1) z
 where d_week_seq1=d_week_seq2-53
 order by d_week_seq1;
  

Spark Plan with Pushdown turned on

== Physical Plan ==
* Sort (3)
+- * Project (2)
   +- BatchScan (1)


(1) BatchScan
Output [16]: [d_week_seq1#806, sun_sales1#807, mon_sales1#808, tue_sales1#809, wed_sales1#810, thu_sales1#811, fri_sales1#812, sat_sales1#813, d_week_seq2#814, sun_sales2#815, mon_sales2#816, tue_sales2#817, wed_sales2#818, thu_sales2#819, fri_sales2#820, sat_sales2#821]
OraPlan: 00 OraSingleQueryBlock [d_week_seq1#806, sun_sales1#807, mon_sales1#808, tue_sales1#809, wed_sales1#810, thu_sales1#811, fri_sales1#812, sat_sales1#813, d_week_seq2#814, sun_sales2#815, mon_sales2#816, tue_sales2#817, wed_sales2#818, thu_sales2#819, fri_sales2#820, sat_sales2#821], [oracolumnref(d_week_seq1#806), oracolumnref(sun_sales1#807), oracolumnref(mon_sales1#808), oracolumnref(tue_sales1#809), oracolumnref(wed_sales1#810), oracolumnref(thu_sales1#811), oracolumnref(fri_sales1#812), oracolumnref(sat_sales1#813), oracolumnref(d_week_seq2#814), oracolumnref(sun_sales2#815), oracolumnref(mon_sales2#816), oracolumnref(tue_sales2#817), oracolumnref(wed_sales2#818), oracolumnref(thu_sales2#819), oracolumnref(fri_sales2#820), oracolumnref(sat_sales2#821)]
01 :- OraSingleQueryBlock [d_week_seq#905 AS d_week_seq1#806, sun_sales#826 AS sun_sales1#807, mon_sales#827 AS mon_sales1#808, tue_sales#828 AS tue_sales1#809, wed_sales#829 AS wed_sales1#810, thu_sales#830 AS thu_sales1#811, fri_sales#831 AS fri_sales1#812, sat_sales#832 AS sat_sales1#813], [oraalias(d_week_seq#905 AS d_week_seq1#806), oraalias(sun_sales#826 AS sun_sales1#807), oraalias(mon_sales#827 AS mon_sales1#808), oraalias(tue_sales#828 AS tue_sales1#809), oraalias(wed_sales#829 AS wed_sales1#810), oraalias(thu_sales#830 AS thu_sales1#811), oraalias(fri_sales#831 AS fri_sales1#812), oraalias(sat_sales#832 AS sat_sales1#813)], orabinaryopexpression(((isnotnull(D_YEAR#935) AND (D_YEAR#935 = 2001.000000000000000000)) AND isnotnull(D_WEEK_SEQ#933)))
02 :  :- OraSingleQueryBlock [d_week_seq#905, sum(CASE WHEN (d_day_name#915 = Sunday) THEN sales_price#823 ELSE null END) AS sun_sales#826, sum(CASE WHEN (d_day_name#915 = Monday) THEN sales_price#823 ELSE null END) AS mon_sales#827, sum(CASE WHEN (d_day_name#915 = Tuesday) THEN sales_price#823 ELSE null END) AS tue_sales#828, sum(CASE WHEN (d_day_name#915 = Wednesday) THEN sales_price#823 ELSE null END) AS wed_sales#829, sum(CASE WHEN (d_day_name#915 = Thursday) THEN sales_price#823 ELSE null END) AS thu_sales#830, sum(CASE WHEN (d_day_name#915 = Friday) THEN sales_price#823 ELSE null END) AS fri_sales#831, sum(CASE WHEN (d_day_name#915 = Saturday) THEN sales_price#823 ELSE null END) AS sat_sales#832], [oracolumnref(d_week_seq#905), oraalias(sum(CASE WHEN (d_day_name#915 = Sunday) THEN sales_price#823 ELSE null END) AS sun_sales#826), oraalias(sum(CASE WHEN (d_day_name#915 = Monday) THEN sales_price#823 ELSE null END) AS mon_sales#827), oraalias(sum(CASE WHEN (d_day_name#915 = Tuesday) THEN sales_price#823 ELSE null END) AS tue_sales#828), oraalias(sum(CASE WHEN (d_day_name#915 = Wednesday) THEN sales_price#823 ELSE null END) AS wed_sales#829), oraalias(sum(CASE WHEN (d_day_name#915 = Thursday) THEN sales_price#823 ELSE null END) AS thu_sales#830), oraalias(sum(CASE WHEN (d_day_name#915 = Friday) THEN sales_price#823 ELSE null END) AS fri_sales#831), oraalias(sum(CASE WHEN (d_day_name#915 = Saturday) THEN sales_price#823 ELSE null END) AS sat_sales#832)], orapostfixunaryopexpression(isnotnull(D_WEEK_SEQ#905)), List(oracolumnref(d_week_seq#905))
03 :  :  :- OraCompositeQueryBlock Union false, false, [sold_date_sk#822, sales_price#823], SQLSnippet(value: UNION ALL, parameters: ArrayBuffer())
04 :  :  :  :- OraSingleQueryBlock [WS_SOLD_DATE_SK#833 AS sold_date_sk#822, WS_EXT_SALES_PRICE#856 AS sales_price#823], [oraalias(WS_SOLD_DATE_SK#833 AS sold_date_sk#822), oraalias(WS_EXT_SALES_PRICE#856 AS sales_price#823)], orapostfixunaryopexpression(isnotnull(WS_SOLD_DATE_SK#833))
05 :  :  :  :  +- OraTableScan TPCDS.WEB_SALES, [WS_EXT_SALES_PRICE#856, WS_SOLD_DATE_SK#833]
06 :  :  :  +- OraSingleQueryBlock [CS_SOLD_DATE_SK#867 AS sold_date_sk#824, CS_EXT_SALES_PRICE#890 AS sales_price#825], [oraalias(CS_SOLD_DATE_SK#867 AS sold_date_sk#824), oraalias(CS_EXT_SALES_PRICE#890 AS sales_price#825)], orapostfixunaryopexpression(isnotnull(CS_SOLD_DATE_SK#867))
07 :  :  :     +- OraTableScan TPCDS.CATALOG_SALES, [CS_EXT_SALES_PRICE#890, CS_SOLD_DATE_SK#867]
08 :  :  +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#901, D_WEEK_SEQ#905, D_DAY_NAME#915]
09 :  +- OraTableScan TPCDS.DATE_DIM, [D_WEEK_SEQ#933, D_YEAR#935]
10 +- OraSingleQueryBlock [d_week_seq#1029 AS d_week_seq2#814, sun_sales#826 AS sun_sales2#815, mon_sales#827 AS mon_sales2#816, tue_sales#828 AS tue_sales2#817, wed_sales#829 AS wed_sales2#818, thu_sales#830 AS thu_sales2#819, fri_sales#831 AS fri_sales2#820, sat_sales#832 AS sat_sales2#821], [oraalias(d_week_seq#1029 AS d_week_seq2#814), oraalias(sun_sales#826 AS sun_sales2#815), oraalias(mon_sales#827 AS mon_sales2#816), oraalias(tue_sales#828 AS tue_sales2#817), oraalias(wed_sales#829 AS wed_sales2#818), oraalias(thu_sales#830 AS thu_sales2#819), oraalias(fri_sales#831 AS fri_sales2#820), oraalias(sat_sales#832 AS sat_sales2#821)], orabinaryopexpression(((isnotnull(D_YEAR#1059) AND (D_YEAR#1059 = 2002.000000000000000000)) AND isnotnull(D_WEEK_SEQ#1057)))
11    :- OraSingleQueryBlock [d_week_seq#1029, sum(CASE WHEN (d_day_name#1039 = Sunday) THEN sales_price#823 ELSE null END) AS sun_sales#826, sum(CASE WHEN (d_day_name#1039 = Monday) THEN sales_price#823 ELSE null END) AS mon_sales#827, sum(CASE WHEN (d_day_name#1039 = Tuesday) THEN sales_price#823 ELSE null END) AS tue_sales#828, sum(CASE WHEN (d_day_name#1039 = Wednesday) THEN sales_price#823 ELSE null END) AS wed_sales#829, sum(CASE WHEN (d_day_name#1039 = Thursday) THEN sales_price#823 ELSE null END) AS thu_sales#830, sum(CASE WHEN (d_day_name#1039 = Friday) THEN sales_price#823 ELSE null END) AS fri_sales#831, sum(CASE WHEN (d_day_name#1039 = Saturday) THEN sales_price#823 ELSE null END) AS sat_sales#832], [oracolumnref(d_week_seq#1029), oraalias(sum(CASE WHEN (d_day_name#1039 = Sunday) THEN sales_price#823 ELSE null END) AS sun_sales#826), oraalias(sum(CASE WHEN (d_day_name#1039 = Monday) THEN sales_price#823 ELSE null END) AS mon_sales#827), oraalias(sum(CASE WHEN (d_day_name#1039 = Tuesday) THEN sales_price#823 ELSE null END) AS tue_sales#828), oraalias(sum(CASE WHEN (d_day_name#1039 = Wednesday) THEN sales_price#823 ELSE null END) AS wed_sales#829), oraalias(sum(CASE WHEN (d_day_name#1039 = Thursday) THEN sales_price#823 ELSE null END) AS thu_sales#830), oraalias(sum(CASE WHEN (d_day_name#1039 = Friday) THEN sales_price#823 ELSE null END) AS fri_sales#831), oraalias(sum(CASE WHEN (d_day_name#1039 = Saturday) THEN sales_price#823 ELSE null END) AS sat_sales#832)], orapostfixunaryopexpression(isnotnull(D_WEEK_SEQ#1029)), List(oracolumnref(d_week_seq#1029))
12    :  :- OraCompositeQueryBlock Union false, false, [sold_date_sk#822, sales_price#823], SQLSnippet(value: UNION ALL, parameters: ArrayBuffer())
13    :  :  :- OraSingleQueryBlock [WS_SOLD_DATE_SK#957 AS sold_date_sk#822, WS_EXT_SALES_PRICE#980 AS sales_price#823], [oraalias(WS_SOLD_DATE_SK#957 AS sold_date_sk#822), oraalias(WS_EXT_SALES_PRICE#980 AS sales_price#823)], orapostfixunaryopexpression(isnotnull(WS_SOLD_DATE_SK#957))
14    :  :  :  +- OraTableScan TPCDS.WEB_SALES, [WS_EXT_SALES_PRICE#980, WS_SOLD_DATE_SK#957]
15    :  :  +- OraSingleQueryBlock [CS_SOLD_DATE_SK#991 AS sold_date_sk#824, CS_EXT_SALES_PRICE#1014 AS sales_price#825], [oraalias(CS_SOLD_DATE_SK#991 AS sold_date_sk#824), oraalias(CS_EXT_SALES_PRICE#1014 AS sales_price#825)], orapostfixunaryopexpression(isnotnull(CS_SOLD_DATE_SK#991))
16    :  :     +- OraTableScan TPCDS.CATALOG_SALES, [CS_EXT_SALES_PRICE#1014, CS_SOLD_DATE_SK#991]
17    :  +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#1025, D_WEEK_SEQ#1029, D_DAY_NAME#1039]
18    +- OraTableScan TPCDS.DATE_DIM, [D_WEEK_SEQ#1057, D_YEAR#1059]
ReadSchema: struct<d_week_seq1:decimal(38,18),sun_sales1:decimal(38,18),mon_sales1:decimal(38,18),tue_sales1:decimal(38,18),wed_sales1:decimal(38,18),thu_sales1:decimal(38,18),fri_sales1:decimal(38,18),sat_sales1:decimal(38,18),d_week_seq2:decimal(38,18),sun_sales2:decimal(38,18),mon_sales2:decimal(38,18),tue_sales2:decimal(38,18),wed_sales2:decimal(38,18),thu_sales2:decimal(38,18),fri_sales2:decimal(38,18),sat_sales2:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2001.000000000000000000, 2002.000000000000000000
oraPushdownSQL: select "d_week_seq1", "sun_sales1", "mon_sales1", "tue_sales1", "wed_sales1", "thu_sales1", "fri_sales1", "sat_sales1", "d_week_seq2", "sun_sales2", "mon_sales2", "tue_sales2", "wed_sales2", "thu_sales2", "fri_sales2", "sat_sales2"
from ( select "sparkora_0"."D_WEEK_SEQ" AS "d_week_seq1", "sun_sales" AS "sun_sales1", "mon_sales" AS "mon_sales1", "tue_sales" AS "tue_sales1", "wed_sales" AS "wed_sales1", "thu_sales" AS "thu_sales1", "fri_sales" AS "fri_sales1", "sat_sales" AS "sat_sales1"
from ( select "D_WEEK_SEQ", SUM(CASE WHEN ("D_DAY_NAME" = 'Sunday') THEN "sales_price" ELSE null END) AS "sun_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Monday') THEN "sales_price" ELSE null END) AS "mon_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Tuesday') THEN "sales_price" ELSE null END) AS "tue_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Wednesday') THEN "sales_price" ELSE null END) AS "wed_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Thursday') THEN "sales_price" ELSE null END) AS "thu_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Friday') THEN "sales_price" ELSE null END) AS "fri_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Saturday') THEN "sales_price" ELSE null END) AS "sat_sales"
from ( select "WS_SOLD_DATE_SK" AS "sold_date_sk", "WS_EXT_SALES_PRICE" AS "sales_price"
from TPCDS.WEB_SALES 
where "WS_SOLD_DATE_SK" IS NOT NULL UNION ALL select "CS_SOLD_DATE_SK" AS "sold_date_sk", "CS_EXT_SALES_PRICE" AS "sales_price"
from TPCDS.CATALOG_SALES 
where "CS_SOLD_DATE_SK" IS NOT NULL )  join TPCDS.DATE_DIM  on ("sold_date_sk" = "D_DATE_SK")
where "D_WEEK_SEQ" IS NOT NULL group by "D_WEEK_SEQ" ) "sparkora_0" join TPCDS.DATE_DIM "sparkora_1" on ("sparkora_0"."D_WEEK_SEQ" = "sparkora_1"."D_WEEK_SEQ")
where (("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?)) AND "sparkora_1"."D_WEEK_SEQ" IS NOT NULL) )  join ( select "sparkora_0"."D_WEEK_SEQ" AS "d_week_seq2", "sun_sales" AS "sun_sales2", "mon_sales" AS "mon_sales2", "tue_sales" AS "tue_sales2", "wed_sales" AS "wed_sales2", "thu_sales" AS "thu_sales2", "fri_sales" AS "fri_sales2", "sat_sales" AS "sat_sales2"
from ( select "D_WEEK_SEQ", SUM(CASE WHEN ("D_DAY_NAME" = 'Sunday') THEN "sales_price" ELSE null END) AS "sun_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Monday') THEN "sales_price" ELSE null END) AS "mon_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Tuesday') THEN "sales_price" ELSE null END) AS "tue_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Wednesday') THEN "sales_price" ELSE null END) AS "wed_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Thursday') THEN "sales_price" ELSE null END) AS "thu_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Friday') THEN "sales_price" ELSE null END) AS "fri_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Saturday') THEN "sales_price" ELSE null END) AS "sat_sales"
from ( select "WS_SOLD_DATE_SK" AS "sold_date_sk", "WS_EXT_SALES_PRICE" AS "sales_price"
from TPCDS.WEB_SALES 
where "WS_SOLD_DATE_SK" IS NOT NULL UNION ALL select "CS_SOLD_DATE_SK" AS "sold_date_sk", "CS_EXT_SALES_PRICE" AS "sales_price"
from TPCDS.CATALOG_SALES 
where "CS_SOLD_DATE_SK" IS NOT NULL )  join TPCDS.DATE_DIM  on ("sold_date_sk" = "D_DATE_SK")
where "D_WEEK_SEQ" IS NOT NULL group by "D_WEEK_SEQ" ) "sparkora_0" join TPCDS.DATE_DIM "sparkora_1" on ("sparkora_0"."D_WEEK_SEQ" = "sparkora_1"."D_WEEK_SEQ")
where (("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?)) AND "sparkora_1"."D_WEEK_SEQ" IS NOT NULL) )  on ("d_week_seq1" = ("d_week_seq2" - 53.00000000000000000))

(2) Project [codegen id : 1]
Output [8]: [d_week_seq1#806, round(CheckOverflow((promote_precision(sun_sales1#807) / promote_precision(sun_sales2#815)), DecimalType(38,6), true), 2) AS round((sun_sales1 / sun_sales2), 2)#1095, round(CheckOverflow((promote_precision(mon_sales1#808) / promote_precision(mon_sales2#816)), DecimalType(38,6), true), 2) AS round((mon_sales1 / mon_sales2), 2)#1096, round(CheckOverflow((promote_precision(tue_sales1#809) / promote_precision(tue_sales2#817)), DecimalType(38,6), true), 2) AS round((tue_sales1 / tue_sales2), 2)#1097, round(CheckOverflow((promote_precision(wed_sales1#810) / promote_precision(wed_sales2#818)), DecimalType(38,6), true), 2) AS round((wed_sales1 / wed_sales2), 2)#1098, round(CheckOverflow((promote_precision(thu_sales1#811) / promote_precision(thu_sales2#819)), DecimalType(38,6), true), 2) AS round((thu_sales1 / thu_sales2), 2)#1099, round(CheckOverflow((promote_precision(fri_sales1#812) / promote_precision(fri_sales2#820)), DecimalType(38,6), true), 2) AS round((fri_sales1 / fri_sales2), 2)#1100, round(CheckOverflow((promote_precision(sat_sales1#813) / promote_precision(sat_sales2#821)), DecimalType(38,6), true), 2) AS round((sat_sales1 / sat_sales2), 2)#1101]
Input [16]: [d_week_seq1#806, sun_sales1#807, mon_sales1#808, tue_sales1#809, wed_sales1#810, thu_sales1#811, fri_sales1#812, sat_sales1#813, d_week_seq2#814, sun_sales2#815, mon_sales2#816, tue_sales2#817, wed_sales2#818, thu_sales2#819, fri_sales2#820, sat_sales2#821]

(3) Sort [codegen id : 1]
Input [8]: [d_week_seq1#806, round((sun_sales1 / sun_sales2), 2)#1095, round((mon_sales1 / mon_sales2), 2)#1096, round((tue_sales1 / tue_sales2), 2)#1097, round((wed_sales1 / wed_sales2), 2)#1098, round((thu_sales1 / thu_sales2), 2)#1099, round((fri_sales1 / fri_sales2), 2)#1100, round((sat_sales1 / sat_sales2), 2)#1101]
Arguments: [d_week_seq1#806 ASC NULLS FIRST], true, 0


Pushed oracle sqls

select "d_week_seq1", "sun_sales1", "mon_sales1", "tue_sales1", "wed_sales1", "thu_sales1", "fri_sales1", "sat_sales1", "d_week_seq2", "sun_sales2", "mon_sales2", "tue_sales2", "wed_sales2", "thu_sales2", "fri_sales2", "sat_sales2"
from ( select "sparkora_0"."D_WEEK_SEQ" AS "d_week_seq1", "sun_sales" AS "sun_sales1", "mon_sales" AS "mon_sales1", "tue_sales" AS "tue_sales1", "wed_sales" AS "wed_sales1", "thu_sales" AS "thu_sales1", "fri_sales" AS "fri_sales1", "sat_sales" AS "sat_sales1"
from ( select "D_WEEK_SEQ", SUM(CASE WHEN ("D_DAY_NAME" = 'Sunday') THEN "sales_price" ELSE null END) AS "sun_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Monday') THEN "sales_price" ELSE null END) AS "mon_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Tuesday') THEN "sales_price" ELSE null END) AS "tue_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Wednesday') THEN "sales_price" ELSE null END) AS "wed_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Thursday') THEN "sales_price" ELSE null END) AS "thu_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Friday') THEN "sales_price" ELSE null END) AS "fri_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Saturday') THEN "sales_price" ELSE null END) AS "sat_sales"
from ( select "WS_SOLD_DATE_SK" AS "sold_date_sk", "WS_EXT_SALES_PRICE" AS "sales_price"
from TPCDS.WEB_SALES 
where "WS_SOLD_DATE_SK" IS NOT NULL UNION ALL select "CS_SOLD_DATE_SK" AS "sold_date_sk", "CS_EXT_SALES_PRICE" AS "sales_price"
from TPCDS.CATALOG_SALES 
where "CS_SOLD_DATE_SK" IS NOT NULL )  join TPCDS.DATE_DIM  on ("sold_date_sk" = "D_DATE_SK")
where "D_WEEK_SEQ" IS NOT NULL group by "D_WEEK_SEQ" ) "sparkora_0" join TPCDS.DATE_DIM "sparkora_1" on ("sparkora_0"."D_WEEK_SEQ" = "sparkora_1"."D_WEEK_SEQ")
where (("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2001.000000000000000000)) AND "sparkora_1"."D_WEEK_SEQ" IS NOT NULL) )  join ( select "sparkora_0"."D_WEEK_SEQ" AS "d_week_seq2", "sun_sales" AS "sun_sales2", "mon_sales" AS "mon_sales2", "tue_sales" AS "tue_sales2", "wed_sales" AS "wed_sales2", "thu_sales" AS "thu_sales2", "fri_sales" AS "fri_sales2", "sat_sales" AS "sat_sales2"
from ( select "D_WEEK_SEQ", SUM(CASE WHEN ("D_DAY_NAME" = 'Sunday') THEN "sales_price" ELSE null END) AS "sun_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Monday') THEN "sales_price" ELSE null END) AS "mon_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Tuesday') THEN "sales_price" ELSE null END) AS "tue_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Wednesday') THEN "sales_price" ELSE null END) AS "wed_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Thursday') THEN "sales_price" ELSE null END) AS "thu_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Friday') THEN "sales_price" ELSE null END) AS "fri_sales", SUM(CASE WHEN ("D_DAY_NAME" = 'Saturday') THEN "sales_price" ELSE null END) AS "sat_sales"
from ( select "WS_SOLD_DATE_SK" AS "sold_date_sk", "WS_EXT_SALES_PRICE" AS "sales_price"
from TPCDS.WEB_SALES 
where "WS_SOLD_DATE_SK" IS NOT NULL UNION ALL select "CS_SOLD_DATE_SK" AS "sold_date_sk", "CS_EXT_SALES_PRICE" AS "sales_price"
from TPCDS.CATALOG_SALES 
where "CS_SOLD_DATE_SK" IS NOT NULL )  join TPCDS.DATE_DIM  on ("sold_date_sk" = "D_DATE_SK")
where "D_WEEK_SEQ" IS NOT NULL group by "D_WEEK_SEQ" ) "sparkora_0" join TPCDS.DATE_DIM "sparkora_1" on ("sparkora_0"."D_WEEK_SEQ" = "sparkora_1"."D_WEEK_SEQ")
where (("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2002.000000000000000000)) AND "sparkora_1"."D_WEEK_SEQ" IS NOT NULL) )  on ("d_week_seq1" = ("d_week_seq2" - 53.00000000000000000))

Spark Plan with Pushdown turned off

== Physical Plan ==
* Sort (54)
+- Exchange (53)
   +- * Project (52)
      +- * SortMergeJoin Inner (51)
         :- * Project (24)
         :  +- * SortMergeJoin Inner (23)
         :     :- * Sort (17)
         :     :  +- * HashAggregate (16)
         :     :     +- Exchange (15)
         :     :        +- * HashAggregate (14)
         :     :           +- * Project (13)
         :     :              +- * SortMergeJoin Inner (12)
         :     :                 :- * Sort (7)
         :     :                 :  +- Exchange (6)
         :     :                 :     +- Union (5)
         :     :                 :        :- * Project (2)
         :     :                 :        :  +- BatchScan (1)
         :     :                 :        +- * Project (4)
         :     :                 :           +- BatchScan (3)
         :     :                 +- * Sort (11)
         :     :                    +- Exchange (10)
         :     :                       +- * Filter (9)
         :     :                          +- BatchScan (8)
         :     +- * Sort (22)
         :        +- Exchange (21)
         :           +- * Project (20)
         :              +- * Filter (19)
         :                 +- BatchScan (18)
         +- * Sort (50)
            +- Exchange (49)
               +- * Project (48)
                  +- * SortMergeJoin Inner (47)
                     :- * Sort (41)
                     :  +- * HashAggregate (40)
                     :     +- Exchange (39)
                     :        +- * HashAggregate (38)
                     :           +- * Project (37)
                     :              +- * SortMergeJoin Inner (36)
                     :                 :- * Sort (31)
                     :                 :  +- Exchange (30)
                     :                 :     +- Union (29)
                     :                 :        :- * Project (26)
                     :                 :        :  +- BatchScan (25)
                     :                 :        +- * Project (28)
                     :                 :           +- BatchScan (27)
                     :                 +- * Sort (35)
                     :                    +- Exchange (34)
                     :                       +- * Filter (33)
                     :                          +- BatchScan (32)
                     +- * Sort (46)
                        +- Exchange (45)
                           +- * Project (44)
                              +- * Filter (43)
                                 +- BatchScan (42)


(1) BatchScan
Output [2]: [WS_EXT_SALES_PRICE#432, WS_SOLD_DATE_SK#409]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_SALES, [WS_EXT_SALES_PRICE#686, WS_SOLD_DATE_SK#687], [oracolumnref(WS_EXT_SALES_PRICE#686), oracolumnref(WS_SOLD_DATE_SK#687)]
PartitionSchema: struct<WS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<WS_EXT_SALES_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WS_EXT_SALES_PRICE", "WS_SOLD_DATE_SK"
from TPCDS.WEB_SALES
where "WS_SOLD_DATE_SK" IS NOT NULL

(2) Project [codegen id : 1]
Output [2]: [WS_SOLD_DATE_SK#409 AS sold_date_sk#398, WS_EXT_SALES_PRICE#432 AS sales_price#399]
Input [2]: [WS_EXT_SALES_PRICE#432, WS_SOLD_DATE_SK#409]

(3) BatchScan
Output [2]: [CS_EXT_SALES_PRICE#466, CS_SOLD_DATE_SK#443]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CATALOG_SALES, [CS_EXT_SALES_PRICE#690, CS_SOLD_DATE_SK#691], [oracolumnref(CS_EXT_SALES_PRICE#690), oracolumnref(CS_SOLD_DATE_SK#691)]
PartitionSchema: struct<CS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<CS_EXT_SALES_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CS_EXT_SALES_PRICE", "CS_SOLD_DATE_SK"
from TPCDS.CATALOG_SALES
where "CS_SOLD_DATE_SK" IS NOT NULL

(4) Project [codegen id : 2]
Output [2]: [CS_SOLD_DATE_SK#443 AS sold_date_sk#400, CS_EXT_SALES_PRICE#466 AS sales_price#401]
Input [2]: [CS_EXT_SALES_PRICE#466, CS_SOLD_DATE_SK#443]

(5) Union

(6) Exchange
Input [2]: [sold_date_sk#398, sales_price#399]
Arguments: hashpartitioning(sold_date_sk#398, 5), true, [id=#442]

(7) Sort [codegen id : 3]
Input [2]: [sold_date_sk#398, sales_price#399]
Arguments: [sold_date_sk#398 ASC NULLS FIRST], false, 0

(8) BatchScan
Output [3]: [D_DATE_SK#477, D_WEEK_SEQ#481, D_DAY_NAME#491]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#694, D_WEEK_SEQ#695, D_DAY_NAME#696], [oracolumnref(D_DATE_SK#694), oracolumnref(D_WEEK_SEQ#695), oracolumnref(D_DAY_NAME#696)], orapostfixunaryopexpression(isnotnull(D_WEEK_SEQ#481))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_WEEK_SEQ:decimal(38,18),D_DAY_NAME:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "D_DATE_SK", "D_WEEK_SEQ", "D_DAY_NAME"
from TPCDS.DATE_DIM
where "D_WEEK_SEQ" IS NOT NULL

(9) Filter [codegen id : 4]
Input [3]: [D_DATE_SK#477, D_WEEK_SEQ#481, D_DAY_NAME#491]
Condition : isnotnull(D_WEEK_SEQ#481)

(10) Exchange
Input [3]: [D_DATE_SK#477, D_WEEK_SEQ#481, D_DAY_NAME#491]
Arguments: hashpartitioning(d_date_sk#477, 5), true, [id=#450]

(11) Sort [codegen id : 5]
Input [3]: [D_DATE_SK#477, D_WEEK_SEQ#481, D_DAY_NAME#491]
Arguments: [d_date_sk#477 ASC NULLS FIRST], false, 0

(12) SortMergeJoin [codegen id : 6]
Left keys [1]: [sold_date_sk#398]
Right keys [1]: [d_date_sk#477]
Join condition: None

(13) Project [codegen id : 6]
Output [3]: [sales_price#399, D_WEEK_SEQ#481, D_DAY_NAME#491]
Input [5]: [sold_date_sk#398, sales_price#399, D_DATE_SK#477, D_WEEK_SEQ#481, D_DAY_NAME#491]

(14) HashAggregate [codegen id : 6]
Input [3]: [sales_price#399, D_WEEK_SEQ#481, D_DAY_NAME#491]
Keys [1]: [d_week_seq#481]
Functions [7]: [partial_sum(CASE WHEN (d_day_name#491 = Sunday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#491 = Monday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#491 = Tuesday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#491 = Wednesday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#491 = Thursday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#491 = Friday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#491 = Saturday) THEN sales_price#399 ELSE null END)]
Aggregate Attributes [14]: [sum#722, isEmpty#723, sum#724, isEmpty#725, sum#726, isEmpty#727, sum#728, isEmpty#729, sum#730, isEmpty#731, sum#732, isEmpty#733, sum#734, isEmpty#735]
Results [15]: [d_week_seq#481, sum#736, isEmpty#737, sum#738, isEmpty#739, sum#740, isEmpty#741, sum#742, isEmpty#743, sum#744, isEmpty#745, sum#746, isEmpty#747, sum#748, isEmpty#749]

(15) Exchange
Input [15]: [d_week_seq#481, sum#736, isEmpty#737, sum#738, isEmpty#739, sum#740, isEmpty#741, sum#742, isEmpty#743, sum#744, isEmpty#745, sum#746, isEmpty#747, sum#748, isEmpty#749]
Arguments: hashpartitioning(d_week_seq#481, 5), true, [id=#459]

(16) HashAggregate [codegen id : 7]
Input [15]: [d_week_seq#481, sum#736, isEmpty#737, sum#738, isEmpty#739, sum#740, isEmpty#741, sum#742, isEmpty#743, sum#744, isEmpty#745, sum#746, isEmpty#747, sum#748, isEmpty#749]
Keys [1]: [d_week_seq#481]
Functions [7]: [sum(CASE WHEN (d_day_name#491 = Sunday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#491 = Monday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#491 = Tuesday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#491 = Wednesday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#491 = Thursday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#491 = Friday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#491 = Saturday) THEN sales_price#399 ELSE null END)]
Aggregate Attributes [7]: [sum(CASE WHEN (d_day_name#491 = Sunday) THEN sales_price#399 ELSE null END)#657, sum(CASE WHEN (d_day_name#491 = Monday) THEN sales_price#399 ELSE null END)#658, sum(CASE WHEN (d_day_name#491 = Tuesday) THEN sales_price#399 ELSE null END)#659, sum(CASE WHEN (d_day_name#491 = Wednesday) THEN sales_price#399 ELSE null END)#660, sum(CASE WHEN (d_day_name#491 = Thursday) THEN sales_price#399 ELSE null END)#661, sum(CASE WHEN (d_day_name#491 = Friday) THEN sales_price#399 ELSE null END)#662, sum(CASE WHEN (d_day_name#491 = Saturday) THEN sales_price#399 ELSE null END)#663]
Results [8]: [d_week_seq#481, sum(CASE WHEN (d_day_name#491 = Sunday) THEN sales_price#399 ELSE null END)#657 AS sun_sales#402, sum(CASE WHEN (d_day_name#491 = Monday) THEN sales_price#399 ELSE null END)#658 AS mon_sales#403, sum(CASE WHEN (d_day_name#491 = Tuesday) THEN sales_price#399 ELSE null END)#659 AS tue_sales#404, sum(CASE WHEN (d_day_name#491 = Wednesday) THEN sales_price#399 ELSE null END)#660 AS wed_sales#405, sum(CASE WHEN (d_day_name#491 = Thursday) THEN sales_price#399 ELSE null END)#661 AS thu_sales#406, sum(CASE WHEN (d_day_name#491 = Friday) THEN sales_price#399 ELSE null END)#662 AS fri_sales#407, sum(CASE WHEN (d_day_name#491 = Saturday) THEN sales_price#399 ELSE null END)#663 AS sat_sales#408]

(17) Sort [codegen id : 7]
Input [8]: [d_week_seq#481, sun_sales#402, mon_sales#403, tue_sales#404, wed_sales#405, thu_sales#406, fri_sales#407, sat_sales#408]
Arguments: [d_week_seq#481 ASC NULLS FIRST], false, 0

(18) BatchScan
Output [2]: [D_WEEK_SEQ#509, D_YEAR#511]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_WEEK_SEQ#700, D_YEAR#701], [oracolumnref(D_WEEK_SEQ#700), oracolumnref(D_YEAR#701)], orabinaryopexpression(((isnotnull(D_YEAR#511) AND (D_YEAR#511 = 2001.000000000000000000)) AND isnotnull(D_WEEK_SEQ#509)))
PartitionSchema: struct<>
ReadSchema: struct<D_WEEK_SEQ:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2001.000000000000000000
oraPushdownSQL: select "D_WEEK_SEQ", "D_YEAR"
from TPCDS.DATE_DIM
where (("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?)) AND "D_WEEK_SEQ" IS NOT NULL)

(19) Filter [codegen id : 8]
Input [2]: [D_WEEK_SEQ#509, D_YEAR#511]
Condition : ((isnotnull(D_YEAR#511) AND (D_YEAR#511 = 2001.000000000000000000)) AND isnotnull(D_WEEK_SEQ#509))

(20) Project [codegen id : 8]
Output [1]: [D_WEEK_SEQ#509]
Input [2]: [D_WEEK_SEQ#509, D_YEAR#511]

(21) Exchange
Input [1]: [D_WEEK_SEQ#509]
Arguments: hashpartitioning(d_week_seq#509, 5), true, [id=#469]

(22) Sort [codegen id : 9]
Input [1]: [D_WEEK_SEQ#509]
Arguments: [d_week_seq#509 ASC NULLS FIRST], false, 0

(23) SortMergeJoin [codegen id : 10]
Left keys [1]: [d_week_seq#481]
Right keys [1]: [d_week_seq#509]
Join condition: None

(24) Project [codegen id : 10]
Output [8]: [d_week_seq#481 AS d_week_seq1#382, sun_sales#402 AS sun_sales1#383, mon_sales#403 AS mon_sales1#384, tue_sales#404 AS tue_sales1#385, wed_sales#405 AS wed_sales1#386, thu_sales#406 AS thu_sales1#387, fri_sales#407 AS fri_sales1#388, sat_sales#408 AS sat_sales1#389]
Input [9]: [d_week_seq#481, sun_sales#402, mon_sales#403, tue_sales#404, wed_sales#405, thu_sales#406, fri_sales#407, sat_sales#408, D_WEEK_SEQ#509]

(25) BatchScan
Output [2]: [WS_EXT_SALES_PRICE#556, WS_SOLD_DATE_SK#533]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_SALES, [WS_EXT_SALES_PRICE#704, WS_SOLD_DATE_SK#705], [oracolumnref(WS_EXT_SALES_PRICE#704), oracolumnref(WS_SOLD_DATE_SK#705)]
PartitionSchema: struct<WS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<WS_EXT_SALES_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WS_EXT_SALES_PRICE", "WS_SOLD_DATE_SK"
from TPCDS.WEB_SALES
where "WS_SOLD_DATE_SK" IS NOT NULL

(26) Project [codegen id : 11]
Output [2]: [WS_SOLD_DATE_SK#533 AS sold_date_sk#398, WS_EXT_SALES_PRICE#556 AS sales_price#399]
Input [2]: [WS_EXT_SALES_PRICE#556, WS_SOLD_DATE_SK#533]

(27) BatchScan
Output [2]: [CS_EXT_SALES_PRICE#590, CS_SOLD_DATE_SK#567]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CATALOG_SALES, [CS_EXT_SALES_PRICE#708, CS_SOLD_DATE_SK#709], [oracolumnref(CS_EXT_SALES_PRICE#708), oracolumnref(CS_SOLD_DATE_SK#709)]
PartitionSchema: struct<CS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<CS_EXT_SALES_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CS_EXT_SALES_PRICE", "CS_SOLD_DATE_SK"
from TPCDS.CATALOG_SALES
where "CS_SOLD_DATE_SK" IS NOT NULL

(28) Project [codegen id : 12]
Output [2]: [CS_SOLD_DATE_SK#567 AS sold_date_sk#400, CS_EXT_SALES_PRICE#590 AS sales_price#401]
Input [2]: [CS_EXT_SALES_PRICE#590, CS_SOLD_DATE_SK#567]

(29) Union

(30) Exchange
Input [2]: [sold_date_sk#398, sales_price#399]
Arguments: hashpartitioning(sold_date_sk#398, 5), true, [id=#485]

(31) Sort [codegen id : 13]
Input [2]: [sold_date_sk#398, sales_price#399]
Arguments: [sold_date_sk#398 ASC NULLS FIRST], false, 0

(32) BatchScan
Output [3]: [D_DATE_SK#601, D_WEEK_SEQ#605, D_DAY_NAME#615]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#712, D_WEEK_SEQ#713, D_DAY_NAME#714], [oracolumnref(D_DATE_SK#712), oracolumnref(D_WEEK_SEQ#713), oracolumnref(D_DAY_NAME#714)], orapostfixunaryopexpression(isnotnull(D_WEEK_SEQ#605))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_WEEK_SEQ:decimal(38,18),D_DAY_NAME:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "D_DATE_SK", "D_WEEK_SEQ", "D_DAY_NAME"
from TPCDS.DATE_DIM
where "D_WEEK_SEQ" IS NOT NULL

(33) Filter [codegen id : 14]
Input [3]: [D_DATE_SK#601, D_WEEK_SEQ#605, D_DAY_NAME#615]
Condition : isnotnull(D_WEEK_SEQ#605)

(34) Exchange
Input [3]: [D_DATE_SK#601, D_WEEK_SEQ#605, D_DAY_NAME#615]
Arguments: hashpartitioning(d_date_sk#601, 5), true, [id=#493]

(35) Sort [codegen id : 15]
Input [3]: [D_DATE_SK#601, D_WEEK_SEQ#605, D_DAY_NAME#615]
Arguments: [d_date_sk#601 ASC NULLS FIRST], false, 0

(36) SortMergeJoin [codegen id : 16]
Left keys [1]: [sold_date_sk#398]
Right keys [1]: [d_date_sk#601]
Join condition: None

(37) Project [codegen id : 16]
Output [3]: [sales_price#399, D_WEEK_SEQ#605, D_DAY_NAME#615]
Input [5]: [sold_date_sk#398, sales_price#399, D_DATE_SK#601, D_WEEK_SEQ#605, D_DAY_NAME#615]

(38) HashAggregate [codegen id : 16]
Input [3]: [sales_price#399, D_WEEK_SEQ#605, D_DAY_NAME#615]
Keys [1]: [d_week_seq#605]
Functions [7]: [partial_sum(CASE WHEN (d_day_name#615 = Sunday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#615 = Monday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#615 = Tuesday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#615 = Wednesday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#615 = Thursday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#615 = Friday) THEN sales_price#399 ELSE null END), partial_sum(CASE WHEN (d_day_name#615 = Saturday) THEN sales_price#399 ELSE null END)]
Aggregate Attributes [14]: [sum#750, isEmpty#751, sum#752, isEmpty#753, sum#754, isEmpty#755, sum#756, isEmpty#757, sum#758, isEmpty#759, sum#760, isEmpty#761, sum#762, isEmpty#763]
Results [15]: [d_week_seq#605, sum#764, isEmpty#765, sum#766, isEmpty#767, sum#768, isEmpty#769, sum#770, isEmpty#771, sum#772, isEmpty#773, sum#774, isEmpty#775, sum#776, isEmpty#777]

(39) Exchange
Input [15]: [d_week_seq#605, sum#764, isEmpty#765, sum#766, isEmpty#767, sum#768, isEmpty#769, sum#770, isEmpty#771, sum#772, isEmpty#773, sum#774, isEmpty#775, sum#776, isEmpty#777]
Arguments: hashpartitioning(d_week_seq#605, 5), true, [id=#502]

(40) HashAggregate [codegen id : 17]
Input [15]: [d_week_seq#605, sum#764, isEmpty#765, sum#766, isEmpty#767, sum#768, isEmpty#769, sum#770, isEmpty#771, sum#772, isEmpty#773, sum#774, isEmpty#775, sum#776, isEmpty#777]
Keys [1]: [d_week_seq#605]
Functions [7]: [sum(CASE WHEN (d_day_name#615 = Sunday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#615 = Monday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#615 = Tuesday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#615 = Wednesday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#615 = Thursday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#615 = Friday) THEN sales_price#399 ELSE null END), sum(CASE WHEN (d_day_name#615 = Saturday) THEN sales_price#399 ELSE null END)]
Aggregate Attributes [7]: [sum(CASE WHEN (d_day_name#615 = Sunday) THEN sales_price#399 ELSE null END)#664, sum(CASE WHEN (d_day_name#615 = Monday) THEN sales_price#399 ELSE null END)#665, sum(CASE WHEN (d_day_name#615 = Tuesday) THEN sales_price#399 ELSE null END)#666, sum(CASE WHEN (d_day_name#615 = Wednesday) THEN sales_price#399 ELSE null END)#667, sum(CASE WHEN (d_day_name#615 = Thursday) THEN sales_price#399 ELSE null END)#668, sum(CASE WHEN (d_day_name#615 = Friday) THEN sales_price#399 ELSE null END)#669, sum(CASE WHEN (d_day_name#615 = Saturday) THEN sales_price#399 ELSE null END)#670]
Results [8]: [d_week_seq#605, sum(CASE WHEN (d_day_name#615 = Sunday) THEN sales_price#399 ELSE null END)#664 AS sun_sales#402, sum(CASE WHEN (d_day_name#615 = Monday) THEN sales_price#399 ELSE null END)#665 AS mon_sales#403, sum(CASE WHEN (d_day_name#615 = Tuesday) THEN sales_price#399 ELSE null END)#666 AS tue_sales#404, sum(CASE WHEN (d_day_name#615 = Wednesday) THEN sales_price#399 ELSE null END)#667 AS wed_sales#405, sum(CASE WHEN (d_day_name#615 = Thursday) THEN sales_price#399 ELSE null END)#668 AS thu_sales#406, sum(CASE WHEN (d_day_name#615 = Friday) THEN sales_price#399 ELSE null END)#669 AS fri_sales#407, sum(CASE WHEN (d_day_name#615 = Saturday) THEN sales_price#399 ELSE null END)#670 AS sat_sales#408]

(41) Sort [codegen id : 17]
Input [8]: [d_week_seq#605, sun_sales#402, mon_sales#403, tue_sales#404, wed_sales#405, thu_sales#406, fri_sales#407, sat_sales#408]
Arguments: [d_week_seq#605 ASC NULLS FIRST], false, 0

(42) BatchScan
Output [2]: [D_WEEK_SEQ#633, D_YEAR#635]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_WEEK_SEQ#718, D_YEAR#719], [oracolumnref(D_WEEK_SEQ#718), oracolumnref(D_YEAR#719)], orabinaryopexpression(((isnotnull(D_YEAR#635) AND (D_YEAR#635 = 2002.000000000000000000)) AND isnotnull(D_WEEK_SEQ#633)))
PartitionSchema: struct<>
ReadSchema: struct<D_WEEK_SEQ:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000
oraPushdownSQL: select "D_WEEK_SEQ", "D_YEAR"
from TPCDS.DATE_DIM
where (("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?)) AND "D_WEEK_SEQ" IS NOT NULL)

(43) Filter [codegen id : 18]
Input [2]: [D_WEEK_SEQ#633, D_YEAR#635]
Condition : ((isnotnull(D_YEAR#635) AND (D_YEAR#635 = 2002.000000000000000000)) AND isnotnull(D_WEEK_SEQ#633))

(44) Project [codegen id : 18]
Output [1]: [D_WEEK_SEQ#633]
Input [2]: [D_WEEK_SEQ#633, D_YEAR#635]

(45) Exchange
Input [1]: [D_WEEK_SEQ#633]
Arguments: hashpartitioning(d_week_seq#633, 5), true, [id=#512]

(46) Sort [codegen id : 19]
Input [1]: [D_WEEK_SEQ#633]
Arguments: [d_week_seq#633 ASC NULLS FIRST], false, 0

(47) SortMergeJoin [codegen id : 20]
Left keys [1]: [d_week_seq#605]
Right keys [1]: [d_week_seq#633]
Join condition: None

(48) Project [codegen id : 20]
Output [8]: [d_week_seq#605 AS d_week_seq2#390, sun_sales#402 AS sun_sales2#391, mon_sales#403 AS mon_sales2#392, tue_sales#404 AS tue_sales2#393, wed_sales#405 AS wed_sales2#394, thu_sales#406 AS thu_sales2#395, fri_sales#407 AS fri_sales2#396, sat_sales#408 AS sat_sales2#397]
Input [9]: [d_week_seq#605, sun_sales#402, mon_sales#403, tue_sales#404, wed_sales#405, thu_sales#406, fri_sales#407, sat_sales#408, D_WEEK_SEQ#633]

(49) Exchange
Input [8]: [d_week_seq2#390, sun_sales2#391, mon_sales2#392, tue_sales2#393, wed_sales2#394, thu_sales2#395, fri_sales2#396, sat_sales2#397]
Arguments: hashpartitioning(cast(CheckOverflow((promote_precision(cast(d_week_seq2#390 as decimal(38,17))) - 53.00000000000000000), DecimalType(38,17), true) as decimal(38,18)), 5), true, [id=#520]

(50) Sort [codegen id : 21]
Input [8]: [d_week_seq2#390, sun_sales2#391, mon_sales2#392, tue_sales2#393, wed_sales2#394, thu_sales2#395, fri_sales2#396, sat_sales2#397]
Arguments: [cast(CheckOverflow((promote_precision(cast(d_week_seq2#390 as decimal(38,17))) - 53.00000000000000000), DecimalType(38,17), true) as decimal(38,18)) ASC NULLS FIRST], false, 0

(51) SortMergeJoin [codegen id : 22]
Left keys [1]: [d_week_seq1#382]
Right keys [1]: [cast(CheckOverflow((promote_precision(cast(d_week_seq2#390 as decimal(38,17))) - 53.00000000000000000), DecimalType(38,17), true) as decimal(38,18))]
Join condition: None

(52) Project [codegen id : 22]
Output [8]: [d_week_seq1#382, round(CheckOverflow((promote_precision(sun_sales1#383) / promote_precision(sun_sales2#391)), DecimalType(38,6), true), 2) AS round((sun_sales1 / sun_sales2), 2)#671, round(CheckOverflow((promote_precision(mon_sales1#384) / promote_precision(mon_sales2#392)), DecimalType(38,6), true), 2) AS round((mon_sales1 / mon_sales2), 2)#672, round(CheckOverflow((promote_precision(tue_sales1#385) / promote_precision(tue_sales2#393)), DecimalType(38,6), true), 2) AS round((tue_sales1 / tue_sales2), 2)#673, round(CheckOverflow((promote_precision(wed_sales1#386) / promote_precision(wed_sales2#394)), DecimalType(38,6), true), 2) AS round((wed_sales1 / wed_sales2), 2)#674, round(CheckOverflow((promote_precision(thu_sales1#387) / promote_precision(thu_sales2#395)), DecimalType(38,6), true), 2) AS round((thu_sales1 / thu_sales2), 2)#675, round(CheckOverflow((promote_precision(fri_sales1#388) / promote_precision(fri_sales2#396)), DecimalType(38,6), true), 2) AS round((fri_sales1 / fri_sales2), 2)#676, round(CheckOverflow((promote_precision(sat_sales1#389) / promote_precision(sat_sales2#397)), DecimalType(38,6), true), 2) AS round((sat_sales1 / sat_sales2), 2)#677]
Input [16]: [d_week_seq1#382, sun_sales1#383, mon_sales1#384, tue_sales1#385, wed_sales1#386, thu_sales1#387, fri_sales1#388, sat_sales1#389, d_week_seq2#390, sun_sales2#391, mon_sales2#392, tue_sales2#393, wed_sales2#394, thu_sales2#395, fri_sales2#396, sat_sales2#397]

(53) Exchange
Input [8]: [d_week_seq1#382, round((sun_sales1 / sun_sales2), 2)#671, round((mon_sales1 / mon_sales2), 2)#672, round((tue_sales1 / tue_sales2), 2)#673, round((wed_sales1 / wed_sales2), 2)#674, round((thu_sales1 / thu_sales2), 2)#675, round((fri_sales1 / fri_sales2), 2)#676, round((sat_sales1 / sat_sales2), 2)#677]
Arguments: rangepartitioning(d_week_seq1#382 ASC NULLS FIRST, 5), true, [id=#528]

(54) Sort [codegen id : 23]
Input [8]: [d_week_seq1#382, round((sun_sales1 / sun_sales2), 2)#671, round((mon_sales1 / mon_sales2), 2)#672, round((tue_sales1 / tue_sales2), 2)#673, round((wed_sales1 / wed_sales2), 2)#674, round((thu_sales1 / thu_sales2), 2)#675, round((fri_sales1 / fri_sales2), 2)#676, round((sat_sales1 / sat_sales2), 2)#677]
Arguments: [d_week_seq1#382 ASC NULLS FIRST], true, 0


Query q3

Spark SQL

select  dt.d_year
       ,item.i_brand_id brand_id
       ,item.i_brand brand
       ,sum(ss_ext_sales_price) sum_agg
 from  date_dim dt
      ,store_sales
      ,item
 where dt.d_date_sk = store_sales.ss_sold_date_sk
   and store_sales.ss_item_sk = item.i_item_sk
   and item.i_manufact_id = 128
   and dt.d_moy=11
 group by dt.d_year
      ,item.i_brand
      ,item.i_brand_id
 order by dt.d_year
         ,sum_agg desc
         ,brand_id
  limit 100; 

Spark Plan with Pushdown turned on

== Physical Plan ==
TakeOrderedAndProject (3)
+- * Project (2)
   +- BatchScan (1)


(1) BatchScan
Output [4]: [d_year#1263, brand_id#1254, brand#1255, sum_agg#1256]
OraPlan: 00 OraSingleQueryBlock [d_year#1263, i_brand_id#1315 AS brand_id#1254, i_brand#1316 AS brand#1255, sum(ss_ext_sales_price#1300) AS sum_agg#1256], [oracolumnref(d_year#1263), oraalias(i_brand_id#1315 AS brand_id#1254), oraalias(i_brand#1316 AS brand#1255), oraalias(sum(ss_ext_sales_price#1300) AS sum_agg#1256)], orabinaryopexpression((((isnotnull(D_MOY#1265) AND (D_MOY#1265 = 11.000000000000000000)) AND isnotnull(SS_SOLD_DATE_SK#1285)) AND (isnotnull(I_MANUFACT_ID#1321) AND (I_MANUFACT_ID#1321 = 128.000000000000000000)))), List(oracolumnref(d_year#1263), oracolumnref(i_brand#1316), oracolumnref(i_brand_id#1315))
01 :- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#1257, D_YEAR#1263, D_MOY#1265]
02 :- OraTableScan TPCDS.STORE_SALES, [SS_ITEM_SK#1287, SS_EXT_SALES_PRICE#1300, SS_SOLD_DATE_SK#1285]
03 +- OraTableScan TPCDS.ITEM, [I_ITEM_SK#1308, I_BRAND_ID#1315, I_BRAND#1316, I_MANUFACT_ID#1321]
ReadSchema: struct<d_year:decimal(38,18),brand_id:decimal(38,18),brand:string,sum_agg:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 11.000000000000000000, 128.000000000000000000
oraPushdownSQL: select "D_YEAR", "I_BRAND_ID" AS "brand_id", "I_BRAND" AS "brand", SUM("SS_EXT_SALES_PRICE") AS "sum_agg"
from TPCDS.DATE_DIM  join TPCDS.STORE_SALES  on ("D_DATE_SK" = "SS_SOLD_DATE_SK") join TPCDS.ITEM  on ("SS_ITEM_SK" = "I_ITEM_SK")
where ((("D_MOY" IS NOT NULL AND ("D_MOY" = ?)) AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("I_MANUFACT_ID" IS NOT NULL AND ("I_MANUFACT_ID" = ?))) group by "D_YEAR", "I_BRAND", "I_BRAND_ID"

(2) Project [codegen id : 1]
Output [4]: [d_year#1263, brand_id#1254, brand#1255, sum_agg#1256]
Input [4]: [d_year#1263, brand_id#1254, brand#1255, sum_agg#1256]

(3) TakeOrderedAndProject
Input [4]: [d_year#1263, brand_id#1254, brand#1255, sum_agg#1256]
Arguments: 100, [d_year#1263 ASC NULLS FIRST, sum_agg#1256 DESC NULLS LAST, brand_id#1254 ASC NULLS FIRST], [d_year#1263, brand_id#1254, brand#1255, sum_agg#1256]


Pushed oracle sqls

select "D_YEAR", "I_BRAND_ID" AS "brand_id", "I_BRAND" AS "brand", SUM("SS_EXT_SALES_PRICE") AS "sum_agg"
from TPCDS.DATE_DIM  join TPCDS.STORE_SALES  on ("D_DATE_SK" = "SS_SOLD_DATE_SK") join TPCDS.ITEM  on ("SS_ITEM_SK" = "I_ITEM_SK")
where ((("D_MOY" IS NOT NULL AND ("D_MOY" = 11.000000000000000000)) AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("I_MANUFACT_ID" IS NOT NULL AND ("I_MANUFACT_ID" = 128.000000000000000000))) group by "D_YEAR", "I_BRAND", "I_BRAND_ID"

Spark Plan with Pushdown turned off

== Physical Plan ==
TakeOrderedAndProject (19)
+- * HashAggregate (18)
   +- * HashAggregate (17)
      +- * Project (16)
         +- * SortMergeJoin Inner (15)
            :- * Sort (10)
            :  +- * Project (9)
            :     +- * SortMergeJoin Inner (8)
            :        :- * Sort (4)
            :        :  +- * Project (3)
            :        :     +- * Filter (2)
            :        :        +- BatchScan (1)
            :        +- * Sort (7)
            :           +- * Project (6)
            :              +- BatchScan (5)
            +- * Sort (14)
               +- * Project (13)
                  +- * Filter (12)
                     +- BatchScan (11)


(1) BatchScan
Output [3]: [D_DATE_SK#1149, D_YEAR#1155, D_MOY#1157]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#1230, D_YEAR#1231, D_MOY#1232], [oracolumnref(D_DATE_SK#1230), oracolumnref(D_YEAR#1231), oracolumnref(D_MOY#1232)], orabinaryopexpression((isnotnull(D_MOY#1157) AND (D_MOY#1157 = 11.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18),D_MOY:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 11.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR", "D_MOY"
from TPCDS.DATE_DIM
where ("D_MOY" IS NOT NULL AND ("D_MOY" = ?))

(2) Filter [codegen id : 1]
Input [3]: [D_DATE_SK#1149, D_YEAR#1155, D_MOY#1157]
Condition : (isnotnull(D_MOY#1157) AND (D_MOY#1157 = 11.000000000000000000))

(3) Project [codegen id : 1]
Output [2]: [D_DATE_SK#1149, D_YEAR#1155]
Input [3]: [D_DATE_SK#1149, D_YEAR#1155, D_MOY#1157]

(4) Sort [codegen id : 1]
Input [2]: [D_DATE_SK#1149, D_YEAR#1155]
Arguments: [d_date_sk#1149 ASC NULLS FIRST], false, 0

(5) BatchScan
Output [3]: [SS_ITEM_SK#1179, SS_EXT_SALES_PRICE#1192, SS_SOLD_DATE_SK#1177]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_ITEM_SK#1236, SS_EXT_SALES_PRICE#1237, SS_SOLD_DATE_SK#1238], [oracolumnref(SS_ITEM_SK#1236), oracolumnref(SS_EXT_SALES_PRICE#1237), oracolumnref(SS_SOLD_DATE_SK#1238)]
PartitionSchema: struct<SS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<SS_ITEM_SK:decimal(38,18),SS_EXT_SALES_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SS_ITEM_SK", "SS_EXT_SALES_PRICE", "SS_SOLD_DATE_SK"
from TPCDS.STORE_SALES
where "SS_SOLD_DATE_SK" IS NOT NULL

(6) Project [codegen id : 2]
Output [3]: [SS_SOLD_DATE_SK#1177, SS_ITEM_SK#1179, SS_EXT_SALES_PRICE#1192]
Input [3]: [SS_ITEM_SK#1179, SS_EXT_SALES_PRICE#1192, SS_SOLD_DATE_SK#1177]

(7) Sort [codegen id : 2]
Input [3]: [SS_SOLD_DATE_SK#1177, SS_ITEM_SK#1179, SS_EXT_SALES_PRICE#1192]
Arguments: [ss_sold_date_sk#1177 ASC NULLS FIRST], false, 0

(8) SortMergeJoin [codegen id : 3]
Left keys [1]: [d_date_sk#1149]
Right keys [1]: [ss_sold_date_sk#1177]
Join condition: None

(9) Project [codegen id : 3]
Output [3]: [D_YEAR#1155, SS_ITEM_SK#1179, SS_EXT_SALES_PRICE#1192]
Input [5]: [D_DATE_SK#1149, D_YEAR#1155, SS_SOLD_DATE_SK#1177, SS_ITEM_SK#1179, SS_EXT_SALES_PRICE#1192]

(10) Sort [codegen id : 3]
Input [3]: [D_YEAR#1155, SS_ITEM_SK#1179, SS_EXT_SALES_PRICE#1192]
Arguments: [ss_item_sk#1179 ASC NULLS FIRST], false, 0

(11) BatchScan
Output [4]: [I_ITEM_SK#1200, I_BRAND_ID#1207, I_BRAND#1208, I_MANUFACT_ID#1213]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.ITEM, [I_ITEM_SK#1242, I_BRAND_ID#1243, I_BRAND#1244, I_MANUFACT_ID#1245], [oracolumnref(I_ITEM_SK#1242), oracolumnref(I_BRAND_ID#1243), oracolumnref(I_BRAND#1244), oracolumnref(I_MANUFACT_ID#1245)], orabinaryopexpression((isnotnull(I_MANUFACT_ID#1213) AND (I_MANUFACT_ID#1213 = 128.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<I_ITEM_SK:decimal(38,18),I_BRAND_ID:decimal(38,18),I_BRAND:string,I_MANUFACT_ID:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 128.000000000000000000
oraPushdownSQL: select "I_ITEM_SK", "I_BRAND_ID", "I_BRAND", "I_MANUFACT_ID"
from TPCDS.ITEM
where ("I_MANUFACT_ID" IS NOT NULL AND ("I_MANUFACT_ID" = ?))

(12) Filter [codegen id : 4]
Input [4]: [I_ITEM_SK#1200, I_BRAND_ID#1207, I_BRAND#1208, I_MANUFACT_ID#1213]
Condition : (isnotnull(I_MANUFACT_ID#1213) AND (I_MANUFACT_ID#1213 = 128.000000000000000000))

(13) Project [codegen id : 4]
Output [3]: [I_ITEM_SK#1200, I_BRAND_ID#1207, I_BRAND#1208]
Input [4]: [I_ITEM_SK#1200, I_BRAND_ID#1207, I_BRAND#1208, I_MANUFACT_ID#1213]

(14) Sort [codegen id : 4]
Input [3]: [I_ITEM_SK#1200, I_BRAND_ID#1207, I_BRAND#1208]
Arguments: [i_item_sk#1200 ASC NULLS FIRST], false, 0

(15) SortMergeJoin [codegen id : 5]
Left keys [1]: [ss_item_sk#1179]
Right keys [1]: [i_item_sk#1200]
Join condition: None

(16) Project [codegen id : 5]
Output [4]: [D_YEAR#1155, SS_EXT_SALES_PRICE#1192, I_BRAND_ID#1207, I_BRAND#1208]
Input [6]: [D_YEAR#1155, SS_ITEM_SK#1179, SS_EXT_SALES_PRICE#1192, I_ITEM_SK#1200, I_BRAND_ID#1207, I_BRAND#1208]

(17) HashAggregate [codegen id : 5]
Input [4]: [D_YEAR#1155, SS_EXT_SALES_PRICE#1192, I_BRAND_ID#1207, I_BRAND#1208]
Keys [3]: [d_year#1155, i_brand#1208, i_brand_id#1207]
Functions [1]: [partial_sum(ss_ext_sales_price#1192)]
Aggregate Attributes [2]: [sum#1250, isEmpty#1251]
Results [5]: [d_year#1155, i_brand#1208, i_brand_id#1207, sum#1252, isEmpty#1253]

(18) HashAggregate [codegen id : 5]
Input [5]: [d_year#1155, i_brand#1208, i_brand_id#1207, sum#1252, isEmpty#1253]
Keys [3]: [d_year#1155, i_brand#1208, i_brand_id#1207]
Functions [1]: [sum(ss_ext_sales_price#1192)]
Aggregate Attributes [1]: [sum(ss_ext_sales_price#1192)#1222]
Results [4]: [d_year#1155, i_brand_id#1207 AS brand_id#1146, i_brand#1208 AS brand#1147, sum(ss_ext_sales_price#1192)#1222 AS sum_agg#1148]

(19) TakeOrderedAndProject
Input [4]: [d_year#1155, brand_id#1146, brand#1147, sum_agg#1148]
Arguments: 100, [d_year#1155 ASC NULLS FIRST, sum_agg#1148 DESC NULLS LAST, brand_id#1146 ASC NULLS FIRST], [d_year#1155, brand_id#1146, brand#1147, sum_agg#1148]


Query q4

Spark SQL

with year_total as (
 select c_customer_id customer_id
       ,c_first_name customer_first_name
       ,c_last_name customer_last_name
       ,c_preferred_cust_flag customer_preferred_cust_flag
       ,c_birth_country customer_birth_country
       ,c_login customer_login
       ,c_email_address customer_email_address
       ,d_year dyear
       ,sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2) year_total
       ,'s' sale_type
 from customer
     ,store_sales
     ,date_dim
 where c_customer_sk = ss_customer_sk
   and ss_sold_date_sk = d_date_sk
 group by c_customer_id
         ,c_first_name
         ,c_last_name
         ,c_preferred_cust_flag
         ,c_birth_country
         ,c_login
         ,c_email_address
         ,d_year
 union all
 select c_customer_id customer_id
       ,c_first_name customer_first_name
       ,c_last_name customer_last_name
       ,c_preferred_cust_flag customer_preferred_cust_flag
       ,c_birth_country customer_birth_country
       ,c_login customer_login
       ,c_email_address customer_email_address
       ,d_year dyear
       ,sum((((cs_ext_list_price-cs_ext_wholesale_cost-cs_ext_discount_amt)+cs_ext_sales_price)/2) ) year_total
       ,'c' sale_type
 from customer
     ,catalog_sales
     ,date_dim
 where c_customer_sk = cs_bill_customer_sk
   and cs_sold_date_sk = d_date_sk
 group by c_customer_id
         ,c_first_name
         ,c_last_name
         ,c_preferred_cust_flag
         ,c_birth_country
         ,c_login
         ,c_email_address
         ,d_year
union all
 select c_customer_id customer_id
       ,c_first_name customer_first_name
       ,c_last_name customer_last_name
       ,c_preferred_cust_flag customer_preferred_cust_flag
       ,c_birth_country customer_birth_country
       ,c_login customer_login
       ,c_email_address customer_email_address
       ,d_year dyear
       ,sum((((ws_ext_list_price-ws_ext_wholesale_cost-ws_ext_discount_amt)+ws_ext_sales_price)/2) ) year_total
       ,'w' sale_type
 from customer
     ,web_sales
     ,date_dim
 where c_customer_sk = ws_bill_customer_sk
   and ws_sold_date_sk = d_date_sk
 group by c_customer_id
         ,c_first_name
         ,c_last_name
         ,c_preferred_cust_flag
         ,c_birth_country
         ,c_login
         ,c_email_address
         ,d_year
         )
  select
                  t_s_secyear.customer_id
                 ,t_s_secyear.customer_first_name
                 ,t_s_secyear.customer_last_name
                 ,t_s_secyear.customer_preferred_cust_flag
 from year_total t_s_firstyear
     ,year_total t_s_secyear
     ,year_total t_c_firstyear
     ,year_total t_c_secyear
     ,year_total t_w_firstyear
     ,year_total t_w_secyear
 where t_s_secyear.customer_id = t_s_firstyear.customer_id
   and t_s_firstyear.customer_id = t_c_secyear.customer_id
   and t_s_firstyear.customer_id = t_c_firstyear.customer_id
   and t_s_firstyear.customer_id = t_w_firstyear.customer_id
   and t_s_firstyear.customer_id = t_w_secyear.customer_id
   and t_s_firstyear.sale_type = 's'
   and t_c_firstyear.sale_type = 'c'
   and t_w_firstyear.sale_type = 'w'
   and t_s_secyear.sale_type = 's'
   and t_c_secyear.sale_type = 'c'
   and t_w_secyear.sale_type = 'w'
   and t_s_firstyear.dyear =  2001
   and t_s_secyear.dyear = 2001+1
   and t_c_firstyear.dyear =  2001
   and t_c_secyear.dyear =  2001+1
   and t_w_firstyear.dyear = 2001
   and t_w_secyear.dyear = 2001+1
   and t_s_firstyear.year_total > 0
   and t_c_firstyear.year_total > 0
   and t_w_firstyear.year_total > 0
   and case when t_c_firstyear.year_total > 0 then t_c_secyear.year_total / t_c_firstyear.year_total else null end
           > case when t_s_firstyear.year_total > 0 then t_s_secyear.year_total / t_s_firstyear.year_total else null end
   and case when t_c_firstyear.year_total > 0 then t_c_secyear.year_total / t_c_firstyear.year_total else null end
           > case when t_w_firstyear.year_total > 0 then t_w_secyear.year_total / t_w_firstyear.year_total else null end
 order by t_s_secyear.customer_id
         ,t_s_secyear.customer_first_name
         ,t_s_secyear.customer_last_name
         ,t_s_secyear.customer_preferred_cust_flag
 limit 100;
 

Spark Plan with Pushdown turned on

== Physical Plan ==
TakeOrderedAndProject (3)
+- * Project (2)
   +- BatchScan (1)


(1) BatchScan
Output [4]: [customer_id#4664, customer_first_name#4665, customer_last_name#4666, customer_preferred_cust_flag#4667]
OraPlan: 00 OraSingleQueryBlock [customer_id#4664, customer_first_name#4665, customer_last_name#4666, customer_preferred_cust_flag#4667], [oracolumnref(customer_id#4664), oracolumnref(customer_first_name#4665), oracolumnref(customer_last_name#4666), oracolumnref(customer_preferred_cust_flag#4667)], orabinaryopexpression((isnotnull(year_total#3250) AND (year_total#3250 > 0E-15)))
01 :- OraSingleQueryBlock [c_customer_id#3273 AS customer_id#3242, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#3307 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#3306 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#3304 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#3305 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#3250], [oraalias(c_customer_id#3273 AS customer_id#3242), oraalias(sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#3307 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#3306 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#3304 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#3305 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#3250)], orabinaryopexpression((isnotnull(SS_CUSTOMER_SK#3293) AND (isnotnull(D_YEAR#3319) AND (D_YEAR#3319 = 2001.000000000000000000)))), List(oracolumnref(c_customer_id#3273), oracolumnref(c_first_name#3280), oracolumnref(c_last_name#3281), oracolumnref(c_preferred_cust_flag#3282), oracolumnref(c_birth_country#3286), oracolumnref(c_login#3287), oracolumnref(c_email_address#3288), oracolumnref(d_year#3319))
02 :  :- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#3272, C_CUSTOMER_ID#3273, C_FIRST_NAME#3280, C_LAST_NAME#3281, C_PREFERRED_CUST_FLAG#3282, C_BIRTH_COUNTRY#3286, C_LOGIN#3287, C_EMAIL_ADDRESS#3288]
03 :  :- OraTableScan TPCDS.STORE_SALES, [SS_CUSTOMER_SK#3293, SS_EXT_DISCOUNT_AMT#3304, SS_EXT_SALES_PRICE#3305, SS_EXT_WHOLESALE_COST#3306, SS_EXT_LIST_PRICE#3307, SS_SOLD_DATE_SK#3290]
04 :  +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#3313, D_YEAR#3319]
05 :- OraSingleQueryBlock [c_customer_id#3502 AS customer_id#4664, c_first_name#3509 AS customer_first_name#4665, c_last_name#3510 AS customer_last_name#4666, c_preferred_cust_flag#3511 AS customer_preferred_cust_flag#4667, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#3536 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#3535 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#3533 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#3534 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#4672], [oraalias(c_customer_id#3502 AS customer_id#4664), oraalias(c_first_name#3509 AS customer_first_name#4665), oraalias(c_last_name#3510 AS customer_last_name#4666), oraalias(c_preferred_cust_flag#3511 AS customer_preferred_cust_flag#4667), oraalias(sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#3536 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#3535 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#3533 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#3534 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#4672)], orabinaryopexpression((isnotnull(SS_CUSTOMER_SK#3522) AND (isnotnull(D_YEAR#3548) AND (D_YEAR#3548 = 2002.000000000000000000)))), List(oracolumnref(c_customer_id#3502), oracolumnref(c_first_name#3509), oracolumnref(c_last_name#3510), oracolumnref(c_preferred_cust_flag#3511), oracolumnref(c_birth_country#3515), oracolumnref(c_login#3516), oracolumnref(c_email_address#3517), oracolumnref(d_year#3548))
06 :  :- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#3501, C_CUSTOMER_ID#3502, C_FIRST_NAME#3509, C_LAST_NAME#3510, C_PREFERRED_CUST_FLAG#3511, C_BIRTH_COUNTRY#3515, C_LOGIN#3516, C_EMAIL_ADDRESS#3517]
07 :  :- OraTableScan TPCDS.STORE_SALES, [SS_CUSTOMER_SK#3522, SS_EXT_DISCOUNT_AMT#3533, SS_EXT_SALES_PRICE#3534, SS_EXT_WHOLESALE_COST#3535, SS_EXT_LIST_PRICE#3536, SS_SOLD_DATE_SK#3519]
08 :  +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#3542, D_YEAR#3548]
09 :- OraSingleQueryBlock [customer_id#3252 AS customer_id#4674, year_total#3260 AS year_total#4682], [oraalias(customer_id#3252 AS customer_id#4674), oraalias(year_total#3260 AS year_total#4682)], orabinaryopexpression((isnotnull(year_total#3260) AND (year_total#3260 > 0E-15)))
10 :  +- OraSingleQueryBlock [c_customer_id#3800 AS customer_id#3252, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#3842 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#3841 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#3839 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#3840 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#3260], [oraalias(c_customer_id#3800 AS customer_id#3252), oraalias(sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#3842 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#3841 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#3839 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#3840 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#3260)], orabinaryopexpression((isnotnull(CS_BILL_CUSTOMER_SK#3820) AND (isnotnull(D_YEAR#3857) AND (D_YEAR#3857 = 2001.000000000000000000)))), List(oracolumnref(c_customer_id#3800), oracolumnref(c_first_name#3807), oracolumnref(c_last_name#3808), oracolumnref(c_preferred_cust_flag#3809), oracolumnref(c_birth_country#3813), oracolumnref(c_login#3814), oracolumnref(c_email_address#3815), oracolumnref(d_year#3857))
11 :     :- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#3799, C_CUSTOMER_ID#3800, C_FIRST_NAME#3807, C_LAST_NAME#3808, C_PREFERRED_CUST_FLAG#3809, C_BIRTH_COUNTRY#3813, C_LOGIN#3814, C_EMAIL_ADDRESS#3815]
12 :     :- OraTableScan TPCDS.CATALOG_SALES, [CS_BILL_CUSTOMER_SK#3820, CS_EXT_DISCOUNT_AMT#3839, CS_EXT_SALES_PRICE#3840, CS_EXT_WHOLESALE_COST#3841, CS_EXT_LIST_PRICE#3842, CS_SOLD_DATE_SK#3817]
13 :     +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#3851, D_YEAR#3857]
14 :- OraSingleQueryBlock [c_customer_id#4029 AS customer_id#4684, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#4071 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#4070 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#4068 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#4069 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#4692], [oraalias(c_customer_id#4029 AS customer_id#4684), oraalias(sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#4071 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#4070 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#4068 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#4069 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#4692)], orabinaryopexpression((isnotnull(CS_BILL_CUSTOMER_SK#4049) AND (isnotnull(D_YEAR#4086) AND (D_YEAR#4086 = 2002.000000000000000000)))), List(oracolumnref(c_customer_id#4029), oracolumnref(c_first_name#4036), oracolumnref(c_last_name#4037), oracolumnref(c_preferred_cust_flag#4038), oracolumnref(c_birth_country#4042), oracolumnref(c_login#4043), oracolumnref(c_email_address#4044), oracolumnref(d_year#4086))
15 :  :- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#4028, C_CUSTOMER_ID#4029, C_FIRST_NAME#4036, C_LAST_NAME#4037, C_PREFERRED_CUST_FLAG#4038, C_BIRTH_COUNTRY#4042, C_LOGIN#4043, C_EMAIL_ADDRESS#4044]
16 :  :- OraTableScan TPCDS.CATALOG_SALES, [CS_BILL_CUSTOMER_SK#4049, CS_EXT_DISCOUNT_AMT#4068, CS_EXT_SALES_PRICE#4069, CS_EXT_WHOLESALE_COST#4070, CS_EXT_LIST_PRICE#4071, CS_SOLD_DATE_SK#4046]
17 :  +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#4080, D_YEAR#4086]
18 :- OraSingleQueryBlock [customer_id#3262 AS customer_id#4694, year_total#3270 AS year_total#4702], [oraalias(customer_id#3262 AS customer_id#4694), oraalias(year_total#3270 AS year_total#4702)], orabinaryopexpression((isnotnull(year_total#3270) AND (year_total#3270 > 0E-15)))
19 :  +- OraSingleQueryBlock [c_customer_id#4338 AS customer_id#3262, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#4380 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#4379 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#4377 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#4378 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#3270], [oraalias(c_customer_id#4338 AS customer_id#3262), oraalias(sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#4380 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#4379 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#4377 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#4378 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#3270)], orabinaryopexpression((isnotnull(WS_BILL_CUSTOMER_SK#4359) AND (isnotnull(D_YEAR#4395) AND (D_YEAR#4395 = 2001.000000000000000000)))), List(oracolumnref(c_customer_id#4338), oracolumnref(c_first_name#4345), oracolumnref(c_last_name#4346), oracolumnref(c_preferred_cust_flag#4347), oracolumnref(c_birth_country#4351), oracolumnref(c_login#4352), oracolumnref(c_email_address#4353), oracolumnref(d_year#4395))
20 :     :- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#4337, C_CUSTOMER_ID#4338, C_FIRST_NAME#4345, C_LAST_NAME#4346, C_PREFERRED_CUST_FLAG#4347, C_BIRTH_COUNTRY#4351, C_LOGIN#4352, C_EMAIL_ADDRESS#4353]
21 :     :- OraTableScan TPCDS.WEB_SALES, [WS_BILL_CUSTOMER_SK#4359, WS_EXT_DISCOUNT_AMT#4377, WS_EXT_SALES_PRICE#4378, WS_EXT_WHOLESALE_COST#4379, WS_EXT_LIST_PRICE#4380, WS_SOLD_DATE_SK#4355]
22 :     +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#4389, D_YEAR#4395]
23 +- OraSingleQueryBlock [c_customer_id#4567 AS customer_id#4704, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#4609 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#4608 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#4606 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#4607 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#4712], [oraalias(c_customer_id#4567 AS customer_id#4704), oraalias(sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#4609 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#4608 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#4606 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#4607 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true)) AS year_total#4712)], orabinaryopexpression((isnotnull(WS_BILL_CUSTOMER_SK#4588) AND (isnotnull(D_YEAR#4624) AND (D_YEAR#4624 = 2002.000000000000000000)))), List(oracolumnref(c_customer_id#4567), oracolumnref(c_first_name#4574), oracolumnref(c_last_name#4575), oracolumnref(c_preferred_cust_flag#4576), oracolumnref(c_birth_country#4580), oracolumnref(c_login#4581), oracolumnref(c_email_address#4582), oracolumnref(d_year#4624))
24    :- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#4566, C_CUSTOMER_ID#4567, C_FIRST_NAME#4574, C_LAST_NAME#4575, C_PREFERRED_CUST_FLAG#4576, C_BIRTH_COUNTRY#4580, C_LOGIN#4581, C_EMAIL_ADDRESS#4582]
25    :- OraTableScan TPCDS.WEB_SALES, [WS_BILL_CUSTOMER_SK#4588, WS_EXT_DISCOUNT_AMT#4606, WS_EXT_SALES_PRICE#4607, WS_EXT_WHOLESALE_COST#4608, WS_EXT_LIST_PRICE#4609, WS_SOLD_DATE_SK#4584]
26    +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#4618, D_YEAR#4624]
ReadSchema: struct<customer_id:string,customer_first_name:string,customer_last_name:string,customer_preferred_cust_flag:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2001.000000000000000000, 2002.000000000000000000, 2001.000000000000000000, 0E-15, 2002.000000000000000000, 2001.000000000000000000, 0E-15, 2002.000000000000000000, 0E-15
oraPushdownSQL: select "sparkora_1"."customer_id", "customer_first_name", "customer_last_name", "customer_preferred_cust_flag"
from ( select "C_CUSTOMER_ID" AS "customer_id", SUM((((("SS_EXT_LIST_PRICE" - "SS_EXT_WHOLESALE_COST") - "SS_EXT_DISCOUNT_AMT") + "SS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.STORE_SALES  on ("C_CUSTOMER_SK" = "SS_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK")
where (("SS_CUSTOMER_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_0" join ( select "C_CUSTOMER_ID" AS "customer_id", "C_FIRST_NAME" AS "customer_first_name", "C_LAST_NAME" AS "customer_last_name", "C_PREFERRED_CUST_FLAG" AS "customer_preferred_cust_flag", SUM((((("SS_EXT_LIST_PRICE" - "SS_EXT_WHOLESALE_COST") - "SS_EXT_DISCOUNT_AMT") + "SS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.STORE_SALES  on ("C_CUSTOMER_SK" = "SS_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK")
where (("SS_CUSTOMER_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_1" on ("sparkora_0"."customer_id" = "sparkora_1"."customer_id") join ( select "customer_id" AS "customer_id", "year_total" AS "year_total"
from ( select "C_CUSTOMER_ID" AS "customer_id", SUM((((("CS_EXT_LIST_PRICE" - "CS_EXT_WHOLESALE_COST") - "CS_EXT_DISCOUNT_AMT") + "CS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.CATALOG_SALES  on ("C_CUSTOMER_SK" = "CS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("CS_SOLD_DATE_SK" = "D_DATE_SK")
where (("CS_BILL_CUSTOMER_SK" IS NOT NULL AND "CS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) 
where ("year_total" IS NOT NULL AND ("year_total" > ?)) ) "sparkora_2" on ("sparkora_0"."customer_id" = "sparkora_2"."customer_id") join ( select "C_CUSTOMER_ID" AS "customer_id", SUM((((("CS_EXT_LIST_PRICE" - "CS_EXT_WHOLESALE_COST") - "CS_EXT_DISCOUNT_AMT") + "CS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.CATALOG_SALES  on ("C_CUSTOMER_SK" = "CS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("CS_SOLD_DATE_SK" = "D_DATE_SK")
where (("CS_BILL_CUSTOMER_SK" IS NOT NULL AND "CS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_3" on (("sparkora_0"."customer_id" = "sparkora_3"."customer_id") AND (CASE WHEN ("sparkora_2"."year_total" > 0E-15) THEN ("sparkora_3"."year_total" / "sparkora_2"."year_total") ELSE null END > CASE WHEN ("sparkora_0"."year_total" > 0E-15) THEN ("sparkora_1"."year_total" / "sparkora_0"."year_total") ELSE null END)) join ( select "customer_id" AS "customer_id", "year_total" AS "year_total"
from ( select "C_CUSTOMER_ID" AS "customer_id", SUM((((("WS_EXT_LIST_PRICE" - "WS_EXT_WHOLESALE_COST") - "WS_EXT_DISCOUNT_AMT") + "WS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.WEB_SALES  on ("C_CUSTOMER_SK" = "WS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where (("WS_BILL_CUSTOMER_SK" IS NOT NULL AND "WS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) 
where ("year_total" IS NOT NULL AND ("year_total" > ?)) ) "sparkora_4" on ("sparkora_0"."customer_id" = "sparkora_4"."customer_id") join ( select "C_CUSTOMER_ID" AS "customer_id", SUM((((("WS_EXT_LIST_PRICE" - "WS_EXT_WHOLESALE_COST") - "WS_EXT_DISCOUNT_AMT") + "WS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.WEB_SALES  on ("C_CUSTOMER_SK" = "WS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where (("WS_BILL_CUSTOMER_SK" IS NOT NULL AND "WS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_5" on (("sparkora_0"."customer_id" = "sparkora_5"."customer_id") AND (CASE WHEN ("sparkora_2"."year_total" > 0E-15) THEN ("sparkora_3"."year_total" / "sparkora_2"."year_total") ELSE null END > CASE WHEN ("sparkora_4"."year_total" > 0E-15) THEN ("sparkora_5"."year_total" / "sparkora_4"."year_total") ELSE null END))
where ("sparkora_0"."year_total" IS NOT NULL AND ("sparkora_0"."year_total" > ?))

(2) Project [codegen id : 1]
Output [4]: [customer_id#4664, customer_first_name#4665, customer_last_name#4666, customer_preferred_cust_flag#4667]
Input [4]: [customer_id#4664, customer_first_name#4665, customer_last_name#4666, customer_preferred_cust_flag#4667]

(3) TakeOrderedAndProject
Input [4]: [customer_id#4664, customer_first_name#4665, customer_last_name#4666, customer_preferred_cust_flag#4667]
Arguments: 100, [customer_id#4664 ASC NULLS FIRST, customer_first_name#4665 ASC NULLS FIRST, customer_last_name#4666 ASC NULLS FIRST, customer_preferred_cust_flag#4667 ASC NULLS FIRST], [customer_id#4664, customer_first_name#4665, customer_last_name#4666, customer_preferred_cust_flag#4667]


Pushed oracle sqls

select "sparkora_1"."customer_id", "customer_first_name", "customer_last_name", "customer_preferred_cust_flag"
from ( select "C_CUSTOMER_ID" AS "customer_id", SUM((((("SS_EXT_LIST_PRICE" - "SS_EXT_WHOLESALE_COST") - "SS_EXT_DISCOUNT_AMT") + "SS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.STORE_SALES  on ("C_CUSTOMER_SK" = "SS_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK")
where (("SS_CUSTOMER_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2001.000000000000000000))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_0" join ( select "C_CUSTOMER_ID" AS "customer_id", "C_FIRST_NAME" AS "customer_first_name", "C_LAST_NAME" AS "customer_last_name", "C_PREFERRED_CUST_FLAG" AS "customer_preferred_cust_flag", SUM((((("SS_EXT_LIST_PRICE" - "SS_EXT_WHOLESALE_COST") - "SS_EXT_DISCOUNT_AMT") + "SS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.STORE_SALES  on ("C_CUSTOMER_SK" = "SS_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK")
where (("SS_CUSTOMER_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2002.000000000000000000))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_1" on ("sparkora_0"."customer_id" = "sparkora_1"."customer_id") join ( select "customer_id" AS "customer_id", "year_total" AS "year_total"
from ( select "C_CUSTOMER_ID" AS "customer_id", SUM((((("CS_EXT_LIST_PRICE" - "CS_EXT_WHOLESALE_COST") - "CS_EXT_DISCOUNT_AMT") + "CS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.CATALOG_SALES  on ("C_CUSTOMER_SK" = "CS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("CS_SOLD_DATE_SK" = "D_DATE_SK")
where (("CS_BILL_CUSTOMER_SK" IS NOT NULL AND "CS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2001.000000000000000000))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) 
where ("year_total" IS NOT NULL AND ("year_total" > 0E-15)) ) "sparkora_2" on ("sparkora_0"."customer_id" = "sparkora_2"."customer_id") join ( select "C_CUSTOMER_ID" AS "customer_id", SUM((((("CS_EXT_LIST_PRICE" - "CS_EXT_WHOLESALE_COST") - "CS_EXT_DISCOUNT_AMT") + "CS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.CATALOG_SALES  on ("C_CUSTOMER_SK" = "CS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("CS_SOLD_DATE_SK" = "D_DATE_SK")
where (("CS_BILL_CUSTOMER_SK" IS NOT NULL AND "CS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2002.000000000000000000))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_3" on (("sparkora_0"."customer_id" = "sparkora_3"."customer_id") AND (CASE WHEN ("sparkora_2"."year_total" > 0E-15) THEN ("sparkora_3"."year_total" / "sparkora_2"."year_total") ELSE null END > CASE WHEN ("sparkora_0"."year_total" > 0E-15) THEN ("sparkora_1"."year_total" / "sparkora_0"."year_total") ELSE null END)) join ( select "customer_id" AS "customer_id", "year_total" AS "year_total"
from ( select "C_CUSTOMER_ID" AS "customer_id", SUM((((("WS_EXT_LIST_PRICE" - "WS_EXT_WHOLESALE_COST") - "WS_EXT_DISCOUNT_AMT") + "WS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.WEB_SALES  on ("C_CUSTOMER_SK" = "WS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where (("WS_BILL_CUSTOMER_SK" IS NOT NULL AND "WS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2001.000000000000000000))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) 
where ("year_total" IS NOT NULL AND ("year_total" > 0E-15)) ) "sparkora_4" on ("sparkora_0"."customer_id" = "sparkora_4"."customer_id") join ( select "C_CUSTOMER_ID" AS "customer_id", SUM((((("WS_EXT_LIST_PRICE" - "WS_EXT_WHOLESALE_COST") - "WS_EXT_DISCOUNT_AMT") + "WS_EXT_SALES_PRICE") / 2.000000000000000)) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.WEB_SALES  on ("C_CUSTOMER_SK" = "WS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where (("WS_BILL_CUSTOMER_SK" IS NOT NULL AND "WS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2002.000000000000000000))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_5" on (("sparkora_0"."customer_id" = "sparkora_5"."customer_id") AND (CASE WHEN ("sparkora_2"."year_total" > 0E-15) THEN ("sparkora_3"."year_total" / "sparkora_2"."year_total") ELSE null END > CASE WHEN ("sparkora_4"."year_total" > 0E-15) THEN ("sparkora_5"."year_total" / "sparkora_4"."year_total") ELSE null END))
where ("sparkora_0"."year_total" IS NOT NULL AND ("sparkora_0"."year_total" > 0E-15))

Spark Plan with Pushdown turned off

== Physical Plan ==
TakeOrderedAndProject (117)
+- * Project (116)
   +- * SortMergeJoin Inner (115)
      :- * Project (97)
      :  +- * SortMergeJoin Inner (96)
      :     :- * Project (76)
      :     :  +- * SortMergeJoin Inner (75)
      :     :     :- * Project (57)
      :     :     :  +- * SortMergeJoin Inner (56)
      :     :     :     :- * SortMergeJoin Inner (36)
      :     :     :     :  :- * Sort (18)
      :     :     :     :  :  +- * Filter (17)
      :     :     :     :  :     +- * HashAggregate (16)
      :     :     :     :  :        +- * HashAggregate (15)
      :     :     :     :  :           +- * Project (14)
      :     :     :     :  :              +- * SortMergeJoin Inner (13)
      :     :     :     :  :                 :- * Sort (9)
      :     :     :     :  :                 :  +- * Project (8)
      :     :     :     :  :                 :     +- * SortMergeJoin Inner (7)
      :     :     :     :  :                 :        :- * Sort (3)
      :     :     :     :  :                 :        :  +- * Project (2)
      :     :     :     :  :                 :        :     +- BatchScan (1)
      :     :     :     :  :                 :        +- * Sort (6)
      :     :     :     :  :                 :           +- * Filter (5)
      :     :     :     :  :                 :              +- BatchScan (4)
      :     :     :     :  :                 +- * Sort (12)
      :     :     :     :  :                    +- * Filter (11)
      :     :     :     :  :                       +- BatchScan (10)
      :     :     :     :  +- * Sort (35)
      :     :     :     :     +- * HashAggregate (34)
      :     :     :     :        +- * HashAggregate (33)
      :     :     :     :           +- * Project (32)
      :     :     :     :              +- * SortMergeJoin Inner (31)
      :     :     :     :                 :- * Sort (27)
      :     :     :     :                 :  +- * Project (26)
      :     :     :     :                 :     +- * SortMergeJoin Inner (25)
      :     :     :     :                 :        :- * Sort (21)
      :     :     :     :                 :        :  +- * Project (20)
      :     :     :     :                 :        :     +- BatchScan (19)
      :     :     :     :                 :        +- * Sort (24)
      :     :     :     :                 :           +- * Filter (23)
      :     :     :     :                 :              +- BatchScan (22)
      :     :     :     :                 +- * Sort (30)
      :     :     :     :                    +- * Filter (29)
      :     :     :     :                       +- BatchScan (28)
      :     :     :     +- * Sort (55)
      :     :     :        +- * Project (54)
      :     :     :           +- * Filter (53)
      :     :     :              +- * HashAggregate (52)
      :     :     :                 +- * HashAggregate (51)
      :     :     :                    +- * Project (50)
      :     :     :                       +- * SortMergeJoin Inner (49)
      :     :     :                          :- * Sort (45)
      :     :     :                          :  +- * Project (44)
      :     :     :                          :     +- * SortMergeJoin Inner (43)
      :     :     :                          :        :- * Sort (39)
      :     :     :                          :        :  +- * Project (38)
      :     :     :                          :        :     +- BatchScan (37)
      :     :     :                          :        +- * Sort (42)
      :     :     :                          :           +- * Filter (41)
      :     :     :                          :              +- BatchScan (40)
      :     :     :                          +- * Sort (48)
      :     :     :                             +- * Filter (47)
      :     :     :                                +- BatchScan (46)
      :     :     +- * Sort (74)
      :     :        +- * HashAggregate (73)
      :     :           +- * HashAggregate (72)
      :     :              +- * Project (71)
      :     :                 +- * SortMergeJoin Inner (70)
      :     :                    :- * Sort (66)
      :     :                    :  +- * Project (65)
      :     :                    :     +- * SortMergeJoin Inner (64)
      :     :                    :        :- * Sort (60)
      :     :                    :        :  +- * Project (59)
      :     :                    :        :     +- BatchScan (58)
      :     :                    :        +- * Sort (63)
      :     :                    :           +- * Filter (62)
      :     :                    :              +- BatchScan (61)
      :     :                    +- * Sort (69)
      :     :                       +- * Filter (68)
      :     :                          +- BatchScan (67)
      :     +- * Sort (95)
      :        +- * Project (94)
      :           +- * Filter (93)
      :              +- * HashAggregate (92)
      :                 +- * HashAggregate (91)
      :                    +- * Project (90)
      :                       +- * SortMergeJoin Inner (89)
      :                          :- * Sort (85)
      :                          :  +- * Project (84)
      :                          :     +- * SortMergeJoin Inner (83)
      :                          :        :- * Sort (79)
      :                          :        :  +- * Project (78)
      :                          :        :     +- BatchScan (77)
      :                          :        +- * Sort (82)
      :                          :           +- * Filter (81)
      :                          :              +- BatchScan (80)
      :                          +- * Sort (88)
      :                             +- * Filter (87)
      :                                +- BatchScan (86)
      +- * Sort (114)
         +- * HashAggregate (113)
            +- * HashAggregate (112)
               +- * Project (111)
                  +- * SortMergeJoin Inner (110)
                     :- * Sort (106)
                     :  +- * Project (105)
                     :     +- * SortMergeJoin Inner (104)
                     :        :- * Sort (100)
                     :        :  +- * Project (99)
                     :        :     +- BatchScan (98)
                     :        +- * Sort (103)
                     :           +- * Filter (102)
                     :              +- BatchScan (101)
                     +- * Sort (109)
                        +- * Filter (108)
                           +- BatchScan (107)


(1) BatchScan
Output [8]: [C_CUSTOMER_SK#1388, C_CUSTOMER_ID#1389, C_FIRST_NAME#1396, C_LAST_NAME#1397, C_PREFERRED_CUST_FLAG#1398, C_BIRTH_COUNTRY#1402, C_LOGIN#1403, C_EMAIL_ADDRESS#1404]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#2834, C_CUSTOMER_ID#2835, C_FIRST_NAME#2836, C_LAST_NAME#2837, C_PREFERRED_CUST_FLAG#2838, C_BIRTH_COUNTRY#2839, C_LOGIN#2840, C_EMAIL_ADDRESS#2841], [oracolumnref(C_CUSTOMER_SK#2834), oracolumnref(C_CUSTOMER_ID#2835), oracolumnref(C_FIRST_NAME#2836), oracolumnref(C_LAST_NAME#2837), oracolumnref(C_PREFERRED_CUST_FLAG#2838), oracolumnref(C_BIRTH_COUNTRY#2839), oracolumnref(C_LOGIN#2840), oracolumnref(C_EMAIL_ADDRESS#2841)]
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CUSTOMER_ID:string,C_FIRST_NAME:string,C_LAST_NAME:string,C_PREFERRED_CUST_FLAG:string,C_BIRTH_COUNTRY:string,C_LOGIN:string,C_EMAIL_ADDRESS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS"
from TPCDS.CUSTOMER

(2) Project [codegen id : 1]
Output [8]: [C_CUSTOMER_SK#1388, C_CUSTOMER_ID#1389, C_FIRST_NAME#1396, C_LAST_NAME#1397, C_PREFERRED_CUST_FLAG#1398, C_BIRTH_COUNTRY#1402, C_LOGIN#1403, C_EMAIL_ADDRESS#1404]
Input [8]: [C_CUSTOMER_SK#1388, C_CUSTOMER_ID#1389, C_FIRST_NAME#1396, C_LAST_NAME#1397, C_PREFERRED_CUST_FLAG#1398, C_BIRTH_COUNTRY#1402, C_LOGIN#1403, C_EMAIL_ADDRESS#1404]

(3) Sort [codegen id : 1]
Input [8]: [C_CUSTOMER_SK#1388, C_CUSTOMER_ID#1389, C_FIRST_NAME#1396, C_LAST_NAME#1397, C_PREFERRED_CUST_FLAG#1398, C_BIRTH_COUNTRY#1402, C_LOGIN#1403, C_EMAIL_ADDRESS#1404]
Arguments: [c_customer_sk#1388 ASC NULLS FIRST], false, 0

(4) BatchScan
Output [6]: [SS_CUSTOMER_SK#1409, SS_EXT_DISCOUNT_AMT#1420, SS_EXT_SALES_PRICE#1421, SS_EXT_WHOLESALE_COST#1422, SS_EXT_LIST_PRICE#1423, SS_SOLD_DATE_SK#1406]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_CUSTOMER_SK#2850, SS_EXT_DISCOUNT_AMT#2851, SS_EXT_SALES_PRICE#2852, SS_EXT_WHOLESALE_COST#2853, SS_EXT_LIST_PRICE#2854, SS_SOLD_DATE_SK#2855], [oracolumnref(SS_CUSTOMER_SK#2850), oracolumnref(SS_EXT_DISCOUNT_AMT#2851), oracolumnref(SS_EXT_SALES_PRICE#2852), oracolumnref(SS_EXT_WHOLESALE_COST#2853), oracolumnref(SS_EXT_LIST_PRICE#2854), oracolumnref(SS_SOLD_DATE_SK#2855)], orapostfixunaryopexpression(isnotnull(SS_CUSTOMER_SK#1409))
PartitionSchema: struct<SS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<SS_CUSTOMER_SK:decimal(38,18),SS_EXT_DISCOUNT_AMT:decimal(38,18),SS_EXT_SALES_PRICE:decimal(38,18),SS_EXT_WHOLESALE_COST:decimal(38,18),SS_EXT_LIST_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SS_CUSTOMER_SK", "SS_EXT_DISCOUNT_AMT", "SS_EXT_SALES_PRICE", "SS_EXT_WHOLESALE_COST", "SS_EXT_LIST_PRICE", "SS_SOLD_DATE_SK"
from TPCDS.STORE_SALES
where "SS_CUSTOMER_SK" IS NOT NULL and "SS_SOLD_DATE_SK" IS NOT NULL

(5) Filter [codegen id : 2]
Input [6]: [SS_CUSTOMER_SK#1409, SS_EXT_DISCOUNT_AMT#1420, SS_EXT_SALES_PRICE#1421, SS_EXT_WHOLESALE_COST#1422, SS_EXT_LIST_PRICE#1423, SS_SOLD_DATE_SK#1406]
Condition : isnotnull(SS_CUSTOMER_SK#1409)

(6) Sort [codegen id : 2]
Input [6]: [SS_CUSTOMER_SK#1409, SS_EXT_DISCOUNT_AMT#1420, SS_EXT_SALES_PRICE#1421, SS_EXT_WHOLESALE_COST#1422, SS_EXT_LIST_PRICE#1423, SS_SOLD_DATE_SK#1406]
Arguments: [ss_customer_sk#1409 ASC NULLS FIRST], false, 0

(7) SortMergeJoin [codegen id : 3]
Left keys [1]: [c_customer_sk#1388]
Right keys [1]: [ss_customer_sk#1409]
Join condition: None

(8) Project [codegen id : 3]
Output [12]: [C_CUSTOMER_ID#1389, C_FIRST_NAME#1396, C_LAST_NAME#1397, C_PREFERRED_CUST_FLAG#1398, C_BIRTH_COUNTRY#1402, C_LOGIN#1403, C_EMAIL_ADDRESS#1404, SS_SOLD_DATE_SK#1406, SS_EXT_DISCOUNT_AMT#1420, SS_EXT_SALES_PRICE#1421, SS_EXT_WHOLESALE_COST#1422, SS_EXT_LIST_PRICE#1423]
Input [14]: [C_CUSTOMER_SK#1388, C_CUSTOMER_ID#1389, C_FIRST_NAME#1396, C_LAST_NAME#1397, C_PREFERRED_CUST_FLAG#1398, C_BIRTH_COUNTRY#1402, C_LOGIN#1403, C_EMAIL_ADDRESS#1404, SS_CUSTOMER_SK#1409, SS_EXT_DISCOUNT_AMT#1420, SS_EXT_SALES_PRICE#1421, SS_EXT_WHOLESALE_COST#1422, SS_EXT_LIST_PRICE#1423, SS_SOLD_DATE_SK#1406]

(9) Sort [codegen id : 3]
Input [12]: [C_CUSTOMER_ID#1389, C_FIRST_NAME#1396, C_LAST_NAME#1397, C_PREFERRED_CUST_FLAG#1398, C_BIRTH_COUNTRY#1402, C_LOGIN#1403, C_EMAIL_ADDRESS#1404, SS_SOLD_DATE_SK#1406, SS_EXT_DISCOUNT_AMT#1420, SS_EXT_SALES_PRICE#1421, SS_EXT_WHOLESALE_COST#1422, SS_EXT_LIST_PRICE#1423]
Arguments: [ss_sold_date_sk#1406 ASC NULLS FIRST], false, 0

(10) BatchScan
Output [2]: [D_DATE_SK#1429, D_YEAR#1435]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#2862, D_YEAR#2863], [oracolumnref(D_DATE_SK#2862), oracolumnref(D_YEAR#2863)], orabinaryopexpression((isnotnull(D_YEAR#1435) AND (D_YEAR#1435 = 2001.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2001.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(11) Filter [codegen id : 4]
Input [2]: [D_DATE_SK#1429, D_YEAR#1435]
Condition : (isnotnull(D_YEAR#1435) AND (D_YEAR#1435 = 2001.000000000000000000))

(12) Sort [codegen id : 4]
Input [2]: [D_DATE_SK#1429, D_YEAR#1435]
Arguments: [d_date_sk#1429 ASC NULLS FIRST], false, 0

(13) SortMergeJoin [codegen id : 5]
Left keys [1]: [ss_sold_date_sk#1406]
Right keys [1]: [d_date_sk#1429]
Join condition: None

(14) Project [codegen id : 5]
Output [12]: [C_CUSTOMER_ID#1389, C_FIRST_NAME#1396, C_LAST_NAME#1397, C_PREFERRED_CUST_FLAG#1398, C_BIRTH_COUNTRY#1402, C_LOGIN#1403, C_EMAIL_ADDRESS#1404, SS_EXT_DISCOUNT_AMT#1420, SS_EXT_SALES_PRICE#1421, SS_EXT_WHOLESALE_COST#1422, SS_EXT_LIST_PRICE#1423, D_YEAR#1435]
Input [14]: [C_CUSTOMER_ID#1389, C_FIRST_NAME#1396, C_LAST_NAME#1397, C_PREFERRED_CUST_FLAG#1398, C_BIRTH_COUNTRY#1402, C_LOGIN#1403, C_EMAIL_ADDRESS#1404, SS_SOLD_DATE_SK#1406, SS_EXT_DISCOUNT_AMT#1420, SS_EXT_SALES_PRICE#1421, SS_EXT_WHOLESALE_COST#1422, SS_EXT_LIST_PRICE#1423, D_DATE_SK#1429, D_YEAR#1435]

(15) HashAggregate [codegen id : 5]
Input [12]: [C_CUSTOMER_ID#1389, C_FIRST_NAME#1396, C_LAST_NAME#1397, C_PREFERRED_CUST_FLAG#1398, C_BIRTH_COUNTRY#1402, C_LOGIN#1403, C_EMAIL_ADDRESS#1404, SS_EXT_DISCOUNT_AMT#1420, SS_EXT_SALES_PRICE#1421, SS_EXT_WHOLESALE_COST#1422, SS_EXT_LIST_PRICE#1423, D_YEAR#1435]
Keys [8]: [c_customer_id#1389, c_first_name#1396, c_last_name#1397, c_preferred_cust_flag#1398, c_birth_country#1402, c_login#1403, c_email_address#1404, d_year#1435]
Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#1423 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#1422 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#1420 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#1421 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [2]: [sum#3218, isEmpty#3219]
Results [10]: [c_customer_id#1389, c_first_name#1396, c_last_name#1397, c_preferred_cust_flag#1398, c_birth_country#1402, c_login#1403, c_email_address#1404, d_year#1435, sum#3220, isEmpty#3221]

(16) HashAggregate [codegen id : 5]
Input [10]: [c_customer_id#1389, c_first_name#1396, c_last_name#1397, c_preferred_cust_flag#1398, c_birth_country#1402, c_login#1403, c_email_address#1404, d_year#1435, sum#3220, isEmpty#3221]
Keys [8]: [c_customer_id#1389, c_first_name#1396, c_last_name#1397, c_preferred_cust_flag#1398, c_birth_country#1402, c_login#1403, c_email_address#1404, d_year#1435]
Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#1423 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#1422 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#1420 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#1421 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#1423 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#1422 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#1420 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#1421 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2762]
Results [2]: [c_customer_id#1389 AS customer_id#1358, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#1423 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#1422 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#1420 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#1421 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2762 AS year_total#1366]

(17) Filter [codegen id : 5]
Input [2]: [customer_id#1358, year_total#1366]
Condition : (isnotnull(year_total#1366) AND (year_total#1366 > 0E-15))

(18) Sort [codegen id : 5]
Input [2]: [customer_id#1358, year_total#1366]
Arguments: [customer_id#1358 ASC NULLS FIRST], false, 0

(19) BatchScan
Output [8]: [C_CUSTOMER_SK#1617, C_CUSTOMER_ID#1618, C_FIRST_NAME#1625, C_LAST_NAME#1626, C_PREFERRED_CUST_FLAG#1627, C_BIRTH_COUNTRY#1631, C_LOGIN#1632, C_EMAIL_ADDRESS#1633]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#2898, C_CUSTOMER_ID#2899, C_FIRST_NAME#2900, C_LAST_NAME#2901, C_PREFERRED_CUST_FLAG#2902, C_BIRTH_COUNTRY#2903, C_LOGIN#2904, C_EMAIL_ADDRESS#2905], [oracolumnref(C_CUSTOMER_SK#2898), oracolumnref(C_CUSTOMER_ID#2899), oracolumnref(C_FIRST_NAME#2900), oracolumnref(C_LAST_NAME#2901), oracolumnref(C_PREFERRED_CUST_FLAG#2902), oracolumnref(C_BIRTH_COUNTRY#2903), oracolumnref(C_LOGIN#2904), oracolumnref(C_EMAIL_ADDRESS#2905)]
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CUSTOMER_ID:string,C_FIRST_NAME:string,C_LAST_NAME:string,C_PREFERRED_CUST_FLAG:string,C_BIRTH_COUNTRY:string,C_LOGIN:string,C_EMAIL_ADDRESS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS"
from TPCDS.CUSTOMER

(20) Project [codegen id : 6]
Output [8]: [C_CUSTOMER_SK#1617, C_CUSTOMER_ID#1618, C_FIRST_NAME#1625, C_LAST_NAME#1626, C_PREFERRED_CUST_FLAG#1627, C_BIRTH_COUNTRY#1631, C_LOGIN#1632, C_EMAIL_ADDRESS#1633]
Input [8]: [C_CUSTOMER_SK#1617, C_CUSTOMER_ID#1618, C_FIRST_NAME#1625, C_LAST_NAME#1626, C_PREFERRED_CUST_FLAG#1627, C_BIRTH_COUNTRY#1631, C_LOGIN#1632, C_EMAIL_ADDRESS#1633]

(21) Sort [codegen id : 6]
Input [8]: [C_CUSTOMER_SK#1617, C_CUSTOMER_ID#1618, C_FIRST_NAME#1625, C_LAST_NAME#1626, C_PREFERRED_CUST_FLAG#1627, C_BIRTH_COUNTRY#1631, C_LOGIN#1632, C_EMAIL_ADDRESS#1633]
Arguments: [c_customer_sk#1617 ASC NULLS FIRST], false, 0

(22) BatchScan
Output [6]: [SS_CUSTOMER_SK#1638, SS_EXT_DISCOUNT_AMT#1649, SS_EXT_SALES_PRICE#1650, SS_EXT_WHOLESALE_COST#1651, SS_EXT_LIST_PRICE#1652, SS_SOLD_DATE_SK#1635]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_CUSTOMER_SK#2914, SS_EXT_DISCOUNT_AMT#2915, SS_EXT_SALES_PRICE#2916, SS_EXT_WHOLESALE_COST#2917, SS_EXT_LIST_PRICE#2918, SS_SOLD_DATE_SK#2919], [oracolumnref(SS_CUSTOMER_SK#2914), oracolumnref(SS_EXT_DISCOUNT_AMT#2915), oracolumnref(SS_EXT_SALES_PRICE#2916), oracolumnref(SS_EXT_WHOLESALE_COST#2917), oracolumnref(SS_EXT_LIST_PRICE#2918), oracolumnref(SS_SOLD_DATE_SK#2919)], orapostfixunaryopexpression(isnotnull(SS_CUSTOMER_SK#1638))
PartitionSchema: struct<SS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<SS_CUSTOMER_SK:decimal(38,18),SS_EXT_DISCOUNT_AMT:decimal(38,18),SS_EXT_SALES_PRICE:decimal(38,18),SS_EXT_WHOLESALE_COST:decimal(38,18),SS_EXT_LIST_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SS_CUSTOMER_SK", "SS_EXT_DISCOUNT_AMT", "SS_EXT_SALES_PRICE", "SS_EXT_WHOLESALE_COST", "SS_EXT_LIST_PRICE", "SS_SOLD_DATE_SK"
from TPCDS.STORE_SALES
where "SS_CUSTOMER_SK" IS NOT NULL and "SS_SOLD_DATE_SK" IS NOT NULL

(23) Filter [codegen id : 7]
Input [6]: [SS_CUSTOMER_SK#1638, SS_EXT_DISCOUNT_AMT#1649, SS_EXT_SALES_PRICE#1650, SS_EXT_WHOLESALE_COST#1651, SS_EXT_LIST_PRICE#1652, SS_SOLD_DATE_SK#1635]
Condition : isnotnull(SS_CUSTOMER_SK#1638)

(24) Sort [codegen id : 7]
Input [6]: [SS_CUSTOMER_SK#1638, SS_EXT_DISCOUNT_AMT#1649, SS_EXT_SALES_PRICE#1650, SS_EXT_WHOLESALE_COST#1651, SS_EXT_LIST_PRICE#1652, SS_SOLD_DATE_SK#1635]
Arguments: [ss_customer_sk#1638 ASC NULLS FIRST], false, 0

(25) SortMergeJoin [codegen id : 8]
Left keys [1]: [c_customer_sk#1617]
Right keys [1]: [ss_customer_sk#1638]
Join condition: None

(26) Project [codegen id : 8]
Output [12]: [C_CUSTOMER_ID#1618, C_FIRST_NAME#1625, C_LAST_NAME#1626, C_PREFERRED_CUST_FLAG#1627, C_BIRTH_COUNTRY#1631, C_LOGIN#1632, C_EMAIL_ADDRESS#1633, SS_SOLD_DATE_SK#1635, SS_EXT_DISCOUNT_AMT#1649, SS_EXT_SALES_PRICE#1650, SS_EXT_WHOLESALE_COST#1651, SS_EXT_LIST_PRICE#1652]
Input [14]: [C_CUSTOMER_SK#1617, C_CUSTOMER_ID#1618, C_FIRST_NAME#1625, C_LAST_NAME#1626, C_PREFERRED_CUST_FLAG#1627, C_BIRTH_COUNTRY#1631, C_LOGIN#1632, C_EMAIL_ADDRESS#1633, SS_CUSTOMER_SK#1638, SS_EXT_DISCOUNT_AMT#1649, SS_EXT_SALES_PRICE#1650, SS_EXT_WHOLESALE_COST#1651, SS_EXT_LIST_PRICE#1652, SS_SOLD_DATE_SK#1635]

(27) Sort [codegen id : 8]
Input [12]: [C_CUSTOMER_ID#1618, C_FIRST_NAME#1625, C_LAST_NAME#1626, C_PREFERRED_CUST_FLAG#1627, C_BIRTH_COUNTRY#1631, C_LOGIN#1632, C_EMAIL_ADDRESS#1633, SS_SOLD_DATE_SK#1635, SS_EXT_DISCOUNT_AMT#1649, SS_EXT_SALES_PRICE#1650, SS_EXT_WHOLESALE_COST#1651, SS_EXT_LIST_PRICE#1652]
Arguments: [ss_sold_date_sk#1635 ASC NULLS FIRST], false, 0

(28) BatchScan
Output [2]: [D_DATE_SK#1658, D_YEAR#1664]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#2926, D_YEAR#2927], [oracolumnref(D_DATE_SK#2926), oracolumnref(D_YEAR#2927)], orabinaryopexpression((isnotnull(D_YEAR#1664) AND (D_YEAR#1664 = 2002.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(29) Filter [codegen id : 9]
Input [2]: [D_DATE_SK#1658, D_YEAR#1664]
Condition : (isnotnull(D_YEAR#1664) AND (D_YEAR#1664 = 2002.000000000000000000))

(30) Sort [codegen id : 9]
Input [2]: [D_DATE_SK#1658, D_YEAR#1664]
Arguments: [d_date_sk#1658 ASC NULLS FIRST], false, 0

(31) SortMergeJoin [codegen id : 10]
Left keys [1]: [ss_sold_date_sk#1635]
Right keys [1]: [d_date_sk#1658]
Join condition: None

(32) Project [codegen id : 10]
Output [12]: [C_CUSTOMER_ID#1618, C_FIRST_NAME#1625, C_LAST_NAME#1626, C_PREFERRED_CUST_FLAG#1627, C_BIRTH_COUNTRY#1631, C_LOGIN#1632, C_EMAIL_ADDRESS#1633, SS_EXT_DISCOUNT_AMT#1649, SS_EXT_SALES_PRICE#1650, SS_EXT_WHOLESALE_COST#1651, SS_EXT_LIST_PRICE#1652, D_YEAR#1664]
Input [14]: [C_CUSTOMER_ID#1618, C_FIRST_NAME#1625, C_LAST_NAME#1626, C_PREFERRED_CUST_FLAG#1627, C_BIRTH_COUNTRY#1631, C_LOGIN#1632, C_EMAIL_ADDRESS#1633, SS_SOLD_DATE_SK#1635, SS_EXT_DISCOUNT_AMT#1649, SS_EXT_SALES_PRICE#1650, SS_EXT_WHOLESALE_COST#1651, SS_EXT_LIST_PRICE#1652, D_DATE_SK#1658, D_YEAR#1664]

(33) HashAggregate [codegen id : 10]
Input [12]: [C_CUSTOMER_ID#1618, C_FIRST_NAME#1625, C_LAST_NAME#1626, C_PREFERRED_CUST_FLAG#1627, C_BIRTH_COUNTRY#1631, C_LOGIN#1632, C_EMAIL_ADDRESS#1633, SS_EXT_DISCOUNT_AMT#1649, SS_EXT_SALES_PRICE#1650, SS_EXT_WHOLESALE_COST#1651, SS_EXT_LIST_PRICE#1652, D_YEAR#1664]
Keys [8]: [c_customer_id#1618, c_first_name#1625, c_last_name#1626, c_preferred_cust_flag#1627, c_birth_country#1631, c_login#1632, c_email_address#1633, d_year#1664]
Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#1652 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#1651 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#1649 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#1650 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [2]: [sum#3222, isEmpty#3223]
Results [10]: [c_customer_id#1618, c_first_name#1625, c_last_name#1626, c_preferred_cust_flag#1627, c_birth_country#1631, c_login#1632, c_email_address#1633, d_year#1664, sum#3224, isEmpty#3225]

(34) HashAggregate [codegen id : 10]
Input [10]: [c_customer_id#1618, c_first_name#1625, c_last_name#1626, c_preferred_cust_flag#1627, c_birth_country#1631, c_login#1632, c_email_address#1633, d_year#1664, sum#3224, isEmpty#3225]
Keys [8]: [c_customer_id#1618, c_first_name#1625, c_last_name#1626, c_preferred_cust_flag#1627, c_birth_country#1631, c_login#1632, c_email_address#1633, d_year#1664]
Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#1652 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#1651 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#1649 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#1650 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#1652 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#1651 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#1649 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#1650 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2765]
Results [5]: [c_customer_id#1618 AS customer_id#2780, c_first_name#1625 AS customer_first_name#2781, c_last_name#1626 AS customer_last_name#2782, c_preferred_cust_flag#1627 AS customer_preferred_cust_flag#2783, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#1652 as decimal(38,17))) - promote_precision(cast(ss_ext_wholesale_cost#1651 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ss_ext_discount_amt#1649 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ss_ext_sales_price#1650 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2765 AS year_total#2788]

(35) Sort [codegen id : 10]
Input [5]: [customer_id#2780, customer_first_name#2781, customer_last_name#2782, customer_preferred_cust_flag#2783, year_total#2788]
Arguments: [customer_id#2780 ASC NULLS FIRST], false, 0

(36) SortMergeJoin [codegen id : 11]
Left keys [1]: [customer_id#1358]
Right keys [1]: [customer_id#2780]
Join condition: None

(37) BatchScan
Output [8]: [C_CUSTOMER_SK#1915, C_CUSTOMER_ID#1916, C_FIRST_NAME#1923, C_LAST_NAME#1924, C_PREFERRED_CUST_FLAG#1925, C_BIRTH_COUNTRY#1929, C_LOGIN#1930, C_EMAIL_ADDRESS#1931]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#2978, C_CUSTOMER_ID#2979, C_FIRST_NAME#2980, C_LAST_NAME#2981, C_PREFERRED_CUST_FLAG#2982, C_BIRTH_COUNTRY#2983, C_LOGIN#2984, C_EMAIL_ADDRESS#2985], [oracolumnref(C_CUSTOMER_SK#2978), oracolumnref(C_CUSTOMER_ID#2979), oracolumnref(C_FIRST_NAME#2980), oracolumnref(C_LAST_NAME#2981), oracolumnref(C_PREFERRED_CUST_FLAG#2982), oracolumnref(C_BIRTH_COUNTRY#2983), oracolumnref(C_LOGIN#2984), oracolumnref(C_EMAIL_ADDRESS#2985)]
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CUSTOMER_ID:string,C_FIRST_NAME:string,C_LAST_NAME:string,C_PREFERRED_CUST_FLAG:string,C_BIRTH_COUNTRY:string,C_LOGIN:string,C_EMAIL_ADDRESS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS"
from TPCDS.CUSTOMER

(38) Project [codegen id : 12]
Output [8]: [C_CUSTOMER_SK#1915, C_CUSTOMER_ID#1916, C_FIRST_NAME#1923, C_LAST_NAME#1924, C_PREFERRED_CUST_FLAG#1925, C_BIRTH_COUNTRY#1929, C_LOGIN#1930, C_EMAIL_ADDRESS#1931]
Input [8]: [C_CUSTOMER_SK#1915, C_CUSTOMER_ID#1916, C_FIRST_NAME#1923, C_LAST_NAME#1924, C_PREFERRED_CUST_FLAG#1925, C_BIRTH_COUNTRY#1929, C_LOGIN#1930, C_EMAIL_ADDRESS#1931]

(39) Sort [codegen id : 12]
Input [8]: [C_CUSTOMER_SK#1915, C_CUSTOMER_ID#1916, C_FIRST_NAME#1923, C_LAST_NAME#1924, C_PREFERRED_CUST_FLAG#1925, C_BIRTH_COUNTRY#1929, C_LOGIN#1930, C_EMAIL_ADDRESS#1931]
Arguments: [c_customer_sk#1915 ASC NULLS FIRST], false, 0

(40) BatchScan
Output [6]: [CS_BILL_CUSTOMER_SK#1936, CS_EXT_DISCOUNT_AMT#1955, CS_EXT_SALES_PRICE#1956, CS_EXT_WHOLESALE_COST#1957, CS_EXT_LIST_PRICE#1958, CS_SOLD_DATE_SK#1933]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CATALOG_SALES, [CS_BILL_CUSTOMER_SK#2994, CS_EXT_DISCOUNT_AMT#2995, CS_EXT_SALES_PRICE#2996, CS_EXT_WHOLESALE_COST#2997, CS_EXT_LIST_PRICE#2998, CS_SOLD_DATE_SK#2999], [oracolumnref(CS_BILL_CUSTOMER_SK#2994), oracolumnref(CS_EXT_DISCOUNT_AMT#2995), oracolumnref(CS_EXT_SALES_PRICE#2996), oracolumnref(CS_EXT_WHOLESALE_COST#2997), oracolumnref(CS_EXT_LIST_PRICE#2998), oracolumnref(CS_SOLD_DATE_SK#2999)], orapostfixunaryopexpression(isnotnull(CS_BILL_CUSTOMER_SK#1936))
PartitionSchema: struct<CS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<CS_BILL_CUSTOMER_SK:decimal(38,18),CS_EXT_DISCOUNT_AMT:decimal(38,18),CS_EXT_SALES_PRICE:decimal(38,18),CS_EXT_WHOLESALE_COST:decimal(38,18),CS_EXT_LIST_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CS_BILL_CUSTOMER_SK", "CS_EXT_DISCOUNT_AMT", "CS_EXT_SALES_PRICE", "CS_EXT_WHOLESALE_COST", "CS_EXT_LIST_PRICE", "CS_SOLD_DATE_SK"
from TPCDS.CATALOG_SALES
where "CS_BILL_CUSTOMER_SK" IS NOT NULL and "CS_SOLD_DATE_SK" IS NOT NULL

(41) Filter [codegen id : 13]
Input [6]: [CS_BILL_CUSTOMER_SK#1936, CS_EXT_DISCOUNT_AMT#1955, CS_EXT_SALES_PRICE#1956, CS_EXT_WHOLESALE_COST#1957, CS_EXT_LIST_PRICE#1958, CS_SOLD_DATE_SK#1933]
Condition : isnotnull(CS_BILL_CUSTOMER_SK#1936)

(42) Sort [codegen id : 13]
Input [6]: [CS_BILL_CUSTOMER_SK#1936, CS_EXT_DISCOUNT_AMT#1955, CS_EXT_SALES_PRICE#1956, CS_EXT_WHOLESALE_COST#1957, CS_EXT_LIST_PRICE#1958, CS_SOLD_DATE_SK#1933]
Arguments: [cs_bill_customer_sk#1936 ASC NULLS FIRST], false, 0

(43) SortMergeJoin [codegen id : 14]
Left keys [1]: [c_customer_sk#1915]
Right keys [1]: [cs_bill_customer_sk#1936]
Join condition: None

(44) Project [codegen id : 14]
Output [12]: [C_CUSTOMER_ID#1916, C_FIRST_NAME#1923, C_LAST_NAME#1924, C_PREFERRED_CUST_FLAG#1925, C_BIRTH_COUNTRY#1929, C_LOGIN#1930, C_EMAIL_ADDRESS#1931, CS_SOLD_DATE_SK#1933, CS_EXT_DISCOUNT_AMT#1955, CS_EXT_SALES_PRICE#1956, CS_EXT_WHOLESALE_COST#1957, CS_EXT_LIST_PRICE#1958]
Input [14]: [C_CUSTOMER_SK#1915, C_CUSTOMER_ID#1916, C_FIRST_NAME#1923, C_LAST_NAME#1924, C_PREFERRED_CUST_FLAG#1925, C_BIRTH_COUNTRY#1929, C_LOGIN#1930, C_EMAIL_ADDRESS#1931, CS_BILL_CUSTOMER_SK#1936, CS_EXT_DISCOUNT_AMT#1955, CS_EXT_SALES_PRICE#1956, CS_EXT_WHOLESALE_COST#1957, CS_EXT_LIST_PRICE#1958, CS_SOLD_DATE_SK#1933]

(45) Sort [codegen id : 14]
Input [12]: [C_CUSTOMER_ID#1916, C_FIRST_NAME#1923, C_LAST_NAME#1924, C_PREFERRED_CUST_FLAG#1925, C_BIRTH_COUNTRY#1929, C_LOGIN#1930, C_EMAIL_ADDRESS#1931, CS_SOLD_DATE_SK#1933, CS_EXT_DISCOUNT_AMT#1955, CS_EXT_SALES_PRICE#1956, CS_EXT_WHOLESALE_COST#1957, CS_EXT_LIST_PRICE#1958]
Arguments: [cs_sold_date_sk#1933 ASC NULLS FIRST], false, 0

(46) BatchScan
Output [2]: [D_DATE_SK#1967, D_YEAR#1973]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#3006, D_YEAR#3007], [oracolumnref(D_DATE_SK#3006), oracolumnref(D_YEAR#3007)], orabinaryopexpression((isnotnull(D_YEAR#1973) AND (D_YEAR#1973 = 2001.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2001.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(47) Filter [codegen id : 15]
Input [2]: [D_DATE_SK#1967, D_YEAR#1973]
Condition : (isnotnull(D_YEAR#1973) AND (D_YEAR#1973 = 2001.000000000000000000))

(48) Sort [codegen id : 15]
Input [2]: [D_DATE_SK#1967, D_YEAR#1973]
Arguments: [d_date_sk#1967 ASC NULLS FIRST], false, 0

(49) SortMergeJoin [codegen id : 16]
Left keys [1]: [cs_sold_date_sk#1933]
Right keys [1]: [d_date_sk#1967]
Join condition: None

(50) Project [codegen id : 16]
Output [12]: [C_CUSTOMER_ID#1916, C_FIRST_NAME#1923, C_LAST_NAME#1924, C_PREFERRED_CUST_FLAG#1925, C_BIRTH_COUNTRY#1929, C_LOGIN#1930, C_EMAIL_ADDRESS#1931, CS_EXT_DISCOUNT_AMT#1955, CS_EXT_SALES_PRICE#1956, CS_EXT_WHOLESALE_COST#1957, CS_EXT_LIST_PRICE#1958, D_YEAR#1973]
Input [14]: [C_CUSTOMER_ID#1916, C_FIRST_NAME#1923, C_LAST_NAME#1924, C_PREFERRED_CUST_FLAG#1925, C_BIRTH_COUNTRY#1929, C_LOGIN#1930, C_EMAIL_ADDRESS#1931, CS_SOLD_DATE_SK#1933, CS_EXT_DISCOUNT_AMT#1955, CS_EXT_SALES_PRICE#1956, CS_EXT_WHOLESALE_COST#1957, CS_EXT_LIST_PRICE#1958, D_DATE_SK#1967, D_YEAR#1973]

(51) HashAggregate [codegen id : 16]
Input [12]: [C_CUSTOMER_ID#1916, C_FIRST_NAME#1923, C_LAST_NAME#1924, C_PREFERRED_CUST_FLAG#1925, C_BIRTH_COUNTRY#1929, C_LOGIN#1930, C_EMAIL_ADDRESS#1931, CS_EXT_DISCOUNT_AMT#1955, CS_EXT_SALES_PRICE#1956, CS_EXT_WHOLESALE_COST#1957, CS_EXT_LIST_PRICE#1958, D_YEAR#1973]
Keys [8]: [c_customer_id#1916, c_first_name#1923, c_last_name#1924, c_preferred_cust_flag#1925, c_birth_country#1929, c_login#1930, c_email_address#1931, d_year#1973]
Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#1958 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#1957 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#1955 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#1956 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [2]: [sum#3226, isEmpty#3227]
Results [10]: [c_customer_id#1916, c_first_name#1923, c_last_name#1924, c_preferred_cust_flag#1925, c_birth_country#1929, c_login#1930, c_email_address#1931, d_year#1973, sum#3228, isEmpty#3229]

(52) HashAggregate [codegen id : 16]
Input [10]: [c_customer_id#1916, c_first_name#1923, c_last_name#1924, c_preferred_cust_flag#1925, c_birth_country#1929, c_login#1930, c_email_address#1931, d_year#1973, sum#3228, isEmpty#3229]
Keys [8]: [c_customer_id#1916, c_first_name#1923, c_last_name#1924, c_preferred_cust_flag#1925, c_birth_country#1929, c_login#1930, c_email_address#1931, d_year#1973]
Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#1958 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#1957 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#1955 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#1956 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#1958 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#1957 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#1955 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#1956 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2769]
Results [2]: [c_customer_id#1916 AS customer_id#1368, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#1958 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#1957 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#1955 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#1956 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2769 AS year_total#1376]

(53) Filter [codegen id : 16]
Input [2]: [customer_id#1368, year_total#1376]
Condition : (isnotnull(year_total#1376) AND (year_total#1376 > 0E-15))

(54) Project [codegen id : 16]
Output [2]: [customer_id#1368 AS customer_id#2790, year_total#1376 AS year_total#2798]
Input [2]: [customer_id#1368, year_total#1376]

(55) Sort [codegen id : 16]
Input [2]: [customer_id#2790, year_total#2798]
Arguments: [customer_id#2790 ASC NULLS FIRST], false, 0

(56) SortMergeJoin [codegen id : 17]
Left keys [1]: [customer_id#1358]
Right keys [1]: [customer_id#2790]
Join condition: None

(57) Project [codegen id : 17]
Output [8]: [customer_id#1358, year_total#1366, customer_id#2780, customer_first_name#2781, customer_last_name#2782, customer_preferred_cust_flag#2783, year_total#2788, year_total#2798]
Input [9]: [customer_id#1358, year_total#1366, customer_id#2780, customer_first_name#2781, customer_last_name#2782, customer_preferred_cust_flag#2783, year_total#2788, customer_id#2790, year_total#2798]

(58) BatchScan
Output [8]: [C_CUSTOMER_SK#2144, C_CUSTOMER_ID#2145, C_FIRST_NAME#2152, C_LAST_NAME#2153, C_PREFERRED_CUST_FLAG#2154, C_BIRTH_COUNTRY#2158, C_LOGIN#2159, C_EMAIL_ADDRESS#2160]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#3042, C_CUSTOMER_ID#3043, C_FIRST_NAME#3044, C_LAST_NAME#3045, C_PREFERRED_CUST_FLAG#3046, C_BIRTH_COUNTRY#3047, C_LOGIN#3048, C_EMAIL_ADDRESS#3049], [oracolumnref(C_CUSTOMER_SK#3042), oracolumnref(C_CUSTOMER_ID#3043), oracolumnref(C_FIRST_NAME#3044), oracolumnref(C_LAST_NAME#3045), oracolumnref(C_PREFERRED_CUST_FLAG#3046), oracolumnref(C_BIRTH_COUNTRY#3047), oracolumnref(C_LOGIN#3048), oracolumnref(C_EMAIL_ADDRESS#3049)]
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CUSTOMER_ID:string,C_FIRST_NAME:string,C_LAST_NAME:string,C_PREFERRED_CUST_FLAG:string,C_BIRTH_COUNTRY:string,C_LOGIN:string,C_EMAIL_ADDRESS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS"
from TPCDS.CUSTOMER

(59) Project [codegen id : 18]
Output [8]: [C_CUSTOMER_SK#2144, C_CUSTOMER_ID#2145, C_FIRST_NAME#2152, C_LAST_NAME#2153, C_PREFERRED_CUST_FLAG#2154, C_BIRTH_COUNTRY#2158, C_LOGIN#2159, C_EMAIL_ADDRESS#2160]
Input [8]: [C_CUSTOMER_SK#2144, C_CUSTOMER_ID#2145, C_FIRST_NAME#2152, C_LAST_NAME#2153, C_PREFERRED_CUST_FLAG#2154, C_BIRTH_COUNTRY#2158, C_LOGIN#2159, C_EMAIL_ADDRESS#2160]

(60) Sort [codegen id : 18]
Input [8]: [C_CUSTOMER_SK#2144, C_CUSTOMER_ID#2145, C_FIRST_NAME#2152, C_LAST_NAME#2153, C_PREFERRED_CUST_FLAG#2154, C_BIRTH_COUNTRY#2158, C_LOGIN#2159, C_EMAIL_ADDRESS#2160]
Arguments: [c_customer_sk#2144 ASC NULLS FIRST], false, 0

(61) BatchScan
Output [6]: [CS_BILL_CUSTOMER_SK#2165, CS_EXT_DISCOUNT_AMT#2184, CS_EXT_SALES_PRICE#2185, CS_EXT_WHOLESALE_COST#2186, CS_EXT_LIST_PRICE#2187, CS_SOLD_DATE_SK#2162]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CATALOG_SALES, [CS_BILL_CUSTOMER_SK#3058, CS_EXT_DISCOUNT_AMT#3059, CS_EXT_SALES_PRICE#3060, CS_EXT_WHOLESALE_COST#3061, CS_EXT_LIST_PRICE#3062, CS_SOLD_DATE_SK#3063], [oracolumnref(CS_BILL_CUSTOMER_SK#3058), oracolumnref(CS_EXT_DISCOUNT_AMT#3059), oracolumnref(CS_EXT_SALES_PRICE#3060), oracolumnref(CS_EXT_WHOLESALE_COST#3061), oracolumnref(CS_EXT_LIST_PRICE#3062), oracolumnref(CS_SOLD_DATE_SK#3063)], orapostfixunaryopexpression(isnotnull(CS_BILL_CUSTOMER_SK#2165))
PartitionSchema: struct<CS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<CS_BILL_CUSTOMER_SK:decimal(38,18),CS_EXT_DISCOUNT_AMT:decimal(38,18),CS_EXT_SALES_PRICE:decimal(38,18),CS_EXT_WHOLESALE_COST:decimal(38,18),CS_EXT_LIST_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CS_BILL_CUSTOMER_SK", "CS_EXT_DISCOUNT_AMT", "CS_EXT_SALES_PRICE", "CS_EXT_WHOLESALE_COST", "CS_EXT_LIST_PRICE", "CS_SOLD_DATE_SK"
from TPCDS.CATALOG_SALES
where "CS_BILL_CUSTOMER_SK" IS NOT NULL and "CS_SOLD_DATE_SK" IS NOT NULL

(62) Filter [codegen id : 19]
Input [6]: [CS_BILL_CUSTOMER_SK#2165, CS_EXT_DISCOUNT_AMT#2184, CS_EXT_SALES_PRICE#2185, CS_EXT_WHOLESALE_COST#2186, CS_EXT_LIST_PRICE#2187, CS_SOLD_DATE_SK#2162]
Condition : isnotnull(CS_BILL_CUSTOMER_SK#2165)

(63) Sort [codegen id : 19]
Input [6]: [CS_BILL_CUSTOMER_SK#2165, CS_EXT_DISCOUNT_AMT#2184, CS_EXT_SALES_PRICE#2185, CS_EXT_WHOLESALE_COST#2186, CS_EXT_LIST_PRICE#2187, CS_SOLD_DATE_SK#2162]
Arguments: [cs_bill_customer_sk#2165 ASC NULLS FIRST], false, 0

(64) SortMergeJoin [codegen id : 20]
Left keys [1]: [c_customer_sk#2144]
Right keys [1]: [cs_bill_customer_sk#2165]
Join condition: None

(65) Project [codegen id : 20]
Output [12]: [C_CUSTOMER_ID#2145, C_FIRST_NAME#2152, C_LAST_NAME#2153, C_PREFERRED_CUST_FLAG#2154, C_BIRTH_COUNTRY#2158, C_LOGIN#2159, C_EMAIL_ADDRESS#2160, CS_SOLD_DATE_SK#2162, CS_EXT_DISCOUNT_AMT#2184, CS_EXT_SALES_PRICE#2185, CS_EXT_WHOLESALE_COST#2186, CS_EXT_LIST_PRICE#2187]
Input [14]: [C_CUSTOMER_SK#2144, C_CUSTOMER_ID#2145, C_FIRST_NAME#2152, C_LAST_NAME#2153, C_PREFERRED_CUST_FLAG#2154, C_BIRTH_COUNTRY#2158, C_LOGIN#2159, C_EMAIL_ADDRESS#2160, CS_BILL_CUSTOMER_SK#2165, CS_EXT_DISCOUNT_AMT#2184, CS_EXT_SALES_PRICE#2185, CS_EXT_WHOLESALE_COST#2186, CS_EXT_LIST_PRICE#2187, CS_SOLD_DATE_SK#2162]

(66) Sort [codegen id : 20]
Input [12]: [C_CUSTOMER_ID#2145, C_FIRST_NAME#2152, C_LAST_NAME#2153, C_PREFERRED_CUST_FLAG#2154, C_BIRTH_COUNTRY#2158, C_LOGIN#2159, C_EMAIL_ADDRESS#2160, CS_SOLD_DATE_SK#2162, CS_EXT_DISCOUNT_AMT#2184, CS_EXT_SALES_PRICE#2185, CS_EXT_WHOLESALE_COST#2186, CS_EXT_LIST_PRICE#2187]
Arguments: [cs_sold_date_sk#2162 ASC NULLS FIRST], false, 0

(67) BatchScan
Output [2]: [D_DATE_SK#2196, D_YEAR#2202]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#3070, D_YEAR#3071], [oracolumnref(D_DATE_SK#3070), oracolumnref(D_YEAR#3071)], orabinaryopexpression((isnotnull(D_YEAR#2202) AND (D_YEAR#2202 = 2002.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(68) Filter [codegen id : 21]
Input [2]: [D_DATE_SK#2196, D_YEAR#2202]
Condition : (isnotnull(D_YEAR#2202) AND (D_YEAR#2202 = 2002.000000000000000000))

(69) Sort [codegen id : 21]
Input [2]: [D_DATE_SK#2196, D_YEAR#2202]
Arguments: [d_date_sk#2196 ASC NULLS FIRST], false, 0

(70) SortMergeJoin [codegen id : 22]
Left keys [1]: [cs_sold_date_sk#2162]
Right keys [1]: [d_date_sk#2196]
Join condition: None

(71) Project [codegen id : 22]
Output [12]: [C_CUSTOMER_ID#2145, C_FIRST_NAME#2152, C_LAST_NAME#2153, C_PREFERRED_CUST_FLAG#2154, C_BIRTH_COUNTRY#2158, C_LOGIN#2159, C_EMAIL_ADDRESS#2160, CS_EXT_DISCOUNT_AMT#2184, CS_EXT_SALES_PRICE#2185, CS_EXT_WHOLESALE_COST#2186, CS_EXT_LIST_PRICE#2187, D_YEAR#2202]
Input [14]: [C_CUSTOMER_ID#2145, C_FIRST_NAME#2152, C_LAST_NAME#2153, C_PREFERRED_CUST_FLAG#2154, C_BIRTH_COUNTRY#2158, C_LOGIN#2159, C_EMAIL_ADDRESS#2160, CS_SOLD_DATE_SK#2162, CS_EXT_DISCOUNT_AMT#2184, CS_EXT_SALES_PRICE#2185, CS_EXT_WHOLESALE_COST#2186, CS_EXT_LIST_PRICE#2187, D_DATE_SK#2196, D_YEAR#2202]

(72) HashAggregate [codegen id : 22]
Input [12]: [C_CUSTOMER_ID#2145, C_FIRST_NAME#2152, C_LAST_NAME#2153, C_PREFERRED_CUST_FLAG#2154, C_BIRTH_COUNTRY#2158, C_LOGIN#2159, C_EMAIL_ADDRESS#2160, CS_EXT_DISCOUNT_AMT#2184, CS_EXT_SALES_PRICE#2185, CS_EXT_WHOLESALE_COST#2186, CS_EXT_LIST_PRICE#2187, D_YEAR#2202]
Keys [8]: [c_customer_id#2145, c_first_name#2152, c_last_name#2153, c_preferred_cust_flag#2154, c_birth_country#2158, c_login#2159, c_email_address#2160, d_year#2202]
Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#2187 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#2186 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#2184 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#2185 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [2]: [sum#3230, isEmpty#3231]
Results [10]: [c_customer_id#2145, c_first_name#2152, c_last_name#2153, c_preferred_cust_flag#2154, c_birth_country#2158, c_login#2159, c_email_address#2160, d_year#2202, sum#3232, isEmpty#3233]

(73) HashAggregate [codegen id : 22]
Input [10]: [c_customer_id#2145, c_first_name#2152, c_last_name#2153, c_preferred_cust_flag#2154, c_birth_country#2158, c_login#2159, c_email_address#2160, d_year#2202, sum#3232, isEmpty#3233]
Keys [8]: [c_customer_id#2145, c_first_name#2152, c_last_name#2153, c_preferred_cust_flag#2154, c_birth_country#2158, c_login#2159, c_email_address#2160, d_year#2202]
Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#2187 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#2186 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#2184 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#2185 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#2187 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#2186 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#2184 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#2185 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2772]
Results [2]: [c_customer_id#2145 AS customer_id#2800, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#2187 as decimal(38,17))) - promote_precision(cast(cs_ext_wholesale_cost#2186 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(cs_ext_discount_amt#2184 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(cs_ext_sales_price#2185 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2772 AS year_total#2808]

(74) Sort [codegen id : 22]
Input [2]: [customer_id#2800, year_total#2808]
Arguments: [customer_id#2800 ASC NULLS FIRST], false, 0

(75) SortMergeJoin [codegen id : 23]
Left keys [1]: [customer_id#1358]
Right keys [1]: [customer_id#2800]
Join condition: (CASE WHEN (year_total#2798 > 0E-15) THEN CheckOverflow((promote_precision(year_total#2808) / promote_precision(year_total#2798)), DecimalType(38,6), true) ELSE null END > CASE WHEN (year_total#1366 > 0E-15) THEN CheckOverflow((promote_precision(year_total#2788) / promote_precision(year_total#1366)), DecimalType(38,6), true) ELSE null END)

(76) Project [codegen id : 23]
Output [7]: [customer_id#1358, customer_id#2780, customer_first_name#2781, customer_last_name#2782, customer_preferred_cust_flag#2783, year_total#2798, year_total#2808]
Input [10]: [customer_id#1358, year_total#1366, customer_id#2780, customer_first_name#2781, customer_last_name#2782, customer_preferred_cust_flag#2783, year_total#2788, year_total#2798, customer_id#2800, year_total#2808]

(77) BatchScan
Output [8]: [C_CUSTOMER_SK#2453, C_CUSTOMER_ID#2454, C_FIRST_NAME#2461, C_LAST_NAME#2462, C_PREFERRED_CUST_FLAG#2463, C_BIRTH_COUNTRY#2467, C_LOGIN#2468, C_EMAIL_ADDRESS#2469]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#3122, C_CUSTOMER_ID#3123, C_FIRST_NAME#3124, C_LAST_NAME#3125, C_PREFERRED_CUST_FLAG#3126, C_BIRTH_COUNTRY#3127, C_LOGIN#3128, C_EMAIL_ADDRESS#3129], [oracolumnref(C_CUSTOMER_SK#3122), oracolumnref(C_CUSTOMER_ID#3123), oracolumnref(C_FIRST_NAME#3124), oracolumnref(C_LAST_NAME#3125), oracolumnref(C_PREFERRED_CUST_FLAG#3126), oracolumnref(C_BIRTH_COUNTRY#3127), oracolumnref(C_LOGIN#3128), oracolumnref(C_EMAIL_ADDRESS#3129)]
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CUSTOMER_ID:string,C_FIRST_NAME:string,C_LAST_NAME:string,C_PREFERRED_CUST_FLAG:string,C_BIRTH_COUNTRY:string,C_LOGIN:string,C_EMAIL_ADDRESS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS"
from TPCDS.CUSTOMER

(78) Project [codegen id : 24]
Output [8]: [C_CUSTOMER_SK#2453, C_CUSTOMER_ID#2454, C_FIRST_NAME#2461, C_LAST_NAME#2462, C_PREFERRED_CUST_FLAG#2463, C_BIRTH_COUNTRY#2467, C_LOGIN#2468, C_EMAIL_ADDRESS#2469]
Input [8]: [C_CUSTOMER_SK#2453, C_CUSTOMER_ID#2454, C_FIRST_NAME#2461, C_LAST_NAME#2462, C_PREFERRED_CUST_FLAG#2463, C_BIRTH_COUNTRY#2467, C_LOGIN#2468, C_EMAIL_ADDRESS#2469]

(79) Sort [codegen id : 24]
Input [8]: [C_CUSTOMER_SK#2453, C_CUSTOMER_ID#2454, C_FIRST_NAME#2461, C_LAST_NAME#2462, C_PREFERRED_CUST_FLAG#2463, C_BIRTH_COUNTRY#2467, C_LOGIN#2468, C_EMAIL_ADDRESS#2469]
Arguments: [c_customer_sk#2453 ASC NULLS FIRST], false, 0

(80) BatchScan
Output [6]: [WS_BILL_CUSTOMER_SK#2475, WS_EXT_DISCOUNT_AMT#2493, WS_EXT_SALES_PRICE#2494, WS_EXT_WHOLESALE_COST#2495, WS_EXT_LIST_PRICE#2496, WS_SOLD_DATE_SK#2471]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_SALES, [WS_BILL_CUSTOMER_SK#3138, WS_EXT_DISCOUNT_AMT#3139, WS_EXT_SALES_PRICE#3140, WS_EXT_WHOLESALE_COST#3141, WS_EXT_LIST_PRICE#3142, WS_SOLD_DATE_SK#3143], [oracolumnref(WS_BILL_CUSTOMER_SK#3138), oracolumnref(WS_EXT_DISCOUNT_AMT#3139), oracolumnref(WS_EXT_SALES_PRICE#3140), oracolumnref(WS_EXT_WHOLESALE_COST#3141), oracolumnref(WS_EXT_LIST_PRICE#3142), oracolumnref(WS_SOLD_DATE_SK#3143)], orapostfixunaryopexpression(isnotnull(WS_BILL_CUSTOMER_SK#2475))
PartitionSchema: struct<WS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<WS_BILL_CUSTOMER_SK:decimal(38,18),WS_EXT_DISCOUNT_AMT:decimal(38,18),WS_EXT_SALES_PRICE:decimal(38,18),WS_EXT_WHOLESALE_COST:decimal(38,18),WS_EXT_LIST_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WS_BILL_CUSTOMER_SK", "WS_EXT_DISCOUNT_AMT", "WS_EXT_SALES_PRICE", "WS_EXT_WHOLESALE_COST", "WS_EXT_LIST_PRICE", "WS_SOLD_DATE_SK"
from TPCDS.WEB_SALES
where "WS_BILL_CUSTOMER_SK" IS NOT NULL and "WS_SOLD_DATE_SK" IS NOT NULL

(81) Filter [codegen id : 25]
Input [6]: [WS_BILL_CUSTOMER_SK#2475, WS_EXT_DISCOUNT_AMT#2493, WS_EXT_SALES_PRICE#2494, WS_EXT_WHOLESALE_COST#2495, WS_EXT_LIST_PRICE#2496, WS_SOLD_DATE_SK#2471]
Condition : isnotnull(WS_BILL_CUSTOMER_SK#2475)

(82) Sort [codegen id : 25]
Input [6]: [WS_BILL_CUSTOMER_SK#2475, WS_EXT_DISCOUNT_AMT#2493, WS_EXT_SALES_PRICE#2494, WS_EXT_WHOLESALE_COST#2495, WS_EXT_LIST_PRICE#2496, WS_SOLD_DATE_SK#2471]
Arguments: [ws_bill_customer_sk#2475 ASC NULLS FIRST], false, 0

(83) SortMergeJoin [codegen id : 26]
Left keys [1]: [c_customer_sk#2453]
Right keys [1]: [ws_bill_customer_sk#2475]
Join condition: None

(84) Project [codegen id : 26]
Output [12]: [C_CUSTOMER_ID#2454, C_FIRST_NAME#2461, C_LAST_NAME#2462, C_PREFERRED_CUST_FLAG#2463, C_BIRTH_COUNTRY#2467, C_LOGIN#2468, C_EMAIL_ADDRESS#2469, WS_SOLD_DATE_SK#2471, WS_EXT_DISCOUNT_AMT#2493, WS_EXT_SALES_PRICE#2494, WS_EXT_WHOLESALE_COST#2495, WS_EXT_LIST_PRICE#2496]
Input [14]: [C_CUSTOMER_SK#2453, C_CUSTOMER_ID#2454, C_FIRST_NAME#2461, C_LAST_NAME#2462, C_PREFERRED_CUST_FLAG#2463, C_BIRTH_COUNTRY#2467, C_LOGIN#2468, C_EMAIL_ADDRESS#2469, WS_BILL_CUSTOMER_SK#2475, WS_EXT_DISCOUNT_AMT#2493, WS_EXT_SALES_PRICE#2494, WS_EXT_WHOLESALE_COST#2495, WS_EXT_LIST_PRICE#2496, WS_SOLD_DATE_SK#2471]

(85) Sort [codegen id : 26]
Input [12]: [C_CUSTOMER_ID#2454, C_FIRST_NAME#2461, C_LAST_NAME#2462, C_PREFERRED_CUST_FLAG#2463, C_BIRTH_COUNTRY#2467, C_LOGIN#2468, C_EMAIL_ADDRESS#2469, WS_SOLD_DATE_SK#2471, WS_EXT_DISCOUNT_AMT#2493, WS_EXT_SALES_PRICE#2494, WS_EXT_WHOLESALE_COST#2495, WS_EXT_LIST_PRICE#2496]
Arguments: [ws_sold_date_sk#2471 ASC NULLS FIRST], false, 0

(86) BatchScan
Output [2]: [D_DATE_SK#2505, D_YEAR#2511]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#3150, D_YEAR#3151], [oracolumnref(D_DATE_SK#3150), oracolumnref(D_YEAR#3151)], orabinaryopexpression((isnotnull(D_YEAR#2511) AND (D_YEAR#2511 = 2001.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2001.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(87) Filter [codegen id : 27]
Input [2]: [D_DATE_SK#2505, D_YEAR#2511]
Condition : (isnotnull(D_YEAR#2511) AND (D_YEAR#2511 = 2001.000000000000000000))

(88) Sort [codegen id : 27]
Input [2]: [D_DATE_SK#2505, D_YEAR#2511]
Arguments: [d_date_sk#2505 ASC NULLS FIRST], false, 0

(89) SortMergeJoin [codegen id : 28]
Left keys [1]: [ws_sold_date_sk#2471]
Right keys [1]: [d_date_sk#2505]
Join condition: None

(90) Project [codegen id : 28]
Output [12]: [C_CUSTOMER_ID#2454, C_FIRST_NAME#2461, C_LAST_NAME#2462, C_PREFERRED_CUST_FLAG#2463, C_BIRTH_COUNTRY#2467, C_LOGIN#2468, C_EMAIL_ADDRESS#2469, WS_EXT_DISCOUNT_AMT#2493, WS_EXT_SALES_PRICE#2494, WS_EXT_WHOLESALE_COST#2495, WS_EXT_LIST_PRICE#2496, D_YEAR#2511]
Input [14]: [C_CUSTOMER_ID#2454, C_FIRST_NAME#2461, C_LAST_NAME#2462, C_PREFERRED_CUST_FLAG#2463, C_BIRTH_COUNTRY#2467, C_LOGIN#2468, C_EMAIL_ADDRESS#2469, WS_SOLD_DATE_SK#2471, WS_EXT_DISCOUNT_AMT#2493, WS_EXT_SALES_PRICE#2494, WS_EXT_WHOLESALE_COST#2495, WS_EXT_LIST_PRICE#2496, D_DATE_SK#2505, D_YEAR#2511]

(91) HashAggregate [codegen id : 28]
Input [12]: [C_CUSTOMER_ID#2454, C_FIRST_NAME#2461, C_LAST_NAME#2462, C_PREFERRED_CUST_FLAG#2463, C_BIRTH_COUNTRY#2467, C_LOGIN#2468, C_EMAIL_ADDRESS#2469, WS_EXT_DISCOUNT_AMT#2493, WS_EXT_SALES_PRICE#2494, WS_EXT_WHOLESALE_COST#2495, WS_EXT_LIST_PRICE#2496, D_YEAR#2511]
Keys [8]: [c_customer_id#2454, c_first_name#2461, c_last_name#2462, c_preferred_cust_flag#2463, c_birth_country#2467, c_login#2468, c_email_address#2469, d_year#2511]
Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#2496 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#2495 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#2493 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#2494 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [2]: [sum#3234, isEmpty#3235]
Results [10]: [c_customer_id#2454, c_first_name#2461, c_last_name#2462, c_preferred_cust_flag#2463, c_birth_country#2467, c_login#2468, c_email_address#2469, d_year#2511, sum#3236, isEmpty#3237]

(92) HashAggregate [codegen id : 28]
Input [10]: [c_customer_id#2454, c_first_name#2461, c_last_name#2462, c_preferred_cust_flag#2463, c_birth_country#2467, c_login#2468, c_email_address#2469, d_year#2511, sum#3236, isEmpty#3237]
Keys [8]: [c_customer_id#2454, c_first_name#2461, c_last_name#2462, c_preferred_cust_flag#2463, c_birth_country#2467, c_login#2468, c_email_address#2469, d_year#2511]
Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#2496 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#2495 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#2493 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#2494 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#2496 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#2495 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#2493 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#2494 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2776]
Results [2]: [c_customer_id#2454 AS customer_id#1378, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#2496 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#2495 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#2493 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#2494 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2776 AS year_total#1386]

(93) Filter [codegen id : 28]
Input [2]: [customer_id#1378, year_total#1386]
Condition : (isnotnull(year_total#1386) AND (year_total#1386 > 0E-15))

(94) Project [codegen id : 28]
Output [2]: [customer_id#1378 AS customer_id#2810, year_total#1386 AS year_total#2818]
Input [2]: [customer_id#1378, year_total#1386]

(95) Sort [codegen id : 28]
Input [2]: [customer_id#2810, year_total#2818]
Arguments: [customer_id#2810 ASC NULLS FIRST], false, 0

(96) SortMergeJoin [codegen id : 29]
Left keys [1]: [customer_id#1358]
Right keys [1]: [customer_id#2810]
Join condition: None

(97) Project [codegen id : 29]
Output [8]: [customer_id#1358, customer_id#2780, customer_first_name#2781, customer_last_name#2782, customer_preferred_cust_flag#2783, year_total#2798, year_total#2808, year_total#2818]
Input [9]: [customer_id#1358, customer_id#2780, customer_first_name#2781, customer_last_name#2782, customer_preferred_cust_flag#2783, year_total#2798, year_total#2808, customer_id#2810, year_total#2818]

(98) BatchScan
Output [8]: [C_CUSTOMER_SK#2682, C_CUSTOMER_ID#2683, C_FIRST_NAME#2690, C_LAST_NAME#2691, C_PREFERRED_CUST_FLAG#2692, C_BIRTH_COUNTRY#2696, C_LOGIN#2697, C_EMAIL_ADDRESS#2698]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#3186, C_CUSTOMER_ID#3187, C_FIRST_NAME#3188, C_LAST_NAME#3189, C_PREFERRED_CUST_FLAG#3190, C_BIRTH_COUNTRY#3191, C_LOGIN#3192, C_EMAIL_ADDRESS#3193], [oracolumnref(C_CUSTOMER_SK#3186), oracolumnref(C_CUSTOMER_ID#3187), oracolumnref(C_FIRST_NAME#3188), oracolumnref(C_LAST_NAME#3189), oracolumnref(C_PREFERRED_CUST_FLAG#3190), oracolumnref(C_BIRTH_COUNTRY#3191), oracolumnref(C_LOGIN#3192), oracolumnref(C_EMAIL_ADDRESS#3193)]
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CUSTOMER_ID:string,C_FIRST_NAME:string,C_LAST_NAME:string,C_PREFERRED_CUST_FLAG:string,C_BIRTH_COUNTRY:string,C_LOGIN:string,C_EMAIL_ADDRESS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS"
from TPCDS.CUSTOMER

(99) Project [codegen id : 30]
Output [8]: [C_CUSTOMER_SK#2682, C_CUSTOMER_ID#2683, C_FIRST_NAME#2690, C_LAST_NAME#2691, C_PREFERRED_CUST_FLAG#2692, C_BIRTH_COUNTRY#2696, C_LOGIN#2697, C_EMAIL_ADDRESS#2698]
Input [8]: [C_CUSTOMER_SK#2682, C_CUSTOMER_ID#2683, C_FIRST_NAME#2690, C_LAST_NAME#2691, C_PREFERRED_CUST_FLAG#2692, C_BIRTH_COUNTRY#2696, C_LOGIN#2697, C_EMAIL_ADDRESS#2698]

(100) Sort [codegen id : 30]
Input [8]: [C_CUSTOMER_SK#2682, C_CUSTOMER_ID#2683, C_FIRST_NAME#2690, C_LAST_NAME#2691, C_PREFERRED_CUST_FLAG#2692, C_BIRTH_COUNTRY#2696, C_LOGIN#2697, C_EMAIL_ADDRESS#2698]
Arguments: [c_customer_sk#2682 ASC NULLS FIRST], false, 0

(101) BatchScan
Output [6]: [WS_BILL_CUSTOMER_SK#2704, WS_EXT_DISCOUNT_AMT#2722, WS_EXT_SALES_PRICE#2723, WS_EXT_WHOLESALE_COST#2724, WS_EXT_LIST_PRICE#2725, WS_SOLD_DATE_SK#2700]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_SALES, [WS_BILL_CUSTOMER_SK#3202, WS_EXT_DISCOUNT_AMT#3203, WS_EXT_SALES_PRICE#3204, WS_EXT_WHOLESALE_COST#3205, WS_EXT_LIST_PRICE#3206, WS_SOLD_DATE_SK#3207], [oracolumnref(WS_BILL_CUSTOMER_SK#3202), oracolumnref(WS_EXT_DISCOUNT_AMT#3203), oracolumnref(WS_EXT_SALES_PRICE#3204), oracolumnref(WS_EXT_WHOLESALE_COST#3205), oracolumnref(WS_EXT_LIST_PRICE#3206), oracolumnref(WS_SOLD_DATE_SK#3207)], orapostfixunaryopexpression(isnotnull(WS_BILL_CUSTOMER_SK#2704))
PartitionSchema: struct<WS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<WS_BILL_CUSTOMER_SK:decimal(38,18),WS_EXT_DISCOUNT_AMT:decimal(38,18),WS_EXT_SALES_PRICE:decimal(38,18),WS_EXT_WHOLESALE_COST:decimal(38,18),WS_EXT_LIST_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WS_BILL_CUSTOMER_SK", "WS_EXT_DISCOUNT_AMT", "WS_EXT_SALES_PRICE", "WS_EXT_WHOLESALE_COST", "WS_EXT_LIST_PRICE", "WS_SOLD_DATE_SK"
from TPCDS.WEB_SALES
where "WS_BILL_CUSTOMER_SK" IS NOT NULL and "WS_SOLD_DATE_SK" IS NOT NULL

(102) Filter [codegen id : 31]
Input [6]: [WS_BILL_CUSTOMER_SK#2704, WS_EXT_DISCOUNT_AMT#2722, WS_EXT_SALES_PRICE#2723, WS_EXT_WHOLESALE_COST#2724, WS_EXT_LIST_PRICE#2725, WS_SOLD_DATE_SK#2700]
Condition : isnotnull(WS_BILL_CUSTOMER_SK#2704)

(103) Sort [codegen id : 31]
Input [6]: [WS_BILL_CUSTOMER_SK#2704, WS_EXT_DISCOUNT_AMT#2722, WS_EXT_SALES_PRICE#2723, WS_EXT_WHOLESALE_COST#2724, WS_EXT_LIST_PRICE#2725, WS_SOLD_DATE_SK#2700]
Arguments: [ws_bill_customer_sk#2704 ASC NULLS FIRST], false, 0

(104) SortMergeJoin [codegen id : 32]
Left keys [1]: [c_customer_sk#2682]
Right keys [1]: [ws_bill_customer_sk#2704]
Join condition: None

(105) Project [codegen id : 32]
Output [12]: [C_CUSTOMER_ID#2683, C_FIRST_NAME#2690, C_LAST_NAME#2691, C_PREFERRED_CUST_FLAG#2692, C_BIRTH_COUNTRY#2696, C_LOGIN#2697, C_EMAIL_ADDRESS#2698, WS_SOLD_DATE_SK#2700, WS_EXT_DISCOUNT_AMT#2722, WS_EXT_SALES_PRICE#2723, WS_EXT_WHOLESALE_COST#2724, WS_EXT_LIST_PRICE#2725]
Input [14]: [C_CUSTOMER_SK#2682, C_CUSTOMER_ID#2683, C_FIRST_NAME#2690, C_LAST_NAME#2691, C_PREFERRED_CUST_FLAG#2692, C_BIRTH_COUNTRY#2696, C_LOGIN#2697, C_EMAIL_ADDRESS#2698, WS_BILL_CUSTOMER_SK#2704, WS_EXT_DISCOUNT_AMT#2722, WS_EXT_SALES_PRICE#2723, WS_EXT_WHOLESALE_COST#2724, WS_EXT_LIST_PRICE#2725, WS_SOLD_DATE_SK#2700]

(106) Sort [codegen id : 32]
Input [12]: [C_CUSTOMER_ID#2683, C_FIRST_NAME#2690, C_LAST_NAME#2691, C_PREFERRED_CUST_FLAG#2692, C_BIRTH_COUNTRY#2696, C_LOGIN#2697, C_EMAIL_ADDRESS#2698, WS_SOLD_DATE_SK#2700, WS_EXT_DISCOUNT_AMT#2722, WS_EXT_SALES_PRICE#2723, WS_EXT_WHOLESALE_COST#2724, WS_EXT_LIST_PRICE#2725]
Arguments: [ws_sold_date_sk#2700 ASC NULLS FIRST], false, 0

(107) BatchScan
Output [2]: [D_DATE_SK#2734, D_YEAR#2740]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#3214, D_YEAR#3215], [oracolumnref(D_DATE_SK#3214), oracolumnref(D_YEAR#3215)], orabinaryopexpression((isnotnull(D_YEAR#2740) AND (D_YEAR#2740 = 2002.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(108) Filter [codegen id : 33]
Input [2]: [D_DATE_SK#2734, D_YEAR#2740]
Condition : (isnotnull(D_YEAR#2740) AND (D_YEAR#2740 = 2002.000000000000000000))

(109) Sort [codegen id : 33]
Input [2]: [D_DATE_SK#2734, D_YEAR#2740]
Arguments: [d_date_sk#2734 ASC NULLS FIRST], false, 0

(110) SortMergeJoin [codegen id : 34]
Left keys [1]: [ws_sold_date_sk#2700]
Right keys [1]: [d_date_sk#2734]
Join condition: None

(111) Project [codegen id : 34]
Output [12]: [C_CUSTOMER_ID#2683, C_FIRST_NAME#2690, C_LAST_NAME#2691, C_PREFERRED_CUST_FLAG#2692, C_BIRTH_COUNTRY#2696, C_LOGIN#2697, C_EMAIL_ADDRESS#2698, WS_EXT_DISCOUNT_AMT#2722, WS_EXT_SALES_PRICE#2723, WS_EXT_WHOLESALE_COST#2724, WS_EXT_LIST_PRICE#2725, D_YEAR#2740]
Input [14]: [C_CUSTOMER_ID#2683, C_FIRST_NAME#2690, C_LAST_NAME#2691, C_PREFERRED_CUST_FLAG#2692, C_BIRTH_COUNTRY#2696, C_LOGIN#2697, C_EMAIL_ADDRESS#2698, WS_SOLD_DATE_SK#2700, WS_EXT_DISCOUNT_AMT#2722, WS_EXT_SALES_PRICE#2723, WS_EXT_WHOLESALE_COST#2724, WS_EXT_LIST_PRICE#2725, D_DATE_SK#2734, D_YEAR#2740]

(112) HashAggregate [codegen id : 34]
Input [12]: [C_CUSTOMER_ID#2683, C_FIRST_NAME#2690, C_LAST_NAME#2691, C_PREFERRED_CUST_FLAG#2692, C_BIRTH_COUNTRY#2696, C_LOGIN#2697, C_EMAIL_ADDRESS#2698, WS_EXT_DISCOUNT_AMT#2722, WS_EXT_SALES_PRICE#2723, WS_EXT_WHOLESALE_COST#2724, WS_EXT_LIST_PRICE#2725, D_YEAR#2740]
Keys [8]: [c_customer_id#2683, c_first_name#2690, c_last_name#2691, c_preferred_cust_flag#2692, c_birth_country#2696, c_login#2697, c_email_address#2698, d_year#2740]
Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#2725 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#2724 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#2722 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#2723 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [2]: [sum#3238, isEmpty#3239]
Results [10]: [c_customer_id#2683, c_first_name#2690, c_last_name#2691, c_preferred_cust_flag#2692, c_birth_country#2696, c_login#2697, c_email_address#2698, d_year#2740, sum#3240, isEmpty#3241]

(113) HashAggregate [codegen id : 34]
Input [10]: [c_customer_id#2683, c_first_name#2690, c_last_name#2691, c_preferred_cust_flag#2692, c_birth_country#2696, c_login#2697, c_email_address#2698, d_year#2740, sum#3240, isEmpty#3241]
Keys [8]: [c_customer_id#2683, c_first_name#2690, c_last_name#2691, c_preferred_cust_flag#2692, c_birth_country#2696, c_login#2697, c_email_address#2698, d_year#2740]
Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#2725 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#2724 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#2722 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#2723 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))]
Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#2725 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#2724 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#2722 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#2723 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2779]
Results [2]: [c_customer_id#2683 AS customer_id#2820, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#2725 as decimal(38,17))) - promote_precision(cast(ws_ext_wholesale_cost#2724 as decimal(38,17)))), DecimalType(38,17), true) as decimal(38,16))) - promote_precision(cast(ws_ext_discount_amt#2722 as decimal(38,16)))), DecimalType(38,16), true) as decimal(38,15))) + promote_precision(cast(ws_ext_sales_price#2723 as decimal(38,15)))), DecimalType(38,15), true)) / 2.000000000000000), DecimalType(38,15), true))#2779 AS year_total#2828]

(114) Sort [codegen id : 34]
Input [2]: [customer_id#2820, year_total#2828]
Arguments: [customer_id#2820 ASC NULLS FIRST], false, 0

(115) SortMergeJoin [codegen id : 35]
Left keys [1]: [customer_id#1358]
Right keys [1]: [customer_id#2820]
Join condition: (CASE WHEN (year_total#2798 > 0E-15) THEN CheckOverflow((promote_precision(year_total#2808) / promote_precision(year_total#2798)), DecimalType(38,6), true) ELSE null END > CASE WHEN (year_total#2818 > 0E-15) THEN CheckOverflow((promote_precision(year_total#2828) / promote_precision(year_total#2818)), DecimalType(38,6), true) ELSE null END)

(116) Project [codegen id : 35]
Output [4]: [customer_id#2780, customer_first_name#2781, customer_last_name#2782, customer_preferred_cust_flag#2783]
Input [10]: [customer_id#1358, customer_id#2780, customer_first_name#2781, customer_last_name#2782, customer_preferred_cust_flag#2783, year_total#2798, year_total#2808, year_total#2818, customer_id#2820, year_total#2828]

(117) TakeOrderedAndProject
Input [4]: [customer_id#2780, customer_first_name#2781, customer_last_name#2782, customer_preferred_cust_flag#2783]
Arguments: 100, [customer_id#2780 ASC NULLS FIRST, customer_first_name#2781 ASC NULLS FIRST, customer_last_name#2782 ASC NULLS FIRST, customer_preferred_cust_flag#2783 ASC NULLS FIRST], [customer_id#2780, customer_first_name#2781, customer_last_name#2782, customer_preferred_cust_flag#2783]


Query q5

Spark SQL

with ssr as
 (select s_store_id,
        sum(sales_price) as sales,
        sum(profit) as profit,
        sum(return_amt) as returns,
        sum(net_loss) as profit_loss
 from
  ( select  ss_store_sk as store_sk,
            ss_sold_date_sk  as date_sk,
            ss_ext_sales_price as sales_price,
            ss_net_profit as profit,
            cast(0 as decimal(7,2)) as return_amt,
            cast(0 as decimal(7,2)) as net_loss
    from store_sales
    union all
    select sr_store_sk as store_sk,
           sr_returned_date_sk as date_sk,
           cast(0 as decimal(7,2)) as sales_price,
           cast(0 as decimal(7,2)) as profit,
           sr_return_amt as return_amt,
           sr_net_loss as net_loss
    from store_returns
   ) salesreturns,
     date_dim,
     store
 where date_sk = d_date_sk
       and d_date between cast('2000-08-23' as date)
                  and date_add(cast('2000-08-23' as date), 14 )
       and store_sk = s_store_sk
 group by s_store_id)
 ,
 csr as
 (select cp_catalog_page_id,
        sum(sales_price) as sales,
        sum(profit) as profit,
        sum(return_amt) as returns,
        sum(net_loss) as profit_loss
 from
  ( select  cs_catalog_page_sk as page_sk,
            cs_sold_date_sk  as date_sk,
            cs_ext_sales_price as sales_price,
            cs_net_profit as profit,
            cast(0 as decimal(7,2)) as return_amt,
            cast(0 as decimal(7,2)) as net_loss
    from catalog_sales
    union all
    select cr_catalog_page_sk as page_sk,
           cr_returned_date_sk as date_sk,
           cast(0 as decimal(7,2)) as sales_price,
           cast(0 as decimal(7,2)) as profit,
           cr_return_amount as return_amt,
           cr_net_loss as net_loss
    from catalog_returns
   ) salesreturns,
     date_dim,
     catalog_page
 where date_sk = d_date_sk
       and d_date between cast('2000-08-23' as date)
                  and date_add(cast('2000-08-23' as date), 14 )
       and page_sk = cp_catalog_page_sk
 group by cp_catalog_page_id)
 ,
 wsr as
 (select web_site_id,
        sum(sales_price) as sales,
        sum(profit) as profit,
        sum(return_amt) as returns,
        sum(net_loss) as profit_loss
 from
  ( select  ws_web_site_sk as wsr_web_site_sk,
            ws_sold_date_sk  as date_sk,
            ws_ext_sales_price as sales_price,
            ws_net_profit as profit,
            cast(0 as decimal(7,2)) as return_amt,
            cast(0 as decimal(7,2)) as net_loss
    from web_sales
    union all
    select ws_web_site_sk as wsr_web_site_sk,
           wr_returned_date_sk as date_sk,
           cast(0 as decimal(7,2)) as sales_price,
           cast(0 as decimal(7,2)) as profit,
           wr_return_amt as return_amt,
           wr_net_loss as net_loss
    from web_returns left outer join web_sales on
         ( wr_item_sk = ws_item_sk
           and wr_order_number = ws_order_number)
   ) salesreturns,
     date_dim,
     web_site
 where date_sk = d_date_sk
       and d_date between cast('2000-08-23' as date)
                  and date_add(cast('2000-08-23' as date), 14 )
       and wsr_web_site_sk = web_site_sk
 group by web_site_id)
  select  channel
        , id
        , sum(sales) as sales
        , sum(returns) as returns
        , sum(profit) as profit
 from
 (select 'store channel' as channel
        , concat('store', s_store_id) as id
        , sales
        , returns
        , (profit - profit_loss) as profit
 from   ssr
 union all
 select 'catalog channel' as channel
        , concat('catalog_page', cp_catalog_page_id) as id
        , sales
        , returns
        , (profit - profit_loss) as profit
 from  csr
 union all
 select 'web channel' as channel
        , concat('web_site', web_site_id) as id
        , sales
        , returns
        , (profit - profit_loss) as profit
 from   wsr
 ) x
 group by rollup (channel, id)
 order by channel
         ,id
  limit 100;
 

Spark Plan with Pushdown turned on

== Physical Plan ==
TakeOrderedAndProject (3)
+- * Project (2)
   +- BatchScan (1)


(1) BatchScan
Output [5]: [channel#6123, id#6124, sales#5698, returns#5699, profit#5700]
OraPlan: 00 OraSingleQueryBlock [channel#6123, id#6124, sum(sales#5713) AS sales#5698, sum(returns#5715) AS returns#5699, sum(profit#5691) AS profit#5700], [oracolumnref(channel#6123), oracolumnref(id#6124), oraalias(sum(sales#5713) AS sales#5698), oraalias(sum(returns#5715) AS returns#5699), oraalias(sum(profit#5691) AS profit#5700)], List(oracolumnref(channel#6123), oracolumnref(id#6124), oracolumnref(spark_grouping_id#6122L))
01 +- OraCompositeQueryBlock Union false, false, [sales#5713, returns#5715, profit#5691, channel#6120, id#6121], SQLSnippet(value: UNION ALL, parameters: ArrayBuffer())
02    :- OraSingleQueryBlock [sum(sales_price#5703) AS sales#5713, sum(return_amt#6093) AS returns#5715, CheckOverflow((promote_precision(cast(sum(profit#5704) as decimal(38,17))) - promote_precision(cast(sum(net_loss#6094) as decimal(38,17)))), DecimalType(38,17), true) AS profit#5691, store channel AS channel#6120, concat(store, s_store_id#5821) AS id#6121], [oraalias(sum(sales_price#5703) AS sales#5713), oraalias(sum(return_amt#6093) AS returns#5715), oraalias(CheckOverflow((promote_precision(cast(sum(profit#5704) as decimal(38,17))) - promote_precision(cast(sum(net_loss#6094) as decimal(38,17)))), DecimalType(38,17), true) AS profit#5691), oraalias(store channel AS channel#6120), oraalias(concat(store, s_store_id#5821) AS id#6121)], orabinaryopexpression(((isnotnull(D_DATE#5794) AND (D_DATE#5794 >= 11192)) AND (D_DATE#5794 <= 11206))), List(oracolumnref(s_store_id#5821))
03    :  :- OraCompositeQueryBlock Union false, false, [store_sk#5701, date_sk#5702, sales_price#5703, profit#5704, return_amt#6093, net_loss#6094], SQLSnippet(value: UNION ALL, parameters: ArrayBuffer())
04    :  :  :- OraSingleQueryBlock [SS_STORE_SK#5756 AS store_sk#5701, SS_SOLD_DATE_SK#5749 AS date_sk#5702, SS_EXT_SALES_PRICE#5764 AS sales_price#5703, SS_NET_PROFIT#5771 AS profit#5704, 0E-18 AS return_amt#6093, 0E-18 AS net_loss#6094], [oraalias(SS_STORE_SK#5756 AS store_sk#5701), oraalias(SS_SOLD_DATE_SK#5749 AS date_sk#5702), oraalias(SS_EXT_SALES_PRICE#5764 AS sales_price#5703), oraalias(SS_NET_PROFIT#5771 AS profit#5704), oraalias(0E-18 AS return_amt#6093), oraalias(0E-18 AS net_loss#6094)], orabinaryopexpression(isnotnull(SS_STORE_SK#5756))
05    :  :  :  +- OraTableScan TPCDS.STORE_SALES, [SS_STORE_SK#5756, SS_EXT_SALES_PRICE#5764, SS_NET_PROFIT#5771, SS_SOLD_DATE_SK#5749]
06    :  :  +- OraSingleQueryBlock [SR_STORE_SK#5779 AS store_sk#5707, SR_RETURNED_DATE_SK#5772 AS date_sk#5708, 0E-18 AS sales_price#6095, 0E-18 AS profit#6096, SR_RETURN_AMT#5783 AS return_amt#5711, SR_NET_LOSS#5791 AS net_loss#5712], [oraalias(SR_STORE_SK#5779 AS store_sk#5707), oraalias(SR_RETURNED_DATE_SK#5772 AS date_sk#5708), oraalias(0E-18 AS sales_price#6095), oraalias(0E-18 AS profit#6096), oraalias(SR_RETURN_AMT#5783 AS return_amt#5711), oraalias(SR_NET_LOSS#5791 AS net_loss#5712)], orabinaryopexpression(isnotnull(SR_STORE_SK#5779))
07    :  :     +- OraTableScan TPCDS.STORE_RETURNS, [SR_STORE_SK#5779, SR_RETURN_AMT#5783, SR_NET_LOSS#5791, SR_RETURNED_DATE_SK#5772]
08    :  :- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#5792, D_DATE#5794]
09    :  +- OraTableScan TPCDS.STORE, [S_STORE_SK#5820, S_STORE_ID#5821]
10    :- OraSingleQueryBlock [sum(sales_price#5719) AS sales#5729, sum(return_amt#6097) AS returns#5731, CheckOverflow((promote_precision(cast(sum(profit#5720) as decimal(38,17))) - promote_precision(cast(sum(net_loss#6098) as decimal(38,17)))), DecimalType(38,17), true) AS profit#5694, catalog channel AS channel#6132, concat(catalog_page, cp_catalog_page_id#5939) AS id#6133], [oraalias(sum(sales_price#5719) AS sales#5729), oraalias(sum(return_amt#6097) AS returns#5731), oraalias(CheckOverflow((promote_precision(cast(sum(profit#5720) as decimal(38,17))) - promote_precision(cast(sum(net_loss#6098) as decimal(38,17)))), DecimalType(38,17), true) AS profit#5694), oraalias(catalog channel AS channel#6132), oraalias(concat(catalog_page, cp_catalog_page_id#5939) AS id#6133)], orabinaryopexpression(((isnotnull(D_DATE#5912) AND (D_DATE#5912 >= 11192)) AND (D_DATE#5912 <= 11206))), List(oracolumnref(cp_catalog_page_id#5939))
11    :  :- OraCompositeQueryBlock Union false, false, [page_sk#5717, date_sk#5718, sales_price#5719, profit#5720, return_amt#6097, net_loss#6098], SQLSnippet(value: UNION ALL, parameters: ArrayBuffer())
12    :  :  :- OraSingleQueryBlock [CS_CATALOG_PAGE_SK#5861 AS page_sk#5717, CS_SOLD_DATE_SK#5849 AS date_sk#5718, CS_EXT_SALES_PRICE#5872 AS sales_price#5719, CS_NET_PROFIT#5882 AS profit#5720, 0E-18 AS return_amt#6097, 0E-18 AS net_loss#6098], [oraalias(CS_CATALOG_PAGE_SK#5861 AS page_sk#5717), oraalias(CS_SOLD_DATE_SK#5849 AS date_sk#5718), oraalias(CS_EXT_SALES_PRICE#5872 AS sales_price#5719), oraalias(CS_NET_PROFIT#5882 AS profit#5720), oraalias(0E-18 AS return_amt#6097), oraalias(0E-18 AS net_loss#6098)], orabinaryopexpression(isnotnull(CS_CATALOG_PAGE_SK#5861))
13    :  :  :  +- OraTableScan TPCDS.CATALOG_SALES, [CS_CATALOG_PAGE_SK#5861, CS_EXT_SALES_PRICE#5872, CS_NET_PROFIT#5882, CS_SOLD_DATE_SK#5849]
14    :  :  +- OraSingleQueryBlock [CR_CATALOG_PAGE_SK#5895 AS page_sk#5723, CR_RETURNED_DATE_SK#5883 AS date_sk#5724, 0E-18 AS sales_price#6099, 0E-18 AS profit#6100, CR_RETURN_AMOUNT#5901 AS return_amt#5727, CR_NET_LOSS#5909 AS net_loss#5728], [oraalias(CR_CATALOG_PAGE_SK#5895 AS page_sk#5723), oraalias(CR_RETURNED_DATE_SK#5883 AS date_sk#5724), oraalias(0E-18 AS sales_price#6099), oraalias(0E-18 AS profit#6100), oraalias(CR_RETURN_AMOUNT#5901 AS return_amt#5727), oraalias(CR_NET_LOSS#5909 AS net_loss#5728)], orabinaryopexpression(isnotnull(CR_CATALOG_PAGE_SK#5895))
15    :  :     +- OraTableScan TPCDS.CATALOG_RETURNS, [CR_CATALOG_PAGE_SK#5895, CR_RETURN_AMOUNT#5901, CR_NET_LOSS#5909, CR_RETURNED_DATE_SK#5883]
16    :  :- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#5910, D_DATE#5912]
17    :  +- OraTableScan TPCDS.CATALOG_PAGE, [CP_CATALOG_PAGE_SK#5938, CP_CATALOG_PAGE_ID#5939]
18    +- OraSingleQueryBlock [sum(sales_price#5735) AS sales#5745, sum(return_amt#6101) AS returns#5747, CheckOverflow((promote_precision(cast(sum(profit#5736) as decimal(38,17))) - promote_precision(cast(sum(net_loss#6102) as decimal(38,17)))), DecimalType(38,17), true) AS profit#5697, web channel AS channel#6134, concat(web_site, web_site_id#6068) AS id#6135], [oraalias(sum(sales_price#5735) AS sales#5745), oraalias(sum(return_amt#6101) AS returns#5747), oraalias(CheckOverflow((promote_precision(cast(sum(profit#5736) as decimal(38,17))) - promote_precision(cast(sum(net_loss#6102) as decimal(38,17)))), DecimalType(38,17), true) AS profit#5697), oraalias(web channel AS channel#6134), oraalias(concat(web_site, web_site_id#6068) AS id#6135)], orabinaryopexpression(((isnotnull(D_DATE#6041) AND (D_DATE#6041 >= 11192)) AND (D_DATE#6041 <= 11206))), List(oracolumnref(web_site_id#6068))
19       :- OraCompositeQueryBlock Union false, false, [wsr_web_site_sk#5733, date_sk#5734, sales_price#5735, profit#5736, return_amt#6101, net_loss#6102], SQLSnippet(value: UNION ALL, parameters: ArrayBuffer())
20       :  :- OraSingleQueryBlock [WS_WEB_SITE_SK#5960 AS wsr_web_site_sk#5733, WS_SOLD_DATE_SK#5947 AS date_sk#5734, WS_EXT_SALES_PRICE#5970 AS sales_price#5735, WS_NET_PROFIT#5980 AS profit#5736, 0E-18 AS return_amt#6101, 0E-18 AS net_loss#6102], [oraalias(WS_WEB_SITE_SK#5960 AS wsr_web_site_sk#5733), oraalias(WS_SOLD_DATE_SK#5947 AS date_sk#5734), oraalias(WS_EXT_SALES_PRICE#5970 AS sales_price#5735), oraalias(WS_NET_PROFIT#5980 AS profit#5736), oraalias(0E-18 AS return_amt#6101), oraalias(0E-18 AS net_loss#6102)], orabinaryopexpression(isnotnull(WS_WEB_SITE_SK#5960))
21       :  :  +- OraTableScan TPCDS.WEB_SALES, [WS_WEB_SITE_SK#5960, WS_EXT_SALES_PRICE#5970, WS_NET_PROFIT#5980, WS_SOLD_DATE_SK#5947]
22       :  +- OraSingleQueryBlock [ws_web_site_sk#6018 AS wsr_web_site_sk#5739, wr_returned_date_sk#5981 AS date_sk#5740, 0E-18 AS sales_price#6103, 0E-18 AS profit#6104, wr_return_amt#5996 AS return_amt#5743, wr_net_loss#6004 AS net_loss#5744], [oraalias(ws_web_site_sk#6018 AS wsr_web_site_sk#5739), oraalias(wr_returned_date_sk#5981 AS date_sk#5740), oraalias(0E-18 AS sales_price#6103), oraalias(0E-18 AS profit#6104), oraalias(wr_return_amt#5996 AS return_amt#5743), oraalias(wr_net_loss#6004 AS net_loss#5744)], orabinaryopexpression((isnotnull(WR_RETURNED_DATE_SK#5981) AND isnotnull(WS_WEB_SITE_SK#6018)))
23       :     :- OraTableScan TPCDS.WEB_RETURNS, [WR_ITEM_SK#5983, WR_ORDER_NUMBER#5994, WR_RETURN_AMT#5996, WR_NET_LOSS#6004, WR_RETURNED_DATE_SK#5981]
24       :     +- OraTableScan TPCDS.WEB_SALES, [WS_ITEM_SK#6008, WS_WEB_SITE_SK#6018, WS_ORDER_NUMBER#6022]
25       :- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#6039, D_DATE#6041]
26       +- OraTableScan TPCDS.WEB_SITE, [WEB_SITE_SK#6067, WEB_SITE_ID#6068]
ReadSchema: struct<channel:string,id:string,sales:decimal(38,18),returns:decimal(38,18),profit:decimal(38,17)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 11192, 11206, 11192, 11206, 11192, 11206
oraPushdownSQL: select "channel_10_sparkora", "id_7_sparkora", SUM("sales") AS "sales", SUM("returns") AS "returns", SUM("profit") AS "profit"
from ( select SUM("sales_price") AS "sales", SUM("return_amt") AS "returns", (SUM("profit") - SUM("net_loss")) AS "profit", 'store channel' AS "channel", CONCAT('store' , "S_STORE_ID") AS "id"
from ( select "SS_STORE_SK" AS "store_sk", "SS_SOLD_DATE_SK" AS "date_sk", "SS_EXT_SALES_PRICE" AS "sales_price", "SS_NET_PROFIT" AS "profit", 0E-18 AS "return_amt", 0E-18 AS "net_loss"
from TPCDS.STORE_SALES 
where ("SS_STORE_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) UNION ALL select "SR_STORE_SK" AS "store_sk", "SR_RETURNED_DATE_SK" AS "date_sk", 0E-18 AS "sales_price", 0E-18 AS "profit", "SR_RETURN_AMT" AS "return_amt", "SR_NET_LOSS" AS "net_loss"
from TPCDS.STORE_RETURNS 
where ("SR_STORE_SK" IS NOT NULL AND "SR_RETURNED_DATE_SK" IS NOT NULL) )  join TPCDS.DATE_DIM  on ("date_sk" = "D_DATE_SK") join TPCDS.STORE  on ("store_sk" = "S_STORE_SK")
where (("D_DATE" IS NOT NULL AND ("D_DATE" >= ?)) AND ("D_DATE" <= ?)) group by "S_STORE_ID" UNION ALL select SUM("sales_price") AS "sales", SUM("return_amt") AS "returns", (SUM("profit") - SUM("net_loss")) AS "profit", 'catalog channel' AS "channel", CONCAT('catalog_page' , "CP_CATALOG_PAGE_ID") AS "id"
from ( select "CS_CATALOG_PAGE_SK" AS "page_sk", "CS_SOLD_DATE_SK" AS "date_sk", "CS_EXT_SALES_PRICE" AS "sales_price", "CS_NET_PROFIT" AS "profit", 0E-18 AS "return_amt", 0E-18 AS "net_loss"
from TPCDS.CATALOG_SALES 
where ("CS_CATALOG_PAGE_SK" IS NOT NULL AND "CS_SOLD_DATE_SK" IS NOT NULL) UNION ALL select "CR_CATALOG_PAGE_SK" AS "page_sk", "CR_RETURNED_DATE_SK" AS "date_sk", 0E-18 AS "sales_price", 0E-18 AS "profit", "CR_RETURN_AMOUNT" AS "return_amt", "CR_NET_LOSS" AS "net_loss"
from TPCDS.CATALOG_RETURNS 
where ("CR_CATALOG_PAGE_SK" IS NOT NULL AND "CR_RETURNED_DATE_SK" IS NOT NULL) )  join TPCDS.DATE_DIM  on ("date_sk" = "D_DATE_SK") join TPCDS.CATALOG_PAGE  on ("page_sk" = "CP_CATALOG_PAGE_SK")
where (("D_DATE" IS NOT NULL AND ("D_DATE" >= ?)) AND ("D_DATE" <= ?)) group by "CP_CATALOG_PAGE_ID" UNION ALL select SUM("sales_price") AS "sales", SUM("return_amt") AS "returns", (SUM("profit") - SUM("net_loss")) AS "profit", 'web channel' AS "channel", CONCAT('web_site' , "WEB_SITE_ID") AS "id"
from ( select "WS_WEB_SITE_SK" AS "wsr_web_site_sk", "WS_SOLD_DATE_SK" AS "date_sk", "WS_EXT_SALES_PRICE" AS "sales_price", "WS_NET_PROFIT" AS "profit", 0E-18 AS "return_amt", 0E-18 AS "net_loss"
from TPCDS.WEB_SALES 
where ("WS_WEB_SITE_SK" IS NOT NULL AND "WS_SOLD_DATE_SK" IS NOT NULL) UNION ALL select "WS_WEB_SITE_SK" AS "wsr_web_site_sk", "WR_RETURNED_DATE_SK" AS "date_sk", 0E-18 AS "sales_price", 0E-18 AS "profit", "WR_RETURN_AMT" AS "return_amt", "WR_NET_LOSS" AS "net_loss"
from TPCDS.WEB_RETURNS  join TPCDS.WEB_SALES  on (("WR_ITEM_SK" = "WS_ITEM_SK") AND ("WR_ORDER_NUMBER" = "WS_ORDER_NUMBER"))
where ("WR_RETURNED_DATE_SK" IS NOT NULL AND "WS_WEB_SITE_SK" IS NOT NULL) )  join TPCDS.DATE_DIM  on ("date_sk" = "D_DATE_SK") join TPCDS.WEB_SITE  on ("wsr_web_site_sk" = "WEB_SITE_SK")
where (("D_DATE" IS NOT NULL AND ("D_DATE" >= ?)) AND ("D_DATE" <= ?)) group by "WEB_SITE_ID" )   , lateral ( select "channel" "channel_10_sparkora", "id" "id_7_sparkora", 0 "spark_grouping_id_8_sparkora" from dual union all select "channel", null, 1 from dual union all select null, null, 3 from dual ) group by "channel_10_sparkora", "id_7_sparkora", "spark_grouping_id_8_sparkora"

(2) Project [codegen id : 1]
Output [5]: [channel#6123, id#6124, sales#5698, returns#5699, profit#5700]
Input [5]: [channel#6123, id#6124, sales#5698, returns#5699, profit#5700]

(3) TakeOrderedAndProject
Input [5]: [channel#6123, id#6124, sales#5698, returns#5699, profit#5700]
Arguments: 100, [channel#6123 ASC NULLS FIRST, id#6124 ASC NULLS FIRST], [channel#6123, id#6124, sales#5698, returns#5699, profit#5700]


Pushed oracle sqls

select "channel_10_sparkora", "id_7_sparkora", SUM("sales") AS "sales", SUM("returns") AS "returns", SUM("profit") AS "profit"
from ( select SUM("sales_price") AS "sales", SUM("return_amt") AS "returns", (SUM("profit") - SUM("net_loss")) AS "profit", 'store channel' AS "channel", CONCAT('store' , "S_STORE_ID") AS "id"
from ( select "SS_STORE_SK" AS "store_sk", "SS_SOLD_DATE_SK" AS "date_sk", "SS_EXT_SALES_PRICE" AS "sales_price", "SS_NET_PROFIT" AS "profit", 0E-18 AS "return_amt", 0E-18 AS "net_loss"
from TPCDS.STORE_SALES 
where ("SS_STORE_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) UNION ALL select "SR_STORE_SK" AS "store_sk", "SR_RETURNED_DATE_SK" AS "date_sk", 0E-18 AS "sales_price", 0E-18 AS "profit", "SR_RETURN_AMT" AS "return_amt", "SR_NET_LOSS" AS "net_loss"
from TPCDS.STORE_RETURNS 
where ("SR_STORE_SK" IS NOT NULL AND "SR_RETURNED_DATE_SK" IS NOT NULL) )  join TPCDS.DATE_DIM  on ("date_sk" = "D_DATE_SK") join TPCDS.STORE  on ("store_sk" = "S_STORE_SK")
where (("D_DATE" IS NOT NULL AND ("D_DATE" >= TRUNC(TIMESTAMP '2000-08-23 07:00:00.000000'))) AND ("D_DATE" <= TRUNC(TIMESTAMP '2000-09-06 07:00:00.000000'))) group by "S_STORE_ID" UNION ALL select SUM("sales_price") AS "sales", SUM("return_amt") AS "returns", (SUM("profit") - SUM("net_loss")) AS "profit", 'catalog channel' AS "channel", CONCAT('catalog_page' , "CP_CATALOG_PAGE_ID") AS "id"
from ( select "CS_CATALOG_PAGE_SK" AS "page_sk", "CS_SOLD_DATE_SK" AS "date_sk", "CS_EXT_SALES_PRICE" AS "sales_price", "CS_NET_PROFIT" AS "profit", 0E-18 AS "return_amt", 0E-18 AS "net_loss"
from TPCDS.CATALOG_SALES 
where ("CS_CATALOG_PAGE_SK" IS NOT NULL AND "CS_SOLD_DATE_SK" IS NOT NULL) UNION ALL select "CR_CATALOG_PAGE_SK" AS "page_sk", "CR_RETURNED_DATE_SK" AS "date_sk", 0E-18 AS "sales_price", 0E-18 AS "profit", "CR_RETURN_AMOUNT" AS "return_amt", "CR_NET_LOSS" AS "net_loss"
from TPCDS.CATALOG_RETURNS 
where ("CR_CATALOG_PAGE_SK" IS NOT NULL AND "CR_RETURNED_DATE_SK" IS NOT NULL) )  join TPCDS.DATE_DIM  on ("date_sk" = "D_DATE_SK") join TPCDS.CATALOG_PAGE  on ("page_sk" = "CP_CATALOG_PAGE_SK")
where (("D_DATE" IS NOT NULL AND ("D_DATE" >= TRUNC(TIMESTAMP '2000-08-23 07:00:00.000000'))) AND ("D_DATE" <= TRUNC(TIMESTAMP '2000-09-06 07:00:00.000000'))) group by "CP_CATALOG_PAGE_ID" UNION ALL select SUM("sales_price") AS "sales", SUM("return_amt") AS "returns", (SUM("profit") - SUM("net_loss")) AS "profit", 'web channel' AS "channel", CONCAT('web_site' , "WEB_SITE_ID") AS "id"
from ( select "WS_WEB_SITE_SK" AS "wsr_web_site_sk", "WS_SOLD_DATE_SK" AS "date_sk", "WS_EXT_SALES_PRICE" AS "sales_price", "WS_NET_PROFIT" AS "profit", 0E-18 AS "return_amt", 0E-18 AS "net_loss"
from TPCDS.WEB_SALES 
where ("WS_WEB_SITE_SK" IS NOT NULL AND "WS_SOLD_DATE_SK" IS NOT NULL) UNION ALL select "WS_WEB_SITE_SK" AS "wsr_web_site_sk", "WR_RETURNED_DATE_SK" AS "date_sk", 0E-18 AS "sales_price", 0E-18 AS "profit", "WR_RETURN_AMT" AS "return_amt", "WR_NET_LOSS" AS "net_loss"
from TPCDS.WEB_RETURNS  join TPCDS.WEB_SALES  on (("WR_ITEM_SK" = "WS_ITEM_SK") AND ("WR_ORDER_NUMBER" = "WS_ORDER_NUMBER"))
where ("WR_RETURNED_DATE_SK" IS NOT NULL AND "WS_WEB_SITE_SK" IS NOT NULL) )  join TPCDS.DATE_DIM  on ("date_sk" = "D_DATE_SK") join TPCDS.WEB_SITE  on ("wsr_web_site_sk" = "WEB_SITE_SK")
where (("D_DATE" IS NOT NULL AND ("D_DATE" >= TRUNC(TIMESTAMP '2000-08-23 07:00:00.000000'))) AND ("D_DATE" <= TRUNC(TIMESTAMP '2000-09-06 07:00:00.000000'))) group by "WEB_SITE_ID" )   , lateral ( select "channel" "channel_10_sparkora", "id" "id_7_sparkora", 0 "spark_grouping_id_8_sparkora" from dual union all select "channel", null, 1 from dual union all select null, null, 3 from dual ) group by "channel_10_sparkora", "id_7_sparkora", "spark_grouping_id_8_sparkora"

Spark Plan with Pushdown turned off

== Physical Plan ==
TakeOrderedAndProject (92)
+- * HashAggregate (91)
   +- Exchange (90)
      +- * HashAggregate (89)
         +- * Expand (88)
            +- Union (87)
               :- * HashAggregate (27)
               :  +- Exchange (26)
               :     +- * HashAggregate (25)
               :        +- * Project (24)
               :           +- * SortMergeJoin Inner (23)
               :              :- * Sort (18)
               :              :  +- Exchange (17)
               :              :     +- * Project (16)
               :              :        +- * SortMergeJoin Inner (15)
               :              :           :- * Sort (9)
               :              :           :  +- Exchange (8)
               :              :           :     +- Union (7)
               :              :           :        :- * Project (3)
               :              :           :        :  +- * Filter (2)
               :              :           :        :     +- BatchScan (1)
               :              :           :        +- * Project (6)
               :              :           :           +- * Filter (5)
               :              :           :              +- BatchScan (4)
               :              :           +- * Sort (14)
               :              :              +- Exchange (13)
               :              :                 +- * Project (12)
               :              :                    +- * Filter (11)
               :              :                       +- BatchScan (10)
               :              +- * Sort (22)
               :                 +- Exchange (21)
               :                    +- * Project (20)
               :                       +- BatchScan (19)
               :- * HashAggregate (54)
               :  +- Exchange (53)
               :     +- * HashAggregate (52)
               :        +- * Project (51)
               :           +- * SortMergeJoin Inner (50)
               :              :- * Sort (45)
               :              :  +- Exchange (44)
               :              :     +- * Project (43)
               :              :        +- * SortMergeJoin Inner (42)
               :              :           :- * Sort (36)
               :              :           :  +- Exchange (35)
               :              :           :     +- Union (34)
               :              :           :        :- * Project (30)
               :              :           :        :  +- * Filter (29)
               :              :           :        :     +- BatchScan (28)
               :              :           :        +- * Project (33)
               :              :           :           +- * Filter (32)
               :              :           :              +- BatchScan (31)
               :              :           +- * Sort (41)
               :              :              +- Exchange (40)
               :              :                 +- * Project (39)
               :              :                    +- * Filter (38)
               :              :                       +- BatchScan (37)
               :              +- * Sort (49)
               :                 +- Exchange (48)
               :                    +- * Project (47)
               :                       +- BatchScan (46)
               +- * HashAggregate (86)
                  +- Exchange (85)
                     +- * HashAggregate (84)
                        +- * Project (83)
                           +- * SortMergeJoin Inner (82)
                              :- * Sort (77)
                              :  +- Exchange (76)
                              :     +- * Project (75)
                              :        +- * SortMergeJoin Inner (74)
                              :           :- * Sort (68)
                              :           :  +- Exchange (67)
                              :           :     +- Union (66)
                              :           :        :- * Project (57)
                              :           :        :  +- * Filter (56)
                              :           :        :     +- BatchScan (55)
                              :           :        +- * Project (65)
                              :           :           +- * SortMergeJoin Inner (64)
                              :           :              :- * Sort (60)
                              :           :              :  +- * Project (59)
                              :           :              :     +- BatchScan (58)
                              :           :              +- * Sort (63)
                              :           :                 +- * Filter (62)
                              :           :                    +- BatchScan (61)
                              :           +- * Sort (73)
                              :              +- Exchange (72)
                              :                 +- * Project (71)
                              :                    +- * Filter (70)
                              :                       +- BatchScan (69)
                              +- * Sort (81)
                                 +- Exchange (80)
                                    +- * Project (79)
                                       +- BatchScan (78)


(1) BatchScan
Output [4]: [SS_STORE_SK#5169, SS_EXT_SALES_PRICE#5177, SS_NET_PROFIT#5184, SS_SOLD_DATE_SK#5162]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_STORE_SK#5549, SS_EXT_SALES_PRICE#5550, SS_NET_PROFIT#5551, SS_SOLD_DATE_SK#5552], [oracolumnref(SS_STORE_SK#5549), oracolumnref(SS_EXT_SALES_PRICE#5550), oracolumnref(SS_NET_PROFIT#5551), oracolumnref(SS_SOLD_DATE_SK#5552)], orapostfixunaryopexpression(isnotnull(SS_STORE_SK#5169))
PartitionSchema: struct<SS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<SS_STORE_SK:decimal(38,18),SS_EXT_SALES_PRICE:decimal(38,18),SS_NET_PROFIT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SS_STORE_SK", "SS_EXT_SALES_PRICE", "SS_NET_PROFIT", "SS_SOLD_DATE_SK"
from TPCDS.STORE_SALES
where "SS_STORE_SK" IS NOT NULL and "SS_SOLD_DATE_SK" IS NOT NULL

(2) Filter [codegen id : 1]
Input [4]: [SS_STORE_SK#5169, SS_EXT_SALES_PRICE#5177, SS_NET_PROFIT#5184, SS_SOLD_DATE_SK#5162]
Condition : isnotnull(SS_STORE_SK#5169)

(3) Project [codegen id : 1]
Output [6]: [SS_STORE_SK#5169 AS store_sk#5114, SS_SOLD_DATE_SK#5162 AS date_sk#5115, SS_EXT_SALES_PRICE#5177 AS sales_price#5116, SS_NET_PROFIT#5184 AS profit#5117, 0E-18 AS return_amt#5506, 0E-18 AS net_loss#5507]
Input [4]: [SS_STORE_SK#5169, SS_EXT_SALES_PRICE#5177, SS_NET_PROFIT#5184, SS_SOLD_DATE_SK#5162]

(4) BatchScan
Output [4]: [SR_STORE_SK#5192, SR_RETURN_AMT#5196, SR_NET_LOSS#5204, SR_RETURNED_DATE_SK#5185]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_RETURNS, [SR_STORE_SK#5557, SR_RETURN_AMT#5558, SR_NET_LOSS#5559, SR_RETURNED_DATE_SK#5560], [oracolumnref(SR_STORE_SK#5557), oracolumnref(SR_RETURN_AMT#5558), oracolumnref(SR_NET_LOSS#5559), oracolumnref(SR_RETURNED_DATE_SK#5560)], orapostfixunaryopexpression(isnotnull(SR_STORE_SK#5192))
PartitionSchema: struct<SR_RETURNED_DATE_SK:decimal(38,18)>
ReadSchema: struct<SR_STORE_SK:decimal(38,18),SR_RETURN_AMT:decimal(38,18),SR_NET_LOSS:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SR_STORE_SK", "SR_RETURN_AMT", "SR_NET_LOSS", "SR_RETURNED_DATE_SK"
from TPCDS.STORE_RETURNS
where "SR_STORE_SK" IS NOT NULL and "SR_RETURNED_DATE_SK" IS NOT NULL

(5) Filter [codegen id : 2]
Input [4]: [SR_STORE_SK#5192, SR_RETURN_AMT#5196, SR_NET_LOSS#5204, SR_RETURNED_DATE_SK#5185]
Condition : isnotnull(SR_STORE_SK#5192)

(6) Project [codegen id : 2]
Output [6]: [SR_STORE_SK#5192 AS store_sk#5120, SR_RETURNED_DATE_SK#5185 AS date_sk#5121, 0E-18 AS sales_price#5508, 0E-18 AS profit#5509, SR_RETURN_AMT#5196 AS return_amt#5124, SR_NET_LOSS#5204 AS net_loss#5125]
Input [4]: [SR_STORE_SK#5192, SR_RETURN_AMT#5196, SR_NET_LOSS#5204, SR_RETURNED_DATE_SK#5185]

(7) Union

(8) Exchange
Input [6]: [store_sk#5114, date_sk#5115, sales_price#5116, profit#5117, return_amt#5506, net_loss#5507]
Arguments: hashpartitioning(date_sk#5115, 5), true, [id=#1716]

(9) Sort [codegen id : 3]
Input [6]: [store_sk#5114, date_sk#5115, sales_price#5116, profit#5117, return_amt#5506, net_loss#5507]
Arguments: [date_sk#5115 ASC NULLS FIRST], false, 0

(10) BatchScan
Output [2]: [D_DATE_SK#5205, D_DATE#5207]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#5565, D_DATE#5566], [oracolumnref(D_DATE_SK#5565), oracolumnref(D_DATE#5566)], orabinaryopexpression(((isnotnull(D_DATE#5207) AND (D_DATE#5207 >= 11192)) AND (D_DATE#5207 <= 11206)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_DATE:date>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 11192, 11206
oraPushdownSQL: select "D_DATE_SK", "D_DATE"
from TPCDS.DATE_DIM
where (("D_DATE" IS NOT NULL AND ("D_DATE" >= ?)) AND ("D_DATE" <= ?))

(11) Filter [codegen id : 4]
Input [2]: [D_DATE_SK#5205, D_DATE#5207]
Condition : ((isnotnull(D_DATE#5207) AND (D_DATE#5207 >= 11192)) AND (D_DATE#5207 <= 11206))

(12) Project [codegen id : 4]
Output [1]: [D_DATE_SK#5205]
Input [2]: [D_DATE_SK#5205, D_DATE#5207]

(13) Exchange
Input [1]: [D_DATE_SK#5205]
Arguments: hashpartitioning(d_date_sk#5205, 5), true, [id=#1725]

(14) Sort [codegen id : 5]
Input [1]: [D_DATE_SK#5205]
Arguments: [d_date_sk#5205 ASC NULLS FIRST], false, 0

(15) SortMergeJoin [codegen id : 6]
Left keys [1]: [date_sk#5115]
Right keys [1]: [d_date_sk#5205]
Join condition: None

(16) Project [codegen id : 6]
Output [5]: [store_sk#5114, sales_price#5116, profit#5117, return_amt#5506, net_loss#5507]
Input [7]: [store_sk#5114, date_sk#5115, sales_price#5116, profit#5117, return_amt#5506, net_loss#5507, D_DATE_SK#5205]

(17) Exchange
Input [5]: [store_sk#5114, sales_price#5116, profit#5117, return_amt#5506, net_loss#5507]
Arguments: hashpartitioning(store_sk#5114, 5), true, [id=#1733]

(18) Sort [codegen id : 7]
Input [5]: [store_sk#5114, sales_price#5116, profit#5117, return_amt#5506, net_loss#5507]
Arguments: [store_sk#5114 ASC NULLS FIRST], false, 0

(19) BatchScan
Output [2]: [S_STORE_SK#5233, S_STORE_ID#5234]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE, [S_STORE_SK#5569, S_STORE_ID#5570], [oracolumnref(S_STORE_SK#5569), oracolumnref(S_STORE_ID#5570)]
PartitionSchema: struct<>
ReadSchema: struct<S_STORE_SK:decimal(38,18),S_STORE_ID:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "S_STORE_SK", "S_STORE_ID"
from TPCDS.STORE

(20) Project [codegen id : 8]
Output [2]: [S_STORE_SK#5233, S_STORE_ID#5234]
Input [2]: [S_STORE_SK#5233, S_STORE_ID#5234]

(21) Exchange
Input [2]: [S_STORE_SK#5233, S_STORE_ID#5234]
Arguments: hashpartitioning(s_store_sk#5233, 5), true, [id=#1741]

(22) Sort [codegen id : 9]
Input [2]: [S_STORE_SK#5233, S_STORE_ID#5234]
Arguments: [s_store_sk#5233 ASC NULLS FIRST], false, 0

(23) SortMergeJoin [codegen id : 10]
Left keys [1]: [store_sk#5114]
Right keys [1]: [s_store_sk#5233]
Join condition: None

(24) Project [codegen id : 10]
Output [5]: [sales_price#5116, profit#5117, return_amt#5506, net_loss#5507, S_STORE_ID#5234]
Input [7]: [store_sk#5114, sales_price#5116, profit#5117, return_amt#5506, net_loss#5507, S_STORE_SK#5233, S_STORE_ID#5234]

(25) HashAggregate [codegen id : 10]
Input [5]: [sales_price#5116, profit#5117, return_amt#5506, net_loss#5507, S_STORE_ID#5234]
Keys [1]: [s_store_id#5234]
Functions [4]: [partial_sum(sales_price#5116), partial_sum(return_amt#5506), partial_sum(profit#5117), partial_sum(net_loss#5507)]
Aggregate Attributes [8]: [sum#5641, isEmpty#5642, sum#5643, isEmpty#5644, sum#5645, isEmpty#5646, sum#5647, isEmpty#5648]
Results [9]: [s_store_id#5234, sum#5649, isEmpty#5650, sum#5651, isEmpty#5652, sum#5653, isEmpty#5654, sum#5655, isEmpty#5656]

(26) Exchange
Input [9]: [s_store_id#5234, sum#5649, isEmpty#5650, sum#5651, isEmpty#5652, sum#5653, isEmpty#5654, sum#5655, isEmpty#5656]
Arguments: hashpartitioning(s_store_id#5234, 5), true, [id=#1750]

(27) HashAggregate [codegen id : 11]
Input [9]: [s_store_id#5234, sum#5649, isEmpty#5650, sum#5651, isEmpty#5652, sum#5653, isEmpty#5654, sum#5655, isEmpty#5656]
Keys [1]: [s_store_id#5234]
Functions [4]: [sum(sales_price#5116), sum(return_amt#5506), sum(profit#5117), sum(net_loss#5507)]
Aggregate Attributes [4]: [sum(sales_price#5116)#5518, sum(return_amt#5506)#5520, sum(profit#5117)#5519, sum(net_loss#5507)#5521]
Results [5]: [sum(sales_price#5116)#5518 AS sales#5126, sum(return_amt#5506)#5520 AS returns#5128, CheckOverflow((promote_precision(cast(sum(profit#5117)#5519 as decimal(38,17))) - promote_precision(cast(sum(net_loss#5507)#5521 as decimal(38,17)))), DecimalType(38,17), true) AS profit#5104, store channel AS channel#5533, concat(store, s_store_id#5234) AS id#5534]

(28) BatchScan
Output [4]: [CS_CATALOG_PAGE_SK#5274, CS_EXT_SALES_PRICE#5285, CS_NET_PROFIT#5295, CS_SOLD_DATE_SK#5262]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CATALOG_SALES, [CS_CATALOG_PAGE_SK#5573, CS_EXT_SALES_PRICE#5574, CS_NET_PROFIT#5575, CS_SOLD_DATE_SK#5576], [oracolumnref(CS_CATALOG_PAGE_SK#5573), oracolumnref(CS_EXT_SALES_PRICE#5574), oracolumnref(CS_NET_PROFIT#5575), oracolumnref(CS_SOLD_DATE_SK#5576)], orapostfixunaryopexpression(isnotnull(CS_CATALOG_PAGE_SK#5274))
PartitionSchema: struct<CS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<CS_CATALOG_PAGE_SK:decimal(38,18),CS_EXT_SALES_PRICE:decimal(38,18),CS_NET_PROFIT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CS_CATALOG_PAGE_SK", "CS_EXT_SALES_PRICE", "CS_NET_PROFIT", "CS_SOLD_DATE_SK"
from TPCDS.CATALOG_SALES
where "CS_CATALOG_PAGE_SK" IS NOT NULL and "CS_SOLD_DATE_SK" IS NOT NULL

(29) Filter [codegen id : 12]
Input [4]: [CS_CATALOG_PAGE_SK#5274, CS_EXT_SALES_PRICE#5285, CS_NET_PROFIT#5295, CS_SOLD_DATE_SK#5262]
Condition : isnotnull(CS_CATALOG_PAGE_SK#5274)

(30) Project [codegen id : 12]
Output [6]: [CS_CATALOG_PAGE_SK#5274 AS page_sk#5130, CS_SOLD_DATE_SK#5262 AS date_sk#5131, CS_EXT_SALES_PRICE#5285 AS sales_price#5132, CS_NET_PROFIT#5295 AS profit#5133, 0E-18 AS return_amt#5510, 0E-18 AS net_loss#5511]
Input [4]: [CS_CATALOG_PAGE_SK#5274, CS_EXT_SALES_PRICE#5285, CS_NET_PROFIT#5295, CS_SOLD_DATE_SK#5262]

(31) BatchScan
Output [4]: [CR_CATALOG_PAGE_SK#5308, CR_RETURN_AMOUNT#5314, CR_NET_LOSS#5322, CR_RETURNED_DATE_SK#5296]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CATALOG_RETURNS, [CR_CATALOG_PAGE_SK#5581, CR_RETURN_AMOUNT#5582, CR_NET_LOSS#5583, CR_RETURNED_DATE_SK#5584], [oracolumnref(CR_CATALOG_PAGE_SK#5581), oracolumnref(CR_RETURN_AMOUNT#5582), oracolumnref(CR_NET_LOSS#5583), oracolumnref(CR_RETURNED_DATE_SK#5584)], orapostfixunaryopexpression(isnotnull(CR_CATALOG_PAGE_SK#5308))
PartitionSchema: struct<CR_RETURNED_DATE_SK:decimal(38,18)>
ReadSchema: struct<CR_CATALOG_PAGE_SK:decimal(38,18),CR_RETURN_AMOUNT:decimal(38,18),CR_NET_LOSS:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CR_CATALOG_PAGE_SK", "CR_RETURN_AMOUNT", "CR_NET_LOSS", "CR_RETURNED_DATE_SK"
from TPCDS.CATALOG_RETURNS
where "CR_CATALOG_PAGE_SK" IS NOT NULL and "CR_RETURNED_DATE_SK" IS NOT NULL

(32) Filter [codegen id : 13]
Input [4]: [CR_CATALOG_PAGE_SK#5308, CR_RETURN_AMOUNT#5314, CR_NET_LOSS#5322, CR_RETURNED_DATE_SK#5296]
Condition : isnotnull(CR_CATALOG_PAGE_SK#5308)

(33) Project [codegen id : 13]
Output [6]: [CR_CATALOG_PAGE_SK#5308 AS page_sk#5136, CR_RETURNED_DATE_SK#5296 AS date_sk#5137, 0E-18 AS sales_price#5512, 0E-18 AS profit#5513, CR_RETURN_AMOUNT#5314 AS return_amt#5140, CR_NET_LOSS#5322 AS net_loss#5141]
Input [4]: [CR_CATALOG_PAGE_SK#5308, CR_RETURN_AMOUNT#5314, CR_NET_LOSS#5322, CR_RETURNED_DATE_SK#5296]

(34) Union

(35) Exchange
Input [6]: [page_sk#5130, date_sk#5131, sales_price#5132, profit#5133, return_amt#5510, net_loss#5511]
Arguments: hashpartitioning(date_sk#5131, 5), true, [id=#1763]

(36) Sort [codegen id : 14]
Input [6]: [page_sk#5130, date_sk#5131, sales_price#5132, profit#5133, return_amt#5510, net_loss#5511]
Arguments: [date_sk#5131 ASC NULLS FIRST], false, 0

(37) BatchScan
Output [2]: [D_DATE_SK#5323, D_DATE#5325]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#5589, D_DATE#5590], [oracolumnref(D_DATE_SK#5589), oracolumnref(D_DATE#5590)], orabinaryopexpression(((isnotnull(D_DATE#5325) AND (D_DATE#5325 >= 11192)) AND (D_DATE#5325 <= 11206)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_DATE:date>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 11192, 11206
oraPushdownSQL: select "D_DATE_SK", "D_DATE"
from TPCDS.DATE_DIM
where (("D_DATE" IS NOT NULL AND ("D_DATE" >= ?)) AND ("D_DATE" <= ?))

(38) Filter [codegen id : 15]
Input [2]: [D_DATE_SK#5323, D_DATE#5325]
Condition : ((isnotnull(D_DATE#5325) AND (D_DATE#5325 >= 11192)) AND (D_DATE#5325 <= 11206))

(39) Project [codegen id : 15]
Output [1]: [D_DATE_SK#5323]
Input [2]: [D_DATE_SK#5323, D_DATE#5325]

(40) Exchange
Input [1]: [D_DATE_SK#5323]
Arguments: hashpartitioning(d_date_sk#5323, 5), true, [id=#1772]

(41) Sort [codegen id : 16]
Input [1]: [D_DATE_SK#5323]
Arguments: [d_date_sk#5323 ASC NULLS FIRST], false, 0

(42) SortMergeJoin [codegen id : 17]
Left keys [1]: [date_sk#5131]
Right keys [1]: [d_date_sk#5323]
Join condition: None

(43) Project [codegen id : 17]
Output [5]: [page_sk#5130, sales_price#5132, profit#5133, return_amt#5510, net_loss#5511]
Input [7]: [page_sk#5130, date_sk#5131, sales_price#5132, profit#5133, return_amt#5510, net_loss#5511, D_DATE_SK#5323]

(44) Exchange
Input [5]: [page_sk#5130, sales_price#5132, profit#5133, return_amt#5510, net_loss#5511]
Arguments: hashpartitioning(page_sk#5130, 5), true, [id=#1780]

(45) Sort [codegen id : 18]
Input [5]: [page_sk#5130, sales_price#5132, profit#5133, return_amt#5510, net_loss#5511]
Arguments: [page_sk#5130 ASC NULLS FIRST], false, 0

(46) BatchScan
Output [2]: [CP_CATALOG_PAGE_SK#5351, CP_CATALOG_PAGE_ID#5352]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CATALOG_PAGE, [CP_CATALOG_PAGE_SK#5593, CP_CATALOG_PAGE_ID#5594], [oracolumnref(CP_CATALOG_PAGE_SK#5593), oracolumnref(CP_CATALOG_PAGE_ID#5594)]
PartitionSchema: struct<>
ReadSchema: struct<CP_CATALOG_PAGE_SK:decimal(38,18),CP_CATALOG_PAGE_ID:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CP_CATALOG_PAGE_SK", "CP_CATALOG_PAGE_ID"
from TPCDS.CATALOG_PAGE

(47) Project [codegen id : 19]
Output [2]: [CP_CATALOG_PAGE_SK#5351, CP_CATALOG_PAGE_ID#5352]
Input [2]: [CP_CATALOG_PAGE_SK#5351, CP_CATALOG_PAGE_ID#5352]

(48) Exchange
Input [2]: [CP_CATALOG_PAGE_SK#5351, CP_CATALOG_PAGE_ID#5352]
Arguments: hashpartitioning(cp_catalog_page_sk#5351, 5), true, [id=#1788]

(49) Sort [codegen id : 20]
Input [2]: [CP_CATALOG_PAGE_SK#5351, CP_CATALOG_PAGE_ID#5352]
Arguments: [cp_catalog_page_sk#5351 ASC NULLS FIRST], false, 0

(50) SortMergeJoin [codegen id : 21]
Left keys [1]: [page_sk#5130]
Right keys [1]: [cp_catalog_page_sk#5351]
Join condition: None

(51) Project [codegen id : 21]
Output [5]: [sales_price#5132, profit#5133, return_amt#5510, net_loss#5511, CP_CATALOG_PAGE_ID#5352]
Input [7]: [page_sk#5130, sales_price#5132, profit#5133, return_amt#5510, net_loss#5511, CP_CATALOG_PAGE_SK#5351, CP_CATALOG_PAGE_ID#5352]

(52) HashAggregate [codegen id : 21]
Input [5]: [sales_price#5132, profit#5133, return_amt#5510, net_loss#5511, CP_CATALOG_PAGE_ID#5352]
Keys [1]: [cp_catalog_page_id#5352]
Functions [4]: [partial_sum(sales_price#5132), partial_sum(return_amt#5510), partial_sum(profit#5133), partial_sum(net_loss#5511)]
Aggregate Attributes [8]: [sum#5657, isEmpty#5658, sum#5659, isEmpty#5660, sum#5661, isEmpty#5662, sum#5663, isEmpty#5664]
Results [9]: [cp_catalog_page_id#5352, sum#5665, isEmpty#5666, sum#5667, isEmpty#5668, sum#5669, isEmpty#5670, sum#5671, isEmpty#5672]

(53) Exchange
Input [9]: [cp_catalog_page_id#5352, sum#5665, isEmpty#5666, sum#5667, isEmpty#5668, sum#5669, isEmpty#5670, sum#5671, isEmpty#5672]
Arguments: hashpartitioning(cp_catalog_page_id#5352, 5), true, [id=#1797]

(54) HashAggregate [codegen id : 22]
Input [9]: [cp_catalog_page_id#5352, sum#5665, isEmpty#5666, sum#5667, isEmpty#5668, sum#5669, isEmpty#5670, sum#5671, isEmpty#5672]
Keys [1]: [cp_catalog_page_id#5352]
Functions [4]: [sum(sales_price#5132), sum(return_amt#5510), sum(profit#5133), sum(net_loss#5511)]
Aggregate Attributes [4]: [sum(sales_price#5132)#5522, sum(return_amt#5510)#5524, sum(profit#5133)#5523, sum(net_loss#5511)#5525]
Results [5]: [sum(sales_price#5132)#5522 AS sales#5142, sum(return_amt#5510)#5524 AS returns#5144, CheckOverflow((promote_precision(cast(sum(profit#5133)#5523 as decimal(38,17))) - promote_precision(cast(sum(net_loss#5511)#5525 as decimal(38,17)))), DecimalType(38,17), true) AS profit#5107, catalog channel AS channel#5545, concat(catalog_page, cp_catalog_page_id#5352) AS id#5546]

(55) BatchScan
Output [4]: [WS_WEB_SITE_SK#5373, WS_EXT_SALES_PRICE#5383, WS_NET_PROFIT#5393, WS_SOLD_DATE_SK#5360]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_SALES, [WS_WEB_SITE_SK#5597, WS_EXT_SALES_PRICE#5598, WS_NET_PROFIT#5599, WS_SOLD_DATE_SK#5600], [oracolumnref(WS_WEB_SITE_SK#5597), oracolumnref(WS_EXT_SALES_PRICE#5598), oracolumnref(WS_NET_PROFIT#5599), oracolumnref(WS_SOLD_DATE_SK#5600)], orapostfixunaryopexpression(isnotnull(WS_WEB_SITE_SK#5373))
PartitionSchema: struct<WS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<WS_WEB_SITE_SK:decimal(38,18),WS_EXT_SALES_PRICE:decimal(38,18),WS_NET_PROFIT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WS_WEB_SITE_SK", "WS_EXT_SALES_PRICE", "WS_NET_PROFIT", "WS_SOLD_DATE_SK"
from TPCDS.WEB_SALES
where "WS_WEB_SITE_SK" IS NOT NULL and "WS_SOLD_DATE_SK" IS NOT NULL

(56) Filter [codegen id : 23]
Input [4]: [WS_WEB_SITE_SK#5373, WS_EXT_SALES_PRICE#5383, WS_NET_PROFIT#5393, WS_SOLD_DATE_SK#5360]
Condition : isnotnull(WS_WEB_SITE_SK#5373)

(57) Project [codegen id : 23]
Output [6]: [WS_WEB_SITE_SK#5373 AS wsr_web_site_sk#5146, WS_SOLD_DATE_SK#5360 AS date_sk#5147, WS_EXT_SALES_PRICE#5383 AS sales_price#5148, WS_NET_PROFIT#5393 AS profit#5149, 0E-18 AS return_amt#5514, 0E-18 AS net_loss#5515]
Input [4]: [WS_WEB_SITE_SK#5373, WS_EXT_SALES_PRICE#5383, WS_NET_PROFIT#5393, WS_SOLD_DATE_SK#5360]

(58) BatchScan
Output [5]: [WR_ITEM_SK#5396, WR_ORDER_NUMBER#5407, WR_RETURN_AMT#5409, WR_NET_LOSS#5417, WR_RETURNED_DATE_SK#5394]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_RETURNS, [WR_ITEM_SK#5605, WR_ORDER_NUMBER#5606, WR_RETURN_AMT#5607, WR_NET_LOSS#5608, WR_RETURNED_DATE_SK#5609], [oracolumnref(WR_ITEM_SK#5605), oracolumnref(WR_ORDER_NUMBER#5606), oracolumnref(WR_RETURN_AMT#5607), oracolumnref(WR_NET_LOSS#5608), oracolumnref(WR_RETURNED_DATE_SK#5609)]
PartitionSchema: struct<WR_RETURNED_DATE_SK:decimal(38,18)>
ReadSchema: struct<WR_ITEM_SK:decimal(38,18),WR_ORDER_NUMBER:decimal(38,18),WR_RETURN_AMT:decimal(38,18),WR_NET_LOSS:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WR_ITEM_SK", "WR_ORDER_NUMBER", "WR_RETURN_AMT", "WR_NET_LOSS", "WR_RETURNED_DATE_SK"
from TPCDS.WEB_RETURNS
where "WR_RETURNED_DATE_SK" IS NOT NULL

(59) Project [codegen id : 24]
Output [5]: [WR_RETURNED_DATE_SK#5394, WR_ITEM_SK#5396, WR_ORDER_NUMBER#5407, WR_RETURN_AMT#5409, WR_NET_LOSS#5417]
Input [5]: [WR_ITEM_SK#5396, WR_ORDER_NUMBER#5407, WR_RETURN_AMT#5409, WR_NET_LOSS#5417, WR_RETURNED_DATE_SK#5394]

(60) Sort [codegen id : 24]
Input [5]: [WR_RETURNED_DATE_SK#5394, WR_ITEM_SK#5396, WR_ORDER_NUMBER#5407, WR_RETURN_AMT#5409, WR_NET_LOSS#5417]
Arguments: [wr_item_sk#5396 ASC NULLS FIRST, wr_order_number#5407 ASC NULLS FIRST], false, 0

(61) BatchScan
Output [3]: [WS_ITEM_SK#5421, WS_WEB_SITE_SK#5431, WS_ORDER_NUMBER#5435]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_SALES, [WS_ITEM_SK#5615, WS_WEB_SITE_SK#5616, WS_ORDER_NUMBER#5617], [oracolumnref(WS_ITEM_SK#5615), oracolumnref(WS_WEB_SITE_SK#5616), oracolumnref(WS_ORDER_NUMBER#5617)], orapostfixunaryopexpression(isnotnull(WS_WEB_SITE_SK#5431))
PartitionSchema: struct<>
ReadSchema: struct<WS_ITEM_SK:decimal(38,18),WS_WEB_SITE_SK:decimal(38,18),WS_ORDER_NUMBER:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WS_ITEM_SK", "WS_WEB_SITE_SK", "WS_ORDER_NUMBER"
from TPCDS.WEB_SALES
where "WS_WEB_SITE_SK" IS NOT NULL

(62) Filter [codegen id : 25]
Input [3]: [WS_ITEM_SK#5421, WS_WEB_SITE_SK#5431, WS_ORDER_NUMBER#5435]
Condition : isnotnull(WS_WEB_SITE_SK#5431)

(63) Sort [codegen id : 25]
Input [3]: [WS_ITEM_SK#5421, WS_WEB_SITE_SK#5431, WS_ORDER_NUMBER#5435]
Arguments: [ws_item_sk#5421 ASC NULLS FIRST, ws_order_number#5435 ASC NULLS FIRST], false, 0

(64) SortMergeJoin [codegen id : 26]
Left keys [2]: [wr_item_sk#5396, wr_order_number#5407]
Right keys [2]: [ws_item_sk#5421, ws_order_number#5435]
Join condition: None

(65) Project [codegen id : 26]
Output [6]: [ws_web_site_sk#5431 AS wsr_web_site_sk#5152, wr_returned_date_sk#5394 AS date_sk#5153, 0E-18 AS sales_price#5516, 0E-18 AS profit#5517, wr_return_amt#5409 AS return_amt#5156, wr_net_loss#5417 AS net_loss#5157]
Input [8]: [WR_RETURNED_DATE_SK#5394, WR_ITEM_SK#5396, WR_ORDER_NUMBER#5407, WR_RETURN_AMT#5409, WR_NET_LOSS#5417, WS_ITEM_SK#5421, WS_WEB_SITE_SK#5431, WS_ORDER_NUMBER#5435]

(66) Union

(67) Exchange
Input [6]: [wsr_web_site_sk#5146, date_sk#5147, sales_price#5148, profit#5149, return_amt#5514, net_loss#5515]
Arguments: hashpartitioning(date_sk#5147, 5), true, [id=#1819]

(68) Sort [codegen id : 27]
Input [6]: [wsr_web_site_sk#5146, date_sk#5147, sales_price#5148, profit#5149, return_amt#5514, net_loss#5515]
Arguments: [date_sk#5147 ASC NULLS FIRST], false, 0

(69) BatchScan
Output [2]: [D_DATE_SK#5452, D_DATE#5454]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#5621, D_DATE#5622], [oracolumnref(D_DATE_SK#5621), oracolumnref(D_DATE#5622)], orabinaryopexpression(((isnotnull(D_DATE#5454) AND (D_DATE#5454 >= 11192)) AND (D_DATE#5454 <= 11206)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_DATE:date>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 11192, 11206
oraPushdownSQL: select "D_DATE_SK", "D_DATE"
from TPCDS.DATE_DIM
where (("D_DATE" IS NOT NULL AND ("D_DATE" >= ?)) AND ("D_DATE" <= ?))

(70) Filter [codegen id : 28]
Input [2]: [D_DATE_SK#5452, D_DATE#5454]
Condition : ((isnotnull(D_DATE#5454) AND (D_DATE#5454 >= 11192)) AND (D_DATE#5454 <= 11206))

(71) Project [codegen id : 28]
Output [1]: [D_DATE_SK#5452]
Input [2]: [D_DATE_SK#5452, D_DATE#5454]

(72) Exchange
Input [1]: [D_DATE_SK#5452]
Arguments: hashpartitioning(d_date_sk#5452, 5), true, [id=#1828]

(73) Sort [codegen id : 29]
Input [1]: [D_DATE_SK#5452]
Arguments: [d_date_sk#5452 ASC NULLS FIRST], false, 0

(74) SortMergeJoin [codegen id : 30]
Left keys [1]: [date_sk#5147]
Right keys [1]: [d_date_sk#5452]
Join condition: None

(75) Project [codegen id : 30]
Output [5]: [wsr_web_site_sk#5146, sales_price#5148, profit#5149, return_amt#5514, net_loss#5515]
Input [7]: [wsr_web_site_sk#5146, date_sk#5147, sales_price#5148, profit#5149, return_amt#5514, net_loss#5515, D_DATE_SK#5452]

(76) Exchange
Input [5]: [wsr_web_site_sk#5146, sales_price#5148, profit#5149, return_amt#5514, net_loss#5515]
Arguments: hashpartitioning(wsr_web_site_sk#5146, 5), true, [id=#1836]

(77) Sort [codegen id : 31]
Input [5]: [wsr_web_site_sk#5146, sales_price#5148, profit#5149, return_amt#5514, net_loss#5515]
Arguments: [wsr_web_site_sk#5146 ASC NULLS FIRST], false, 0

(78) BatchScan
Output [2]: [WEB_SITE_SK#5480, WEB_SITE_ID#5481]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_SITE, [WEB_SITE_SK#5625, WEB_SITE_ID#5626], [oracolumnref(WEB_SITE_SK#5625), oracolumnref(WEB_SITE_ID#5626)]
PartitionSchema: struct<>
ReadSchema: struct<WEB_SITE_SK:decimal(38,18),WEB_SITE_ID:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WEB_SITE_SK", "WEB_SITE_ID"
from TPCDS.WEB_SITE

(79) Project [codegen id : 32]
Output [2]: [WEB_SITE_SK#5480, WEB_SITE_ID#5481]
Input [2]: [WEB_SITE_SK#5480, WEB_SITE_ID#5481]

(80) Exchange
Input [2]: [WEB_SITE_SK#5480, WEB_SITE_ID#5481]
Arguments: hashpartitioning(web_site_sk#5480, 5), true, [id=#1844]

(81) Sort [codegen id : 33]
Input [2]: [WEB_SITE_SK#5480, WEB_SITE_ID#5481]
Arguments: [web_site_sk#5480 ASC NULLS FIRST], false, 0

(82) SortMergeJoin [codegen id : 34]
Left keys [1]: [wsr_web_site_sk#5146]
Right keys [1]: [web_site_sk#5480]
Join condition: None

(83) Project [codegen id : 34]
Output [5]: [sales_price#5148, profit#5149, return_amt#5514, net_loss#5515, WEB_SITE_ID#5481]
Input [7]: [wsr_web_site_sk#5146, sales_price#5148, profit#5149, return_amt#5514, net_loss#5515, WEB_SITE_SK#5480, WEB_SITE_ID#5481]

(84) HashAggregate [codegen id : 34]
Input [5]: [sales_price#5148, profit#5149, return_amt#5514, net_loss#5515, WEB_SITE_ID#5481]
Keys [1]: [web_site_id#5481]
Functions [4]: [partial_sum(sales_price#5148), partial_sum(return_amt#5514), partial_sum(profit#5149), partial_sum(net_loss#5515)]
Aggregate Attributes [8]: [sum#5673, isEmpty#5674, sum#5675, isEmpty#5676, sum#5677, isEmpty#5678, sum#5679, isEmpty#5680]
Results [9]: [web_site_id#5481, sum#5681, isEmpty#5682, sum#5683, isEmpty#5684, sum#5685, isEmpty#5686, sum#5687, isEmpty#5688]

(85) Exchange
Input [9]: [web_site_id#5481, sum#5681, isEmpty#5682, sum#5683, isEmpty#5684, sum#5685, isEmpty#5686, sum#5687, isEmpty#5688]
Arguments: hashpartitioning(web_site_id#5481, 5), true, [id=#1853]

(86) HashAggregate [codegen id : 35]
Input [9]: [web_site_id#5481, sum#5681, isEmpty#5682, sum#5683, isEmpty#5684, sum#5685, isEmpty#5686, sum#5687, isEmpty#5688]
Keys [1]: [web_site_id#5481]
Functions [4]: [sum(sales_price#5148), sum(return_amt#5514), sum(profit#5149), sum(net_loss#5515)]
Aggregate Attributes [4]: [sum(sales_price#5148)#5526, sum(return_amt#5514)#5528, sum(profit#5149)#5527, sum(net_loss#5515)#5529]
Results [5]: [sum(sales_price#5148)#5526 AS sales#5158, sum(return_amt#5514)#5528 AS returns#5160, CheckOverflow((promote_precision(cast(sum(profit#5149)#5527 as decimal(38,17))) - promote_precision(cast(sum(net_loss#5515)#5529 as decimal(38,17)))), DecimalType(38,17), true) AS profit#5110, web channel AS channel#5547, concat(web_site, web_site_id#5481) AS id#5548]

(87) Union

(88) Expand [codegen id : 36]
Input [5]: [sales#5126, returns#5128, profit#5104, channel#5533, id#5534]
Arguments: [List(sales#5126, returns#5128, profit#5104, channel#5533, id#5534, 0), List(sales#5126, returns#5128, profit#5104, channel#5533, null, 1), List(sales#5126, returns#5128, profit#5104, null, null, 3)], [sales#5126, returns#5128, profit#5104, channel#5536, id#5537, spark_grouping_id#5535L]

(89) HashAggregate [codegen id : 36]
Input [6]: [sales#5126, returns#5128, profit#5104, channel#5536, id#5537, spark_grouping_id#5535L]
Keys [3]: [channel#5536, id#5537, spark_grouping_id#5535L]
Functions [3]: [partial_sum(sales#5126), partial_sum(returns#5128), partial_sum(profit#5104)]
Aggregate Attributes [6]: [sum#5629, isEmpty#5630, sum#5631, isEmpty#5632, sum#5633, isEmpty#5634]
Results [9]: [channel#5536, id#5537, spark_grouping_id#5535L, sum#5635, isEmpty#5636, sum#5637, isEmpty#5638, sum#5639, isEmpty#5640]

(90) Exchange
Input [9]: [channel#5536, id#5537, spark_grouping_id#5535L, sum#5635, isEmpty#5636, sum#5637, isEmpty#5638, sum#5639, isEmpty#5640]
Arguments: hashpartitioning(channel#5536, id#5537, spark_grouping_id#5535L, 5), true, [id=#1862]

(91) HashAggregate [codegen id : 37]
Input [9]: [channel#5536, id#5537, spark_grouping_id#5535L, sum#5635, isEmpty#5636, sum#5637, isEmpty#5638, sum#5639, isEmpty#5640]
Keys [3]: [channel#5536, id#5537, spark_grouping_id#5535L]
Functions [3]: [sum(sales#5126), sum(returns#5128), sum(profit#5104)]
Aggregate Attributes [3]: [sum(sales#5126)#5530, sum(returns#5128)#5531, sum(profit#5104)#5532]
Results [5]: [channel#5536, id#5537, sum(sales#5126)#5530 AS sales#5111, sum(returns#5128)#5531 AS returns#5112, sum(profit#5104)#5532 AS profit#5113]

(92) TakeOrderedAndProject
Input [5]: [channel#5536, id#5537, sales#5111, returns#5112, profit#5113]
Arguments: 100, [channel#5536 ASC NULLS FIRST, id#5537 ASC NULLS FIRST], [channel#5536, id#5537, sales#5111, returns#5112, profit#5113]


Query q6

Spark SQL

select  a.ca_state state, count(*) cnt
 from customer_address a
     ,customer c
     ,store_sales s
     ,date_dim d
     ,item i
 where       a.ca_address_sk = c.c_current_addr_sk
 	and c.c_customer_sk = s.ss_customer_sk
 	and s.ss_sold_date_sk = d.d_date_sk
 	and s.ss_item_sk = i.i_item_sk
 	and d.d_month_seq =
 	     (select distinct (d_month_seq)
 	      from date_dim
               where d_year = 2001
 	        and d_moy = 1 )
 	and i.i_current_price > 1.2 *
             (select avg(j.i_current_price)
 	     from item j
 	     where j.i_category = i.i_category)
 group by a.ca_state
 having count(*) >= 10
 order by cnt
  limit 100;
 

Spark Plan with Pushdown turned on

== Physical Plan ==
TakeOrderedAndProject (3)
+- * Project (2)
   +- BatchScan (1)


(1) BatchScan
Output [2]: [state#6426, cnt#6427L]
OraPlan: 00 OraSingleQueryBlock [state#6426, cnt#6427L], [oracolumnref(state#6426), oracolumnref(cnt#6427L)], orabinaryopexpression((count(1)#6587L >= 10))
01 +- OraSingleQueryBlock [ca_state#6436 AS state#6426, count(1) AS cnt#6427L, count(1) AS count(1)#6587L], [oraalias(ca_state#6436 AS state#6426), oraalias(count(1) AS cnt#6427L), oraalias(count(1) AS count(1)#6587L)], orabinaryopexpression(((isnotnull(C_CURRENT_ADDR_SK#6445) AND isnotnull(SS_CUSTOMER_SK#6462)) AND (isnotnull(D_MONTH_SEQ#6485) AND (isnotnull(D_MONTH_SEQ#6485) AND (D_MONTH_SEQ#6485 = scalar-subquery#6424 []))))), List(oracolumnref(ca_state#6436))
02    :- OraTableScan TPCDS.CUSTOMER_ADDRESS, [CA_ADDRESS_SK#6428, CA_STATE#6436]
03    :- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#6441, C_CURRENT_ADDR_SK#6445]
04    :- OraTableScan TPCDS.STORE_SALES, [SS_ITEM_SK#6461, SS_CUSTOMER_SK#6462, SS_SOLD_DATE_SK#6459]
05    :- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#6482, D_MONTH_SEQ#6485]
06    +- OraSingleQueryBlock [I_ITEM_SK#6510], [oracolumnref(I_ITEM_SK#6510)], orabinaryopexpression((cast(i_current_price#6515 as decimal(38,20)) > CheckOverflow((1.2000000000000000000000 * promote_precision(avg(i_current_price)#6585)), DecimalType(38,20), true)))
07       +- OraSingleQueryBlock [I_ITEM_SK#6510, I_CURRENT_PRICE#6515, I_CATEGORY#6522, avg(i_current_price)#6585, i_category#6574], [oracolumnref(I_ITEM_SK#6510), oracolumnref(I_CURRENT_PRICE#6515), oracolumnref(I_CATEGORY#6522), oracolumnref(avg(i_current_price)#6585), oracolumnref(i_category#6574)]
08          :- OraSingleQueryBlock [I_ITEM_SK#6510, I_CURRENT_PRICE#6515, I_CATEGORY#6522], [oracolumnref(I_ITEM_SK#6510), oracolumnref(I_CURRENT_PRICE#6515), oracolumnref(I_CATEGORY#6522)], orapostfixunaryopexpression(isnotnull(I_CURRENT_PRICE#6515))
09          :  +- OraTableScan TPCDS.ITEM, [I_ITEM_SK#6510, I_CURRENT_PRICE#6515, I_CATEGORY#6522]
10          +- OraSingleQueryBlock [avg(i_current_price#6567) AS avg(i_current_price)#6585, i_category#6574], [oraalias(avg(i_current_price#6567) AS avg(i_current_price)#6585), oracolumnref(i_category#6574)], orapostfixunaryopexpression(isnotnull(I_CATEGORY#6574)), List(oracolumnref(i_category#6574))
11             +- OraTableScan TPCDS.ITEM, [I_CURRENT_PRICE#6567, I_CATEGORY#6574]
ReadSchema: struct<state:string,cnt:bigint>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 1.2000000000000000000000, 2001.000000000000000000, 1.000000000000000000, 10
oraPushdownSQL: select "state", "cnt"
from ( select "CA_STATE" AS "state", COUNT(1) AS "cnt", COUNT(1) AS "count(1)"
from TPCDS.CUSTOMER_ADDRESS  join TPCDS.CUSTOMER  on ("CA_ADDRESS_SK" = "C_CURRENT_ADDR_SK") join TPCDS.STORE_SALES  on ("C_CUSTOMER_SK" = "SS_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK") join ( select "I_ITEM_SK"
from ( select "I_ITEM_SK", "I_CURRENT_PRICE", "sparkora_0"."I_CATEGORY" AS "I_CATEGORY_1_sparkora", "avg(i_current_price)", "sparkora_1"."I_CATEGORY" AS "I_CATEGORY_2_sparkora"
from ( select "I_ITEM_SK", "I_CURRENT_PRICE", "I_CATEGORY"
from TPCDS.ITEM 
where "I_CURRENT_PRICE" IS NOT NULL ) "sparkora_0" left outer join ( select AVG("I_CURRENT_PRICE") AS "avg(i_current_price)", "I_CATEGORY"
from TPCDS.ITEM 
where "I_CATEGORY" IS NOT NULL group by "I_CATEGORY" ) "sparkora_1" on ("sparkora_0"."I_CATEGORY" = "sparkora_1"."I_CATEGORY") ) 
where ("I_CURRENT_PRICE" > (? * "avg(i_current_price)")) )  on ("SS_ITEM_SK" = "I_ITEM_SK")
where (("C_CURRENT_ADDR_SK" IS NOT NULL AND ("SS_CUSTOMER_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL)) AND ("D_MONTH_SEQ" IS NOT NULL AND ("D_MONTH_SEQ" =  ( select "D_MONTH_SEQ"
from TPCDS.DATE_DIM 
where ((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = ?)) AND ("D_MOY" = ?)) group by "D_MONTH_SEQ" )))) group by "CA_STATE" ) 
where ("count(1)" >= ?)

(2) Project [codegen id : 1]
Output [2]: [state#6426, cnt#6427L]
Input [2]: [state#6426, cnt#6427L]

(3) TakeOrderedAndProject
Input [2]: [state#6426, cnt#6427L]
Arguments: 100, [cnt#6427L ASC NULLS FIRST], [state#6426, cnt#6427L]


Pushed oracle sqls

select "state", "cnt"
from ( select "CA_STATE" AS "state", COUNT(1) AS "cnt", COUNT(1) AS "count(1)"
from TPCDS.CUSTOMER_ADDRESS  join TPCDS.CUSTOMER  on ("CA_ADDRESS_SK" = "C_CURRENT_ADDR_SK") join TPCDS.STORE_SALES  on ("C_CUSTOMER_SK" = "SS_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK") join ( select "I_ITEM_SK"
from ( select "I_ITEM_SK", "I_CURRENT_PRICE", "sparkora_0"."I_CATEGORY" AS "I_CATEGORY_1_sparkora", "avg(i_current_price)", "sparkora_1"."I_CATEGORY" AS "I_CATEGORY_2_sparkora"
from ( select "I_ITEM_SK", "I_CURRENT_PRICE", "I_CATEGORY"
from TPCDS.ITEM 
where "I_CURRENT_PRICE" IS NOT NULL ) "sparkora_0" left outer join ( select AVG("I_CURRENT_PRICE") AS "avg(i_current_price)", "I_CATEGORY"
from TPCDS.ITEM 
where "I_CATEGORY" IS NOT NULL group by "I_CATEGORY" ) "sparkora_1" on ("sparkora_0"."I_CATEGORY" = "sparkora_1"."I_CATEGORY") ) 
where ("I_CURRENT_PRICE" > (1.2000000000000000000000 * "avg(i_current_price)")) )  on ("SS_ITEM_SK" = "I_ITEM_SK")
where (("C_CURRENT_ADDR_SK" IS NOT NULL AND ("SS_CUSTOMER_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL)) AND ("D_MONTH_SEQ" IS NOT NULL AND ("D_MONTH_SEQ" =  ( select "D_MONTH_SEQ"
from TPCDS.DATE_DIM 
where ((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = 2001.000000000000000000)) AND ("D_MOY" = 1.000000000000000000)) group by "D_MONTH_SEQ" )))) group by "CA_STATE" ) 
where ("count(1)" >= 10)

Spark Plan with Pushdown turned off

== Physical Plan ==
TakeOrderedAndProject (41)
+- * Project (40)
   +- * Filter (39)
      +- * HashAggregate (38)
         +- * HashAggregate (37)
            +- * Project (36)
               +- * SortMergeJoin Inner (35)
                  :- * Sort (22)
                  :  +- * Project (21)
                  :     +- * SortMergeJoin Inner (20)
                  :        :- * Sort (15)
                  :        :  +- * Project (14)
                  :        :     +- * SortMergeJoin Inner (13)
                  :        :        :- * Sort (9)
                  :        :        :  +- * Project (8)
                  :        :        :     +- * SortMergeJoin Inner (7)
                  :        :        :        :- * Sort (3)
                  :        :        :        :  +- * Project (2)
                  :        :        :        :     +- BatchScan (1)
                  :        :        :        +- * Sort (6)
                  :        :        :           +- * Filter (5)
                  :        :        :              +- BatchScan (4)
                  :        :        +- * Sort (12)
                  :        :           +- * Filter (11)
                  :        :              +- BatchScan (10)
                  :        +- * Sort (19)
                  :           +- * Project (18)
                  :              +- * Filter (17)
                  :                 +- BatchScan (16)
                  +- * Sort (34)
                     +- * Project (33)
                        +- * Filter (32)
                           +- SortMergeJoin LeftOuter (31)
                              :- * Sort (25)
                              :  +- * Filter (24)
                              :     +- BatchScan (23)
                              +- * Sort (30)
                                 +- * HashAggregate (29)
                                    +- * HashAggregate (28)
                                       +- * Filter (27)
                                          +- BatchScan (26)


(1) BatchScan
Output [2]: [CA_ADDRESS_SK#6220, CA_STATE#6228]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER_ADDRESS, [CA_ADDRESS_SK#6394, CA_STATE#6395], [oracolumnref(CA_ADDRESS_SK#6394), oracolumnref(CA_STATE#6395)]
PartitionSchema: struct<>
ReadSchema: struct<CA_ADDRESS_SK:decimal(38,18),CA_STATE:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CA_ADDRESS_SK", "CA_STATE"
from TPCDS.CUSTOMER_ADDRESS

(2) Project [codegen id : 1]
Output [2]: [CA_ADDRESS_SK#6220, CA_STATE#6228]
Input [2]: [CA_ADDRESS_SK#6220, CA_STATE#6228]

(3) Sort [codegen id : 1]
Input [2]: [CA_ADDRESS_SK#6220, CA_STATE#6228]
Arguments: [ca_address_sk#6220 ASC NULLS FIRST], false, 0

(4) BatchScan
Output [2]: [C_CUSTOMER_SK#6233, C_CURRENT_ADDR_SK#6237]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#6398, C_CURRENT_ADDR_SK#6399], [oracolumnref(C_CUSTOMER_SK#6398), oracolumnref(C_CURRENT_ADDR_SK#6399)], orapostfixunaryopexpression(isnotnull(C_CURRENT_ADDR_SK#6237))
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CURRENT_ADDR_SK:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CURRENT_ADDR_SK"
from TPCDS.CUSTOMER
where "C_CURRENT_ADDR_SK" IS NOT NULL

(5) Filter [codegen id : 2]
Input [2]: [C_CUSTOMER_SK#6233, C_CURRENT_ADDR_SK#6237]
Condition : isnotnull(C_CURRENT_ADDR_SK#6237)

(6) Sort [codegen id : 2]
Input [2]: [C_CUSTOMER_SK#6233, C_CURRENT_ADDR_SK#6237]
Arguments: [c_current_addr_sk#6237 ASC NULLS FIRST], false, 0

(7) SortMergeJoin [codegen id : 3]
Left keys [1]: [ca_address_sk#6220]
Right keys [1]: [c_current_addr_sk#6237]
Join condition: None

(8) Project [codegen id : 3]
Output [2]: [CA_STATE#6228, C_CUSTOMER_SK#6233]
Input [4]: [CA_ADDRESS_SK#6220, CA_STATE#6228, C_CUSTOMER_SK#6233, C_CURRENT_ADDR_SK#6237]

(9) Sort [codegen id : 3]
Input [2]: [CA_STATE#6228, C_CUSTOMER_SK#6233]
Arguments: [c_customer_sk#6233 ASC NULLS FIRST], false, 0

(10) BatchScan
Output [3]: [SS_ITEM_SK#6253, SS_CUSTOMER_SK#6254, SS_SOLD_DATE_SK#6251]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_ITEM_SK#6402, SS_CUSTOMER_SK#6403, SS_SOLD_DATE_SK#6404], [oracolumnref(SS_ITEM_SK#6402), oracolumnref(SS_CUSTOMER_SK#6403), oracolumnref(SS_SOLD_DATE_SK#6404)], orapostfixunaryopexpression(isnotnull(SS_CUSTOMER_SK#6254))
PartitionSchema: struct<SS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<SS_ITEM_SK:decimal(38,18),SS_CUSTOMER_SK:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SS_ITEM_SK", "SS_CUSTOMER_SK", "SS_SOLD_DATE_SK"
from TPCDS.STORE_SALES
where "SS_CUSTOMER_SK" IS NOT NULL and "SS_SOLD_DATE_SK" IS NOT NULL

(11) Filter [codegen id : 4]
Input [3]: [SS_ITEM_SK#6253, SS_CUSTOMER_SK#6254, SS_SOLD_DATE_SK#6251]
Condition : isnotnull(SS_CUSTOMER_SK#6254)

(12) Sort [codegen id : 4]
Input [3]: [SS_ITEM_SK#6253, SS_CUSTOMER_SK#6254, SS_SOLD_DATE_SK#6251]
Arguments: [ss_customer_sk#6254 ASC NULLS FIRST], false, 0

(13) SortMergeJoin [codegen id : 5]
Left keys [1]: [c_customer_sk#6233]
Right keys [1]: [ss_customer_sk#6254]
Join condition: None

(14) Project [codegen id : 5]
Output [3]: [CA_STATE#6228, SS_SOLD_DATE_SK#6251, SS_ITEM_SK#6253]
Input [5]: [CA_STATE#6228, C_CUSTOMER_SK#6233, SS_ITEM_SK#6253, SS_CUSTOMER_SK#6254, SS_SOLD_DATE_SK#6251]

(15) Sort [codegen id : 5]
Input [3]: [CA_STATE#6228, SS_SOLD_DATE_SK#6251, SS_ITEM_SK#6253]
Arguments: [ss_sold_date_sk#6251 ASC NULLS FIRST], false, 0

(16) BatchScan
Output [2]: [D_DATE_SK#6274, D_MONTH_SEQ#6277]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#6408, D_MONTH_SEQ#6409], [oracolumnref(D_DATE_SK#6408), oracolumnref(D_MONTH_SEQ#6409)], orapostfixunaryopexpression(isnotnull(D_MONTH_SEQ#6277))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_MONTH_SEQ:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "D_DATE_SK", "D_MONTH_SEQ"
from TPCDS.DATE_DIM
where "D_MONTH_SEQ" IS NOT NULL

(17) Filter [codegen id : 6]
Input [2]: [D_DATE_SK#6274, D_MONTH_SEQ#6277]
Condition : (isnotnull(D_MONTH_SEQ#6277) AND (D_MONTH_SEQ#6277 = Subquery scalar-subquery#6216, [id=#2032]))

(18) Project [codegen id : 6]
Output [1]: [D_DATE_SK#6274]
Input [2]: [D_DATE_SK#6274, D_MONTH_SEQ#6277]

(19) Sort [codegen id : 6]
Input [1]: [D_DATE_SK#6274]
Arguments: [d_date_sk#6274 ASC NULLS FIRST], false, 0

(20) SortMergeJoin [codegen id : 7]
Left keys [1]: [ss_sold_date_sk#6251]
Right keys [1]: [d_date_sk#6274]
Join condition: None

(21) Project [codegen id : 7]
Output [2]: [CA_STATE#6228, SS_ITEM_SK#6253]
Input [4]: [CA_STATE#6228, SS_SOLD_DATE_SK#6251, SS_ITEM_SK#6253, D_DATE_SK#6274]

(22) Sort [codegen id : 7]
Input [2]: [CA_STATE#6228, SS_ITEM_SK#6253]
Arguments: [ss_item_sk#6253 ASC NULLS FIRST], false, 0

(23) BatchScan
Output [3]: [I_ITEM_SK#6302, I_CURRENT_PRICE#6307, I_CATEGORY#6314]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.ITEM, [I_ITEM_SK#6412, I_CURRENT_PRICE#6413, I_CATEGORY#6414], [oracolumnref(I_ITEM_SK#6412), oracolumnref(I_CURRENT_PRICE#6413), oracolumnref(I_CATEGORY#6414)], orapostfixunaryopexpression(isnotnull(I_CURRENT_PRICE#6307))
PartitionSchema: struct<>
ReadSchema: struct<I_ITEM_SK:decimal(38,18),I_CURRENT_PRICE:decimal(38,18),I_CATEGORY:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "I_ITEM_SK", "I_CURRENT_PRICE", "I_CATEGORY"
from TPCDS.ITEM
where "I_CURRENT_PRICE" IS NOT NULL

(24) Filter [codegen id : 8]
Input [3]: [I_ITEM_SK#6302, I_CURRENT_PRICE#6307, I_CATEGORY#6314]
Condition : isnotnull(I_CURRENT_PRICE#6307)

(25) Sort [codegen id : 8]
Input [3]: [I_ITEM_SK#6302, I_CURRENT_PRICE#6307, I_CATEGORY#6314]
Arguments: [i_category#6314 ASC NULLS FIRST], false, 0

(26) BatchScan
Output [2]: [I_CURRENT_PRICE#6359, I_CATEGORY#6366]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.ITEM, [I_CURRENT_PRICE#6390, I_CATEGORY#6391], [oracolumnref(I_CURRENT_PRICE#6390), oracolumnref(I_CATEGORY#6391)], orapostfixunaryopexpression(isnotnull(I_CATEGORY#6366))
PartitionSchema: struct<>
ReadSchema: struct<I_CURRENT_PRICE:decimal(38,18),I_CATEGORY:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "I_CURRENT_PRICE", "I_CATEGORY"
from TPCDS.ITEM
where "I_CATEGORY" IS NOT NULL

(27) Filter [codegen id : 9]
Input [2]: [I_CURRENT_PRICE#6359, I_CATEGORY#6366]
Condition : isnotnull(i_category#6366)

(28) HashAggregate [codegen id : 9]
Input [2]: [I_CURRENT_PRICE#6359, I_CATEGORY#6366]
Keys [1]: [i_category#6366]
Functions [1]: [partial_avg(i_current_price#6359)]
Aggregate Attributes [2]: [sum#6420, count#6421L]
Results [3]: [i_category#6366, sum#6422, count#6423L]

(29) HashAggregate [codegen id : 9]
Input [3]: [i_category#6366, sum#6422, count#6423L]
Keys [1]: [i_category#6366]
Functions [1]: [avg(i_current_price#6359)]
Aggregate Attributes [1]: [avg(i_current_price#6359)#6376]
Results [2]: [avg(i_current_price#6359)#6376 AS avg(i_current_price)#6377, i_category#6366]

(30) Sort [codegen id : 9]
Input [2]: [avg(i_current_price)#6377, i_category#6366]
Arguments: [i_category#6366 ASC NULLS FIRST], false, 0

(31) SortMergeJoin
Left keys [1]: [i_category#6314]
Right keys [1]: [i_category#6366]
Join condition: None

(32) Filter [codegen id : 10]
Input [5]: [I_ITEM_SK#6302, I_CURRENT_PRICE#6307, I_CATEGORY#6314, avg(i_current_price)#6377, i_category#6366]
Condition : (cast(i_current_price#6307 as decimal(38,20)) > CheckOverflow((1.2000000000000000000000 * promote_precision(avg(i_current_price)#6377)), DecimalType(38,20), true))

(33) Project [codegen id : 10]
Output [1]: [I_ITEM_SK#6302]
Input [5]: [I_ITEM_SK#6302, I_CURRENT_PRICE#6307, I_CATEGORY#6314, avg(i_current_price)#6377, i_category#6366]

(34) Sort [codegen id : 10]
Input [1]: [I_ITEM_SK#6302]
Arguments: [i_item_sk#6302 ASC NULLS FIRST], false, 0

(35) SortMergeJoin [codegen id : 11]
Left keys [1]: [ss_item_sk#6253]
Right keys [1]: [i_item_sk#6302]
Join condition: None

(36) Project [codegen id : 11]
Output [1]: [CA_STATE#6228]
Input [3]: [CA_STATE#6228, SS_ITEM_SK#6253, I_ITEM_SK#6302]

(37) HashAggregate [codegen id : 11]
Input [1]: [CA_STATE#6228]
Keys [1]: [ca_state#6228]
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#6418L]
Results [2]: [ca_state#6228, count#6419L]

(38) HashAggregate [codegen id : 11]
Input [2]: [ca_state#6228, count#6419L]
Keys [1]: [ca_state#6228]
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#6324L]
Results [3]: [ca_state#6228 AS state#6218, count(1)#6324L AS cnt#6219L, count(1)#6324L AS count(1)#6379L]

(39) Filter [codegen id : 11]
Input [3]: [state#6218, cnt#6219L, count(1)#6379L]
Condition : (count(1)#6379L >= 10)

(40) Project [codegen id : 11]
Output [2]: [state#6218, cnt#6219L]
Input [3]: [state#6218, cnt#6219L, count(1)#6379L]

(41) TakeOrderedAndProject
Input [2]: [state#6218, cnt#6219L]
Arguments: 100, [cnt#6219L ASC NULLS FIRST], [state#6218, cnt#6219L]

===== Subqueries =====

Subquery:1 Hosting operator id = 17 Hosting Expression = Subquery scalar-subquery#6216, [id=#2032]
* HashAggregate (46)
+- * HashAggregate (45)
   +- * Project (44)
      +- * Filter (43)
         +- BatchScan (42)


(42) BatchScan
Output [3]: [D_MONTH_SEQ#6329, D_YEAR#6332, D_MOY#6334]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_MONTH_SEQ#6384, D_YEAR#6385, D_MOY#6386], [oracolumnref(D_MONTH_SEQ#6384), oracolumnref(D_YEAR#6385), oracolumnref(D_MOY#6386)], orabinaryopexpression((((isnotnull(D_YEAR#6332) AND isnotnull(D_MOY#6334)) AND (D_YEAR#6332 = 2001.000000000000000000)) AND (D_MOY#6334 = 1.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_MONTH_SEQ:decimal(38,18),D_YEAR:decimal(38,18),D_MOY:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2001.000000000000000000, 1.000000000000000000
oraPushdownSQL: select "D_MONTH_SEQ", "D_YEAR", "D_MOY"
from TPCDS.DATE_DIM
where ((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = ?)) AND ("D_MOY" = ?))

(43) Filter [codegen id : 1]
Input [3]: [D_MONTH_SEQ#6329, D_YEAR#6332, D_MOY#6334]
Condition : (((isnotnull(D_YEAR#6332) AND isnotnull(D_MOY#6334)) AND (D_YEAR#6332 = 2001.000000000000000000)) AND (D_MOY#6334 = 1.000000000000000000))

(44) Project [codegen id : 1]
Output [1]: [D_MONTH_SEQ#6329]
Input [3]: [D_MONTH_SEQ#6329, D_YEAR#6332, D_MOY#6334]

(45) HashAggregate [codegen id : 1]
Input [1]: [D_MONTH_SEQ#6329]
Keys [1]: [d_month_seq#6329]
Functions: []
Aggregate Attributes: []
Results [1]: [d_month_seq#6329]

(46) HashAggregate [codegen id : 1]
Input [1]: [d_month_seq#6329]
Keys [1]: [d_month_seq#6329]
Functions: []
Aggregate Attributes: []
Results [1]: [d_month_seq#6329]



Query q7

Spark SQL

select  i_item_id,
        avg(ss_quantity) agg1,
        avg(ss_list_price) agg2,
        avg(ss_coupon_amt) agg3,
        avg(ss_sales_price) agg4
 from store_sales, customer_demographics, date_dim, item, promotion
 where ss_sold_date_sk = d_date_sk and
       ss_item_sk = i_item_sk and
       ss_cdemo_sk = cd_demo_sk and
       ss_promo_sk = p_promo_sk and
       cd_gender = 'M' and
       cd_marital_status = 'S' and
       cd_education_status = 'College' and
       (p_channel_email = 'N' or p_channel_event = 'N') and
       d_year = 2000
 group by i_item_id
 order by i_item_id
  limit 100;
 

Spark Plan with Pushdown turned on

== Physical Plan ==
TakeOrderedAndProject (3)
+- * Project (2)
   +- BatchScan (1)


(1) BatchScan
Output [5]: [i_item_id#6860, agg1#6795, agg2#6796, agg3#6797, agg4#6798]
OraPlan: 00 OraSingleQueryBlock [i_item_id#6860, avg(ss_quantity#6809) AS agg1#6795, avg(ss_list_price#6811) AS agg2#6796, avg(ss_coupon_amt#6818) AS agg3#6797, avg(ss_sales_price#6812) AS agg4#6798], [oracolumnref(i_item_id#6860), oraalias(avg(ss_quantity#6809) AS agg1#6795), oraalias(avg(ss_list_price#6811) AS agg2#6796), oraalias(avg(ss_coupon_amt#6818) AS agg3#6797), oraalias(avg(ss_sales_price#6812) AS agg4#6798)], orabinaryopexpression(((((isnotnull(SS_CDEMO_SK#6803) AND isnotnull(SS_PROMO_SK#6807)) AND (((((isnotnull(CD_GENDER#6823) AND isnotnull(CD_MARITAL_STATUS#6824)) AND isnotnull(CD_EDUCATION_STATUS#6825)) AND (CD_GENDER#6823 = M)) AND (CD_MARITAL_STATUS#6824 = S)) AND (CD_EDUCATION_STATUS#6825 = College))) AND (isnotnull(D_YEAR#6837) AND (D_YEAR#6837 = 2000.000000000000000000))) AND ((P_CHANNEL_EMAIL#6890 = N) OR (P_CHANNEL_EVENT#6895 = N)))), List(oracolumnref(i_item_id#6860))
01 :- OraTableScan TPCDS.STORE_SALES, [SS_ITEM_SK#6801, SS_CDEMO_SK#6803, SS_PROMO_SK#6807, SS_QUANTITY#6809, SS_LIST_PRICE#6811, SS_SALES_PRICE#6812, SS_COUPON_AMT#6818, SS_SOLD_DATE_SK#6799]
02 :- OraTableScan TPCDS.CUSTOMER_DEMOGRAPHICS, [CD_DEMO_SK#6822, CD_GENDER#6823, CD_MARITAL_STATUS#6824, CD_EDUCATION_STATUS#6825]
03 :- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#6831, D_YEAR#6837]
04 :- OraTableScan TPCDS.ITEM, [I_ITEM_SK#6859, I_ITEM_ID#6860]
05 +- OraTableScan TPCDS.PROMOTION, [P_PROMO_SK#6881, P_CHANNEL_EMAIL#6890, P_CHANNEL_EVENT#6895]
ReadSchema: struct<i_item_id:string,agg1:decimal(38,22),agg2:decimal(38,22),agg3:decimal(38,22),agg4:decimal(38,22)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: M, S, College, 2000.000000000000000000, N, N
oraPushdownSQL: select "I_ITEM_ID", AVG("SS_QUANTITY") AS "agg1", AVG("SS_LIST_PRICE") AS "agg2", AVG("SS_COUPON_AMT") AS "agg3", AVG("SS_SALES_PRICE") AS "agg4"
from TPCDS.STORE_SALES  join TPCDS.CUSTOMER_DEMOGRAPHICS  on ("SS_CDEMO_SK" = "CD_DEMO_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK") join TPCDS.ITEM  on ("SS_ITEM_SK" = "I_ITEM_SK") join TPCDS.PROMOTION  on ("SS_PROMO_SK" = "P_PROMO_SK")
where ((((("SS_CDEMO_SK" IS NOT NULL AND "SS_PROMO_SK" IS NOT NULL) AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ((((("CD_GENDER" IS NOT NULL AND "CD_MARITAL_STATUS" IS NOT NULL) AND "CD_EDUCATION_STATUS" IS NOT NULL) AND ("CD_GENDER" = ?)) AND ("CD_MARITAL_STATUS" = ?)) AND ("CD_EDUCATION_STATUS" = ?))) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) AND (("P_CHANNEL_EMAIL" = ?) OR ("P_CHANNEL_EVENT" = ?))) group by "I_ITEM_ID"

(2) Project [codegen id : 1]
Output [5]: [i_item_id#6860, agg1#6795, agg2#6796, agg3#6797, agg4#6798]
Input [5]: [i_item_id#6860, agg1#6795, agg2#6796, agg3#6797, agg4#6798]

(3) TakeOrderedAndProject
Input [5]: [i_item_id#6860, agg1#6795, agg2#6796, agg3#6797, agg4#6798]
Arguments: 100, [i_item_id#6860 ASC NULLS FIRST], [i_item_id#6860, agg1#6795, agg2#6796, agg3#6797, agg4#6798]


Pushed oracle sqls

select "I_ITEM_ID", AVG("SS_QUANTITY") AS "agg1", AVG("SS_LIST_PRICE") AS "agg2", AVG("SS_COUPON_AMT") AS "agg3", AVG("SS_SALES_PRICE") AS "agg4"
from TPCDS.STORE_SALES  join TPCDS.CUSTOMER_DEMOGRAPHICS  on ("SS_CDEMO_SK" = "CD_DEMO_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK") join TPCDS.ITEM  on ("SS_ITEM_SK" = "I_ITEM_SK") join TPCDS.PROMOTION  on ("SS_PROMO_SK" = "P_PROMO_SK")
where ((((("SS_CDEMO_SK" IS NOT NULL AND "SS_PROMO_SK" IS NOT NULL) AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ((((("CD_GENDER" IS NOT NULL AND "CD_MARITAL_STATUS" IS NOT NULL) AND "CD_EDUCATION_STATUS" IS NOT NULL) AND ("CD_GENDER" = 'M')) AND ("CD_MARITAL_STATUS" = 'S')) AND ("CD_EDUCATION_STATUS" = 'College'))) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2000.000000000000000000))) AND (("P_CHANNEL_EMAIL" = 'N') OR ("P_CHANNEL_EVENT" = 'N'))) group by "I_ITEM_ID"

Spark Plan with Pushdown turned off

== Physical Plan ==
TakeOrderedAndProject (32)
+- * HashAggregate (31)
   +- * HashAggregate (30)
      +- * Project (29)
         +- * SortMergeJoin Inner (28)
            :- * Sort (23)
            :  +- * Project (22)
            :     +- * SortMergeJoin Inner (21)
            :        :- * Sort (17)
            :        :  +- * Project (16)
            :        :     +- * SortMergeJoin Inner (15)
            :        :        :- * Sort (10)
            :        :        :  +- * Project (9)
            :        :        :     +- * SortMergeJoin Inner (8)
            :        :        :        :- * Sort (3)
            :        :        :        :  +- * Filter (2)
            :        :        :        :     +- BatchScan (1)
            :        :        :        +- * Sort (7)
            :        :        :           +- * Project (6)
            :        :        :              +- * Filter (5)
            :        :        :                 +- BatchScan (4)
            :        :        +- * Sort (14)
            :        :           +- * Project (13)
            :        :              +- * Filter (12)
            :        :                 +- BatchScan (11)
            :        +- * Sort (20)
            :           +- * Project (19)
            :              +- BatchScan (18)
            +- * Sort (27)
               +- * Project (26)
                  +- * Filter (25)
                     +- BatchScan (24)


(1) BatchScan
Output [8]: [SS_ITEM_SK#6632, SS_CDEMO_SK#6634, SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649, SS_SOLD_DATE_SK#6630]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_ITEM_SK#6741, SS_CDEMO_SK#6742, SS_PROMO_SK#6743, SS_QUANTITY#6744, SS_LIST_PRICE#6745, SS_SALES_PRICE#6746, SS_COUPON_AMT#6747, SS_SOLD_DATE_SK#6748], [oracolumnref(SS_ITEM_SK#6741), oracolumnref(SS_CDEMO_SK#6742), oracolumnref(SS_PROMO_SK#6743), oracolumnref(SS_QUANTITY#6744), oracolumnref(SS_LIST_PRICE#6745), oracolumnref(SS_SALES_PRICE#6746), oracolumnref(SS_COUPON_AMT#6747), oracolumnref(SS_SOLD_DATE_SK#6748)], orabinaryopexpression((isnotnull(SS_CDEMO_SK#6634) AND isnotnull(SS_PROMO_SK#6638)))
PartitionSchema: struct<SS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<SS_ITEM_SK:decimal(38,18),SS_CDEMO_SK:decimal(38,18),SS_PROMO_SK:decimal(38,18),SS_QUANTITY:decimal(38,18),SS_LIST_PRICE:decimal(38,18),SS_SALES_PRICE:decimal(38,18),SS_COUPON_AMT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SS_ITEM_SK", "SS_CDEMO_SK", "SS_PROMO_SK", "SS_QUANTITY", "SS_LIST_PRICE", "SS_SALES_PRICE", "SS_COUPON_AMT", "SS_SOLD_DATE_SK"
from TPCDS.STORE_SALES
where ("SS_CDEMO_SK" IS NOT NULL AND "SS_PROMO_SK" IS NOT NULL) and "SS_SOLD_DATE_SK" IS NOT NULL

(2) Filter [codegen id : 1]
Input [8]: [SS_ITEM_SK#6632, SS_CDEMO_SK#6634, SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649, SS_SOLD_DATE_SK#6630]
Condition : (isnotnull(SS_CDEMO_SK#6634) AND isnotnull(SS_PROMO_SK#6638))

(3) Sort [codegen id : 1]
Input [8]: [SS_ITEM_SK#6632, SS_CDEMO_SK#6634, SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649, SS_SOLD_DATE_SK#6630]
Arguments: [ss_cdemo_sk#6634 ASC NULLS FIRST], false, 0

(4) BatchScan
Output [4]: [CD_DEMO_SK#6653, CD_GENDER#6654, CD_MARITAL_STATUS#6655, CD_EDUCATION_STATUS#6656]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER_DEMOGRAPHICS, [CD_DEMO_SK#6757, CD_GENDER#6758, CD_MARITAL_STATUS#6759, CD_EDUCATION_STATUS#6760], [oracolumnref(CD_DEMO_SK#6757), oracolumnref(CD_GENDER#6758), oracolumnref(CD_MARITAL_STATUS#6759), oracolumnref(CD_EDUCATION_STATUS#6760)], orabinaryopexpression((((((isnotnull(CD_GENDER#6654) AND isnotnull(CD_MARITAL_STATUS#6655)) AND isnotnull(CD_EDUCATION_STATUS#6656)) AND (CD_GENDER#6654 = M)) AND (CD_MARITAL_STATUS#6655 = S)) AND (CD_EDUCATION_STATUS#6656 = College)))
PartitionSchema: struct<>
ReadSchema: struct<CD_DEMO_SK:decimal(38,18),CD_GENDER:string,CD_MARITAL_STATUS:string,CD_EDUCATION_STATUS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: M, S, College
oraPushdownSQL: select "CD_DEMO_SK", "CD_GENDER", "CD_MARITAL_STATUS", "CD_EDUCATION_STATUS"
from TPCDS.CUSTOMER_DEMOGRAPHICS
where ((((("CD_GENDER" IS NOT NULL AND "CD_MARITAL_STATUS" IS NOT NULL) AND "CD_EDUCATION_STATUS" IS NOT NULL) AND ("CD_GENDER" = ?)) AND ("CD_MARITAL_STATUS" = ?)) AND ("CD_EDUCATION_STATUS" = ?))

(5) Filter [codegen id : 2]
Input [4]: [CD_DEMO_SK#6653, CD_GENDER#6654, CD_MARITAL_STATUS#6655, CD_EDUCATION_STATUS#6656]
Condition : (((((isnotnull(CD_GENDER#6654) AND isnotnull(CD_MARITAL_STATUS#6655)) AND isnotnull(CD_EDUCATION_STATUS#6656)) AND (CD_GENDER#6654 = M)) AND (CD_MARITAL_STATUS#6655 = S)) AND (CD_EDUCATION_STATUS#6656 = College))

(6) Project [codegen id : 2]
Output [1]: [CD_DEMO_SK#6653]
Input [4]: [CD_DEMO_SK#6653, CD_GENDER#6654, CD_MARITAL_STATUS#6655, CD_EDUCATION_STATUS#6656]

(7) Sort [codegen id : 2]
Input [1]: [CD_DEMO_SK#6653]
Arguments: [cd_demo_sk#6653 ASC NULLS FIRST], false, 0

(8) SortMergeJoin [codegen id : 3]
Left keys [1]: [ss_cdemo_sk#6634]
Right keys [1]: [cd_demo_sk#6653]
Join condition: None

(9) Project [codegen id : 3]
Output [7]: [SS_SOLD_DATE_SK#6630, SS_ITEM_SK#6632, SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649]
Input [9]: [SS_ITEM_SK#6632, SS_CDEMO_SK#6634, SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649, SS_SOLD_DATE_SK#6630, CD_DEMO_SK#6653]

(10) Sort [codegen id : 3]
Input [7]: [SS_SOLD_DATE_SK#6630, SS_ITEM_SK#6632, SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649]
Arguments: [ss_sold_date_sk#6630 ASC NULLS FIRST], false, 0

(11) BatchScan
Output [2]: [D_DATE_SK#6662, D_YEAR#6668]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#6765, D_YEAR#6766], [oracolumnref(D_DATE_SK#6765), oracolumnref(D_YEAR#6766)], orabinaryopexpression((isnotnull(D_YEAR#6668) AND (D_YEAR#6668 = 2000.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2000.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(12) Filter [codegen id : 4]
Input [2]: [D_DATE_SK#6662, D_YEAR#6668]
Condition : (isnotnull(D_YEAR#6668) AND (D_YEAR#6668 = 2000.000000000000000000))

(13) Project [codegen id : 4]
Output [1]: [D_DATE_SK#6662]
Input [2]: [D_DATE_SK#6662, D_YEAR#6668]

(14) Sort [codegen id : 4]
Input [1]: [D_DATE_SK#6662]
Arguments: [d_date_sk#6662 ASC NULLS FIRST], false, 0

(15) SortMergeJoin [codegen id : 5]
Left keys [1]: [ss_sold_date_sk#6630]
Right keys [1]: [d_date_sk#6662]
Join condition: None

(16) Project [codegen id : 5]
Output [6]: [SS_ITEM_SK#6632, SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649]
Input [8]: [SS_SOLD_DATE_SK#6630, SS_ITEM_SK#6632, SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649, D_DATE_SK#6662]

(17) Sort [codegen id : 5]
Input [6]: [SS_ITEM_SK#6632, SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649]
Arguments: [ss_item_sk#6632 ASC NULLS FIRST], false, 0

(18) BatchScan
Output [2]: [I_ITEM_SK#6690, I_ITEM_ID#6691]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.ITEM, [I_ITEM_SK#6769, I_ITEM_ID#6770], [oracolumnref(I_ITEM_SK#6769), oracolumnref(I_ITEM_ID#6770)]
PartitionSchema: struct<>
ReadSchema: struct<I_ITEM_SK:decimal(38,18),I_ITEM_ID:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "I_ITEM_SK", "I_ITEM_ID"
from TPCDS.ITEM

(19) Project [codegen id : 6]
Output [2]: [I_ITEM_SK#6690, I_ITEM_ID#6691]
Input [2]: [I_ITEM_SK#6690, I_ITEM_ID#6691]

(20) Sort [codegen id : 6]
Input [2]: [I_ITEM_SK#6690, I_ITEM_ID#6691]
Arguments: [i_item_sk#6690 ASC NULLS FIRST], false, 0

(21) SortMergeJoin [codegen id : 7]
Left keys [1]: [ss_item_sk#6632]
Right keys [1]: [i_item_sk#6690]
Join condition: None

(22) Project [codegen id : 7]
Output [6]: [SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649, I_ITEM_ID#6691]
Input [8]: [SS_ITEM_SK#6632, SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649, I_ITEM_SK#6690, I_ITEM_ID#6691]

(23) Sort [codegen id : 7]
Input [6]: [SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649, I_ITEM_ID#6691]
Arguments: [ss_promo_sk#6638 ASC NULLS FIRST], false, 0

(24) BatchScan
Output [3]: [P_PROMO_SK#6712, P_CHANNEL_EMAIL#6721, P_CHANNEL_EVENT#6726]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.PROMOTION, [P_PROMO_SK#6773, P_CHANNEL_EMAIL#6774, P_CHANNEL_EVENT#6775], [oracolumnref(P_PROMO_SK#6773), oracolumnref(P_CHANNEL_EMAIL#6774), oracolumnref(P_CHANNEL_EVENT#6775)], orabinaryopexpression(((P_CHANNEL_EMAIL#6721 = N) OR (P_CHANNEL_EVENT#6726 = N)))
PartitionSchema: struct<>
ReadSchema: struct<P_PROMO_SK:decimal(38,18),P_CHANNEL_EMAIL:string,P_CHANNEL_EVENT:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: N, N
oraPushdownSQL: select "P_PROMO_SK", "P_CHANNEL_EMAIL", "P_CHANNEL_EVENT"
from TPCDS.PROMOTION
where (("P_CHANNEL_EMAIL" = ?) OR ("P_CHANNEL_EVENT" = ?))

(25) Filter [codegen id : 8]
Input [3]: [P_PROMO_SK#6712, P_CHANNEL_EMAIL#6721, P_CHANNEL_EVENT#6726]
Condition : ((P_CHANNEL_EMAIL#6721 = N) OR (P_CHANNEL_EVENT#6726 = N))

(26) Project [codegen id : 8]
Output [1]: [P_PROMO_SK#6712]
Input [3]: [P_PROMO_SK#6712, P_CHANNEL_EMAIL#6721, P_CHANNEL_EVENT#6726]

(27) Sort [codegen id : 8]
Input [1]: [P_PROMO_SK#6712]
Arguments: [p_promo_sk#6712 ASC NULLS FIRST], false, 0

(28) SortMergeJoin [codegen id : 9]
Left keys [1]: [ss_promo_sk#6638]
Right keys [1]: [p_promo_sk#6712]
Join condition: None

(29) Project [codegen id : 9]
Output [5]: [SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649, I_ITEM_ID#6691]
Input [7]: [SS_PROMO_SK#6638, SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649, I_ITEM_ID#6691, P_PROMO_SK#6712]

(30) HashAggregate [codegen id : 9]
Input [5]: [SS_QUANTITY#6640, SS_LIST_PRICE#6642, SS_SALES_PRICE#6643, SS_COUPON_AMT#6649, I_ITEM_ID#6691]
Keys [1]: [i_item_id#6691]
Functions [4]: [partial_avg(ss_quantity#6640), partial_avg(ss_list_price#6642), partial_avg(ss_coupon_amt#6649), partial_avg(ss_sales_price#6643)]
Aggregate Attributes [8]: [sum#6779, count#6780L, sum#6781, count#6782L, sum#6783, count#6784L, sum#6785, count#6786L]
Results [9]: [i_item_id#6691, sum#6787, count#6788L, sum#6789, count#6790L, sum#6791, count#6792L, sum#6793, count#6794L]

(31) HashAggregate [codegen id : 9]
Input [9]: [i_item_id#6691, sum#6787, count#6788L, sum#6789, count#6790L, sum#6791, count#6792L, sum#6793, count#6794L]
Keys [1]: [i_item_id#6691]
Functions [4]: [avg(ss_quantity#6640), avg(ss_list_price#6642), avg(ss_coupon_amt#6649), avg(ss_sales_price#6643)]
Aggregate Attributes [4]: [avg(ss_quantity#6640)#6731, avg(ss_list_price#6642)#6732, avg(ss_coupon_amt#6649)#6733, avg(ss_sales_price#6643)#6734]
Results [5]: [i_item_id#6691, avg(ss_quantity#6640)#6731 AS agg1#6626, avg(ss_list_price#6642)#6732 AS agg2#6627, avg(ss_coupon_amt#6649)#6733 AS agg3#6628, avg(ss_sales_price#6643)#6734 AS agg4#6629]

(32) TakeOrderedAndProject
Input [5]: [i_item_id#6691, agg1#6626, agg2#6627, agg3#6628, agg4#6629]
Arguments: 100, [i_item_id#6691 ASC NULLS FIRST], [i_item_id#6691, agg1#6626, agg2#6627, agg3#6628, agg4#6629]


Query q8

Spark SQL

select  s_store_name
      ,sum(ss_net_profit)
 from store_sales
     ,date_dim
     ,store,
     (select ca_zip
     from (
      SELECT substr(ca_zip,1,5) ca_zip
      FROM customer_address
      WHERE substr(ca_zip,1,5) IN (
                          '24128','76232','65084','87816','83926','77556',
                          '20548','26231','43848','15126','91137',
                          '61265','98294','25782','17920','18426',
                          '98235','40081','84093','28577','55565',
                          '17183','54601','67897','22752','86284',
                          '18376','38607','45200','21756','29741',
                          '96765','23932','89360','29839','25989',
                          '28898','91068','72550','10390','18845',
                          '47770','82636','41367','76638','86198',
                          '81312','37126','39192','88424','72175',
                          '81426','53672','10445','42666','66864',
                          '66708','41248','48583','82276','18842',
                          '78890','49448','14089','38122','34425',
                          '79077','19849','43285','39861','66162',
                          '77610','13695','99543','83444','83041',
                          '12305','57665','68341','25003','57834',
                          '62878','49130','81096','18840','27700',
                          '23470','50412','21195','16021','76107',
                          '71954','68309','18119','98359','64544',
                          '10336','86379','27068','39736','98569',
                          '28915','24206','56529','57647','54917',
                          '42961','91110','63981','14922','36420',
                          '23006','67467','32754','30903','20260',
                          '31671','51798','72325','85816','68621',
                          '13955','36446','41766','68806','16725',
                          '15146','22744','35850','88086','51649',
                          '18270','52867','39972','96976','63792',
                          '11376','94898','13595','10516','90225',
                          '58943','39371','94945','28587','96576',
                          '57855','28488','26105','83933','25858',
                          '34322','44438','73171','30122','34102',
                          '22685','71256','78451','54364','13354',
                          '45375','40558','56458','28286','45266',
                          '47305','69399','83921','26233','11101',
                          '15371','69913','35942','15882','25631',
                          '24610','44165','99076','33786','70738',
                          '26653','14328','72305','62496','22152',
                          '10144','64147','48425','14663','21076',
                          '18799','30450','63089','81019','68893',
                          '24996','51200','51211','45692','92712',
                          '70466','79994','22437','25280','38935',
                          '71791','73134','56571','14060','19505',
                          '72425','56575','74351','68786','51650',
                          '20004','18383','76614','11634','18906',
                          '15765','41368','73241','76698','78567',
                          '97189','28545','76231','75691','22246',
                          '51061','90578','56691','68014','51103',
                          '94167','57047','14867','73520','15734',
                          '63435','25733','35474','24676','94627',
                          '53535','17879','15559','53268','59166',
                          '11928','59402','33282','45721','43933',
                          '68101','33515','36634','71286','19736',
                          '58058','55253','67473','41918','19515',
                          '36495','19430','22351','77191','91393',
                          '49156','50298','87501','18652','53179',
                          '18767','63193','23968','65164','68880',
                          '21286','72823','58470','67301','13394',
                          '31016','70372','67030','40604','24317',
                          '45748','39127','26065','77721','31029',
                          '31880','60576','24671','45549','13376',
                          '50016','33123','19769','22927','97789',
                          '46081','72151','15723','46136','51949',
                          '68100','96888','64528','14171','79777',
                          '28709','11489','25103','32213','78668',
                          '22245','15798','27156','37930','62971',
                          '21337','51622','67853','10567','38415',
                          '15455','58263','42029','60279','37125',
                          '56240','88190','50308','26859','64457',
                          '89091','82136','62377','36233','63837',
                          '58078','17043','30010','60099','28810',
                          '98025','29178','87343','73273','30469',
                          '64034','39516','86057','21309','90257',
                          '67875','40162','11356','73650','61810',
                          '72013','30431','22461','19512','13375',
                          '55307','30625','83849','68908','26689',
                          '96451','38193','46820','88885','84935',
                          '69035','83144','47537','56616','94983',
                          '48033','69952','25486','61547','27385',
                          '61860','58048','56910','16807','17871',
                          '35258','31387','35458','35576')
     intersect
      select ca_zip
      from (SELECT substr(ca_zip,1,5) ca_zip,count(*) cnt
            FROM customer_address, customer
            WHERE ca_address_sk = c_current_addr_sk and
                  c_preferred_cust_flag='Y'
            group by ca_zip
            having count(*) > 10)A1)A2) V1
 where ss_store_sk = s_store_sk
  and ss_sold_date_sk = d_date_sk
  and d_qoy = 2 and d_year = 1998
  and (substr(s_zip,1,2) = substr(V1.ca_zip,1,2))
 group by s_store_name
 order by s_store_name
  limit 100;
 

Spark Plan with Pushdown turned on

== Physical Plan ==
TakeOrderedAndProject (3)
+- * Project (2)
   +- BatchScan (1)


(1) BatchScan
Output [2]: [s_store_name#7185, sum(ss_net_profit)#7261]
OraPlan: 00 OraSingleQueryBlock [s_store_name#7185, sum(ss_net_profit#7151) AS sum(ss_net_profit)#7261], [oracolumnref(s_store_name#7185), oraalias(sum(ss_net_profit#7151) AS sum(ss_net_profit)#7261)], orabinaryopexpression(((isnotnull(SS_STORE_SK#7136) AND (((isnotnull(D_QOY#7162) AND isnotnull(D_YEAR#7158)) AND (D_QOY#7162 = 2.000000000000000000)) AND (D_YEAR#7158 = 1998.000000000000000000))) AND isnotnull(S_ZIP#7205))), List(oracolumnref(s_store_name#7185))
01 :- OraTableScan TPCDS.STORE_SALES, [SS_STORE_SK#7136, SS_NET_PROFIT#7151, SS_SOLD_DATE_SK#7129]
02 :- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#7152, D_YEAR#7158, D_QOY#7162]
03 :- OraTableScan TPCDS.STORE, [S_STORE_SK#7180, S_STORE_NAME#7185, S_ZIP#7205]
04 +- OraSingleQueryBlock [ca_zip#7126], [oracolumnref(ca_zip#7126)], List(oracolumnref(ca_zip#7126))
05    +- OraSingleQueryBlock [substr(ca_zip#7218, 1, 5) AS ca_zip#7126], [oraalias(substr(ca_zip#7218, 1, 5) AS ca_zip#7126)], orabinaryopexpression(((substr(CA_ZIP#7218, 1, 5) INSET (56910,69952,63792,39371,74351,11101,25003,97189,57834,73134,62377,51200,32754,22752,86379,14171,91110,40162,98569,28709,13394,66162,25733,25782,26065,18383,51949,87343,50298,83849,33786,64528,23470,67030,46136,25280,46820,77721,99076,18426,31880,17871,98235,45748,49156,18652,72013,51622,43848,78567,41248,13695,44165,67853,54917,53179,64034,10567,71791,68908,55565,59402,64147,85816,57855,61547,27700,68100,28810,58263,15723,83933,51103,58058,90578,82276,81096,81426,96451,77556,38607,76638,18906,62971,57047,48425,35576,11928,30625,83444,73520,51650,57647,60099,30122,94983,24128,10445,41368,26233,26859,21756,24676,19849,36420,38193,58470,39127,13595,87501,24317,15455,69399,98025,81019,48033,11376,39516,67875,92712,14867,38122,29741,42961,30469,51211,56458,15559,16021,33123,33282,33515,72823,54601,76698,56240,72175,60279,20004,68806,72325,28488,43933,50412,45200,22246,78668,79777,96765,67301,73273,49448,82636,23932,47305,29839,39192,18799,61265,37125,58943,64457,88424,24610,84935,89360,68893,30431,28898,10336,90257,59166,46081,26105,96888,36634,86284,35258,39972,22927,73241,53268,24206,27385,99543,31671,14663,30903,39861,24996,63089,88086,83921,21076,67897,66708,45721,60576,25103,52867,30450,36233,30010,96576,73171,56571,56575,64544,13955,78451,43285,18119,16725,83041,76107,79994,54364,35942,56691,19769,63435,34102,18845,22744,13354,75691,45549,23968,31387,83144,13375,15765,28577,88190,19736,73650,37930,25989,83926,94898,51798,39736,22437,55253,38415,71256,18376,42029,25858,44438,19515,38935,51649,71954,15882,18767,63193,25486,49130,37126,40604,34425,17043,12305,11634,26653,94167,36446,10516,67473,66864,72425,63981,18842,22461,42666,47770,69035,70372,28587,45266,15371,15798,45375,90225,16807,31016,68014,21337,19505,50016,10144,84093,21286,19430,34322,91068,94945,72305,24671,58048,65084,28545,21195,20548,22245,77191,96976,48583,76231,15734,61810,11356,68621,68786,98359,41367,26689,69913,76614,68101,88885,50308,79077,18270,28915,29178,53672,62878,10390,14922,68341,56529,41766,68309,56616,15126,61860,97789,11489,45692,41918,72151,72550,27156,36495,70738,17879,53535,17920,68880,78890,35850,14089,58078,65164,27068,26231,13376,57665,32213,77610,87816,21309,15146,86198,91137,55307,67467,40558,94627,82136,22351,89091,20260,23006,91393,47537,62496,98294,18840,71286,81312,31029,70466,35458,14060,22685,28286,25631,19512,40081,63837,14328,35474,22152,76232,51061,86057,17183) AND isnotnull(substr(CA_ZIP#7218, 1, 5))) AND (substr(ca_zip#7218, 1, 5) <=> ca_zip#7127)))
06       +- OraTableScan TPCDS.CUSTOMER_ADDRESS, [CA_ZIP#7218]
ReadSchema: struct<s_store_name:string,sum(ss_net_profit):decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 1, 5, 46081, 36634, 18767, 45549, 56571, 68786, 47305, 22752, 16021, 79994, 41918, 47537, 44165, 69913, 43848, 58470, 69035, 22152, 46136, 30903, 10336, 62377, 11928, 18906, 25989, 39371, 97789, 15723, 98294, 88086, 21337, 27068, 91068, 50016, 50298, 13595, 57855, 15146, 21286, 76614, 34425, 72151, 44438, 38607, 53179, 17183, 94945, 81019, 58943, 26653, 88190, 28545, 66708, 51211, 11101, 35850, 18270, 42666, 45266, 67875, 27156, 45721, 30450, 96976, 54917, 18376, 56240, 15371, 81096, 90225, 55253, 83926, 55307, 88424, 22927, 45692, 39972, 69952, 21195, 67853, 79077, 63089, 22744, 65164, 33786, 23932, 96576, 13375, 36420, 16725, 64034, 47770, 15765, 86284, 38193, 94983, 40081, 85816, 78451, 42029, 61547, 71791, 10144, 13354, 37930, 14867, 25103, 51649, 35474, 72013, 58263, 86057, 35258, 17879, 24128, 23470, 20004, 31880, 19505, 98235, 21756, 24317, 22461, 24610, 15882, 54364, 67030, 23968, 73273, 18383, 61265, 72550, 64457, 78668, 83444, 33123, 73520, 39516, 36233, 72325, 62496, 14089, 53535, 31016, 28286, 28577, 10445, 18799, 60279, 18840, 94627, 59166, 12305, 76232, 28898, 78567, 91393, 40162, 49130, 19515, 76107, 74351, 26689, 68908, 75691, 19769, 34322, 28709, 56529, 72175, 26065, 73171, 70372, 45200, 14922, 58078, 77610, 71256, 73134, 70466, 10516, 25858, 98025, 34102, 91110, 10390, 83921, 36446, 11376, 28810, 63435, 64528, 76638, 22245, 30625, 24676, 37125, 17043, 51650, 57047, 53672, 81312, 68100, 89091, 10567, 77191, 41368, 84093, 73241, 62878, 14060, 51798, 62971, 63981, 61860, 56691, 43285, 69399, 61810, 25280, 14171, 31387, 11356, 38935, 15734, 27700, 54601, 22351, 99076, 25486, 59402, 22246, 70738, 68880, 86379, 96888, 18842, 46820, 20260, 37126, 11489, 50308, 11634, 30431, 83933, 33282, 15455, 17920, 72305, 68341, 98569, 38122, 57647, 51622, 26231, 71954, 63193, 68806, 57665, 35576, 24206, 56910, 92712, 13695, 51949, 86198, 25733, 21076, 19736, 65084, 15126, 81426, 49448, 84935, 51200, 56458, 87501, 71286, 97189, 21309, 25003, 68309, 20548, 87343, 14328, 28915, 77721, 19849, 60576, 24996, 30469, 19430, 38415, 67301, 49156, 39127, 28488, 63792, 22685, 82636, 48425, 29178, 14663, 26233, 32754, 72425, 67897, 99543, 27385, 79777, 73650, 43933, 13394, 60099, 41766, 29839, 53268, 78890, 68621, 64544, 51061, 39736, 67467, 52867, 68893, 18119, 26105, 45375, 18426, 31029, 31671, 25782, 45748, 83041, 28587, 88885, 29741, 66162, 35942, 72823, 19512, 36495, 83849, 35458, 17871, 40558, 26859, 41367, 83144, 64147, 91137, 13955, 51103, 76698, 56575, 68014, 96451, 40604, 82136, 23006, 77556, 42961, 18845, 24671, 18652, 25631, 15798, 55565, 87816, 90578, 48033, 39192, 98359, 67473, 56616, 41248, 89360, 58048, 15559, 16807, 76231, 68101, 82276, 63837, 66864, 22437, 33515, 50412, 96765, 13376, 90257, 94167, 32213, 48583, 30122, 39861, 58058, 57834, 94898, 30010, 1, 5, 1, 5, , 1, 5, Y, 10, 2.000000000000000000, 1998.000000000000000000
oraPushdownSQL: select "S_STORE_NAME", SUM("SS_NET_PROFIT") AS "sum(ss_net_profit)"
from TPCDS.STORE_SALES  join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK") join TPCDS.STORE  on ("SS_STORE_SK" = "S_STORE_SK") join ( select "ca_zip"
from ( select SUBSTR("CA_ZIP" , 1 , 5) AS "ca_zip"
from TPCDS.CUSTOMER_ADDRESS 
where ((SUBSTR("CA_ZIP" , ? , ?) IN ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) AND SUBSTR("CA_ZIP" , ? , ?) IS NOT NULL) AND  (COALESCE(SUBSTR("CA_ZIP" , ? , ?) , ?), CASE WHEN SUBSTR("CA_ZIP" , ? , ?) IS NULL THEN 1 ELSE 0 END) IN ( select COALESCE("ca_zip" , ''), CASE WHEN "ca_zip" IS NULL THEN 1 ELSE 0 END
from ( select SUBSTR("CA_ZIP" , 1 , 5) AS "ca_zip", COUNT(1) AS "count(1)"
from TPCDS.CUSTOMER_ADDRESS  join TPCDS.CUSTOMER  on ("CA_ADDRESS_SK" = "C_CURRENT_ADDR_SK")
where (("C_PREFERRED_CUST_FLAG" IS NOT NULL AND ("C_PREFERRED_CUST_FLAG" = ?)) AND "C_CURRENT_ADDR_SK" IS NOT NULL) group by "CA_ZIP" ) 
where ("count(1)" > ?) )) )  group by "ca_zip" )  on (SUBSTR("S_ZIP" , 1 , 2) = SUBSTR("ca_zip" , 1 , 2))
where ((("SS_STORE_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ((("D_QOY" IS NOT NULL AND "D_YEAR" IS NOT NULL) AND ("D_QOY" = ?)) AND ("D_YEAR" = ?))) AND "S_ZIP" IS NOT NULL) group by "S_STORE_NAME"

(2) Project [codegen id : 1]
Output [2]: [s_store_name#7185, sum(ss_net_profit)#7261]
Input [2]: [s_store_name#7185, sum(ss_net_profit)#7261]

(3) TakeOrderedAndProject
Input [2]: [s_store_name#7185, sum(ss_net_profit)#7261]
Arguments: 100, [s_store_name#7185 ASC NULLS FIRST], [s_store_name#7185, sum(ss_net_profit)#7261]


Pushed oracle sqls

select "S_STORE_NAME", SUM("SS_NET_PROFIT") AS "sum(ss_net_profit)"
from TPCDS.STORE_SALES  join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK") join TPCDS.STORE  on ("SS_STORE_SK" = "S_STORE_SK") join ( select "ca_zip"
from ( select SUBSTR("CA_ZIP" , 1 , 5) AS "ca_zip"
from TPCDS.CUSTOMER_ADDRESS 
where ((SUBSTR("CA_ZIP" , 1 , 5) IN ( '46081', '36634', '18767', '45549', '56571', '68786', '47305', '22752', '16021', '79994', '41918', '47537', '44165', '69913', '43848', '58470', '69035', '22152', '46136', '30903', '10336', '62377', '11928', '18906', '25989', '39371', '97789', '15723', '98294', '88086', '21337', '27068', '91068', '50016', '50298', '13595', '57855', '15146', '21286', '76614', '34425', '72151', '44438', '38607', '53179', '17183', '94945', '81019', '58943', '26653', '88190', '28545', '66708', '51211', '11101', '35850', '18270', '42666', '45266', '67875', '27156', '45721', '30450', '96976', '54917', '18376', '56240', '15371', '81096', '90225', '55253', '83926', '55307', '88424', '22927', '45692', '39972', '69952', '21195', '67853', '79077', '63089', '22744', '65164', '33786', '23932', '96576', '13375', '36420', '16725', '64034', '47770', '15765', '86284', '38193', '94983', '40081', '85816', '78451', '42029', '61547', '71791', '10144', '13354', '37930', '14867', '25103', '51649', '35474', '72013', '58263', '86057', '35258', '17879', '24128', '23470', '20004', '31880', '19505', '98235', '21756', '24317', '22461', '24610', '15882', '54364', '67030', '23968', '73273', '18383', '61265', '72550', '64457', '78668', '83444', '33123', '73520', '39516', '36233', '72325', '62496', '14089', '53535', '31016', '28286', '28577', '10445', '18799', '60279', '18840', '94627', '59166', '12305', '76232', '28898', '78567', '91393', '40162', '49130', '19515', '76107', '74351', '26689', '68908', '75691', '19769', '34322', '28709', '56529', '72175', '26065', '73171', '70372', '45200', '14922', '58078', '77610', '71256', '73134', '70466', '10516', '25858', '98025', '34102', '91110', '10390', '83921', '36446', '11376', '28810', '63435', '64528', '76638', '22245', '30625', '24676', '37125', '17043', '51650', '57047', '53672', '81312', '68100', '89091', '10567', '77191', '41368', '84093', '73241', '62878', '14060', '51798', '62971', '63981', '61860', '56691', '43285', '69399', '61810', '25280', '14171', '31387', '11356', '38935', '15734', '27700', '54601', '22351', '99076', '25486', '59402', '22246', '70738', '68880', '86379', '96888', '18842', '46820', '20260', '37126', '11489', '50308', '11634', '30431', '83933', '33282', '15455', '17920', '72305', '68341', '98569', '38122', '57647', '51622', '26231', '71954', '63193', '68806', '57665', '35576', '24206', '56910', '92712', '13695', '51949', '86198', '25733', '21076', '19736', '65084', '15126', '81426', '49448', '84935', '51200', '56458', '87501', '71286', '97189', '21309', '25003', '68309', '20548', '87343', '14328', '28915', '77721', '19849', '60576', '24996', '30469', '19430', '38415', '67301', '49156', '39127', '28488', '63792', '22685', '82636', '48425', '29178', '14663', '26233', '32754', '72425', '67897', '99543', '27385', '79777', '73650', '43933', '13394', '60099', '41766', '29839', '53268', '78890', '68621', '64544', '51061', '39736', '67467', '52867', '68893', '18119', '26105', '45375', '18426', '31029', '31671', '25782', '45748', '83041', '28587', '88885', '29741', '66162', '35942', '72823', '19512', '36495', '83849', '35458', '17871', '40558', '26859', '41367', '83144', '64147', '91137', '13955', '51103', '76698', '56575', '68014', '96451', '40604', '82136', '23006', '77556', '42961', '18845', '24671', '18652', '25631', '15798', '55565', '87816', '90578', '48033', '39192', '98359', '67473', '56616', '41248', '89360', '58048', '15559', '16807', '76231', '68101', '82276', '63837', '66864', '22437', '33515', '50412', '96765', '13376', '90257', '94167', '32213', '48583', '30122', '39861', '58058', '57834', '94898', '30010' ) AND SUBSTR("CA_ZIP" , 1 , 5) IS NOT NULL) AND  (COALESCE(SUBSTR("CA_ZIP" , 1 , 5) , ''), CASE WHEN SUBSTR("CA_ZIP" , 1 , 5) IS NULL THEN 1 ELSE 0 END) IN ( select COALESCE("ca_zip" , ''), CASE WHEN "ca_zip" IS NULL THEN 1 ELSE 0 END
from ( select SUBSTR("CA_ZIP" , 1 , 5) AS "ca_zip", COUNT(1) AS "count(1)"
from TPCDS.CUSTOMER_ADDRESS  join TPCDS.CUSTOMER  on ("CA_ADDRESS_SK" = "C_CURRENT_ADDR_SK")
where (("C_PREFERRED_CUST_FLAG" IS NOT NULL AND ("C_PREFERRED_CUST_FLAG" = 'Y')) AND "C_CURRENT_ADDR_SK" IS NOT NULL) group by "CA_ZIP" ) 
where ("count(1)" > 10) )) )  group by "ca_zip" )  on (SUBSTR("S_ZIP" , 1 , 2) = SUBSTR("ca_zip" , 1 , 2))
where ((("SS_STORE_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ((("D_QOY" IS NOT NULL AND "D_YEAR" IS NOT NULL) AND ("D_QOY" = 2.000000000000000000)) AND ("D_YEAR" = 1998.000000000000000000))) AND "S_ZIP" IS NOT NULL) group by "S_STORE_NAME"

Spark Plan with Pushdown turned off

== Physical Plan ==
TakeOrderedAndProject (43)
+- * HashAggregate (42)
   +- * HashAggregate (41)
      +- * Project (40)
         +- * SortMergeJoin Inner (39)
            :- * Sort (16)
            :  +- * Project (15)
            :     +- * SortMergeJoin Inner (14)
            :        :- * Sort (10)
            :        :  +- * Project (9)
            :        :     +- * SortMergeJoin Inner (8)
            :        :        :- * Sort (3)
            :        :        :  +- * Filter (2)
            :        :        :     +- BatchScan (1)
            :        :        +- * Sort (7)
            :        :           +- * Project (6)
            :        :              +- * Filter (5)
            :        :                 +- BatchScan (4)
            :        +- * Sort (13)
            :           +- * Filter (12)
            :              +- BatchScan (11)
            +- * Sort (38)
               +- * HashAggregate (37)
                  +- * HashAggregate (36)
                     +- * Project (35)
                        +- SortMergeJoin LeftSemi (34)
                           :- * Sort (19)
                           :  +- * Filter (18)
                           :     +- BatchScan (17)
                           +- * Sort (33)
                              +- * Project (32)
                                 +- * Filter (31)
                                    +- * HashAggregate (30)
                                       +- * HashAggregate (29)
                                          +- * Project (28)
                                             +- * SortMergeJoin Inner (27)
                                                :- * Sort (22)
                                                :  +- * Project (21)
                                                :     +- BatchScan (20)
                                                +- * Sort (26)
                                                   +- * Project (25)
                                                      +- * Filter (24)
                                                         +- BatchScan (23)


(1) BatchScan
Output [3]: [SS_STORE_SK#6958, SS_NET_PROFIT#6973, SS_SOLD_DATE_SK#6951]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_STORE_SK#7092, SS_NET_PROFIT#7093, SS_SOLD_DATE_SK#7094], [oracolumnref(SS_STORE_SK#7092), oracolumnref(SS_NET_PROFIT#7093), oracolumnref(SS_SOLD_DATE_SK#7094)], orapostfixunaryopexpression(isnotnull(SS_STORE_SK#6958))
PartitionSchema: struct<SS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<SS_STORE_SK:decimal(38,18),SS_NET_PROFIT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SS_STORE_SK", "SS_NET_PROFIT", "SS_SOLD_DATE_SK"
from TPCDS.STORE_SALES
where "SS_STORE_SK" IS NOT NULL and "SS_SOLD_DATE_SK" IS NOT NULL

(2) Filter [codegen id : 1]
Input [3]: [SS_STORE_SK#6958, SS_NET_PROFIT#6973, SS_SOLD_DATE_SK#6951]
Condition : isnotnull(SS_STORE_SK#6958)

(3) Sort [codegen id : 1]
Input [3]: [SS_STORE_SK#6958, SS_NET_PROFIT#6973, SS_SOLD_DATE_SK#6951]
Arguments: [ss_sold_date_sk#6951 ASC NULLS FIRST], false, 0

(4) BatchScan
Output [3]: [D_DATE_SK#6974, D_YEAR#6980, D_QOY#6984]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#7098, D_YEAR#7099, D_QOY#7100], [oracolumnref(D_DATE_SK#7098), oracolumnref(D_YEAR#7099), oracolumnref(D_QOY#7100)], orabinaryopexpression((((isnotnull(D_QOY#6984) AND isnotnull(D_YEAR#6980)) AND (D_QOY#6984 = 2.000000000000000000)) AND (D_YEAR#6980 = 1998.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18),D_QOY:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2.000000000000000000, 1998.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR", "D_QOY"
from TPCDS.DATE_DIM
where ((("D_QOY" IS NOT NULL AND "D_YEAR" IS NOT NULL) AND ("D_QOY" = ?)) AND ("D_YEAR" = ?))

(5) Filter [codegen id : 2]
Input [3]: [D_DATE_SK#6974, D_YEAR#6980, D_QOY#6984]
Condition : (((isnotnull(D_QOY#6984) AND isnotnull(D_YEAR#6980)) AND (D_QOY#6984 = 2.000000000000000000)) AND (D_YEAR#6980 = 1998.000000000000000000))

(6) Project [codegen id : 2]
Output [1]: [D_DATE_SK#6974]
Input [3]: [D_DATE_SK#6974, D_YEAR#6980, D_QOY#6984]

(7) Sort [codegen id : 2]
Input [1]: [D_DATE_SK#6974]
Arguments: [d_date_sk#6974 ASC NULLS FIRST], false, 0

(8) SortMergeJoin [codegen id : 3]
Left keys [1]: [ss_sold_date_sk#6951]
Right keys [1]: [d_date_sk#6974]
Join condition: None

(9) Project [codegen id : 3]
Output [2]: [SS_STORE_SK#6958, SS_NET_PROFIT#6973]
Input [4]: [SS_STORE_SK#6958, SS_NET_PROFIT#6973, SS_SOLD_DATE_SK#6951, D_DATE_SK#6974]

(10) Sort [codegen id : 3]
Input [2]: [SS_STORE_SK#6958, SS_NET_PROFIT#6973]
Arguments: [ss_store_sk#6958 ASC NULLS FIRST], false, 0

(11) BatchScan
Output [3]: [S_STORE_SK#7002, S_STORE_NAME#7007, S_ZIP#7027]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE, [S_STORE_SK#7104, S_STORE_NAME#7105, S_ZIP#7106], [oracolumnref(S_STORE_SK#7104), oracolumnref(S_STORE_NAME#7105), oracolumnref(S_ZIP#7106)], orapostfixunaryopexpression(isnotnull(S_ZIP#7027))
PartitionSchema: struct<>
ReadSchema: struct<S_STORE_SK:decimal(38,18),S_STORE_NAME:string,S_ZIP:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "S_STORE_SK", "S_STORE_NAME", "S_ZIP"
from TPCDS.STORE
where "S_ZIP" IS NOT NULL

(12) Filter [codegen id : 4]
Input [3]: [S_STORE_SK#7002, S_STORE_NAME#7007, S_ZIP#7027]
Condition : isnotnull(S_ZIP#7027)

(13) Sort [codegen id : 4]
Input [3]: [S_STORE_SK#7002, S_STORE_NAME#7007, S_ZIP#7027]
Arguments: [s_store_sk#7002 ASC NULLS FIRST], false, 0

(14) SortMergeJoin [codegen id : 5]
Left keys [1]: [ss_store_sk#6958]
Right keys [1]: [s_store_sk#7002]
Join condition: None

(15) Project [codegen id : 5]
Output [3]: [SS_NET_PROFIT#6973, S_STORE_NAME#7007, S_ZIP#7027]
Input [5]: [SS_STORE_SK#6958, SS_NET_PROFIT#6973, S_STORE_SK#7002, S_STORE_NAME#7007, S_ZIP#7027]

(16) Sort [codegen id : 5]
Input [3]: [SS_NET_PROFIT#6973, S_STORE_NAME#7007, S_ZIP#7027]
Arguments: [substr(s_zip#7027, 1, 2) ASC NULLS FIRST], false, 0

(17) BatchScan
Output [1]: [CA_ZIP#7040]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER_ADDRESS, [CA_ZIP#7110], [oracolumnref(CA_ZIP#7110)], orabinaryopexpression((substr(CA_ZIP#7040, 1, 5) INSET (56910,69952,63792,39371,74351,11101,25003,97189,57834,73134,62377,51200,32754,22752,86379,14171,91110,40162,98569,28709,13394,66162,25733,25782,26065,18383,51949,87343,50298,83849,33786,64528,23470,67030,46136,25280,46820,77721,99076,18426,31880,17871,98235,45748,49156,18652,72013,51622,43848,78567,41248,13695,44165,67853,54917,53179,64034,10567,71791,68908,55565,59402,64147,85816,57855,61547,27700,68100,28810,58263,15723,83933,51103,58058,90578,82276,81096,81426,96451,77556,38607,76638,18906,62971,57047,48425,35576,11928,30625,83444,73520,51650,57647,60099,30122,94983,24128,10445,41368,26233,26859,21756,24676,19849,36420,38193,58470,39127,13595,87501,24317,15455,69399,98025,81019,48033,11376,39516,67875,92712,14867,38122,29741,42961,30469,51211,56458,15559,16021,33123,33282,33515,72823,54601,76698,56240,72175,60279,20004,68806,72325,28488,43933,50412,45200,22246,78668,79777,96765,67301,73273,49448,82636,23932,47305,29839,39192,18799,61265,37125,58943,64457,88424,24610,84935,89360,68893,30431,28898,10336,90257,59166,46081,26105,96888,36634,86284,35258,39972,22927,73241,53268,24206,27385,99543,31671,14663,30903,39861,24996,63089,88086,83921,21076,67897,66708,45721,60576,25103,52867,30450,36233,30010,96576,73171,56571,56575,64544,13955,78451,43285,18119,16725,83041,76107,79994,54364,35942,56691,19769,63435,34102,18845,22744,13354,75691,45549,23968,31387,83144,13375,15765,28577,88190,19736,73650,37930,25989,83926,94898,51798,39736,22437,55253,38415,71256,18376,42029,25858,44438,19515,38935,51649,71954,15882,18767,63193,25486,49130,37126,40604,34425,17043,12305,11634,26653,94167,36446,10516,67473,66864,72425,63981,18842,22461,42666,47770,69035,70372,28587,45266,15371,15798,45375,90225,16807,31016,68014,21337,19505,50016,10144,84093,21286,19430,34322,91068,94945,72305,24671,58048,65084,28545,21195,20548,22245,77191,96976,48583,76231,15734,61810,11356,68621,68786,98359,41367,26689,69913,76614,68101,88885,50308,79077,18270,28915,29178,53672,62878,10390,14922,68341,56529,41766,68309,56616,15126,61860,97789,11489,45692,41918,72151,72550,27156,36495,70738,17879,53535,17920,68880,78890,35850,14089,58078,65164,27068,26231,13376,57665,32213,77610,87816,21309,15146,86198,91137,55307,67467,40558,94627,82136,22351,89091,20260,23006,91393,47537,62496,98294,18840,71286,81312,31029,70466,35458,14060,22685,28286,25631,19512,40081,63837,14328,35474,22152,76232,51061,86057,17183) AND isnotnull(substr(CA_ZIP#7040, 1, 5))))
PartitionSchema: struct<>
ReadSchema: struct<CA_ZIP:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 1, 5, 46081, 36634, 18767, 45549, 56571, 68786, 47305, 22752, 16021, 79994, 41918, 47537, 44165, 69913, 43848, 58470, 69035, 22152, 46136, 30903, 10336, 62377, 11928, 18906, 25989, 39371, 97789, 15723, 98294, 88086, 21337, 27068, 91068, 50016, 50298, 13595, 57855, 15146, 21286, 76614, 34425, 72151, 44438, 38607, 53179, 17183, 94945, 81019, 58943, 26653, 88190, 28545, 66708, 51211, 11101, 35850, 18270, 42666, 45266, 67875, 27156, 45721, 30450, 96976, 54917, 18376, 56240, 15371, 81096, 90225, 55253, 83926, 55307, 88424, 22927, 45692, 39972, 69952, 21195, 67853, 79077, 63089, 22744, 65164, 33786, 23932, 96576, 13375, 36420, 16725, 64034, 47770, 15765, 86284, 38193, 94983, 40081, 85816, 78451, 42029, 61547, 71791, 10144, 13354, 37930, 14867, 25103, 51649, 35474, 72013, 58263, 86057, 35258, 17879, 24128, 23470, 20004, 31880, 19505, 98235, 21756, 24317, 22461, 24610, 15882, 54364, 67030, 23968, 73273, 18383, 61265, 72550, 64457, 78668, 83444, 33123, 73520, 39516, 36233, 72325, 62496, 14089, 53535, 31016, 28286, 28577, 10445, 18799, 60279, 18840, 94627, 59166, 12305, 76232, 28898, 78567, 91393, 40162, 49130, 19515, 76107, 74351, 26689, 68908, 75691, 19769, 34322, 28709, 56529, 72175, 26065, 73171, 70372, 45200, 14922, 58078, 77610, 71256, 73134, 70466, 10516, 25858, 98025, 34102, 91110, 10390, 83921, 36446, 11376, 28810, 63435, 64528, 76638, 22245, 30625, 24676, 37125, 17043, 51650, 57047, 53672, 81312, 68100, 89091, 10567, 77191, 41368, 84093, 73241, 62878, 14060, 51798, 62971, 63981, 61860, 56691, 43285, 69399, 61810, 25280, 14171, 31387, 11356, 38935, 15734, 27700, 54601, 22351, 99076, 25486, 59402, 22246, 70738, 68880, 86379, 96888, 18842, 46820, 20260, 37126, 11489, 50308, 11634, 30431, 83933, 33282, 15455, 17920, 72305, 68341, 98569, 38122, 57647, 51622, 26231, 71954, 63193, 68806, 57665, 35576, 24206, 56910, 92712, 13695, 51949, 86198, 25733, 21076, 19736, 65084, 15126, 81426, 49448, 84935, 51200, 56458, 87501, 71286, 97189, 21309, 25003, 68309, 20548, 87343, 14328, 28915, 77721, 19849, 60576, 24996, 30469, 19430, 38415, 67301, 49156, 39127, 28488, 63792, 22685, 82636, 48425, 29178, 14663, 26233, 32754, 72425, 67897, 99543, 27385, 79777, 73650, 43933, 13394, 60099, 41766, 29839, 53268, 78890, 68621, 64544, 51061, 39736, 67467, 52867, 68893, 18119, 26105, 45375, 18426, 31029, 31671, 25782, 45748, 83041, 28587, 88885, 29741, 66162, 35942, 72823, 19512, 36495, 83849, 35458, 17871, 40558, 26859, 41367, 83144, 64147, 91137, 13955, 51103, 76698, 56575, 68014, 96451, 40604, 82136, 23006, 77556, 42961, 18845, 24671, 18652, 25631, 15798, 55565, 87816, 90578, 48033, 39192, 98359, 67473, 56616, 41248, 89360, 58048, 15559, 16807, 76231, 68101, 82276, 63837, 66864, 22437, 33515, 50412, 96765, 13376, 90257, 94167, 32213, 48583, 30122, 39861, 58058, 57834, 94898, 30010, 1, 5
oraPushdownSQL: select "CA_ZIP"
from TPCDS.CUSTOMER_ADDRESS
where (SUBSTR("CA_ZIP" , ? , ?) IN ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) AND SUBSTR("CA_ZIP" , ? , ?) IS NOT NULL)

(18) Filter [codegen id : 6]
Input [1]: [CA_ZIP#7040]
Condition : (substr(CA_ZIP#7040, 1, 5) INSET (56910,69952,63792,39371,74351,11101,25003,97189,57834,73134,62377,51200,32754,22752,86379,14171,91110,40162,98569,28709,13394,66162,25733,25782,26065,18383,51949,87343,50298,83849,33786,64528,23470,67030,46136,25280,46820,77721,99076,18426,31880,17871,98235,45748,49156,18652,72013,51622,43848,78567,41248,13695,44165,67853,54917,53179,64034,10567,71791,68908,55565,59402,64147,85816,57855,61547,27700,68100,28810,58263,15723,83933,51103,58058,90578,82276,81096,81426,96451,77556,38607,76638,18906,62971,57047,48425,35576,11928,30625,83444,73520,51650,57647,60099,30122,94983,24128,10445,41368,26233,26859,21756,24676,19849,36420,38193,58470,39127,13595,87501,24317,15455,69399,98025,81019,48033,11376,39516,67875,92712,14867,38122,29741,42961,30469,51211,56458,15559,16021,33123,33282,33515,72823,54601,76698,56240,72175,60279,20004,68806,72325,28488,43933,50412,45200,22246,78668,79777,96765,67301,73273,49448,82636,23932,47305,29839,39192,18799,61265,37125,58943,64457,88424,24610,84935,89360,68893,30431,28898,10336,90257,59166,46081,26105,96888,36634,86284,35258,39972,22927,73241,53268,24206,27385,99543,31671,14663,30903,39861,24996,63089,88086,83921,21076,67897,66708,45721,60576,25103,52867,30450,36233,30010,96576,73171,56571,56575,64544,13955,78451,43285,18119,16725,83041,76107,79994,54364,35942,56691,19769,63435,34102,18845,22744,13354,75691,45549,23968,31387,83144,13375,15765,28577,88190,19736,73650,37930,25989,83926,94898,51798,39736,22437,55253,38415,71256,18376,42029,25858,44438,19515,38935,51649,71954,15882,18767,63193,25486,49130,37126,40604,34425,17043,12305,11634,26653,94167,36446,10516,67473,66864,72425,63981,18842,22461,42666,47770,69035,70372,28587,45266,15371,15798,45375,90225,16807,31016,68014,21337,19505,50016,10144,84093,21286,19430,34322,91068,94945,72305,24671,58048,65084,28545,21195,20548,22245,77191,96976,48583,76231,15734,61810,11356,68621,68786,98359,41367,26689,69913,76614,68101,88885,50308,79077,18270,28915,29178,53672,62878,10390,14922,68341,56529,41766,68309,56616,15126,61860,97789,11489,45692,41918,72151,72550,27156,36495,70738,17879,53535,17920,68880,78890,35850,14089,58078,65164,27068,26231,13376,57665,32213,77610,87816,21309,15146,86198,91137,55307,67467,40558,94627,82136,22351,89091,20260,23006,91393,47537,62496,98294,18840,71286,81312,31029,70466,35458,14060,22685,28286,25631,19512,40081,63837,14328,35474,22152,76232,51061,86057,17183) AND isnotnull(substr(CA_ZIP#7040, 1, 5)))

(19) Sort [codegen id : 6]
Input [1]: [CA_ZIP#7040]
Arguments: [coalesce(substr(ca_zip#7040, 1, 5), ) ASC NULLS FIRST, isnull(substr(ca_zip#7040, 1, 5)) ASC NULLS FIRST], false, 0

(20) BatchScan
Output [2]: [CA_ADDRESS_SK#7044, CA_ZIP#7053]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER_ADDRESS, [CA_ADDRESS_SK#7112, CA_ZIP#7113], [oracolumnref(CA_ADDRESS_SK#7112), oracolumnref(CA_ZIP#7113)]
PartitionSchema: struct<>
ReadSchema: struct<CA_ADDRESS_SK:decimal(38,18),CA_ZIP:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CA_ADDRESS_SK", "CA_ZIP"
from TPCDS.CUSTOMER_ADDRESS

(21) Project [codegen id : 7]
Output [2]: [CA_ADDRESS_SK#7044, CA_ZIP#7053]
Input [2]: [CA_ADDRESS_SK#7044, CA_ZIP#7053]

(22) Sort [codegen id : 7]
Input [2]: [CA_ADDRESS_SK#7044, CA_ZIP#7053]
Arguments: [ca_address_sk#7044 ASC NULLS FIRST], false, 0

(23) BatchScan
Output [2]: [C_CURRENT_ADDR_SK#7061, C_PREFERRED_CUST_FLAG#7067]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CURRENT_ADDR_SK#7116, C_PREFERRED_CUST_FLAG#7117], [oracolumnref(C_CURRENT_ADDR_SK#7116), oracolumnref(C_PREFERRED_CUST_FLAG#7117)], orabinaryopexpression(((isnotnull(C_PREFERRED_CUST_FLAG#7067) AND (C_PREFERRED_CUST_FLAG#7067 = Y)) AND isnotnull(C_CURRENT_ADDR_SK#7061)))
PartitionSchema: struct<>
ReadSchema: struct<C_CURRENT_ADDR_SK:decimal(38,18),C_PREFERRED_CUST_FLAG:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: Y
oraPushdownSQL: select "C_CURRENT_ADDR_SK", "C_PREFERRED_CUST_FLAG"
from TPCDS.CUSTOMER
where (("C_PREFERRED_CUST_FLAG" IS NOT NULL AND ("C_PREFERRED_CUST_FLAG" = ?)) AND "C_CURRENT_ADDR_SK" IS NOT NULL)

(24) Filter [codegen id : 8]
Input [2]: [C_CURRENT_ADDR_SK#7061, C_PREFERRED_CUST_FLAG#7067]
Condition : ((isnotnull(C_PREFERRED_CUST_FLAG#7067) AND (C_PREFERRED_CUST_FLAG#7067 = Y)) AND isnotnull(C_CURRENT_ADDR_SK#7061))

(25) Project [codegen id : 8]
Output [1]: [C_CURRENT_ADDR_SK#7061]
Input [2]: [C_CURRENT_ADDR_SK#7061, C_PREFERRED_CUST_FLAG#7067]

(26) Sort [codegen id : 8]
Input [1]: [C_CURRENT_ADDR_SK#7061]
Arguments: [c_current_addr_sk#7061 ASC NULLS FIRST], false, 0

(27) SortMergeJoin [codegen id : 9]
Left keys [1]: [ca_address_sk#7044]
Right keys [1]: [c_current_addr_sk#7061]
Join condition: None

(28) Project [codegen id : 9]
Output [1]: [CA_ZIP#7053]
Input [3]: [CA_ADDRESS_SK#7044, CA_ZIP#7053, C_CURRENT_ADDR_SK#7061]

(29) HashAggregate [codegen id : 9]
Input [1]: [CA_ZIP#7053]
Keys [1]: [ca_zip#7053]
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#7124L]
Results [2]: [ca_zip#7053, count#7125L]

(30) HashAggregate [codegen id : 9]
Input [2]: [ca_zip#7053, count#7125L]
Keys [1]: [ca_zip#7053]
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#7076L]
Results [2]: [substr(ca_zip#7053, 1, 5) AS ca_zip#6949, count(1)#7076L AS count(1)#7078L]

(31) Filter [codegen id : 9]
Input [2]: [ca_zip#6949, count(1)#7078L]
Condition : (count(1)#7078L > 10)

(32) Project [codegen id : 9]
Output [1]: [ca_zip#6949]
Input [2]: [ca_zip#6949, count(1)#7078L]

(33) Sort [codegen id : 9]
Input [1]: [ca_zip#6949]
Arguments: [coalesce(ca_zip#6949, ) ASC NULLS FIRST, isnull(ca_zip#6949) ASC NULLS FIRST], false, 0

(34) SortMergeJoin
Left keys [2]: [coalesce(substr(ca_zip#7040, 1, 5), ), isnull(substr(ca_zip#7040, 1, 5))]
Right keys [2]: [coalesce(ca_zip#6949, ), isnull(ca_zip#6949)]
Join condition: None

(35) Project [codegen id : 10]
Output [1]: [substr(ca_zip#7040, 1, 5) AS ca_zip#6948]
Input [1]: [CA_ZIP#7040]

(36) HashAggregate [codegen id : 10]
Input [1]: [ca_zip#6948]
Keys [1]: [ca_zip#6948]
Functions: []
Aggregate Attributes: []
Results [1]: [ca_zip#6948]

(37) HashAggregate [codegen id : 10]
Input [1]: [ca_zip#6948]
Keys [1]: [ca_zip#6948]
Functions: []
Aggregate Attributes: []
Results [1]: [ca_zip#6948]

(38) Sort [codegen id : 10]
Input [1]: [ca_zip#6948]
Arguments: [substr(ca_zip#6948, 1, 2) ASC NULLS FIRST], false, 0

(39) SortMergeJoin [codegen id : 11]
Left keys [1]: [substr(s_zip#7027, 1, 2)]
Right keys [1]: [substr(ca_zip#6948, 1, 2)]
Join condition: None

(40) Project [codegen id : 11]
Output [2]: [SS_NET_PROFIT#6973, S_STORE_NAME#7007]
Input [4]: [SS_NET_PROFIT#6973, S_STORE_NAME#7007, S_ZIP#7027, ca_zip#6948]

(41) HashAggregate [codegen id : 11]
Input [2]: [SS_NET_PROFIT#6973, S_STORE_NAME#7007]
Keys [1]: [s_store_name#7007]
Functions [1]: [partial_sum(ss_net_profit#6973)]
Aggregate Attributes [2]: [sum#7120, isEmpty#7121]
Results [3]: [s_store_name#7007, sum#7122, isEmpty#7123]

(42) HashAggregate [codegen id : 11]
Input [3]: [s_store_name#7007, sum#7122, isEmpty#7123]
Keys [1]: [s_store_name#7007]
Functions [1]: [sum(ss_net_profit#6973)]
Aggregate Attributes [1]: [sum(ss_net_profit#6973)#7082]
Results [2]: [s_store_name#7007, sum(ss_net_profit#6973)#7082 AS sum(ss_net_profit)#7083]

(43) TakeOrderedAndProject
Input [2]: [s_store_name#7007, sum(ss_net_profit)#7083]
Arguments: 100, [s_store_name#7007 ASC NULLS FIRST], [s_store_name#7007, sum(ss_net_profit)#7083]


Query q9

Spark SQL

select case when (select count(*)
                  from store_sales
                  where ss_quantity between 1 and 20) > 74129
            then (select avg(ss_ext_discount_amt)
                  from store_sales
                  where ss_quantity between 1 and 20)
            else (select avg(ss_net_paid)
                  from store_sales
                  where ss_quantity between 1 and 20) end bucket1 ,
       case when (select count(*)
                  from store_sales
                  where ss_quantity between 21 and 40) > 122840
            then (select avg(ss_ext_discount_amt)
                  from store_sales
                  where ss_quantity between 21 and 40)
            else (select avg(ss_net_paid)
                  from store_sales
                  where ss_quantity between 21 and 40) end bucket2,
       case when (select count(*)
                  from store_sales
                  where ss_quantity between 41 and 60) > 56580
            then (select avg(ss_ext_discount_amt)
                  from store_sales
                  where ss_quantity between 41 and 60)
            else (select avg(ss_net_paid)
                  from store_sales
                  where ss_quantity between 41 and 60) end bucket3,
       case when (select count(*)
                  from store_sales
                  where ss_quantity between 61 and 80) > 10097
            then (select avg(ss_ext_discount_amt)
                  from store_sales
                  where ss_quantity between 61 and 80)
            else (select avg(ss_net_paid)
                  from store_sales
                  where ss_quantity between 61 and 80) end bucket4,
       case when (select count(*)
                  from store_sales
                  where ss_quantity between 81 and 100) > 165306
            then (select avg(ss_ext_discount_amt)
                  from store_sales
                  where ss_quantity between 81 and 100)
            else (select avg(ss_net_paid)
                  from store_sales
                  where ss_quantity between 81 and 100) end bucket5
from reason
where r_reason_sk = 1
 

Spark Plan with Pushdown turned on

== Physical Plan ==
* Project (2)
+- BatchScan (1)


(1) BatchScan
Output [5]: [bucket1#7866, bucket2#7870, bucket3#7874, bucket4#7878, bucket5#7882]
OraPlan: 00 OraSingleQueryBlock [CASE WHEN (scalar-subquery#7863 [] > 74129) THEN scalar-subquery#7864 [] ELSE scalar-subquery#7865 [] END AS bucket1#7866, CASE WHEN (scalar-subquery#7867 [] > 122840) THEN scalar-subquery#7868 [] ELSE scalar-subquery#7869 [] END AS bucket2#7870, CASE WHEN (scalar-subquery#7871 [] > 56580) THEN scalar-subquery#7872 [] ELSE scalar-subquery#7873 [] END AS bucket3#7874, CASE WHEN (scalar-subquery#7875 [] > 10097) THEN scalar-subquery#7876 [] ELSE scalar-subquery#7877 [] END AS bucket4#7878, CASE WHEN (scalar-subquery#7879 [] > 165306) THEN scalar-subquery#7880 [] ELSE scalar-subquery#7881 [] END AS bucket5#7882], [oraalias(CASE WHEN (scalar-subquery#7863 [] > 74129) THEN scalar-subquery#7864 [] ELSE scalar-subquery#7865 [] END AS bucket1#7866), oraalias(CASE WHEN (scalar-subquery#7867 [] > 122840) THEN scalar-subquery#7868 [] ELSE scalar-subquery#7869 [] END AS bucket2#7870), oraalias(CASE WHEN (scalar-subquery#7871 [] > 56580) THEN scalar-subquery#7872 [] ELSE scalar-subquery#7873 [] END AS bucket3#7874), oraalias(CASE WHEN (scalar-subquery#7875 [] > 10097) THEN scalar-subquery#7876 [] ELSE scalar-subquery#7877 [] END AS bucket4#7878), oraalias(CASE WHEN (scalar-subquery#7879 [] > 165306) THEN scalar-subquery#7880 [] ELSE scalar-subquery#7881 [] END AS bucket5#7882)], orabinaryopexpression((R_REASON_SK#7883 = 1.000000000000000000))
01 +- OraTableScan TPCDS.REASON, [R_REASON_SK#7883]
ReadSchema: struct<bucket1:decimal(38,22),bucket2:decimal(38,22),bucket3:decimal(38,22),bucket4:decimal(38,22),bucket5:decimal(38,22)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 1.000000000000000000, 20.000000000000000000, 1.000000000000000000, 20.000000000000000000, 1.000000000000000000, 20.000000000000000000, 21.000000000000000000, 40.000000000000000000, 21.000000000000000000, 40.000000000000000000, 21.000000000000000000, 40.000000000000000000, 41.000000000000000000, 60.000000000000000000, 41.000000000000000000, 60.000000000000000000, 41.000000000000000000, 60.000000000000000000, 61.000000000000000000, 80.000000000000000000, 61.000000000000000000, 80.000000000000000000, 61.000000000000000000, 80.000000000000000000, 81.000000000000000000, 100.000000000000000000, 81.000000000000000000, 100.000000000000000000, 81.000000000000000000, 100.000000000000000000, 1.000000000000000000
oraPushdownSQL: select CASE WHEN ( ( select COUNT(1) AS "count(1)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) > 74129) THEN  ( select AVG("SS_EXT_DISCOUNT_AMT") AS "avg(ss_ext_discount_amt)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) ELSE  ( select AVG("SS_NET_PAID") AS "avg(ss_net_paid)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) END AS "bucket1", CASE WHEN ( ( select COUNT(1) AS "count(1)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) > 122840) THEN  ( select AVG("SS_EXT_DISCOUNT_AMT") AS "avg(ss_ext_discount_amt)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) ELSE  ( select AVG("SS_NET_PAID") AS "avg(ss_net_paid)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) END AS "bucket2", CASE WHEN ( ( select COUNT(1) AS "count(1)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) > 56580) THEN  ( select AVG("SS_EXT_DISCOUNT_AMT") AS "avg(ss_ext_discount_amt)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) ELSE  ( select AVG("SS_NET_PAID") AS "avg(ss_net_paid)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) END AS "bucket3", CASE WHEN ( ( select COUNT(1) AS "count(1)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) > 10097) THEN  ( select AVG("SS_EXT_DISCOUNT_AMT") AS "avg(ss_ext_discount_amt)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) ELSE  ( select AVG("SS_NET_PAID") AS "avg(ss_net_paid)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) END AS "bucket4", CASE WHEN ( ( select COUNT(1) AS "count(1)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) > 165306) THEN  ( select AVG("SS_EXT_DISCOUNT_AMT") AS "avg(ss_ext_discount_amt)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) ELSE  ( select AVG("SS_NET_PAID") AS "avg(ss_net_paid)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?)) ) END AS "bucket5"
from TPCDS.REASON 
where ("R_REASON_SK" = ?)

(2) Project [codegen id : 1]
Output [5]: [bucket1#7866, bucket2#7870, bucket3#7874, bucket4#7878, bucket5#7882]
Input [5]: [bucket1#7866, bucket2#7870, bucket3#7874, bucket4#7878, bucket5#7882]


Pushed oracle sqls

select CASE WHEN ( ( select COUNT(1) AS "count(1)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 1.000000000000000000)) AND ("SS_QUANTITY" <= 20.000000000000000000)) ) > 74129) THEN  ( select AVG("SS_EXT_DISCOUNT_AMT") AS "avg(ss_ext_discount_amt)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 1.000000000000000000)) AND ("SS_QUANTITY" <= 20.000000000000000000)) ) ELSE  ( select AVG("SS_NET_PAID") AS "avg(ss_net_paid)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 1.000000000000000000)) AND ("SS_QUANTITY" <= 20.000000000000000000)) ) END AS "bucket1", CASE WHEN ( ( select COUNT(1) AS "count(1)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 21.000000000000000000)) AND ("SS_QUANTITY" <= 40.000000000000000000)) ) > 122840) THEN  ( select AVG("SS_EXT_DISCOUNT_AMT") AS "avg(ss_ext_discount_amt)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 21.000000000000000000)) AND ("SS_QUANTITY" <= 40.000000000000000000)) ) ELSE  ( select AVG("SS_NET_PAID") AS "avg(ss_net_paid)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 21.000000000000000000)) AND ("SS_QUANTITY" <= 40.000000000000000000)) ) END AS "bucket2", CASE WHEN ( ( select COUNT(1) AS "count(1)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 41.000000000000000000)) AND ("SS_QUANTITY" <= 60.000000000000000000)) ) > 56580) THEN  ( select AVG("SS_EXT_DISCOUNT_AMT") AS "avg(ss_ext_discount_amt)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 41.000000000000000000)) AND ("SS_QUANTITY" <= 60.000000000000000000)) ) ELSE  ( select AVG("SS_NET_PAID") AS "avg(ss_net_paid)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 41.000000000000000000)) AND ("SS_QUANTITY" <= 60.000000000000000000)) ) END AS "bucket3", CASE WHEN ( ( select COUNT(1) AS "count(1)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 61.000000000000000000)) AND ("SS_QUANTITY" <= 80.000000000000000000)) ) > 10097) THEN  ( select AVG("SS_EXT_DISCOUNT_AMT") AS "avg(ss_ext_discount_amt)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 61.000000000000000000)) AND ("SS_QUANTITY" <= 80.000000000000000000)) ) ELSE  ( select AVG("SS_NET_PAID") AS "avg(ss_net_paid)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 61.000000000000000000)) AND ("SS_QUANTITY" <= 80.000000000000000000)) ) END AS "bucket4", CASE WHEN ( ( select COUNT(1) AS "count(1)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 81.000000000000000000)) AND ("SS_QUANTITY" <= 100.000000000000000000)) ) > 165306) THEN  ( select AVG("SS_EXT_DISCOUNT_AMT") AS "avg(ss_ext_discount_amt)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 81.000000000000000000)) AND ("SS_QUANTITY" <= 100.000000000000000000)) ) ELSE  ( select AVG("SS_NET_PAID") AS "avg(ss_net_paid)"
from TPCDS.STORE_SALES 
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= 81.000000000000000000)) AND ("SS_QUANTITY" <= 100.000000000000000000)) ) END AS "bucket5"
from TPCDS.REASON 
where ("R_REASON_SK" = 1.000000000000000000)

Spark Plan with Pushdown turned off

== Physical Plan ==
* Project (3)
+- * Filter (2)
   +- BatchScan (1)


(1) BatchScan
Output [1]: [R_REASON_SK#7318]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.REASON, [R_REASON_SK#7751], [oracolumnref(R_REASON_SK#7751)], orabinaryopexpression((R_REASON_SK#7318 = 1.000000000000000000))
PartitionSchema: struct<>
ReadSchema: struct<R_REASON_SK:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 1.000000000000000000
oraPushdownSQL: select "R_REASON_SK"
from TPCDS.REASON
where ("R_REASON_SK" = ?)

(2) Filter [codegen id : 1]
Input [1]: [R_REASON_SK#7318]
Condition : (R_REASON_SK#7318 = 1.000000000000000000)

(3) Project [codegen id : 1]
Output [5]: [CASE WHEN (Subquery scalar-subquery#7298, [id=#2610] > 74129) THEN Subquery scalar-subquery#7299, [id=#2626] ELSE Subquery scalar-subquery#7300, [id=#2642] END AS bucket1#7301, CASE WHEN (Subquery scalar-subquery#7302, [id=#2658] > 122840) THEN Subquery scalar-subquery#7303, [id=#2674] ELSE Subquery scalar-subquery#7304, [id=#2690] END AS bucket2#7305, CASE WHEN (Subquery scalar-subquery#7306, [id=#2706] > 56580) THEN Subquery scalar-subquery#7307, [id=#2722] ELSE Subquery scalar-subquery#7308, [id=#2738] END AS bucket3#7309, CASE WHEN (Subquery scalar-subquery#7310, [id=#2754] > 10097) THEN Subquery scalar-subquery#7311, [id=#2770] ELSE Subquery scalar-subquery#7312, [id=#2786] END AS bucket4#7313, CASE WHEN (Subquery scalar-subquery#7314, [id=#2802] > 165306) THEN Subquery scalar-subquery#7315, [id=#2818] ELSE Subquery scalar-subquery#7316, [id=#2834] END AS bucket5#7317]
Input [1]: [R_REASON_SK#7318]

===== Subqueries =====

Subquery:1 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7298, [id=#2610]
* HashAggregate (8)
+- * HashAggregate (7)
   +- * Project (6)
      +- * Filter (5)
         +- BatchScan (4)


(4) BatchScan
Output [1]: [SS_QUANTITY#7331]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7701], [oracolumnref(SS_QUANTITY#7701)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7331) AND (SS_QUANTITY#7331 >= 1.000000000000000000)) AND (SS_QUANTITY#7331 <= 20.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 1.000000000000000000, 20.000000000000000000
oraPushdownSQL: select "SS_QUANTITY"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(5) Filter [codegen id : 1]
Input [1]: [SS_QUANTITY#7331]
Condition : ((isnotnull(SS_QUANTITY#7331) AND (SS_QUANTITY#7331 >= 1.000000000000000000)) AND (SS_QUANTITY#7331 <= 20.000000000000000000))

(6) Project [codegen id : 1]
Output: []
Input [1]: [SS_QUANTITY#7331]

(7) HashAggregate [codegen id : 1]
Input: []
Keys: []
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#7753L]
Results [1]: [count#7754L]

(8) HashAggregate [codegen id : 1]
Input [1]: [count#7754L]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#7344L]
Results [1]: [count(1)#7344L AS count(1)#7345L]

Subquery:2 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7299, [id=#2626]
* HashAggregate (13)
+- * HashAggregate (12)
   +- * Project (11)
      +- * Filter (10)
         +- BatchScan (9)


(9) BatchScan
Output [2]: [SS_QUANTITY#7356, SS_EXT_DISCOUNT_AMT#7360]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7703, SS_EXT_DISCOUNT_AMT#7704], [oracolumnref(SS_QUANTITY#7703), oracolumnref(SS_EXT_DISCOUNT_AMT#7704)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7356) AND (SS_QUANTITY#7356 >= 1.000000000000000000)) AND (SS_QUANTITY#7356 <= 20.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18),SS_EXT_DISCOUNT_AMT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 1.000000000000000000, 20.000000000000000000
oraPushdownSQL: select "SS_QUANTITY", "SS_EXT_DISCOUNT_AMT"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(10) Filter [codegen id : 1]
Input [2]: [SS_QUANTITY#7356, SS_EXT_DISCOUNT_AMT#7360]
Condition : ((isnotnull(SS_QUANTITY#7356) AND (SS_QUANTITY#7356 >= 1.000000000000000000)) AND (SS_QUANTITY#7356 <= 20.000000000000000000))

(11) Project [codegen id : 1]
Output [1]: [SS_EXT_DISCOUNT_AMT#7360]
Input [2]: [SS_QUANTITY#7356, SS_EXT_DISCOUNT_AMT#7360]

(12) HashAggregate [codegen id : 1]
Input [1]: [SS_EXT_DISCOUNT_AMT#7360]
Keys: []
Functions [1]: [partial_avg(ss_ext_discount_amt#7360)]
Aggregate Attributes [2]: [sum#7755, count#7756L]
Results [2]: [sum#7757, count#7758L]

(13) HashAggregate [codegen id : 1]
Input [2]: [sum#7757, count#7758L]
Keys: []
Functions [1]: [avg(ss_ext_discount_amt#7360)]
Aggregate Attributes [1]: [avg(ss_ext_discount_amt#7360)#7369]
Results [1]: [avg(ss_ext_discount_amt#7360)#7369 AS avg(ss_ext_discount_amt)#7370]

Subquery:3 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7300, [id=#2642]
* HashAggregate (18)
+- * HashAggregate (17)
   +- * Project (16)
      +- * Filter (15)
         +- BatchScan (14)


(14) BatchScan
Output [2]: [SS_QUANTITY#7381, SS_NET_PAID#7391]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7707, SS_NET_PAID#7708], [oracolumnref(SS_QUANTITY#7707), oracolumnref(SS_NET_PAID#7708)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7381) AND (SS_QUANTITY#7381 >= 1.000000000000000000)) AND (SS_QUANTITY#7381 <= 20.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18),SS_NET_PAID:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 1.000000000000000000, 20.000000000000000000
oraPushdownSQL: select "SS_QUANTITY", "SS_NET_PAID"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(15) Filter [codegen id : 1]
Input [2]: [SS_QUANTITY#7381, SS_NET_PAID#7391]
Condition : ((isnotnull(SS_QUANTITY#7381) AND (SS_QUANTITY#7381 >= 1.000000000000000000)) AND (SS_QUANTITY#7381 <= 20.000000000000000000))

(16) Project [codegen id : 1]
Output [1]: [SS_NET_PAID#7391]
Input [2]: [SS_QUANTITY#7381, SS_NET_PAID#7391]

(17) HashAggregate [codegen id : 1]
Input [1]: [SS_NET_PAID#7391]
Keys: []
Functions [1]: [partial_avg(ss_net_paid#7391)]
Aggregate Attributes [2]: [sum#7759, count#7760L]
Results [2]: [sum#7761, count#7762L]

(18) HashAggregate [codegen id : 1]
Input [2]: [sum#7761, count#7762L]
Keys: []
Functions [1]: [avg(ss_net_paid#7391)]
Aggregate Attributes [1]: [avg(ss_net_paid#7391)#7394]
Results [1]: [avg(ss_net_paid#7391)#7394 AS avg(ss_net_paid)#7395]

Subquery:4 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7302, [id=#2658]
* HashAggregate (23)
+- * HashAggregate (22)
   +- * Project (21)
      +- * Filter (20)
         +- BatchScan (19)


(19) BatchScan
Output [1]: [SS_QUANTITY#7406]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7711], [oracolumnref(SS_QUANTITY#7711)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7406) AND (SS_QUANTITY#7406 >= 21.000000000000000000)) AND (SS_QUANTITY#7406 <= 40.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 21.000000000000000000, 40.000000000000000000
oraPushdownSQL: select "SS_QUANTITY"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(20) Filter [codegen id : 1]
Input [1]: [SS_QUANTITY#7406]
Condition : ((isnotnull(SS_QUANTITY#7406) AND (SS_QUANTITY#7406 >= 21.000000000000000000)) AND (SS_QUANTITY#7406 <= 40.000000000000000000))

(21) Project [codegen id : 1]
Output: []
Input [1]: [SS_QUANTITY#7406]

(22) HashAggregate [codegen id : 1]
Input: []
Keys: []
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#7763L]
Results [1]: [count#7764L]

(23) HashAggregate [codegen id : 1]
Input [1]: [count#7764L]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#7419L]
Results [1]: [count(1)#7419L AS count(1)#7420L]

Subquery:5 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7303, [id=#2674]
* HashAggregate (28)
+- * HashAggregate (27)
   +- * Project (26)
      +- * Filter (25)
         +- BatchScan (24)


(24) BatchScan
Output [2]: [SS_QUANTITY#7431, SS_EXT_DISCOUNT_AMT#7435]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7713, SS_EXT_DISCOUNT_AMT#7714], [oracolumnref(SS_QUANTITY#7713), oracolumnref(SS_EXT_DISCOUNT_AMT#7714)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7431) AND (SS_QUANTITY#7431 >= 21.000000000000000000)) AND (SS_QUANTITY#7431 <= 40.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18),SS_EXT_DISCOUNT_AMT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 21.000000000000000000, 40.000000000000000000
oraPushdownSQL: select "SS_QUANTITY", "SS_EXT_DISCOUNT_AMT"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(25) Filter [codegen id : 1]
Input [2]: [SS_QUANTITY#7431, SS_EXT_DISCOUNT_AMT#7435]
Condition : ((isnotnull(SS_QUANTITY#7431) AND (SS_QUANTITY#7431 >= 21.000000000000000000)) AND (SS_QUANTITY#7431 <= 40.000000000000000000))

(26) Project [codegen id : 1]
Output [1]: [SS_EXT_DISCOUNT_AMT#7435]
Input [2]: [SS_QUANTITY#7431, SS_EXT_DISCOUNT_AMT#7435]

(27) HashAggregate [codegen id : 1]
Input [1]: [SS_EXT_DISCOUNT_AMT#7435]
Keys: []
Functions [1]: [partial_avg(ss_ext_discount_amt#7435)]
Aggregate Attributes [2]: [sum#7765, count#7766L]
Results [2]: [sum#7767, count#7768L]

(28) HashAggregate [codegen id : 1]
Input [2]: [sum#7767, count#7768L]
Keys: []
Functions [1]: [avg(ss_ext_discount_amt#7435)]
Aggregate Attributes [1]: [avg(ss_ext_discount_amt#7435)#7444]
Results [1]: [avg(ss_ext_discount_amt#7435)#7444 AS avg(ss_ext_discount_amt)#7445]

Subquery:6 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7304, [id=#2690]
* HashAggregate (33)
+- * HashAggregate (32)
   +- * Project (31)
      +- * Filter (30)
         +- BatchScan (29)


(29) BatchScan
Output [2]: [SS_QUANTITY#7456, SS_NET_PAID#7466]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7717, SS_NET_PAID#7718], [oracolumnref(SS_QUANTITY#7717), oracolumnref(SS_NET_PAID#7718)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7456) AND (SS_QUANTITY#7456 >= 21.000000000000000000)) AND (SS_QUANTITY#7456 <= 40.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18),SS_NET_PAID:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 21.000000000000000000, 40.000000000000000000
oraPushdownSQL: select "SS_QUANTITY", "SS_NET_PAID"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(30) Filter [codegen id : 1]
Input [2]: [SS_QUANTITY#7456, SS_NET_PAID#7466]
Condition : ((isnotnull(SS_QUANTITY#7456) AND (SS_QUANTITY#7456 >= 21.000000000000000000)) AND (SS_QUANTITY#7456 <= 40.000000000000000000))

(31) Project [codegen id : 1]
Output [1]: [SS_NET_PAID#7466]
Input [2]: [SS_QUANTITY#7456, SS_NET_PAID#7466]

(32) HashAggregate [codegen id : 1]
Input [1]: [SS_NET_PAID#7466]
Keys: []
Functions [1]: [partial_avg(ss_net_paid#7466)]
Aggregate Attributes [2]: [sum#7769, count#7770L]
Results [2]: [sum#7771, count#7772L]

(33) HashAggregate [codegen id : 1]
Input [2]: [sum#7771, count#7772L]
Keys: []
Functions [1]: [avg(ss_net_paid#7466)]
Aggregate Attributes [1]: [avg(ss_net_paid#7466)#7469]
Results [1]: [avg(ss_net_paid#7466)#7469 AS avg(ss_net_paid)#7470]

Subquery:7 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7306, [id=#2706]
* HashAggregate (38)
+- * HashAggregate (37)
   +- * Project (36)
      +- * Filter (35)
         +- BatchScan (34)


(34) BatchScan
Output [1]: [SS_QUANTITY#7481]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7721], [oracolumnref(SS_QUANTITY#7721)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7481) AND (SS_QUANTITY#7481 >= 41.000000000000000000)) AND (SS_QUANTITY#7481 <= 60.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 41.000000000000000000, 60.000000000000000000
oraPushdownSQL: select "SS_QUANTITY"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(35) Filter [codegen id : 1]
Input [1]: [SS_QUANTITY#7481]
Condition : ((isnotnull(SS_QUANTITY#7481) AND (SS_QUANTITY#7481 >= 41.000000000000000000)) AND (SS_QUANTITY#7481 <= 60.000000000000000000))

(36) Project [codegen id : 1]
Output: []
Input [1]: [SS_QUANTITY#7481]

(37) HashAggregate [codegen id : 1]
Input: []
Keys: []
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#7773L]
Results [1]: [count#7774L]

(38) HashAggregate [codegen id : 1]
Input [1]: [count#7774L]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#7494L]
Results [1]: [count(1)#7494L AS count(1)#7495L]

Subquery:8 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7307, [id=#2722]
* HashAggregate (43)
+- * HashAggregate (42)
   +- * Project (41)
      +- * Filter (40)
         +- BatchScan (39)


(39) BatchScan
Output [2]: [SS_QUANTITY#7506, SS_EXT_DISCOUNT_AMT#7510]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7723, SS_EXT_DISCOUNT_AMT#7724], [oracolumnref(SS_QUANTITY#7723), oracolumnref(SS_EXT_DISCOUNT_AMT#7724)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7506) AND (SS_QUANTITY#7506 >= 41.000000000000000000)) AND (SS_QUANTITY#7506 <= 60.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18),SS_EXT_DISCOUNT_AMT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 41.000000000000000000, 60.000000000000000000
oraPushdownSQL: select "SS_QUANTITY", "SS_EXT_DISCOUNT_AMT"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(40) Filter [codegen id : 1]
Input [2]: [SS_QUANTITY#7506, SS_EXT_DISCOUNT_AMT#7510]
Condition : ((isnotnull(SS_QUANTITY#7506) AND (SS_QUANTITY#7506 >= 41.000000000000000000)) AND (SS_QUANTITY#7506 <= 60.000000000000000000))

(41) Project [codegen id : 1]
Output [1]: [SS_EXT_DISCOUNT_AMT#7510]
Input [2]: [SS_QUANTITY#7506, SS_EXT_DISCOUNT_AMT#7510]

(42) HashAggregate [codegen id : 1]
Input [1]: [SS_EXT_DISCOUNT_AMT#7510]
Keys: []
Functions [1]: [partial_avg(ss_ext_discount_amt#7510)]
Aggregate Attributes [2]: [sum#7775, count#7776L]
Results [2]: [sum#7777, count#7778L]

(43) HashAggregate [codegen id : 1]
Input [2]: [sum#7777, count#7778L]
Keys: []
Functions [1]: [avg(ss_ext_discount_amt#7510)]
Aggregate Attributes [1]: [avg(ss_ext_discount_amt#7510)#7519]
Results [1]: [avg(ss_ext_discount_amt#7510)#7519 AS avg(ss_ext_discount_amt)#7520]

Subquery:9 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7308, [id=#2738]
* HashAggregate (48)
+- * HashAggregate (47)
   +- * Project (46)
      +- * Filter (45)
         +- BatchScan (44)


(44) BatchScan
Output [2]: [SS_QUANTITY#7531, SS_NET_PAID#7541]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7727, SS_NET_PAID#7728], [oracolumnref(SS_QUANTITY#7727), oracolumnref(SS_NET_PAID#7728)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7531) AND (SS_QUANTITY#7531 >= 41.000000000000000000)) AND (SS_QUANTITY#7531 <= 60.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18),SS_NET_PAID:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 41.000000000000000000, 60.000000000000000000
oraPushdownSQL: select "SS_QUANTITY", "SS_NET_PAID"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(45) Filter [codegen id : 1]
Input [2]: [SS_QUANTITY#7531, SS_NET_PAID#7541]
Condition : ((isnotnull(SS_QUANTITY#7531) AND (SS_QUANTITY#7531 >= 41.000000000000000000)) AND (SS_QUANTITY#7531 <= 60.000000000000000000))

(46) Project [codegen id : 1]
Output [1]: [SS_NET_PAID#7541]
Input [2]: [SS_QUANTITY#7531, SS_NET_PAID#7541]

(47) HashAggregate [codegen id : 1]
Input [1]: [SS_NET_PAID#7541]
Keys: []
Functions [1]: [partial_avg(ss_net_paid#7541)]
Aggregate Attributes [2]: [sum#7779, count#7780L]
Results [2]: [sum#7781, count#7782L]

(48) HashAggregate [codegen id : 1]
Input [2]: [sum#7781, count#7782L]
Keys: []
Functions [1]: [avg(ss_net_paid#7541)]
Aggregate Attributes [1]: [avg(ss_net_paid#7541)#7544]
Results [1]: [avg(ss_net_paid#7541)#7544 AS avg(ss_net_paid)#7545]

Subquery:10 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7310, [id=#2754]
* HashAggregate (53)
+- * HashAggregate (52)
   +- * Project (51)
      +- * Filter (50)
         +- BatchScan (49)


(49) BatchScan
Output [1]: [SS_QUANTITY#7556]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7731], [oracolumnref(SS_QUANTITY#7731)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7556) AND (SS_QUANTITY#7556 >= 61.000000000000000000)) AND (SS_QUANTITY#7556 <= 80.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 61.000000000000000000, 80.000000000000000000
oraPushdownSQL: select "SS_QUANTITY"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(50) Filter [codegen id : 1]
Input [1]: [SS_QUANTITY#7556]
Condition : ((isnotnull(SS_QUANTITY#7556) AND (SS_QUANTITY#7556 >= 61.000000000000000000)) AND (SS_QUANTITY#7556 <= 80.000000000000000000))

(51) Project [codegen id : 1]
Output: []
Input [1]: [SS_QUANTITY#7556]

(52) HashAggregate [codegen id : 1]
Input: []
Keys: []
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#7783L]
Results [1]: [count#7784L]

(53) HashAggregate [codegen id : 1]
Input [1]: [count#7784L]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#7569L]
Results [1]: [count(1)#7569L AS count(1)#7570L]

Subquery:11 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7311, [id=#2770]
* HashAggregate (58)
+- * HashAggregate (57)
   +- * Project (56)
      +- * Filter (55)
         +- BatchScan (54)


(54) BatchScan
Output [2]: [SS_QUANTITY#7581, SS_EXT_DISCOUNT_AMT#7585]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7733, SS_EXT_DISCOUNT_AMT#7734], [oracolumnref(SS_QUANTITY#7733), oracolumnref(SS_EXT_DISCOUNT_AMT#7734)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7581) AND (SS_QUANTITY#7581 >= 61.000000000000000000)) AND (SS_QUANTITY#7581 <= 80.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18),SS_EXT_DISCOUNT_AMT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 61.000000000000000000, 80.000000000000000000
oraPushdownSQL: select "SS_QUANTITY", "SS_EXT_DISCOUNT_AMT"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(55) Filter [codegen id : 1]
Input [2]: [SS_QUANTITY#7581, SS_EXT_DISCOUNT_AMT#7585]
Condition : ((isnotnull(SS_QUANTITY#7581) AND (SS_QUANTITY#7581 >= 61.000000000000000000)) AND (SS_QUANTITY#7581 <= 80.000000000000000000))

(56) Project [codegen id : 1]
Output [1]: [SS_EXT_DISCOUNT_AMT#7585]
Input [2]: [SS_QUANTITY#7581, SS_EXT_DISCOUNT_AMT#7585]

(57) HashAggregate [codegen id : 1]
Input [1]: [SS_EXT_DISCOUNT_AMT#7585]
Keys: []
Functions [1]: [partial_avg(ss_ext_discount_amt#7585)]
Aggregate Attributes [2]: [sum#7785, count#7786L]
Results [2]: [sum#7787, count#7788L]

(58) HashAggregate [codegen id : 1]
Input [2]: [sum#7787, count#7788L]
Keys: []
Functions [1]: [avg(ss_ext_discount_amt#7585)]
Aggregate Attributes [1]: [avg(ss_ext_discount_amt#7585)#7594]
Results [1]: [avg(ss_ext_discount_amt#7585)#7594 AS avg(ss_ext_discount_amt)#7595]

Subquery:12 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7312, [id=#2786]
* HashAggregate (63)
+- * HashAggregate (62)
   +- * Project (61)
      +- * Filter (60)
         +- BatchScan (59)


(59) BatchScan
Output [2]: [SS_QUANTITY#7606, SS_NET_PAID#7616]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7737, SS_NET_PAID#7738], [oracolumnref(SS_QUANTITY#7737), oracolumnref(SS_NET_PAID#7738)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7606) AND (SS_QUANTITY#7606 >= 61.000000000000000000)) AND (SS_QUANTITY#7606 <= 80.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18),SS_NET_PAID:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 61.000000000000000000, 80.000000000000000000
oraPushdownSQL: select "SS_QUANTITY", "SS_NET_PAID"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(60) Filter [codegen id : 1]
Input [2]: [SS_QUANTITY#7606, SS_NET_PAID#7616]
Condition : ((isnotnull(SS_QUANTITY#7606) AND (SS_QUANTITY#7606 >= 61.000000000000000000)) AND (SS_QUANTITY#7606 <= 80.000000000000000000))

(61) Project [codegen id : 1]
Output [1]: [SS_NET_PAID#7616]
Input [2]: [SS_QUANTITY#7606, SS_NET_PAID#7616]

(62) HashAggregate [codegen id : 1]
Input [1]: [SS_NET_PAID#7616]
Keys: []
Functions [1]: [partial_avg(ss_net_paid#7616)]
Aggregate Attributes [2]: [sum#7789, count#7790L]
Results [2]: [sum#7791, count#7792L]

(63) HashAggregate [codegen id : 1]
Input [2]: [sum#7791, count#7792L]
Keys: []
Functions [1]: [avg(ss_net_paid#7616)]
Aggregate Attributes [1]: [avg(ss_net_paid#7616)#7619]
Results [1]: [avg(ss_net_paid#7616)#7619 AS avg(ss_net_paid)#7620]

Subquery:13 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7314, [id=#2802]
* HashAggregate (68)
+- * HashAggregate (67)
   +- * Project (66)
      +- * Filter (65)
         +- BatchScan (64)


(64) BatchScan
Output [1]: [SS_QUANTITY#7631]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7741], [oracolumnref(SS_QUANTITY#7741)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7631) AND (SS_QUANTITY#7631 >= 81.000000000000000000)) AND (SS_QUANTITY#7631 <= 100.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 81.000000000000000000, 100.000000000000000000
oraPushdownSQL: select "SS_QUANTITY"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(65) Filter [codegen id : 1]
Input [1]: [SS_QUANTITY#7631]
Condition : ((isnotnull(SS_QUANTITY#7631) AND (SS_QUANTITY#7631 >= 81.000000000000000000)) AND (SS_QUANTITY#7631 <= 100.000000000000000000))

(66) Project [codegen id : 1]
Output: []
Input [1]: [SS_QUANTITY#7631]

(67) HashAggregate [codegen id : 1]
Input: []
Keys: []
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#7793L]
Results [1]: [count#7794L]

(68) HashAggregate [codegen id : 1]
Input [1]: [count#7794L]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#7644L]
Results [1]: [count(1)#7644L AS count(1)#7645L]

Subquery:14 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7315, [id=#2818]
* HashAggregate (73)
+- * HashAggregate (72)
   +- * Project (71)
      +- * Filter (70)
         +- BatchScan (69)


(69) BatchScan
Output [2]: [SS_QUANTITY#7656, SS_EXT_DISCOUNT_AMT#7660]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7743, SS_EXT_DISCOUNT_AMT#7744], [oracolumnref(SS_QUANTITY#7743), oracolumnref(SS_EXT_DISCOUNT_AMT#7744)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7656) AND (SS_QUANTITY#7656 >= 81.000000000000000000)) AND (SS_QUANTITY#7656 <= 100.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18),SS_EXT_DISCOUNT_AMT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 81.000000000000000000, 100.000000000000000000
oraPushdownSQL: select "SS_QUANTITY", "SS_EXT_DISCOUNT_AMT"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(70) Filter [codegen id : 1]
Input [2]: [SS_QUANTITY#7656, SS_EXT_DISCOUNT_AMT#7660]
Condition : ((isnotnull(SS_QUANTITY#7656) AND (SS_QUANTITY#7656 >= 81.000000000000000000)) AND (SS_QUANTITY#7656 <= 100.000000000000000000))

(71) Project [codegen id : 1]
Output [1]: [SS_EXT_DISCOUNT_AMT#7660]
Input [2]: [SS_QUANTITY#7656, SS_EXT_DISCOUNT_AMT#7660]

(72) HashAggregate [codegen id : 1]
Input [1]: [SS_EXT_DISCOUNT_AMT#7660]
Keys: []
Functions [1]: [partial_avg(ss_ext_discount_amt#7660)]
Aggregate Attributes [2]: [sum#7795, count#7796L]
Results [2]: [sum#7797, count#7798L]

(73) HashAggregate [codegen id : 1]
Input [2]: [sum#7797, count#7798L]
Keys: []
Functions [1]: [avg(ss_ext_discount_amt#7660)]
Aggregate Attributes [1]: [avg(ss_ext_discount_amt#7660)#7669]
Results [1]: [avg(ss_ext_discount_amt#7660)#7669 AS avg(ss_ext_discount_amt)#7670]

Subquery:15 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#7316, [id=#2834]
* HashAggregate (78)
+- * HashAggregate (77)
   +- * Project (76)
      +- * Filter (75)
         +- BatchScan (74)


(74) BatchScan
Output [2]: [SS_QUANTITY#7681, SS_NET_PAID#7691]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_QUANTITY#7747, SS_NET_PAID#7748], [oracolumnref(SS_QUANTITY#7747), oracolumnref(SS_NET_PAID#7748)], orabinaryopexpression(((isnotnull(SS_QUANTITY#7681) AND (SS_QUANTITY#7681 >= 81.000000000000000000)) AND (SS_QUANTITY#7681 <= 100.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<SS_QUANTITY:decimal(38,18),SS_NET_PAID:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 81.000000000000000000, 100.000000000000000000
oraPushdownSQL: select "SS_QUANTITY", "SS_NET_PAID"
from TPCDS.STORE_SALES
where (("SS_QUANTITY" IS NOT NULL AND ("SS_QUANTITY" >= ?)) AND ("SS_QUANTITY" <= ?))

(75) Filter [codegen id : 1]
Input [2]: [SS_QUANTITY#7681, SS_NET_PAID#7691]
Condition : ((isnotnull(SS_QUANTITY#7681) AND (SS_QUANTITY#7681 >= 81.000000000000000000)) AND (SS_QUANTITY#7681 <= 100.000000000000000000))

(76) Project [codegen id : 1]
Output [1]: [SS_NET_PAID#7691]
Input [2]: [SS_QUANTITY#7681, SS_NET_PAID#7691]

(77) HashAggregate [codegen id : 1]
Input [1]: [SS_NET_PAID#7691]
Keys: []
Functions [1]: [partial_avg(ss_net_paid#7691)]
Aggregate Attributes [2]: [sum#7799, count#7800L]
Results [2]: [sum#7801, count#7802L]

(78) HashAggregate [codegen id : 1]
Input [2]: [sum#7801, count#7802L]
Keys: []
Functions [1]: [avg(ss_net_paid#7691)]
Aggregate Attributes [1]: [avg(ss_net_paid#7691)#7694]
Results [1]: [avg(ss_net_paid#7691)#7694 AS avg(ss_net_paid)#7695]



Query q10

Spark SQL

select
  cd_gender,
  cd_marital_status,
  cd_education_status,
  count(*) cnt1,
  cd_purchase_estimate,
  count(*) cnt2,
  cd_credit_rating,
  count(*) cnt3,
  cd_dep_count,
  count(*) cnt4,
  cd_dep_employed_count,
  count(*) cnt5,
  cd_dep_college_count,
  count(*) cnt6
 from
  customer c,customer_address ca,customer_demographics
 where
  c.c_current_addr_sk = ca.ca_address_sk and
  ca_county in ('Rush County','Toole County','Jefferson County','Dona Ana County','La Porte County') and
  cd_demo_sk = c.c_current_cdemo_sk and
  exists (select *
          from store_sales,date_dim
          where c.c_customer_sk = ss_customer_sk and
                ss_sold_date_sk = d_date_sk and
                d_year = 2002 and
                d_moy between 1 and 1+3) and
   (exists (select *
            from web_sales,date_dim
            where c.c_customer_sk = ws_bill_customer_sk and
                  ws_sold_date_sk = d_date_sk and
                  d_year = 2002 and
                  d_moy between 1 ANd 1+3) or
    exists (select *
            from catalog_sales,date_dim
            where c.c_customer_sk = cs_ship_customer_sk and
                  cs_sold_date_sk = d_date_sk and
                  d_year = 2002 and
                  d_moy between 1 and 1+3))
 group by cd_gender,
          cd_marital_status,
          cd_education_status,
          cd_purchase_estimate,
          cd_credit_rating,
          cd_dep_count,
          cd_dep_employed_count,
          cd_dep_college_count
 order by cd_gender,
          cd_marital_status,
          cd_education_status,
          cd_purchase_estimate,
          cd_credit_rating,
          cd_dep_count,
          cd_dep_employed_count,
          cd_dep_college_count
 limit 100;
 

Spark Plan with Pushdown turned on

== Physical Plan ==
TakeOrderedAndProject (28)
+- * HashAggregate (27)
   +- * HashAggregate (26)
      +- * Project (25)
         +- * SortMergeJoin Inner (24)
            :- * Sort (20)
            :  +- * Project (19)
            :     +- * SortMergeJoin Inner (18)
            :        :- * Sort (14)
            :        :  +- * Project (13)
            :        :     +- * Filter (12)
            :        :        +- SortMergeJoin ExistenceJoin(exists#9567) (11)
            :        :           :- SortMergeJoin ExistenceJoin(exists#9566) (7)
            :        :           :  :- * Sort (3)
            :        :           :  :  +- * Project (2)
            :        :           :  :     +- BatchScan (1)
            :        :           :  +- * Sort (6)
            :        :           :     +- * Project (5)
            :        :           :        +- BatchScan (4)
            :        :           +- * Sort (10)
            :        :              +- * Project (9)
            :        :                 +- BatchScan (8)
            :        +- * Sort (17)
            :           +- * Project (16)
            :              +- BatchScan (15)
            +- * Sort (23)
               +- * Project (22)
                  +- BatchScan (21)


(1) BatchScan
Output [3]: [C_CUSTOMER_SK#8953, C_CURRENT_CDEMO_SK#8955, C_CURRENT_ADDR_SK#8957]
OraPlan: 00 OraSingleQueryBlock [C_CUSTOMER_SK#8953, C_CURRENT_CDEMO_SK#8955, C_CURRENT_ADDR_SK#8957], [oracolumnref(C_CUSTOMER_SK#8953), oracolumnref(C_CURRENT_CDEMO_SK#8955), oracolumnref(C_CURRENT_ADDR_SK#8957)], orabinaryopexpression(((isnotnull(C_CURRENT_ADDR_SK#8957) AND isnotnull(C_CURRENT_CDEMO_SK#8955)) AND (C_CUSTOMER_SK#8953 = ss_customer_sk#9002)))
01 +- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#8953, C_CURRENT_CDEMO_SK#8955, C_CURRENT_ADDR_SK#8957]
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CURRENT_CDEMO_SK:decimal(38,18),C_CURRENT_ADDR_SK:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000, 1.000000000000000000, 4.000000000000000000
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CURRENT_CDEMO_SK", "C_CURRENT_ADDR_SK"
from TPCDS.CUSTOMER 
where (("C_CURRENT_ADDR_SK" IS NOT NULL AND "C_CURRENT_CDEMO_SK" IS NOT NULL) AND  "C_CUSTOMER_SK" IN ( select "SS_CUSTOMER_SK"
from TPCDS.STORE_SALES  join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK")
where ("SS_SOLD_DATE_SK" IS NOT NULL AND (((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = ?)) AND ("D_MOY" >= ?)) AND ("D_MOY" <= ?))) ))

(2) Project [codegen id : 1]
Output [3]: [C_CUSTOMER_SK#8953, C_CURRENT_CDEMO_SK#8955, C_CURRENT_ADDR_SK#8957]
Input [3]: [C_CUSTOMER_SK#8953, C_CURRENT_CDEMO_SK#8955, C_CURRENT_ADDR_SK#8957]

(3) Sort [codegen id : 1]
Input [3]: [C_CUSTOMER_SK#8953, C_CURRENT_CDEMO_SK#8955, C_CURRENT_ADDR_SK#8957]
Arguments: [C_CUSTOMER_SK#8953 ASC NULLS FIRST], false, 0

(4) BatchScan
Output [1]: [WS_BILL_CUSTOMER_SK#9054]
OraPlan: 00 OraSingleQueryBlock [WS_BILL_CUSTOMER_SK#9054], [oracolumnref(WS_BILL_CUSTOMER_SK#9054)], orabinaryopexpression((isnotnull(WS_SOLD_DATE_SK#9050) AND ((((isnotnull(D_YEAR#9090) AND isnotnull(D_MOY#9092)) AND (D_YEAR#9090 = 2002.000000000000000000)) AND (D_MOY#9092 >= 1.000000000000000000)) AND (D_MOY#9092 <= 4.000000000000000000))))
01 :- OraTableScan TPCDS.WEB_SALES, [WS_SOLD_TIME_SK#9051, WS_SHIP_DATE_SK#9052, WS_ITEM_SK#9053, WS_BILL_CUSTOMER_SK#9054, WS_BILL_CDEMO_SK#9055, WS_BILL_HDEMO_SK#9056, WS_BILL_ADDR_SK#9057, WS_SHIP_CUSTOMER_SK#9058, WS_SHIP_CDEMO_SK#9059, WS_SHIP_HDEMO_SK#9060, WS_SHIP_ADDR_SK#9061, WS_WEB_PAGE_SK#9062, WS_WEB_SITE_SK#9063, WS_SHIP_MODE_SK#9064, WS_WAREHOUSE_SK#9065, WS_PROMO_SK#9066, WS_ORDER_NUMBER#9067, WS_QUANTITY#9068, WS_WHOLESALE_COST#9069, WS_LIST_PRICE#9070, WS_SALES_PRICE#9071, WS_EXT_DISCOUNT_AMT#9072, WS_EXT_SALES_PRICE#9073, WS_EXT_WHOLESALE_COST#9074, ... 10 more fields]
02 +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#9084, D_DATE_ID#9085, D_DATE#9086, D_MONTH_SEQ#9087, D_WEEK_SEQ#9088, D_QUARTER_SEQ#9089, D_YEAR#9090, D_DOW#9091, D_MOY#9092, D_DOM#9093, D_QOY#9094, D_FY_YEAR#9095, D_FY_QUARTER_SEQ#9096, D_FY_WEEK_SEQ#9097, D_DAY_NAME#9098, D_QUARTER_NAME#9099, D_HOLIDAY#9100, D_WEEKEND#9101, D_FOLLOWING_HOLIDAY#9102, D_FIRST_DOM#9103, D_LAST_DOM#9104, D_SAME_DAY_LY#9105, D_SAME_DAY_LQ#9106, D_CURRENT_DAY#9107, ... 4 more fields]
ReadSchema: struct<WS_BILL_CUSTOMER_SK:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000, 1.000000000000000000, 4.000000000000000000
oraPushdownSQL: select "WS_BILL_CUSTOMER_SK"
from TPCDS.WEB_SALES  join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where ("WS_SOLD_DATE_SK" IS NOT NULL AND (((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = ?)) AND ("D_MOY" >= ?)) AND ("D_MOY" <= ?)))

(5) Project [codegen id : 2]
Output [1]: [WS_BILL_CUSTOMER_SK#9054]
Input [1]: [WS_BILL_CUSTOMER_SK#9054]

(6) Sort [codegen id : 2]
Input [1]: [WS_BILL_CUSTOMER_SK#9054]
Arguments: [ws_bill_customer_sk#9054 ASC NULLS FIRST], false, 0

(7) SortMergeJoin
Left keys [1]: [C_CUSTOMER_SK#8953]
Right keys [1]: [ws_bill_customer_sk#9054]
Join condition: None

(8) BatchScan
Output [1]: [CS_SHIP_CUSTOMER_SK#9119]
OraPlan: 00 OraSingleQueryBlock [CS_SHIP_CUSTOMER_SK#9119], [oracolumnref(CS_SHIP_CUSTOMER_SK#9119)], orabinaryopexpression((isnotnull(CS_SOLD_DATE_SK#9112) AND ((((isnotnull(D_YEAR#9152) AND isnotnull(D_MOY#9154)) AND (D_YEAR#9152 = 2002.000000000000000000)) AND (D_MOY#9154 >= 1.000000000000000000)) AND (D_MOY#9154 <= 4.000000000000000000))))
01 :- OraTableScan TPCDS.CATALOG_SALES, [CS_SOLD_TIME_SK#9113, CS_SHIP_DATE_SK#9114, CS_BILL_CUSTOMER_SK#9115, CS_BILL_CDEMO_SK#9116, CS_BILL_HDEMO_SK#9117, CS_BILL_ADDR_SK#9118, CS_SHIP_CUSTOMER_SK#9119, CS_SHIP_CDEMO_SK#9120, CS_SHIP_HDEMO_SK#9121, CS_SHIP_ADDR_SK#9122, CS_CALL_CENTER_SK#9123, CS_CATALOG_PAGE_SK#9124, CS_SHIP_MODE_SK#9125, CS_WAREHOUSE_SK#9126, CS_ITEM_SK#9127, CS_PROMO_SK#9128, CS_ORDER_NUMBER#9129, CS_QUANTITY#9130, CS_WHOLESALE_COST#9131, CS_LIST_PRICE#9132, CS_SALES_PRICE#9133, CS_EXT_DISCOUNT_AMT#9134, CS_EXT_SALES_PRICE#9135, CS_EXT_WHOLESALE_COST#9136, ... 10 more fields]
02 +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#9146, D_DATE_ID#9147, D_DATE#9148, D_MONTH_SEQ#9149, D_WEEK_SEQ#9150, D_QUARTER_SEQ#9151, D_YEAR#9152, D_DOW#9153, D_MOY#9154, D_DOM#9155, D_QOY#9156, D_FY_YEAR#9157, D_FY_QUARTER_SEQ#9158, D_FY_WEEK_SEQ#9159, D_DAY_NAME#9160, D_QUARTER_NAME#9161, D_HOLIDAY#9162, D_WEEKEND#9163, D_FOLLOWING_HOLIDAY#9164, D_FIRST_DOM#9165, D_LAST_DOM#9166, D_SAME_DAY_LY#9167, D_SAME_DAY_LQ#9168, D_CURRENT_DAY#9169, ... 4 more fields]
ReadSchema: struct<CS_SHIP_CUSTOMER_SK:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000, 1.000000000000000000, 4.000000000000000000
oraPushdownSQL: select "CS_SHIP_CUSTOMER_SK"
from TPCDS.CATALOG_SALES  join TPCDS.DATE_DIM  on ("CS_SOLD_DATE_SK" = "D_DATE_SK")
where ("CS_SOLD_DATE_SK" IS NOT NULL AND (((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = ?)) AND ("D_MOY" >= ?)) AND ("D_MOY" <= ?)))

(9) Project [codegen id : 3]
Output [1]: [CS_SHIP_CUSTOMER_SK#9119]
Input [1]: [CS_SHIP_CUSTOMER_SK#9119]

(10) Sort [codegen id : 3]
Input [1]: [CS_SHIP_CUSTOMER_SK#9119]
Arguments: [cs_ship_customer_sk#9119 ASC NULLS FIRST], false, 0

(11) SortMergeJoin
Left keys [1]: [C_CUSTOMER_SK#8953]
Right keys [1]: [cs_ship_customer_sk#9119]
Join condition: None

(12) Filter [codegen id : 4]
Input [5]: [C_CUSTOMER_SK#8953, C_CURRENT_CDEMO_SK#8955, C_CURRENT_ADDR_SK#8957, exists#9566, exists#9567]
Condition : (exists#9566 OR exists#9567)

(13) Project [codegen id : 4]
Output [2]: [C_CURRENT_CDEMO_SK#8955, C_CURRENT_ADDR_SK#8957]
Input [5]: [C_CUSTOMER_SK#8953, C_CURRENT_CDEMO_SK#8955, C_CURRENT_ADDR_SK#8957, exists#9566, exists#9567]

(14) Sort [codegen id : 4]
Input [2]: [C_CURRENT_CDEMO_SK#8955, C_CURRENT_ADDR_SK#8957]
Arguments: [c_current_addr_sk#8957 ASC NULLS FIRST], false, 0

(15) BatchScan
Output [1]: [CA_ADDRESS_SK#8971]
OraPlan: 00 OraSingleQueryBlock [CA_ADDRESS_SK#8971], [oracolumnref(CA_ADDRESS_SK#8971)], orain(CA_COUNTY#8978 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County))
01 +- OraTableScan TPCDS.CUSTOMER_ADDRESS, [CA_ADDRESS_SK#8971, CA_COUNTY#8978]
ReadSchema: struct<CA_ADDRESS_SK:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: Rush County, Toole County, Jefferson County, Dona Ana County, La Porte County
oraPushdownSQL: select "CA_ADDRESS_SK"
from TPCDS.CUSTOMER_ADDRESS 
where "CA_COUNTY" IN ( ?, ?, ?, ?, ? )

(16) Project [codegen id : 5]
Output [1]: [CA_ADDRESS_SK#8971]
Input [1]: [CA_ADDRESS_SK#8971]

(17) Sort [codegen id : 5]
Input [1]: [CA_ADDRESS_SK#8971]
Arguments: [ca_address_sk#8971 ASC NULLS FIRST], false, 0

(18) SortMergeJoin [codegen id : 6]
Left keys [1]: [c_current_addr_sk#8957]
Right keys [1]: [ca_address_sk#8971]
Join condition: None

(19) Project [codegen id : 6]
Output [1]: [C_CURRENT_CDEMO_SK#8955]
Input [3]: [C_CURRENT_CDEMO_SK#8955, C_CURRENT_ADDR_SK#8957, CA_ADDRESS_SK#8971]

(20) Sort [codegen id : 6]
Input [1]: [C_CURRENT_CDEMO_SK#8955]
Arguments: [c_current_cdemo_sk#8955 ASC NULLS FIRST], false, 0

(21) BatchScan
Output [9]: [CD_DEMO_SK#8984, CD_GENDER#8985, CD_MARITAL_STATUS#8986, CD_EDUCATION_STATUS#8987, CD_PURCHASE_ESTIMATE#8988, CD_CREDIT_RATING#8989, CD_DEP_COUNT#8990, CD_DEP_EMPLOYED_COUNT#8991, CD_DEP_COLLEGE_COUNT#8992]
OraPlan: 00 OraSingleQueryBlock [CD_DEMO_SK#8984, CD_GENDER#8985, CD_MARITAL_STATUS#8986, CD_EDUCATION_STATUS#8987, CD_PURCHASE_ESTIMATE#8988, CD_CREDIT_RATING#8989, CD_DEP_COUNT#8990, CD_DEP_EMPLOYED_COUNT#8991, CD_DEP_COLLEGE_COUNT#8992], [oracolumnref(CD_DEMO_SK#8984), oracolumnref(CD_GENDER#8985), oracolumnref(CD_MARITAL_STATUS#8986), oracolumnref(CD_EDUCATION_STATUS#8987), oracolumnref(CD_PURCHASE_ESTIMATE#8988), oracolumnref(CD_CREDIT_RATING#8989), oracolumnref(CD_DEP_COUNT#8990), oracolumnref(CD_DEP_EMPLOYED_COUNT#8991), oracolumnref(CD_DEP_COLLEGE_COUNT#8992)]
01 +- OraTableScan TPCDS.CUSTOMER_DEMOGRAPHICS, [CD_DEMO_SK#8984, CD_GENDER#8985, CD_MARITAL_STATUS#8986, CD_EDUCATION_STATUS#8987, CD_PURCHASE_ESTIMATE#8988, CD_CREDIT_RATING#8989, CD_DEP_COUNT#8990, CD_DEP_EMPLOYED_COUNT#8991, CD_DEP_COLLEGE_COUNT#8992]
ReadSchema: struct<CD_DEMO_SK:decimal(38,18),CD_GENDER:string,CD_MARITAL_STATUS:string,CD_EDUCATION_STATUS:string,CD_PURCHASE_ESTIMATE:decimal(38,18),CD_CREDIT_RATING:string,CD_DEP_COUNT:decimal(38,18),CD_DEP_EMPLOYED_COUNT:decimal(38,18),CD_DEP_COLLEGE_COUNT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CD_DEMO_SK", "CD_GENDER", "CD_MARITAL_STATUS", "CD_EDUCATION_STATUS", "CD_PURCHASE_ESTIMATE", "CD_CREDIT_RATING", "CD_DEP_COUNT", "CD_DEP_EMPLOYED_COUNT", "CD_DEP_COLLEGE_COUNT"
from TPCDS.CUSTOMER_DEMOGRAPHICS 

(22) Project [codegen id : 7]
Output [9]: [CD_DEMO_SK#8984, CD_GENDER#8985, CD_MARITAL_STATUS#8986, CD_EDUCATION_STATUS#8987, CD_PURCHASE_ESTIMATE#8988, CD_CREDIT_RATING#8989, CD_DEP_COUNT#8990, CD_DEP_EMPLOYED_COUNT#8991, CD_DEP_COLLEGE_COUNT#8992]
Input [9]: [CD_DEMO_SK#8984, CD_GENDER#8985, CD_MARITAL_STATUS#8986, CD_EDUCATION_STATUS#8987, CD_PURCHASE_ESTIMATE#8988, CD_CREDIT_RATING#8989, CD_DEP_COUNT#8990, CD_DEP_EMPLOYED_COUNT#8991, CD_DEP_COLLEGE_COUNT#8992]

(23) Sort [codegen id : 7]
Input [9]: [CD_DEMO_SK#8984, CD_GENDER#8985, CD_MARITAL_STATUS#8986, CD_EDUCATION_STATUS#8987, CD_PURCHASE_ESTIMATE#8988, CD_CREDIT_RATING#8989, CD_DEP_COUNT#8990, CD_DEP_EMPLOYED_COUNT#8991, CD_DEP_COLLEGE_COUNT#8992]
Arguments: [cd_demo_sk#8984 ASC NULLS FIRST], false, 0

(24) SortMergeJoin [codegen id : 8]
Left keys [1]: [c_current_cdemo_sk#8955]
Right keys [1]: [cd_demo_sk#8984]
Join condition: None

(25) Project [codegen id : 8]
Output [8]: [CD_GENDER#8985, CD_MARITAL_STATUS#8986, CD_EDUCATION_STATUS#8987, CD_PURCHASE_ESTIMATE#8988, CD_CREDIT_RATING#8989, CD_DEP_COUNT#8990, CD_DEP_EMPLOYED_COUNT#8991, CD_DEP_COLLEGE_COUNT#8992]
Input [10]: [C_CURRENT_CDEMO_SK#8955, CD_DEMO_SK#8984, CD_GENDER#8985, CD_MARITAL_STATUS#8986, CD_EDUCATION_STATUS#8987, CD_PURCHASE_ESTIMATE#8988, CD_CREDIT_RATING#8989, CD_DEP_COUNT#8990, CD_DEP_EMPLOYED_COUNT#8991, CD_DEP_COLLEGE_COUNT#8992]

(26) HashAggregate [codegen id : 8]
Input [8]: [CD_GENDER#8985, CD_MARITAL_STATUS#8986, CD_EDUCATION_STATUS#8987, CD_PURCHASE_ESTIMATE#8988, CD_CREDIT_RATING#8989, CD_DEP_COUNT#8990, CD_DEP_EMPLOYED_COUNT#8991, CD_DEP_COLLEGE_COUNT#8992]
Keys [8]: [cd_gender#8985, cd_marital_status#8986, cd_education_status#8987, cd_purchase_estimate#8988, cd_credit_rating#8989, cd_dep_count#8990, cd_dep_employed_count#8991, cd_dep_college_count#8992]
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#9568L]
Results [9]: [cd_gender#8985, cd_marital_status#8986, cd_education_status#8987, cd_purchase_estimate#8988, cd_credit_rating#8989, cd_dep_count#8990, cd_dep_employed_count#8991, cd_dep_college_count#8992, count#9569L]

(27) HashAggregate [codegen id : 8]
Input [9]: [cd_gender#8985, cd_marital_status#8986, cd_education_status#8987, cd_purchase_estimate#8988, cd_credit_rating#8989, cd_dep_count#8990, cd_dep_employed_count#8991, cd_dep_college_count#8992, count#9569L]
Keys [8]: [cd_gender#8985, cd_marital_status#8986, cd_education_status#8987, cd_purchase_estimate#8988, cd_credit_rating#8989, cd_dep_count#8990, cd_dep_employed_count#8991, cd_dep_college_count#8992]
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#8993L]
Results [14]: [cd_gender#8985, cd_marital_status#8986, cd_education_status#8987, count(1)#8993L AS cnt1#8947L, cd_purchase_estimate#8988, count(1)#8993L AS cnt2#8948L, cd_credit_rating#8989, count(1)#8993L AS cnt3#8949L, cd_dep_count#8990, count(1)#8993L AS cnt4#8950L, cd_dep_employed_count#8991, count(1)#8993L AS cnt5#8951L, cd_dep_college_count#8992, count(1)#8993L AS cnt6#8952L]

(28) TakeOrderedAndProject
Input [14]: [cd_gender#8985, cd_marital_status#8986, cd_education_status#8987, cnt1#8947L, cd_purchase_estimate#8988, cnt2#8948L, cd_credit_rating#8989, cnt3#8949L, cd_dep_count#8990, cnt4#8950L, cd_dep_employed_count#8991, cnt5#8951L, cd_dep_college_count#8992, cnt6#8952L]
Arguments: 100, [cd_gender#8985 ASC NULLS FIRST, cd_marital_status#8986 ASC NULLS FIRST, cd_education_status#8987 ASC NULLS FIRST, cd_purchase_estimate#8988 ASC NULLS FIRST, cd_credit_rating#8989 ASC NULLS FIRST, cd_dep_count#8990 ASC NULLS FIRST, cd_dep_employed_count#8991 ASC NULLS FIRST, cd_dep_college_count#8992 ASC NULLS FIRST], [cd_gender#8985, cd_marital_status#8986, cd_education_status#8987, cnt1#8947L, cd_purchase_estimate#8988, cnt2#8948L, cd_credit_rating#8989, cnt3#8949L, cd_dep_count#8990, cnt4#8950L, cd_dep_employed_count#8991, cnt5#8951L, cd_dep_college_count#8992, cnt6#8952L]


Pushed oracle sqls

select "C_CUSTOMER_SK", "C_CURRENT_CDEMO_SK", "C_CURRENT_ADDR_SK"
from TPCDS.CUSTOMER 
where (("C_CURRENT_ADDR_SK" IS NOT NULL AND "C_CURRENT_CDEMO_SK" IS NOT NULL) AND  "C_CUSTOMER_SK" IN ( select "SS_CUSTOMER_SK"
from TPCDS.STORE_SALES  join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK")
where ("SS_SOLD_DATE_SK" IS NOT NULL AND (((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = 2002.000000000000000000)) AND ("D_MOY" >= 1.000000000000000000)) AND ("D_MOY" <= 4.000000000000000000))) ))

select "WS_BILL_CUSTOMER_SK"
from TPCDS.WEB_SALES  join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where ("WS_SOLD_DATE_SK" IS NOT NULL AND (((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = 2002.000000000000000000)) AND ("D_MOY" >= 1.000000000000000000)) AND ("D_MOY" <= 4.000000000000000000)))

select "CS_SHIP_CUSTOMER_SK"
from TPCDS.CATALOG_SALES  join TPCDS.DATE_DIM  on ("CS_SOLD_DATE_SK" = "D_DATE_SK")
where ("CS_SOLD_DATE_SK" IS NOT NULL AND (((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = 2002.000000000000000000)) AND ("D_MOY" >= 1.000000000000000000)) AND ("D_MOY" <= 4.000000000000000000)))

select "CA_ADDRESS_SK"
from TPCDS.CUSTOMER_ADDRESS 
where "CA_COUNTY" IN ( 'Rush County', 'Toole County', 'Jefferson County', 'Dona Ana County', 'La Porte County' )

select "CD_DEMO_SK", "CD_GENDER", "CD_MARITAL_STATUS", "CD_EDUCATION_STATUS", "CD_PURCHASE_ESTIMATE", "CD_CREDIT_RATING", "CD_DEP_COUNT", "CD_DEP_EMPLOYED_COUNT", "CD_DEP_COLLEGE_COUNT"
from TPCDS.CUSTOMER_DEMOGRAPHICS 

Spark Plan with Pushdown turned off

== Physical Plan ==
TakeOrderedAndProject (54)
+- * HashAggregate (53)
   +- * HashAggregate (52)
      +- * Project (51)
         +- * SortMergeJoin Inner (50)
            :- * Sort (46)
            :  +- * Project (45)
            :     +- * SortMergeJoin Inner (44)
            :        :- * Sort (39)
            :        :  +- * Project (38)
            :        :     +- * Filter (37)
            :        :        +- SortMergeJoin ExistenceJoin(exists#8941) (36)
            :        :           :- SortMergeJoin ExistenceJoin(exists#8940) (25)
            :        :           :  :- SortMergeJoin LeftSemi (14)
            :        :           :  :  :- * Sort (3)
            :        :           :  :  :  +- * Filter (2)
            :        :           :  :  :     +- BatchScan (1)
            :        :           :  :  +- * Sort (13)
            :        :           :  :     +- * Project (12)
            :        :           :  :        +- * SortMergeJoin Inner (11)
            :        :           :  :           :- * Sort (6)
            :        :           :  :           :  +- * Project (5)
            :        :           :  :           :     +- BatchScan (4)
            :        :           :  :           +- * Sort (10)
            :        :           :  :              +- * Project (9)
            :        :           :  :                 +- * Filter (8)
            :        :           :  :                    +- BatchScan (7)
            :        :           :  +- * Sort (24)
            :        :           :     +- * Project (23)
            :        :           :        +- * SortMergeJoin Inner (22)
            :        :           :           :- * Sort (17)
            :        :           :           :  +- * Project (16)
            :        :           :           :     +- BatchScan (15)
            :        :           :           +- * Sort (21)
            :        :           :              +- * Project (20)
            :        :           :                 +- * Filter (19)
            :        :           :                    +- BatchScan (18)
            :        :           +- * Sort (35)
            :        :              +- * Project (34)
            :        :                 +- * SortMergeJoin Inner (33)
            :        :                    :- * Sort (28)
            :        :                    :  +- * Project (27)
            :        :                    :     +- BatchScan (26)
            :        :                    +- * Sort (32)
            :        :                       +- * Project (31)
            :        :                          +- * Filter (30)
            :        :                             +- BatchScan (29)
            :        +- * Sort (43)
            :           +- * Project (42)
            :              +- * Filter (41)
            :                 +- BatchScan (40)
            +- * Sort (49)
               +- * Project (48)
                  +- BatchScan (47)


(1) BatchScan
Output [3]: [C_CUSTOMER_SK#8327, C_CURRENT_CDEMO_SK#8329, C_CURRENT_ADDR_SK#8331]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#8912, C_CURRENT_CDEMO_SK#8913, C_CURRENT_ADDR_SK#8914], [oracolumnref(C_CUSTOMER_SK#8912), oracolumnref(C_CURRENT_CDEMO_SK#8913), oracolumnref(C_CURRENT_ADDR_SK#8914)], orabinaryopexpression((isnotnull(C_CURRENT_ADDR_SK#8331) AND isnotnull(C_CURRENT_CDEMO_SK#8329)))
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CURRENT_CDEMO_SK:decimal(38,18),C_CURRENT_ADDR_SK:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CURRENT_CDEMO_SK", "C_CURRENT_ADDR_SK"
from TPCDS.CUSTOMER
where ("C_CURRENT_ADDR_SK" IS NOT NULL AND "C_CURRENT_CDEMO_SK" IS NOT NULL)

(2) Filter [codegen id : 1]
Input [3]: [C_CUSTOMER_SK#8327, C_CURRENT_CDEMO_SK#8329, C_CURRENT_ADDR_SK#8331]
Condition : (isnotnull(C_CURRENT_ADDR_SK#8331) AND isnotnull(C_CURRENT_CDEMO_SK#8329))

(3) Sort [codegen id : 1]
Input [3]: [C_CUSTOMER_SK#8327, C_CURRENT_CDEMO_SK#8329, C_CURRENT_ADDR_SK#8331]
Arguments: [C_CUSTOMER_SK#8327 ASC NULLS FIRST], false, 0

(4) BatchScan
Output [23]: [SS_SOLD_TIME_SK#8374, SS_ITEM_SK#8375, SS_CUSTOMER_SK#8376, SS_CDEMO_SK#8377, SS_HDEMO_SK#8378, SS_ADDR_SK#8379, SS_STORE_SK#8380, SS_PROMO_SK#8381, SS_TICKET_NUMBER#8382, SS_QUANTITY#8383, SS_WHOLESALE_COST#8384, SS_LIST_PRICE#8385, SS_SALES_PRICE#8386, SS_EXT_DISCOUNT_AMT#8387, SS_EXT_SALES_PRICE#8388, SS_EXT_WHOLESALE_COST#8389, SS_EXT_LIST_PRICE#8390, SS_EXT_TAX#8391, SS_COUPON_AMT#8392, SS_NET_PAID#8393, SS_NET_PAID_INC_TAX#8394, SS_NET_PROFIT#8395, SS_SOLD_DATE_SK#8373]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_SOLD_TIME_SK#8562, SS_ITEM_SK#8563, SS_CUSTOMER_SK#8564, SS_CDEMO_SK#8565, SS_HDEMO_SK#8566, SS_ADDR_SK#8567, SS_STORE_SK#8568, SS_PROMO_SK#8569, SS_TICKET_NUMBER#8570, SS_QUANTITY#8571, SS_WHOLESALE_COST#8572, SS_LIST_PRICE#8573, SS_SALES_PRICE#8574, SS_EXT_DISCOUNT_AMT#8575, SS_EXT_SALES_PRICE#8576, SS_EXT_WHOLESALE_COST#8577, SS_EXT_LIST_PRICE#8578, SS_EXT_TAX#8579, SS_COUPON_AMT#8580, SS_NET_PAID#8581, SS_NET_PAID_INC_TAX#8582, SS_NET_PROFIT#8583, SS_SOLD_DATE_SK#8584], [oracolumnref(SS_SOLD_TIME_SK#8562), oracolumnref(SS_ITEM_SK#8563), oracolumnref(SS_CUSTOMER_SK#8564), oracolumnref(SS_CDEMO_SK#8565), oracolumnref(SS_HDEMO_SK#8566), oracolumnref(SS_ADDR_SK#8567), oracolumnref(SS_STORE_SK#8568), oracolumnref(SS_PROMO_SK#8569), oracolumnref(SS_TICKET_NUMBER#8570), oracolumnref(SS_QUANTITY#8571), oracolumnref(SS_WHOLESALE_COST#8572), oracolumnref(SS_LIST_PRICE#8573), oracolumnref(SS_SALES_PRICE#8574), oracolumnref(SS_EXT_DISCOUNT_AMT#8575), oracolumnref(SS_EXT_SALES_PRICE#8576), oracolumnref(SS_EXT_WHOLESALE_COST#8577), oracolumnref(SS_EXT_LIST_PRICE#8578), oracolumnref(SS_EXT_TAX#8579), oracolumnref(SS_COUPON_AMT#8580), oracolumnref(SS_NET_PAID#8581), oracolumnref(SS_NET_PAID_INC_TAX#8582), oracolumnref(SS_NET_PROFIT#8583), oracolumnref(SS_SOLD_DATE_SK#8584)]
PartitionSchema: struct<SS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<SS_SOLD_TIME_SK:decimal(38,18),SS_ITEM_SK:decimal(38,18),SS_CUSTOMER_SK:decimal(38,18),SS_CDEMO_SK:decimal(38,18),SS_HDEMO_SK:decimal(38,18),SS_ADDR_SK:decimal(38,18),SS_STORE_SK:decimal(38,18),SS_PROMO_SK:decimal(38,18),SS_TICKET_NUMBER:decimal(38,18),SS_QUANTITY:decimal(38,18),SS_WHOLESALE_COST:decimal(38,18),SS_LIST_PRICE:decimal(38,18),SS_SALES_PRICE:decimal(38,18),SS_EXT_DISCOUNT_AMT:decimal(38,18),SS_EXT_SALES_PRICE:decimal(38,18),SS_EXT_WHOLESALE_COST:decimal(38,18),SS_EXT_LIST_PRICE:decimal(38,18),SS_EXT_TAX:decimal(38,18),SS_COUPON_AMT:decimal(38,18),SS_NET_PAID:decimal(38,18),SS_NET_PAID_INC_TAX:decimal(38,18),SS_NET_PROFIT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SS_SOLD_TIME_SK", "SS_ITEM_SK", "SS_CUSTOMER_SK", "SS_CDEMO_SK", "SS_HDEMO_SK", "SS_ADDR_SK", "SS_STORE_SK", "SS_PROMO_SK", "SS_TICKET_NUMBER", "SS_QUANTITY", "SS_WHOLESALE_COST", "SS_LIST_PRICE", "SS_SALES_PRICE", "SS_EXT_DISCOUNT_AMT", "SS_EXT_SALES_PRICE", "SS_EXT_WHOLESALE_COST", "SS_EXT_LIST_PRICE", "SS_EXT_TAX", "SS_COUPON_AMT", "SS_NET_PAID", "SS_NET_PAID_INC_TAX", "SS_NET_PROFIT", "SS_SOLD_DATE_SK"
from TPCDS.STORE_SALES
where "SS_SOLD_DATE_SK" IS NOT NULL

(5) Project [codegen id : 2]
Output [2]: [SS_SOLD_DATE_SK#8373, SS_CUSTOMER_SK#8376]
Input [23]: [SS_SOLD_TIME_SK#8374, SS_ITEM_SK#8375, SS_CUSTOMER_SK#8376, SS_CDEMO_SK#8377, SS_HDEMO_SK#8378, SS_ADDR_SK#8379, SS_STORE_SK#8380, SS_PROMO_SK#8381, SS_TICKET_NUMBER#8382, SS_QUANTITY#8383, SS_WHOLESALE_COST#8384, SS_LIST_PRICE#8385, SS_SALES_PRICE#8386, SS_EXT_DISCOUNT_AMT#8387, SS_EXT_SALES_PRICE#8388, SS_EXT_WHOLESALE_COST#8389, SS_EXT_LIST_PRICE#8390, SS_EXT_TAX#8391, SS_COUPON_AMT#8392, SS_NET_PAID#8393, SS_NET_PAID_INC_TAX#8394, SS_NET_PROFIT#8395, SS_SOLD_DATE_SK#8373]

(6) Sort [codegen id : 2]
Input [2]: [SS_SOLD_DATE_SK#8373, SS_CUSTOMER_SK#8376]
Arguments: [ss_sold_date_sk#8373 ASC NULLS FIRST], false, 0

(7) BatchScan
Output [28]: [D_DATE_SK#8396, D_DATE_ID#8397, D_DATE#8398, D_MONTH_SEQ#8399, D_WEEK_SEQ#8400, D_QUARTER_SEQ#8401, D_YEAR#8402, D_DOW#8403, D_MOY#8404, D_DOM#8405, D_QOY#8406, D_FY_YEAR#8407, D_FY_QUARTER_SEQ#8408, D_FY_WEEK_SEQ#8409, D_DAY_NAME#8410, D_QUARTER_NAME#8411, D_HOLIDAY#8412, D_WEEKEND#8413, D_FOLLOWING_HOLIDAY#8414, D_FIRST_DOM#8415, D_LAST_DOM#8416, D_SAME_DAY_LY#8417, D_SAME_DAY_LQ#8418, D_CURRENT_DAY#8419, D_CURRENT_WEEK#8420, D_CURRENT_MONTH#8421, D_CURRENT_QUARTER#8422, D_CURRENT_YEAR#8423]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#8608, D_DATE_ID#8609, D_DATE#8610, D_MONTH_SEQ#8611, D_WEEK_SEQ#8612, D_QUARTER_SEQ#8613, D_YEAR#8614, D_DOW#8615, D_MOY#8616, D_DOM#8617, D_QOY#8618, D_FY_YEAR#8619, D_FY_QUARTER_SEQ#8620, D_FY_WEEK_SEQ#8621, D_DAY_NAME#8622, D_QUARTER_NAME#8623, D_HOLIDAY#8624, D_WEEKEND#8625, D_FOLLOWING_HOLIDAY#8626, D_FIRST_DOM#8627, D_LAST_DOM#8628, D_SAME_DAY_LY#8629, D_SAME_DAY_LQ#8630, D_CURRENT_DAY#8631, ... 4 more fields], [oracolumnref(D_DATE_SK#8608), oracolumnref(D_DATE_ID#8609), oracolumnref(D_DATE#8610), oracolumnref(D_MONTH_SEQ#8611), oracolumnref(D_WEEK_SEQ#8612), oracolumnref(D_QUARTER_SEQ#8613), oracolumnref(D_YEAR#8614), oracolumnref(D_DOW#8615), oracolumnref(D_MOY#8616), oracolumnref(D_DOM#8617), oracolumnref(D_QOY#8618), oracolumnref(D_FY_YEAR#8619), oracolumnref(D_FY_QUARTER_SEQ#8620), oracolumnref(D_FY_WEEK_SEQ#8621), oracolumnref(D_DAY_NAME#8622), oracolumnref(D_QUARTER_NAME#8623), oracolumnref(D_HOLIDAY#8624), oracolumnref(D_WEEKEND#8625), oracolumnref(D_FOLLOWING_HOLIDAY#8626), oracolumnref(D_FIRST_DOM#8627), oracolumnref(D_LAST_DOM#8628), oracolumnref(D_SAME_DAY_LY#8629), oracolumnref(D_SAME_DAY_LQ#8630), oracolumnref(D_CURRENT_DAY#8631), ... 4 more fields], orabinaryopexpression(((((isnotnull(D_YEAR#8402) AND isnotnull(D_MOY#8404)) AND (D_YEAR#8402 = 2002.000000000000000000)) AND (D_MOY#8404 >= 1.000000000000000000)) AND (D_MOY#8404 <= 4.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_DATE_ID:string,D_DATE:date,D_MONTH_SEQ:decimal(38,18),D_WEEK_SEQ:decimal(38,18),D_QUARTER_SEQ:decimal(38,18),D_YEAR:decimal(38,18),D_DOW:decimal(38,18),D_MOY:decimal(38,18),D_DOM:decimal(38,18),D_QOY:decimal(38,18),D_FY_YEAR:decimal(38,18),D_FY_QUARTER_SEQ:decimal(38,18),D_FY_WEEK_SEQ:decimal(38,18),D_DAY_NAME:string,D_QUARTER_NAME:string,D_HOLIDAY:string,D_WEEKEND:string,D_FOLLOWING_HOLIDAY:string,D_FIRST_DOM:decimal(38,18),D_LAST_DOM:decimal(38,18),D_SAME_DAY_LY:decimal(38,18),D_SAME_DAY_LQ:decimal(38,18),D_CURRENT_DAY:string,D_CURRENT_WEEK:string,D_CURRENT_MONTH:string,D_CURRENT_QUARTER:string,D_CURRENT_YEAR:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000, 1.000000000000000000, 4.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_DATE_ID", "D_DATE", "D_MONTH_SEQ", "D_WEEK_SEQ", "D_QUARTER_SEQ", "D_YEAR", "D_DOW", "D_MOY", "D_DOM", "D_QOY", "D_FY_YEAR", "D_FY_QUARTER_SEQ", "D_FY_WEEK_SEQ", "D_DAY_NAME", "D_QUARTER_NAME", "D_HOLIDAY", "D_WEEKEND", "D_FOLLOWING_HOLIDAY", "D_FIRST_DOM", "D_LAST_DOM", "D_SAME_DAY_LY", "D_SAME_DAY_LQ", "D_CURRENT_DAY", "D_CURRENT_WEEK", "D_CURRENT_MONTH", "D_CURRENT_QUARTER", "D_CURRENT_YEAR"
from TPCDS.DATE_DIM
where (((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = ?)) AND ("D_MOY" >= ?)) AND ("D_MOY" <= ?))

(8) Filter [codegen id : 3]
Input [28]: [D_DATE_SK#8396, D_DATE_ID#8397, D_DATE#8398, D_MONTH_SEQ#8399, D_WEEK_SEQ#8400, D_QUARTER_SEQ#8401, D_YEAR#8402, D_DOW#8403, D_MOY#8404, D_DOM#8405, D_QOY#8406, D_FY_YEAR#8407, D_FY_QUARTER_SEQ#8408, D_FY_WEEK_SEQ#8409, D_DAY_NAME#8410, D_QUARTER_NAME#8411, D_HOLIDAY#8412, D_WEEKEND#8413, D_FOLLOWING_HOLIDAY#8414, D_FIRST_DOM#8415, D_LAST_DOM#8416, D_SAME_DAY_LY#8417, D_SAME_DAY_LQ#8418, D_CURRENT_DAY#8419, D_CURRENT_WEEK#8420, D_CURRENT_MONTH#8421, D_CURRENT_QUARTER#8422, D_CURRENT_YEAR#8423]
Condition : ((((isnotnull(D_YEAR#8402) AND isnotnull(D_MOY#8404)) AND (D_YEAR#8402 = 2002.000000000000000000)) AND (D_MOY#8404 >= 1.000000000000000000)) AND (D_MOY#8404 <= 4.000000000000000000))

(9) Project [codegen id : 3]
Output [1]: [D_DATE_SK#8396]
Input [28]: [D_DATE_SK#8396, D_DATE_ID#8397, D_DATE#8398, D_MONTH_SEQ#8399, D_WEEK_SEQ#8400, D_QUARTER_SEQ#8401, D_YEAR#8402, D_DOW#8403, D_MOY#8404, D_DOM#8405, D_QOY#8406, D_FY_YEAR#8407, D_FY_QUARTER_SEQ#8408, D_FY_WEEK_SEQ#8409, D_DAY_NAME#8410, D_QUARTER_NAME#8411, D_HOLIDAY#8412, D_WEEKEND#8413, D_FOLLOWING_HOLIDAY#8414, D_FIRST_DOM#8415, D_LAST_DOM#8416, D_SAME_DAY_LY#8417, D_SAME_DAY_LQ#8418, D_CURRENT_DAY#8419, D_CURRENT_WEEK#8420, D_CURRENT_MONTH#8421, D_CURRENT_QUARTER#8422, D_CURRENT_YEAR#8423]

(10) Sort [codegen id : 3]
Input [1]: [D_DATE_SK#8396]
Arguments: [d_date_sk#8396 ASC NULLS FIRST], false, 0

(11) SortMergeJoin [codegen id : 4]
Left keys [1]: [ss_sold_date_sk#8373]
Right keys [1]: [d_date_sk#8396]
Join condition: None

(12) Project [codegen id : 4]
Output [1]: [SS_CUSTOMER_SK#8376]
Input [3]: [SS_SOLD_DATE_SK#8373, SS_CUSTOMER_SK#8376, D_DATE_SK#8396]

(13) Sort [codegen id : 4]
Input [1]: [SS_CUSTOMER_SK#8376]
Arguments: [ss_customer_sk#8376 ASC NULLS FIRST], false, 0

(14) SortMergeJoin
Left keys [1]: [C_CUSTOMER_SK#8327]
Right keys [1]: [ss_customer_sk#8376]
Join condition: None

(15) BatchScan
Output [34]: [WS_SOLD_TIME_SK#8425, WS_SHIP_DATE_SK#8426, WS_ITEM_SK#8427, WS_BILL_CUSTOMER_SK#8428, WS_BILL_CDEMO_SK#8429, WS_BILL_HDEMO_SK#8430, WS_BILL_ADDR_SK#8431, WS_SHIP_CUSTOMER_SK#8432, WS_SHIP_CDEMO_SK#8433, WS_SHIP_HDEMO_SK#8434, WS_SHIP_ADDR_SK#8435, WS_WEB_PAGE_SK#8436, WS_WEB_SITE_SK#8437, WS_SHIP_MODE_SK#8438, WS_WAREHOUSE_SK#8439, WS_PROMO_SK#8440, WS_ORDER_NUMBER#8441, WS_QUANTITY#8442, WS_WHOLESALE_COST#8443, WS_LIST_PRICE#8444, WS_SALES_PRICE#8445, WS_EXT_DISCOUNT_AMT#8446, WS_EXT_SALES_PRICE#8447, WS_EXT_WHOLESALE_COST#8448, WS_EXT_LIST_PRICE#8449, WS_EXT_TAX#8450, WS_COUPON_AMT#8451, WS_EXT_SHIP_COST#8452, WS_NET_PAID#8453, WS_NET_PAID_INC_TAX#8454, WS_NET_PAID_INC_SHIP#8455, WS_NET_PAID_INC_SHIP_TAX#8456, WS_NET_PROFIT#8457, WS_SOLD_DATE_SK#8424]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_SALES, [WS_SOLD_TIME_SK#8664, WS_SHIP_DATE_SK#8665, WS_ITEM_SK#8666, WS_BILL_CUSTOMER_SK#8667, WS_BILL_CDEMO_SK#8668, WS_BILL_HDEMO_SK#8669, WS_BILL_ADDR_SK#8670, WS_SHIP_CUSTOMER_SK#8671, WS_SHIP_CDEMO_SK#8672, WS_SHIP_HDEMO_SK#8673, WS_SHIP_ADDR_SK#8674, WS_WEB_PAGE_SK#8675, WS_WEB_SITE_SK#8676, WS_SHIP_MODE_SK#8677, WS_WAREHOUSE_SK#8678, WS_PROMO_SK#8679, WS_ORDER_NUMBER#8680, WS_QUANTITY#8681, WS_WHOLESALE_COST#8682, WS_LIST_PRICE#8683, WS_SALES_PRICE#8684, WS_EXT_DISCOUNT_AMT#8685, WS_EXT_SALES_PRICE#8686, WS_EXT_WHOLESALE_COST#8687, ... 10 more fields], [oracolumnref(WS_SOLD_TIME_SK#8664), oracolumnref(WS_SHIP_DATE_SK#8665), oracolumnref(WS_ITEM_SK#8666), oracolumnref(WS_BILL_CUSTOMER_SK#8667), oracolumnref(WS_BILL_CDEMO_SK#8668), oracolumnref(WS_BILL_HDEMO_SK#8669), oracolumnref(WS_BILL_ADDR_SK#8670), oracolumnref(WS_SHIP_CUSTOMER_SK#8671), oracolumnref(WS_SHIP_CDEMO_SK#8672), oracolumnref(WS_SHIP_HDEMO_SK#8673), oracolumnref(WS_SHIP_ADDR_SK#8674), oracolumnref(WS_WEB_PAGE_SK#8675), oracolumnref(WS_WEB_SITE_SK#8676), oracolumnref(WS_SHIP_MODE_SK#8677), oracolumnref(WS_WAREHOUSE_SK#8678), oracolumnref(WS_PROMO_SK#8679), oracolumnref(WS_ORDER_NUMBER#8680), oracolumnref(WS_QUANTITY#8681), oracolumnref(WS_WHOLESALE_COST#8682), oracolumnref(WS_LIST_PRICE#8683), oracolumnref(WS_SALES_PRICE#8684), oracolumnref(WS_EXT_DISCOUNT_AMT#8685), oracolumnref(WS_EXT_SALES_PRICE#8686), oracolumnref(WS_EXT_WHOLESALE_COST#8687), ... 10 more fields]
PartitionSchema: struct<WS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<WS_SOLD_TIME_SK:decimal(38,18),WS_SHIP_DATE_SK:decimal(38,18),WS_ITEM_SK:decimal(38,18),WS_BILL_CUSTOMER_SK:decimal(38,18),WS_BILL_CDEMO_SK:decimal(38,18),WS_BILL_HDEMO_SK:decimal(38,18),WS_BILL_ADDR_SK:decimal(38,18),WS_SHIP_CUSTOMER_SK:decimal(38,18),WS_SHIP_CDEMO_SK:decimal(38,18),WS_SHIP_HDEMO_SK:decimal(38,18),WS_SHIP_ADDR_SK:decimal(38,18),WS_WEB_PAGE_SK:decimal(38,18),WS_WEB_SITE_SK:decimal(38,18),WS_SHIP_MODE_SK:decimal(38,18),WS_WAREHOUSE_SK:decimal(38,18),WS_PROMO_SK:decimal(38,18),WS_ORDER_NUMBER:decimal(38,18),WS_QUANTITY:decimal(38,18),WS_WHOLESALE_COST:decimal(38,18),WS_LIST_PRICE:decimal(38,18),WS_SALES_PRICE:decimal(38,18),WS_EXT_DISCOUNT_AMT:decimal(38,18),WS_EXT_SALES_PRICE:decimal(38,18),WS_EXT_WHOLESALE_COST:decimal(38,18),WS_EXT_LIST_PRICE:decimal(38,18),WS_EXT_TAX:decimal(38,18),WS_COUPON_AMT:decimal(38,18),WS_EXT_SHIP_COST:decimal(38,18),WS_NET_PAID:decimal(38,18),WS_NET_PAID_INC_TAX:decimal(38,18),WS_NET_PAID_INC_SHIP:decimal(38,18),WS_NET_PAID_INC_SHIP_TAX:decimal(38,18),WS_NET_PROFIT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WS_SOLD_TIME_SK", "WS_SHIP_DATE_SK", "WS_ITEM_SK", "WS_BILL_CUSTOMER_SK", "WS_BILL_CDEMO_SK", "WS_BILL_HDEMO_SK", "WS_BILL_ADDR_SK", "WS_SHIP_CUSTOMER_SK", "WS_SHIP_CDEMO_SK", "WS_SHIP_HDEMO_SK", "WS_SHIP_ADDR_SK", "WS_WEB_PAGE_SK", "WS_WEB_SITE_SK", "WS_SHIP_MODE_SK", "WS_WAREHOUSE_SK", "WS_PROMO_SK", "WS_ORDER_NUMBER", "WS_QUANTITY", "WS_WHOLESALE_COST", "WS_LIST_PRICE", "WS_SALES_PRICE", "WS_EXT_DISCOUNT_AMT", "WS_EXT_SALES_PRICE", "WS_EXT_WHOLESALE_COST", "WS_EXT_LIST_PRICE", "WS_EXT_TAX", "WS_COUPON_AMT", "WS_EXT_SHIP_COST", "WS_NET_PAID", "WS_NET_PAID_INC_TAX", "WS_NET_PAID_INC_SHIP", "WS_NET_PAID_INC_SHIP_TAX", "WS_NET_PROFIT", "WS_SOLD_DATE_SK"
from TPCDS.WEB_SALES
where "WS_SOLD_DATE_SK" IS NOT NULL

(16) Project [codegen id : 5]
Output [2]: [WS_SOLD_DATE_SK#8424, WS_BILL_CUSTOMER_SK#8428]
Input [34]: [WS_SOLD_TIME_SK#8425, WS_SHIP_DATE_SK#8426, WS_ITEM_SK#8427, WS_BILL_CUSTOMER_SK#8428, WS_BILL_CDEMO_SK#8429, WS_BILL_HDEMO_SK#8430, WS_BILL_ADDR_SK#8431, WS_SHIP_CUSTOMER_SK#8432, WS_SHIP_CDEMO_SK#8433, WS_SHIP_HDEMO_SK#8434, WS_SHIP_ADDR_SK#8435, WS_WEB_PAGE_SK#8436, WS_WEB_SITE_SK#8437, WS_SHIP_MODE_SK#8438, WS_WAREHOUSE_SK#8439, WS_PROMO_SK#8440, WS_ORDER_NUMBER#8441, WS_QUANTITY#8442, WS_WHOLESALE_COST#8443, WS_LIST_PRICE#8444, WS_SALES_PRICE#8445, WS_EXT_DISCOUNT_AMT#8446, WS_EXT_SALES_PRICE#8447, WS_EXT_WHOLESALE_COST#8448, WS_EXT_LIST_PRICE#8449, WS_EXT_TAX#8450, WS_COUPON_AMT#8451, WS_EXT_SHIP_COST#8452, WS_NET_PAID#8453, WS_NET_PAID_INC_TAX#8454, WS_NET_PAID_INC_SHIP#8455, WS_NET_PAID_INC_SHIP_TAX#8456, WS_NET_PROFIT#8457, WS_SOLD_DATE_SK#8424]

(17) Sort [codegen id : 5]
Input [2]: [WS_SOLD_DATE_SK#8424, WS_BILL_CUSTOMER_SK#8428]
Arguments: [ws_sold_date_sk#8424 ASC NULLS FIRST], false, 0

(18) BatchScan
Output [28]: [D_DATE_SK#8458, D_DATE_ID#8459, D_DATE#8460, D_MONTH_SEQ#8461, D_WEEK_SEQ#8462, D_QUARTER_SEQ#8463, D_YEAR#8464, D_DOW#8465, D_MOY#8466, D_DOM#8467, D_QOY#8468, D_FY_YEAR#8469, D_FY_QUARTER_SEQ#8470, D_FY_WEEK_SEQ#8471, D_DAY_NAME#8472, D_QUARTER_NAME#8473, D_HOLIDAY#8474, D_WEEKEND#8475, D_FOLLOWING_HOLIDAY#8476, D_FIRST_DOM#8477, D_LAST_DOM#8478, D_SAME_DAY_LY#8479, D_SAME_DAY_LQ#8480, D_CURRENT_DAY#8481, D_CURRENT_WEEK#8482, D_CURRENT_MONTH#8483, D_CURRENT_QUARTER#8484, D_CURRENT_YEAR#8485]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#8732, D_DATE_ID#8733, D_DATE#8734, D_MONTH_SEQ#8735, D_WEEK_SEQ#8736, D_QUARTER_SEQ#8737, D_YEAR#8738, D_DOW#8739, D_MOY#8740, D_DOM#8741, D_QOY#8742, D_FY_YEAR#8743, D_FY_QUARTER_SEQ#8744, D_FY_WEEK_SEQ#8745, D_DAY_NAME#8746, D_QUARTER_NAME#8747, D_HOLIDAY#8748, D_WEEKEND#8749, D_FOLLOWING_HOLIDAY#8750, D_FIRST_DOM#8751, D_LAST_DOM#8752, D_SAME_DAY_LY#8753, D_SAME_DAY_LQ#8754, D_CURRENT_DAY#8755, ... 4 more fields], [oracolumnref(D_DATE_SK#8732), oracolumnref(D_DATE_ID#8733), oracolumnref(D_DATE#8734), oracolumnref(D_MONTH_SEQ#8735), oracolumnref(D_WEEK_SEQ#8736), oracolumnref(D_QUARTER_SEQ#8737), oracolumnref(D_YEAR#8738), oracolumnref(D_DOW#8739), oracolumnref(D_MOY#8740), oracolumnref(D_DOM#8741), oracolumnref(D_QOY#8742), oracolumnref(D_FY_YEAR#8743), oracolumnref(D_FY_QUARTER_SEQ#8744), oracolumnref(D_FY_WEEK_SEQ#8745), oracolumnref(D_DAY_NAME#8746), oracolumnref(D_QUARTER_NAME#8747), oracolumnref(D_HOLIDAY#8748), oracolumnref(D_WEEKEND#8749), oracolumnref(D_FOLLOWING_HOLIDAY#8750), oracolumnref(D_FIRST_DOM#8751), oracolumnref(D_LAST_DOM#8752), oracolumnref(D_SAME_DAY_LY#8753), oracolumnref(D_SAME_DAY_LQ#8754), oracolumnref(D_CURRENT_DAY#8755), ... 4 more fields], orabinaryopexpression(((((isnotnull(D_YEAR#8464) AND isnotnull(D_MOY#8466)) AND (D_YEAR#8464 = 2002.000000000000000000)) AND (D_MOY#8466 >= 1.000000000000000000)) AND (D_MOY#8466 <= 4.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_DATE_ID:string,D_DATE:date,D_MONTH_SEQ:decimal(38,18),D_WEEK_SEQ:decimal(38,18),D_QUARTER_SEQ:decimal(38,18),D_YEAR:decimal(38,18),D_DOW:decimal(38,18),D_MOY:decimal(38,18),D_DOM:decimal(38,18),D_QOY:decimal(38,18),D_FY_YEAR:decimal(38,18),D_FY_QUARTER_SEQ:decimal(38,18),D_FY_WEEK_SEQ:decimal(38,18),D_DAY_NAME:string,D_QUARTER_NAME:string,D_HOLIDAY:string,D_WEEKEND:string,D_FOLLOWING_HOLIDAY:string,D_FIRST_DOM:decimal(38,18),D_LAST_DOM:decimal(38,18),D_SAME_DAY_LY:decimal(38,18),D_SAME_DAY_LQ:decimal(38,18),D_CURRENT_DAY:string,D_CURRENT_WEEK:string,D_CURRENT_MONTH:string,D_CURRENT_QUARTER:string,D_CURRENT_YEAR:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000, 1.000000000000000000, 4.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_DATE_ID", "D_DATE", "D_MONTH_SEQ", "D_WEEK_SEQ", "D_QUARTER_SEQ", "D_YEAR", "D_DOW", "D_MOY", "D_DOM", "D_QOY", "D_FY_YEAR", "D_FY_QUARTER_SEQ", "D_FY_WEEK_SEQ", "D_DAY_NAME", "D_QUARTER_NAME", "D_HOLIDAY", "D_WEEKEND", "D_FOLLOWING_HOLIDAY", "D_FIRST_DOM", "D_LAST_DOM", "D_SAME_DAY_LY", "D_SAME_DAY_LQ", "D_CURRENT_DAY", "D_CURRENT_WEEK", "D_CURRENT_MONTH", "D_CURRENT_QUARTER", "D_CURRENT_YEAR"
from TPCDS.DATE_DIM
where (((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = ?)) AND ("D_MOY" >= ?)) AND ("D_MOY" <= ?))

(19) Filter [codegen id : 6]
Input [28]: [D_DATE_SK#8458, D_DATE_ID#8459, D_DATE#8460, D_MONTH_SEQ#8461, D_WEEK_SEQ#8462, D_QUARTER_SEQ#8463, D_YEAR#8464, D_DOW#8465, D_MOY#8466, D_DOM#8467, D_QOY#8468, D_FY_YEAR#8469, D_FY_QUARTER_SEQ#8470, D_FY_WEEK_SEQ#8471, D_DAY_NAME#8472, D_QUARTER_NAME#8473, D_HOLIDAY#8474, D_WEEKEND#8475, D_FOLLOWING_HOLIDAY#8476, D_FIRST_DOM#8477, D_LAST_DOM#8478, D_SAME_DAY_LY#8479, D_SAME_DAY_LQ#8480, D_CURRENT_DAY#8481, D_CURRENT_WEEK#8482, D_CURRENT_MONTH#8483, D_CURRENT_QUARTER#8484, D_CURRENT_YEAR#8485]
Condition : ((((isnotnull(D_YEAR#8464) AND isnotnull(D_MOY#8466)) AND (D_YEAR#8464 = 2002.000000000000000000)) AND (D_MOY#8466 >= 1.000000000000000000)) AND (D_MOY#8466 <= 4.000000000000000000))

(20) Project [codegen id : 6]
Output [1]: [D_DATE_SK#8458]
Input [28]: [D_DATE_SK#8458, D_DATE_ID#8459, D_DATE#8460, D_MONTH_SEQ#8461, D_WEEK_SEQ#8462, D_QUARTER_SEQ#8463, D_YEAR#8464, D_DOW#8465, D_MOY#8466, D_DOM#8467, D_QOY#8468, D_FY_YEAR#8469, D_FY_QUARTER_SEQ#8470, D_FY_WEEK_SEQ#8471, D_DAY_NAME#8472, D_QUARTER_NAME#8473, D_HOLIDAY#8474, D_WEEKEND#8475, D_FOLLOWING_HOLIDAY#8476, D_FIRST_DOM#8477, D_LAST_DOM#8478, D_SAME_DAY_LY#8479, D_SAME_DAY_LQ#8480, D_CURRENT_DAY#8481, D_CURRENT_WEEK#8482, D_CURRENT_MONTH#8483, D_CURRENT_QUARTER#8484, D_CURRENT_YEAR#8485]

(21) Sort [codegen id : 6]
Input [1]: [D_DATE_SK#8458]
Arguments: [d_date_sk#8458 ASC NULLS FIRST], false, 0

(22) SortMergeJoin [codegen id : 7]
Left keys [1]: [ws_sold_date_sk#8424]
Right keys [1]: [d_date_sk#8458]
Join condition: None

(23) Project [codegen id : 7]
Output [1]: [WS_BILL_CUSTOMER_SK#8428]
Input [3]: [WS_SOLD_DATE_SK#8424, WS_BILL_CUSTOMER_SK#8428, D_DATE_SK#8458]

(24) Sort [codegen id : 7]
Input [1]: [WS_BILL_CUSTOMER_SK#8428]
Arguments: [ws_bill_customer_sk#8428 ASC NULLS FIRST], false, 0

(25) SortMergeJoin
Left keys [1]: [C_CUSTOMER_SK#8327]
Right keys [1]: [ws_bill_customer_sk#8428]
Join condition: None

(26) BatchScan
Output [34]: [CS_SOLD_TIME_SK#8487, CS_SHIP_DATE_SK#8488, CS_BILL_CUSTOMER_SK#8489, CS_BILL_CDEMO_SK#8490, CS_BILL_HDEMO_SK#8491, CS_BILL_ADDR_SK#8492, CS_SHIP_CUSTOMER_SK#8493, CS_SHIP_CDEMO_SK#8494, CS_SHIP_HDEMO_SK#8495, CS_SHIP_ADDR_SK#8496, CS_CALL_CENTER_SK#8497, CS_CATALOG_PAGE_SK#8498, CS_SHIP_MODE_SK#8499, CS_WAREHOUSE_SK#8500, CS_ITEM_SK#8501, CS_PROMO_SK#8502, CS_ORDER_NUMBER#8503, CS_QUANTITY#8504, CS_WHOLESALE_COST#8505, CS_LIST_PRICE#8506, CS_SALES_PRICE#8507, CS_EXT_DISCOUNT_AMT#8508, CS_EXT_SALES_PRICE#8509, CS_EXT_WHOLESALE_COST#8510, CS_EXT_LIST_PRICE#8511, CS_EXT_TAX#8512, CS_COUPON_AMT#8513, CS_EXT_SHIP_COST#8514, CS_NET_PAID#8515, CS_NET_PAID_INC_TAX#8516, CS_NET_PAID_INC_SHIP#8517, CS_NET_PAID_INC_SHIP_TAX#8518, CS_NET_PROFIT#8519, CS_SOLD_DATE_SK#8486]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CATALOG_SALES, [CS_SOLD_TIME_SK#8788, CS_SHIP_DATE_SK#8789, CS_BILL_CUSTOMER_SK#8790, CS_BILL_CDEMO_SK#8791, CS_BILL_HDEMO_SK#8792, CS_BILL_ADDR_SK#8793, CS_SHIP_CUSTOMER_SK#8794, CS_SHIP_CDEMO_SK#8795, CS_SHIP_HDEMO_SK#8796, CS_SHIP_ADDR_SK#8797, CS_CALL_CENTER_SK#8798, CS_CATALOG_PAGE_SK#8799, CS_SHIP_MODE_SK#8800, CS_WAREHOUSE_SK#8801, CS_ITEM_SK#8802, CS_PROMO_SK#8803, CS_ORDER_NUMBER#8804, CS_QUANTITY#8805, CS_WHOLESALE_COST#8806, CS_LIST_PRICE#8807, CS_SALES_PRICE#8808, CS_EXT_DISCOUNT_AMT#8809, CS_EXT_SALES_PRICE#8810, CS_EXT_WHOLESALE_COST#8811, ... 10 more fields], [oracolumnref(CS_SOLD_TIME_SK#8788), oracolumnref(CS_SHIP_DATE_SK#8789), oracolumnref(CS_BILL_CUSTOMER_SK#8790), oracolumnref(CS_BILL_CDEMO_SK#8791), oracolumnref(CS_BILL_HDEMO_SK#8792), oracolumnref(CS_BILL_ADDR_SK#8793), oracolumnref(CS_SHIP_CUSTOMER_SK#8794), oracolumnref(CS_SHIP_CDEMO_SK#8795), oracolumnref(CS_SHIP_HDEMO_SK#8796), oracolumnref(CS_SHIP_ADDR_SK#8797), oracolumnref(CS_CALL_CENTER_SK#8798), oracolumnref(CS_CATALOG_PAGE_SK#8799), oracolumnref(CS_SHIP_MODE_SK#8800), oracolumnref(CS_WAREHOUSE_SK#8801), oracolumnref(CS_ITEM_SK#8802), oracolumnref(CS_PROMO_SK#8803), oracolumnref(CS_ORDER_NUMBER#8804), oracolumnref(CS_QUANTITY#8805), oracolumnref(CS_WHOLESALE_COST#8806), oracolumnref(CS_LIST_PRICE#8807), oracolumnref(CS_SALES_PRICE#8808), oracolumnref(CS_EXT_DISCOUNT_AMT#8809), oracolumnref(CS_EXT_SALES_PRICE#8810), oracolumnref(CS_EXT_WHOLESALE_COST#8811), ... 10 more fields]
PartitionSchema: struct<CS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<CS_SOLD_TIME_SK:decimal(38,18),CS_SHIP_DATE_SK:decimal(38,18),CS_BILL_CUSTOMER_SK:decimal(38,18),CS_BILL_CDEMO_SK:decimal(38,18),CS_BILL_HDEMO_SK:decimal(38,18),CS_BILL_ADDR_SK:decimal(38,18),CS_SHIP_CUSTOMER_SK:decimal(38,18),CS_SHIP_CDEMO_SK:decimal(38,18),CS_SHIP_HDEMO_SK:decimal(38,18),CS_SHIP_ADDR_SK:decimal(38,18),CS_CALL_CENTER_SK:decimal(38,18),CS_CATALOG_PAGE_SK:decimal(38,18),CS_SHIP_MODE_SK:decimal(38,18),CS_WAREHOUSE_SK:decimal(38,18),CS_ITEM_SK:decimal(38,18),CS_PROMO_SK:decimal(38,18),CS_ORDER_NUMBER:decimal(38,18),CS_QUANTITY:decimal(38,18),CS_WHOLESALE_COST:decimal(38,18),CS_LIST_PRICE:decimal(38,18),CS_SALES_PRICE:decimal(38,18),CS_EXT_DISCOUNT_AMT:decimal(38,18),CS_EXT_SALES_PRICE:decimal(38,18),CS_EXT_WHOLESALE_COST:decimal(38,18),CS_EXT_LIST_PRICE:decimal(38,18),CS_EXT_TAX:decimal(38,18),CS_COUPON_AMT:decimal(38,18),CS_EXT_SHIP_COST:decimal(38,18),CS_NET_PAID:decimal(38,18),CS_NET_PAID_INC_TAX:decimal(38,18),CS_NET_PAID_INC_SHIP:decimal(38,18),CS_NET_PAID_INC_SHIP_TAX:decimal(38,18),CS_NET_PROFIT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CS_SOLD_TIME_SK", "CS_SHIP_DATE_SK", "CS_BILL_CUSTOMER_SK", "CS_BILL_CDEMO_SK", "CS_BILL_HDEMO_SK", "CS_BILL_ADDR_SK", "CS_SHIP_CUSTOMER_SK", "CS_SHIP_CDEMO_SK", "CS_SHIP_HDEMO_SK", "CS_SHIP_ADDR_SK", "CS_CALL_CENTER_SK", "CS_CATALOG_PAGE_SK", "CS_SHIP_MODE_SK", "CS_WAREHOUSE_SK", "CS_ITEM_SK", "CS_PROMO_SK", "CS_ORDER_NUMBER", "CS_QUANTITY", "CS_WHOLESALE_COST", "CS_LIST_PRICE", "CS_SALES_PRICE", "CS_EXT_DISCOUNT_AMT", "CS_EXT_SALES_PRICE", "CS_EXT_WHOLESALE_COST", "CS_EXT_LIST_PRICE", "CS_EXT_TAX", "CS_COUPON_AMT", "CS_EXT_SHIP_COST", "CS_NET_PAID", "CS_NET_PAID_INC_TAX", "CS_NET_PAID_INC_SHIP", "CS_NET_PAID_INC_SHIP_TAX", "CS_NET_PROFIT", "CS_SOLD_DATE_SK"
from TPCDS.CATALOG_SALES
where "CS_SOLD_DATE_SK" IS NOT NULL

(27) Project [codegen id : 8]
Output [2]: [CS_SOLD_DATE_SK#8486, CS_SHIP_CUSTOMER_SK#8493]
Input [34]: [CS_SOLD_TIME_SK#8487, CS_SHIP_DATE_SK#8488, CS_BILL_CUSTOMER_SK#8489, CS_BILL_CDEMO_SK#8490, CS_BILL_HDEMO_SK#8491, CS_BILL_ADDR_SK#8492, CS_SHIP_CUSTOMER_SK#8493, CS_SHIP_CDEMO_SK#8494, CS_SHIP_HDEMO_SK#8495, CS_SHIP_ADDR_SK#8496, CS_CALL_CENTER_SK#8497, CS_CATALOG_PAGE_SK#8498, CS_SHIP_MODE_SK#8499, CS_WAREHOUSE_SK#8500, CS_ITEM_SK#8501, CS_PROMO_SK#8502, CS_ORDER_NUMBER#8503, CS_QUANTITY#8504, CS_WHOLESALE_COST#8505, CS_LIST_PRICE#8506, CS_SALES_PRICE#8507, CS_EXT_DISCOUNT_AMT#8508, CS_EXT_SALES_PRICE#8509, CS_EXT_WHOLESALE_COST#8510, CS_EXT_LIST_PRICE#8511, CS_EXT_TAX#8512, CS_COUPON_AMT#8513, CS_EXT_SHIP_COST#8514, CS_NET_PAID#8515, CS_NET_PAID_INC_TAX#8516, CS_NET_PAID_INC_SHIP#8517, CS_NET_PAID_INC_SHIP_TAX#8518, CS_NET_PROFIT#8519, CS_SOLD_DATE_SK#8486]

(28) Sort [codegen id : 8]
Input [2]: [CS_SOLD_DATE_SK#8486, CS_SHIP_CUSTOMER_SK#8493]
Arguments: [cs_sold_date_sk#8486 ASC NULLS FIRST], false, 0

(29) BatchScan
Output [28]: [D_DATE_SK#8520, D_DATE_ID#8521, D_DATE#8522, D_MONTH_SEQ#8523, D_WEEK_SEQ#8524, D_QUARTER_SEQ#8525, D_YEAR#8526, D_DOW#8527, D_MOY#8528, D_DOM#8529, D_QOY#8530, D_FY_YEAR#8531, D_FY_QUARTER_SEQ#8532, D_FY_WEEK_SEQ#8533, D_DAY_NAME#8534, D_QUARTER_NAME#8535, D_HOLIDAY#8536, D_WEEKEND#8537, D_FOLLOWING_HOLIDAY#8538, D_FIRST_DOM#8539, D_LAST_DOM#8540, D_SAME_DAY_LY#8541, D_SAME_DAY_LQ#8542, D_CURRENT_DAY#8543, D_CURRENT_WEEK#8544, D_CURRENT_MONTH#8545, D_CURRENT_QUARTER#8546, D_CURRENT_YEAR#8547]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#8856, D_DATE_ID#8857, D_DATE#8858, D_MONTH_SEQ#8859, D_WEEK_SEQ#8860, D_QUARTER_SEQ#8861, D_YEAR#8862, D_DOW#8863, D_MOY#8864, D_DOM#8865, D_QOY#8866, D_FY_YEAR#8867, D_FY_QUARTER_SEQ#8868, D_FY_WEEK_SEQ#8869, D_DAY_NAME#8870, D_QUARTER_NAME#8871, D_HOLIDAY#8872, D_WEEKEND#8873, D_FOLLOWING_HOLIDAY#8874, D_FIRST_DOM#8875, D_LAST_DOM#8876, D_SAME_DAY_LY#8877, D_SAME_DAY_LQ#8878, D_CURRENT_DAY#8879, ... 4 more fields], [oracolumnref(D_DATE_SK#8856), oracolumnref(D_DATE_ID#8857), oracolumnref(D_DATE#8858), oracolumnref(D_MONTH_SEQ#8859), oracolumnref(D_WEEK_SEQ#8860), oracolumnref(D_QUARTER_SEQ#8861), oracolumnref(D_YEAR#8862), oracolumnref(D_DOW#8863), oracolumnref(D_MOY#8864), oracolumnref(D_DOM#8865), oracolumnref(D_QOY#8866), oracolumnref(D_FY_YEAR#8867), oracolumnref(D_FY_QUARTER_SEQ#8868), oracolumnref(D_FY_WEEK_SEQ#8869), oracolumnref(D_DAY_NAME#8870), oracolumnref(D_QUARTER_NAME#8871), oracolumnref(D_HOLIDAY#8872), oracolumnref(D_WEEKEND#8873), oracolumnref(D_FOLLOWING_HOLIDAY#8874), oracolumnref(D_FIRST_DOM#8875), oracolumnref(D_LAST_DOM#8876), oracolumnref(D_SAME_DAY_LY#8877), oracolumnref(D_SAME_DAY_LQ#8878), oracolumnref(D_CURRENT_DAY#8879), ... 4 more fields], orabinaryopexpression(((((isnotnull(D_YEAR#8526) AND isnotnull(D_MOY#8528)) AND (D_YEAR#8526 = 2002.000000000000000000)) AND (D_MOY#8528 >= 1.000000000000000000)) AND (D_MOY#8528 <= 4.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_DATE_ID:string,D_DATE:date,D_MONTH_SEQ:decimal(38,18),D_WEEK_SEQ:decimal(38,18),D_QUARTER_SEQ:decimal(38,18),D_YEAR:decimal(38,18),D_DOW:decimal(38,18),D_MOY:decimal(38,18),D_DOM:decimal(38,18),D_QOY:decimal(38,18),D_FY_YEAR:decimal(38,18),D_FY_QUARTER_SEQ:decimal(38,18),D_FY_WEEK_SEQ:decimal(38,18),D_DAY_NAME:string,D_QUARTER_NAME:string,D_HOLIDAY:string,D_WEEKEND:string,D_FOLLOWING_HOLIDAY:string,D_FIRST_DOM:decimal(38,18),D_LAST_DOM:decimal(38,18),D_SAME_DAY_LY:decimal(38,18),D_SAME_DAY_LQ:decimal(38,18),D_CURRENT_DAY:string,D_CURRENT_WEEK:string,D_CURRENT_MONTH:string,D_CURRENT_QUARTER:string,D_CURRENT_YEAR:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000, 1.000000000000000000, 4.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_DATE_ID", "D_DATE", "D_MONTH_SEQ", "D_WEEK_SEQ", "D_QUARTER_SEQ", "D_YEAR", "D_DOW", "D_MOY", "D_DOM", "D_QOY", "D_FY_YEAR", "D_FY_QUARTER_SEQ", "D_FY_WEEK_SEQ", "D_DAY_NAME", "D_QUARTER_NAME", "D_HOLIDAY", "D_WEEKEND", "D_FOLLOWING_HOLIDAY", "D_FIRST_DOM", "D_LAST_DOM", "D_SAME_DAY_LY", "D_SAME_DAY_LQ", "D_CURRENT_DAY", "D_CURRENT_WEEK", "D_CURRENT_MONTH", "D_CURRENT_QUARTER", "D_CURRENT_YEAR"
from TPCDS.DATE_DIM
where (((("D_YEAR" IS NOT NULL AND "D_MOY" IS NOT NULL) AND ("D_YEAR" = ?)) AND ("D_MOY" >= ?)) AND ("D_MOY" <= ?))

(30) Filter [codegen id : 9]
Input [28]: [D_DATE_SK#8520, D_DATE_ID#8521, D_DATE#8522, D_MONTH_SEQ#8523, D_WEEK_SEQ#8524, D_QUARTER_SEQ#8525, D_YEAR#8526, D_DOW#8527, D_MOY#8528, D_DOM#8529, D_QOY#8530, D_FY_YEAR#8531, D_FY_QUARTER_SEQ#8532, D_FY_WEEK_SEQ#8533, D_DAY_NAME#8534, D_QUARTER_NAME#8535, D_HOLIDAY#8536, D_WEEKEND#8537, D_FOLLOWING_HOLIDAY#8538, D_FIRST_DOM#8539, D_LAST_DOM#8540, D_SAME_DAY_LY#8541, D_SAME_DAY_LQ#8542, D_CURRENT_DAY#8543, D_CURRENT_WEEK#8544, D_CURRENT_MONTH#8545, D_CURRENT_QUARTER#8546, D_CURRENT_YEAR#8547]
Condition : ((((isnotnull(D_YEAR#8526) AND isnotnull(D_MOY#8528)) AND (D_YEAR#8526 = 2002.000000000000000000)) AND (D_MOY#8528 >= 1.000000000000000000)) AND (D_MOY#8528 <= 4.000000000000000000))

(31) Project [codegen id : 9]
Output [1]: [D_DATE_SK#8520]
Input [28]: [D_DATE_SK#8520, D_DATE_ID#8521, D_DATE#8522, D_MONTH_SEQ#8523, D_WEEK_SEQ#8524, D_QUARTER_SEQ#8525, D_YEAR#8526, D_DOW#8527, D_MOY#8528, D_DOM#8529, D_QOY#8530, D_FY_YEAR#8531, D_FY_QUARTER_SEQ#8532, D_FY_WEEK_SEQ#8533, D_DAY_NAME#8534, D_QUARTER_NAME#8535, D_HOLIDAY#8536, D_WEEKEND#8537, D_FOLLOWING_HOLIDAY#8538, D_FIRST_DOM#8539, D_LAST_DOM#8540, D_SAME_DAY_LY#8541, D_SAME_DAY_LQ#8542, D_CURRENT_DAY#8543, D_CURRENT_WEEK#8544, D_CURRENT_MONTH#8545, D_CURRENT_QUARTER#8546, D_CURRENT_YEAR#8547]

(32) Sort [codegen id : 9]
Input [1]: [D_DATE_SK#8520]
Arguments: [d_date_sk#8520 ASC NULLS FIRST], false, 0

(33) SortMergeJoin [codegen id : 10]
Left keys [1]: [cs_sold_date_sk#8486]
Right keys [1]: [d_date_sk#8520]
Join condition: None

(34) Project [codegen id : 10]
Output [1]: [CS_SHIP_CUSTOMER_SK#8493]
Input [3]: [CS_SOLD_DATE_SK#8486, CS_SHIP_CUSTOMER_SK#8493, D_DATE_SK#8520]

(35) Sort [codegen id : 10]
Input [1]: [CS_SHIP_CUSTOMER_SK#8493]
Arguments: [cs_ship_customer_sk#8493 ASC NULLS FIRST], false, 0

(36) SortMergeJoin
Left keys [1]: [C_CUSTOMER_SK#8327]
Right keys [1]: [cs_ship_customer_sk#8493]
Join condition: None

(37) Filter [codegen id : 11]
Input [5]: [C_CUSTOMER_SK#8327, C_CURRENT_CDEMO_SK#8329, C_CURRENT_ADDR_SK#8331, exists#8940, exists#8941]
Condition : (exists#8940 OR exists#8941)

(38) Project [codegen id : 11]
Output [2]: [C_CURRENT_CDEMO_SK#8329, C_CURRENT_ADDR_SK#8331]
Input [5]: [C_CUSTOMER_SK#8327, C_CURRENT_CDEMO_SK#8329, C_CURRENT_ADDR_SK#8331, exists#8940, exists#8941]

(39) Sort [codegen id : 11]
Input [2]: [C_CURRENT_CDEMO_SK#8329, C_CURRENT_ADDR_SK#8331]
Arguments: [c_current_addr_sk#8331 ASC NULLS FIRST], false, 0

(40) BatchScan
Output [2]: [CA_ADDRESS_SK#8345, CA_COUNTY#8352]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER_ADDRESS, [CA_ADDRESS_SK#8918, CA_COUNTY#8919], [oracolumnref(CA_ADDRESS_SK#8918), oracolumnref(CA_COUNTY#8919)], orain(CA_COUNTY#8352 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County))
PartitionSchema: struct<>
ReadSchema: struct<CA_ADDRESS_SK:decimal(38,18),CA_COUNTY:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: Rush County, Toole County, Jefferson County, Dona Ana County, La Porte County
oraPushdownSQL: select "CA_ADDRESS_SK", "CA_COUNTY"
from TPCDS.CUSTOMER_ADDRESS
where "CA_COUNTY" IN ( ?, ?, ?, ?, ? )

(41) Filter [codegen id : 12]
Input [2]: [CA_ADDRESS_SK#8345, CA_COUNTY#8352]
Condition : CA_COUNTY#8352 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County)

(42) Project [codegen id : 12]
Output [1]: [CA_ADDRESS_SK#8345]
Input [2]: [CA_ADDRESS_SK#8345, CA_COUNTY#8352]

(43) Sort [codegen id : 12]
Input [1]: [CA_ADDRESS_SK#8345]
Arguments: [ca_address_sk#8345 ASC NULLS FIRST], false, 0

(44) SortMergeJoin [codegen id : 13]
Left keys [1]: [c_current_addr_sk#8331]
Right keys [1]: [ca_address_sk#8345]
Join condition: None

(45) Project [codegen id : 13]
Output [1]: [C_CURRENT_CDEMO_SK#8329]
Input [3]: [C_CURRENT_CDEMO_SK#8329, C_CURRENT_ADDR_SK#8331, CA_ADDRESS_SK#8345]

(46) Sort [codegen id : 13]
Input [1]: [C_CURRENT_CDEMO_SK#8329]
Arguments: [c_current_cdemo_sk#8329 ASC NULLS FIRST], false, 0

(47) BatchScan
Output [9]: [CD_DEMO_SK#8358, CD_GENDER#8359, CD_MARITAL_STATUS#8360, CD_EDUCATION_STATUS#8361, CD_PURCHASE_ESTIMATE#8362, CD_CREDIT_RATING#8363, CD_DEP_COUNT#8364, CD_DEP_EMPLOYED_COUNT#8365, CD_DEP_COLLEGE_COUNT#8366]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER_DEMOGRAPHICS, [CD_DEMO_SK#8922, CD_GENDER#8923, CD_MARITAL_STATUS#8924, CD_EDUCATION_STATUS#8925, CD_PURCHASE_ESTIMATE#8926, CD_CREDIT_RATING#8927, CD_DEP_COUNT#8928, CD_DEP_EMPLOYED_COUNT#8929, CD_DEP_COLLEGE_COUNT#8930], [oracolumnref(CD_DEMO_SK#8922), oracolumnref(CD_GENDER#8923), oracolumnref(CD_MARITAL_STATUS#8924), oracolumnref(CD_EDUCATION_STATUS#8925), oracolumnref(CD_PURCHASE_ESTIMATE#8926), oracolumnref(CD_CREDIT_RATING#8927), oracolumnref(CD_DEP_COUNT#8928), oracolumnref(CD_DEP_EMPLOYED_COUNT#8929), oracolumnref(CD_DEP_COLLEGE_COUNT#8930)]
PartitionSchema: struct<>
ReadSchema: struct<CD_DEMO_SK:decimal(38,18),CD_GENDER:string,CD_MARITAL_STATUS:string,CD_EDUCATION_STATUS:string,CD_PURCHASE_ESTIMATE:decimal(38,18),CD_CREDIT_RATING:string,CD_DEP_COUNT:decimal(38,18),CD_DEP_EMPLOYED_COUNT:decimal(38,18),CD_DEP_COLLEGE_COUNT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "CD_DEMO_SK", "CD_GENDER", "CD_MARITAL_STATUS", "CD_EDUCATION_STATUS", "CD_PURCHASE_ESTIMATE", "CD_CREDIT_RATING", "CD_DEP_COUNT", "CD_DEP_EMPLOYED_COUNT", "CD_DEP_COLLEGE_COUNT"
from TPCDS.CUSTOMER_DEMOGRAPHICS

(48) Project [codegen id : 14]
Output [9]: [CD_DEMO_SK#8358, CD_GENDER#8359, CD_MARITAL_STATUS#8360, CD_EDUCATION_STATUS#8361, CD_PURCHASE_ESTIMATE#8362, CD_CREDIT_RATING#8363, CD_DEP_COUNT#8364, CD_DEP_EMPLOYED_COUNT#8365, CD_DEP_COLLEGE_COUNT#8366]
Input [9]: [CD_DEMO_SK#8358, CD_GENDER#8359, CD_MARITAL_STATUS#8360, CD_EDUCATION_STATUS#8361, CD_PURCHASE_ESTIMATE#8362, CD_CREDIT_RATING#8363, CD_DEP_COUNT#8364, CD_DEP_EMPLOYED_COUNT#8365, CD_DEP_COLLEGE_COUNT#8366]

(49) Sort [codegen id : 14]
Input [9]: [CD_DEMO_SK#8358, CD_GENDER#8359, CD_MARITAL_STATUS#8360, CD_EDUCATION_STATUS#8361, CD_PURCHASE_ESTIMATE#8362, CD_CREDIT_RATING#8363, CD_DEP_COUNT#8364, CD_DEP_EMPLOYED_COUNT#8365, CD_DEP_COLLEGE_COUNT#8366]
Arguments: [cd_demo_sk#8358 ASC NULLS FIRST], false, 0

(50) SortMergeJoin [codegen id : 15]
Left keys [1]: [c_current_cdemo_sk#8329]
Right keys [1]: [cd_demo_sk#8358]
Join condition: None

(51) Project [codegen id : 15]
Output [8]: [CD_GENDER#8359, CD_MARITAL_STATUS#8360, CD_EDUCATION_STATUS#8361, CD_PURCHASE_ESTIMATE#8362, CD_CREDIT_RATING#8363, CD_DEP_COUNT#8364, CD_DEP_EMPLOYED_COUNT#8365, CD_DEP_COLLEGE_COUNT#8366]
Input [10]: [C_CURRENT_CDEMO_SK#8329, CD_DEMO_SK#8358, CD_GENDER#8359, CD_MARITAL_STATUS#8360, CD_EDUCATION_STATUS#8361, CD_PURCHASE_ESTIMATE#8362, CD_CREDIT_RATING#8363, CD_DEP_COUNT#8364, CD_DEP_EMPLOYED_COUNT#8365, CD_DEP_COLLEGE_COUNT#8366]

(52) HashAggregate [codegen id : 15]
Input [8]: [CD_GENDER#8359, CD_MARITAL_STATUS#8360, CD_EDUCATION_STATUS#8361, CD_PURCHASE_ESTIMATE#8362, CD_CREDIT_RATING#8363, CD_DEP_COUNT#8364, CD_DEP_EMPLOYED_COUNT#8365, CD_DEP_COLLEGE_COUNT#8366]
Keys [8]: [cd_gender#8359, cd_marital_status#8360, cd_education_status#8361, cd_purchase_estimate#8362, cd_credit_rating#8363, cd_dep_count#8364, cd_dep_employed_count#8365, cd_dep_college_count#8366]
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#8942L]
Results [9]: [cd_gender#8359, cd_marital_status#8360, cd_education_status#8361, cd_purchase_estimate#8362, cd_credit_rating#8363, cd_dep_count#8364, cd_dep_employed_count#8365, cd_dep_college_count#8366, count#8943L]

(53) HashAggregate [codegen id : 15]
Input [9]: [cd_gender#8359, cd_marital_status#8360, cd_education_status#8361, cd_purchase_estimate#8362, cd_credit_rating#8363, cd_dep_count#8364, cd_dep_employed_count#8365, cd_dep_college_count#8366, count#8943L]
Keys [8]: [cd_gender#8359, cd_marital_status#8360, cd_education_status#8361, cd_purchase_estimate#8362, cd_credit_rating#8363, cd_dep_count#8364, cd_dep_employed_count#8365, cd_dep_college_count#8366]
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#8367L]
Results [14]: [cd_gender#8359, cd_marital_status#8360, cd_education_status#8361, count(1)#8367L AS cnt1#8321L, cd_purchase_estimate#8362, count(1)#8367L AS cnt2#8322L, cd_credit_rating#8363, count(1)#8367L AS cnt3#8323L, cd_dep_count#8364, count(1)#8367L AS cnt4#8324L, cd_dep_employed_count#8365, count(1)#8367L AS cnt5#8325L, cd_dep_college_count#8366, count(1)#8367L AS cnt6#8326L]

(54) TakeOrderedAndProject
Input [14]: [cd_gender#8359, cd_marital_status#8360, cd_education_status#8361, cnt1#8321L, cd_purchase_estimate#8362, cnt2#8322L, cd_credit_rating#8363, cnt3#8323L, cd_dep_count#8364, cnt4#8324L, cd_dep_employed_count#8365, cnt5#8325L, cd_dep_college_count#8366, cnt6#8326L]
Arguments: 100, [cd_gender#8359 ASC NULLS FIRST, cd_marital_status#8360 ASC NULLS FIRST, cd_education_status#8361 ASC NULLS FIRST, cd_purchase_estimate#8362 ASC NULLS FIRST, cd_credit_rating#8363 ASC NULLS FIRST, cd_dep_count#8364 ASC NULLS FIRST, cd_dep_employed_count#8365 ASC NULLS FIRST, cd_dep_college_count#8366 ASC NULLS FIRST], [cd_gender#8359, cd_marital_status#8360, cd_education_status#8361, cnt1#8321L, cd_purchase_estimate#8362, cnt2#8322L, cd_credit_rating#8363, cnt3#8323L, cd_dep_count#8364, cnt4#8324L, cd_dep_employed_count#8365, cnt5#8325L, cd_dep_college_count#8366, cnt6#8326L]


Query q11

Spark SQL

with year_total as (
 select c_customer_id customer_id
       ,c_first_name customer_first_name
       ,c_last_name customer_last_name
       ,c_preferred_cust_flag customer_preferred_cust_flag
       ,c_birth_country customer_birth_country
       ,c_login customer_login
       ,c_email_address customer_email_address
       ,d_year dyear
       ,sum(ss_ext_list_price-ss_ext_discount_amt) year_total
       ,'s' sale_type
 from customer
     ,store_sales
     ,date_dim
 where c_customer_sk = ss_customer_sk
   and ss_sold_date_sk = d_date_sk
 group by c_customer_id
         ,c_first_name
         ,c_last_name
         ,c_preferred_cust_flag
         ,c_birth_country
         ,c_login
         ,c_email_address
         ,d_year
 union all
 select c_customer_id customer_id
       ,c_first_name customer_first_name
       ,c_last_name customer_last_name
       ,c_preferred_cust_flag customer_preferred_cust_flag
       ,c_birth_country customer_birth_country
       ,c_login customer_login
       ,c_email_address customer_email_address
       ,d_year dyear
       ,sum(ws_ext_list_price-ws_ext_discount_amt) year_total
       ,'w' sale_type
 from customer
     ,web_sales
     ,date_dim
 where c_customer_sk = ws_bill_customer_sk
   and ws_sold_date_sk = d_date_sk
 group by c_customer_id
         ,c_first_name
         ,c_last_name
         ,c_preferred_cust_flag
         ,c_birth_country
         ,c_login
         ,c_email_address
         ,d_year
         )
  select
                  t_s_secyear.customer_id
                 ,t_s_secyear.customer_first_name
                 ,t_s_secyear.customer_last_name
                 ,t_s_secyear.customer_preferred_cust_flag
 from year_total t_s_firstyear
     ,year_total t_s_secyear
     ,year_total t_w_firstyear
     ,year_total t_w_secyear
 where t_s_secyear.customer_id = t_s_firstyear.customer_id
         and t_s_firstyear.customer_id = t_w_secyear.customer_id
         and t_s_firstyear.customer_id = t_w_firstyear.customer_id
         and t_s_firstyear.sale_type = 's'
         and t_w_firstyear.sale_type = 'w'
         and t_s_secyear.sale_type = 's'
         and t_w_secyear.sale_type = 'w'
         and t_s_firstyear.dyear = 2001
         and t_s_secyear.dyear = 2001+1
         and t_w_firstyear.dyear = 2001
         and t_w_secyear.dyear = 2001+1
         and t_s_firstyear.year_total > 0
         and t_w_firstyear.year_total > 0
         and case when t_w_firstyear.year_total > 0 then t_w_secyear.year_total / t_w_firstyear.year_total else 0.0 end
             > case when t_s_firstyear.year_total > 0 then t_s_secyear.year_total / t_s_firstyear.year_total else 0.0 end
 order by t_s_secyear.customer_id
         ,t_s_secyear.customer_first_name
         ,t_s_secyear.customer_last_name
         ,t_s_secyear.customer_preferred_cust_flag
 limit 100;
 

Spark Plan with Pushdown turned on

== Physical Plan ==
TakeOrderedAndProject (3)
+- * Project (2)
   +- BatchScan (1)


(1) BatchScan
Output [4]: [customer_id#11028, customer_first_name#11029, customer_last_name#11030, customer_preferred_cust_flag#11031]
OraPlan: 00 OraSingleQueryBlock [customer_id#11028, customer_first_name#11029, customer_last_name#11030, customer_preferred_cust_flag#11031], [oracolumnref(customer_id#11028), oracolumnref(customer_first_name#11029), oracolumnref(customer_last_name#11030), oracolumnref(customer_preferred_cust_flag#11031)], orabinaryopexpression((isnotnull(year_total#10412) AND (year_total#10412 > 0E-17)))
01 :- OraSingleQueryBlock [c_customer_id#10425 AS customer_id#10404, sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#10459 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#10456 as decimal(38,17)))), DecimalType(38,17), true)) AS year_total#10412], [oraalias(c_customer_id#10425 AS customer_id#10404), oraalias(sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#10459 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#10456 as decimal(38,17)))), DecimalType(38,17), true)) AS year_total#10412)], orabinaryopexpression((isnotnull(SS_CUSTOMER_SK#10445) AND (isnotnull(D_YEAR#10471) AND (D_YEAR#10471 = 2001.000000000000000000)))), List(oracolumnref(c_customer_id#10425), oracolumnref(c_first_name#10432), oracolumnref(c_last_name#10433), oracolumnref(c_preferred_cust_flag#10434), oracolumnref(c_birth_country#10438), oracolumnref(c_login#10439), oracolumnref(c_email_address#10440), oracolumnref(d_year#10471))
02 :  :- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#10424, C_CUSTOMER_ID#10425, C_FIRST_NAME#10432, C_LAST_NAME#10433, C_PREFERRED_CUST_FLAG#10434, C_BIRTH_COUNTRY#10438, C_LOGIN#10439, C_EMAIL_ADDRESS#10440]
03 :  :- OraTableScan TPCDS.STORE_SALES, [SS_CUSTOMER_SK#10445, SS_EXT_DISCOUNT_AMT#10456, SS_EXT_LIST_PRICE#10459, SS_SOLD_DATE_SK#10442]
04 :  +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#10465, D_YEAR#10471]
05 :- OraSingleQueryBlock [c_customer_id#10574 AS customer_id#11028, c_first_name#10581 AS customer_first_name#11029, c_last_name#10582 AS customer_last_name#11030, c_preferred_cust_flag#10583 AS customer_preferred_cust_flag#11031, sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#10608 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#10605 as decimal(38,17)))), DecimalType(38,17), true)) AS year_total#11036], [oraalias(c_customer_id#10574 AS customer_id#11028), oraalias(c_first_name#10581 AS customer_first_name#11029), oraalias(c_last_name#10582 AS customer_last_name#11030), oraalias(c_preferred_cust_flag#10583 AS customer_preferred_cust_flag#11031), oraalias(sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#10608 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#10605 as decimal(38,17)))), DecimalType(38,17), true)) AS year_total#11036)], orabinaryopexpression((isnotnull(SS_CUSTOMER_SK#10594) AND (isnotnull(D_YEAR#10620) AND (D_YEAR#10620 = 2002.000000000000000000)))), List(oracolumnref(c_customer_id#10574), oracolumnref(c_first_name#10581), oracolumnref(c_last_name#10582), oracolumnref(c_preferred_cust_flag#10583), oracolumnref(c_birth_country#10587), oracolumnref(c_login#10588), oracolumnref(c_email_address#10589), oracolumnref(d_year#10620))
06 :  :- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#10573, C_CUSTOMER_ID#10574, C_FIRST_NAME#10581, C_LAST_NAME#10582, C_PREFERRED_CUST_FLAG#10583, C_BIRTH_COUNTRY#10587, C_LOGIN#10588, C_EMAIL_ADDRESS#10589]
07 :  :- OraTableScan TPCDS.STORE_SALES, [SS_CUSTOMER_SK#10594, SS_EXT_DISCOUNT_AMT#10605, SS_EXT_LIST_PRICE#10608, SS_SOLD_DATE_SK#10591]
08 :  +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#10614, D_YEAR#10620]
09 :- OraSingleQueryBlock [customer_id#10414 AS customer_id#11038, year_total#10422 AS year_total#11046], [oraalias(customer_id#10414 AS customer_id#11038), oraalias(year_total#10422 AS year_total#11046)], orabinaryopexpression((isnotnull(year_total#10422) AND (year_total#10422 > 0E-17)))
10 :  +- OraSingleQueryBlock [c_customer_id#10792 AS customer_id#10414, sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10834 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#10831 as decimal(38,17)))), DecimalType(38,17), true)) AS year_total#10422], [oraalias(c_customer_id#10792 AS customer_id#10414), oraalias(sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10834 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#10831 as decimal(38,17)))), DecimalType(38,17), true)) AS year_total#10422)], orabinaryopexpression((isnotnull(WS_BILL_CUSTOMER_SK#10813) AND (isnotnull(D_YEAR#10849) AND (D_YEAR#10849 = 2001.000000000000000000)))), List(oracolumnref(c_customer_id#10792), oracolumnref(c_first_name#10799), oracolumnref(c_last_name#10800), oracolumnref(c_preferred_cust_flag#10801), oracolumnref(c_birth_country#10805), oracolumnref(c_login#10806), oracolumnref(c_email_address#10807), oracolumnref(d_year#10849))
11 :     :- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#10791, C_CUSTOMER_ID#10792, C_FIRST_NAME#10799, C_LAST_NAME#10800, C_PREFERRED_CUST_FLAG#10801, C_BIRTH_COUNTRY#10805, C_LOGIN#10806, C_EMAIL_ADDRESS#10807]
12 :     :- OraTableScan TPCDS.WEB_SALES, [WS_BILL_CUSTOMER_SK#10813, WS_EXT_DISCOUNT_AMT#10831, WS_EXT_LIST_PRICE#10834, WS_SOLD_DATE_SK#10809]
13 :     +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#10843, D_YEAR#10849]
14 +- OraSingleQueryBlock [c_customer_id#10941 AS customer_id#11048, sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10983 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#10980 as decimal(38,17)))), DecimalType(38,17), true)) AS year_total#11056], [oraalias(c_customer_id#10941 AS customer_id#11048), oraalias(sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10983 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#10980 as decimal(38,17)))), DecimalType(38,17), true)) AS year_total#11056)], orabinaryopexpression((isnotnull(WS_BILL_CUSTOMER_SK#10962) AND (isnotnull(D_YEAR#10998) AND (D_YEAR#10998 = 2002.000000000000000000)))), List(oracolumnref(c_customer_id#10941), oracolumnref(c_first_name#10948), oracolumnref(c_last_name#10949), oracolumnref(c_preferred_cust_flag#10950), oracolumnref(c_birth_country#10954), oracolumnref(c_login#10955), oracolumnref(c_email_address#10956), oracolumnref(d_year#10998))
15    :- OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#10940, C_CUSTOMER_ID#10941, C_FIRST_NAME#10948, C_LAST_NAME#10949, C_PREFERRED_CUST_FLAG#10950, C_BIRTH_COUNTRY#10954, C_LOGIN#10955, C_EMAIL_ADDRESS#10956]
16    :- OraTableScan TPCDS.WEB_SALES, [WS_BILL_CUSTOMER_SK#10962, WS_EXT_DISCOUNT_AMT#10980, WS_EXT_LIST_PRICE#10983, WS_SOLD_DATE_SK#10958]
17    +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#10992, D_YEAR#10998]
ReadSchema: struct<customer_id:string,customer_first_name:string,customer_last_name:string,customer_preferred_cust_flag:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2001.000000000000000000, 2002.000000000000000000, 2001.000000000000000000, 0E-17, 2002.000000000000000000, 0E-17
oraPushdownSQL: select "sparkora_1"."customer_id", "customer_first_name", "customer_last_name", "customer_preferred_cust_flag"
from ( select "C_CUSTOMER_ID" AS "customer_id", SUM(("SS_EXT_LIST_PRICE" - "SS_EXT_DISCOUNT_AMT")) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.STORE_SALES  on ("C_CUSTOMER_SK" = "SS_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK")
where (("SS_CUSTOMER_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_0" join ( select "C_CUSTOMER_ID" AS "customer_id", "C_FIRST_NAME" AS "customer_first_name", "C_LAST_NAME" AS "customer_last_name", "C_PREFERRED_CUST_FLAG" AS "customer_preferred_cust_flag", SUM(("SS_EXT_LIST_PRICE" - "SS_EXT_DISCOUNT_AMT")) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.STORE_SALES  on ("C_CUSTOMER_SK" = "SS_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK")
where (("SS_CUSTOMER_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_1" on ("sparkora_0"."customer_id" = "sparkora_1"."customer_id") join ( select "customer_id" AS "customer_id", "year_total" AS "year_total"
from ( select "C_CUSTOMER_ID" AS "customer_id", SUM(("WS_EXT_LIST_PRICE" - "WS_EXT_DISCOUNT_AMT")) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.WEB_SALES  on ("C_CUSTOMER_SK" = "WS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where (("WS_BILL_CUSTOMER_SK" IS NOT NULL AND "WS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) 
where ("year_total" IS NOT NULL AND ("year_total" > ?)) ) "sparkora_2" on ("sparkora_0"."customer_id" = "sparkora_2"."customer_id") join ( select "C_CUSTOMER_ID" AS "customer_id", SUM(("WS_EXT_LIST_PRICE" - "WS_EXT_DISCOUNT_AMT")) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.WEB_SALES  on ("C_CUSTOMER_SK" = "WS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where (("WS_BILL_CUSTOMER_SK" IS NOT NULL AND "WS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_3" on (("sparkora_0"."customer_id" = "sparkora_3"."customer_id") AND (CASE WHEN ("sparkora_2"."year_total" > 0E-17) THEN ("sparkora_3"."year_total" / "sparkora_2"."year_total") ELSE 0.000000 END > CASE WHEN ("sparkora_0"."year_total" > 0E-17) THEN ("sparkora_1"."year_total" / "sparkora_0"."year_total") ELSE 0.000000 END))
where ("sparkora_0"."year_total" IS NOT NULL AND ("sparkora_0"."year_total" > ?))

(2) Project [codegen id : 1]
Output [4]: [customer_id#11028, customer_first_name#11029, customer_last_name#11030, customer_preferred_cust_flag#11031]
Input [4]: [customer_id#11028, customer_first_name#11029, customer_last_name#11030, customer_preferred_cust_flag#11031]

(3) TakeOrderedAndProject
Input [4]: [customer_id#11028, customer_first_name#11029, customer_last_name#11030, customer_preferred_cust_flag#11031]
Arguments: 100, [customer_id#11028 ASC NULLS FIRST, customer_first_name#11029 ASC NULLS FIRST, customer_last_name#11030 ASC NULLS FIRST, customer_preferred_cust_flag#11031 ASC NULLS FIRST], [customer_id#11028, customer_first_name#11029, customer_last_name#11030, customer_preferred_cust_flag#11031]


Pushed oracle sqls

select "sparkora_1"."customer_id", "customer_first_name", "customer_last_name", "customer_preferred_cust_flag"
from ( select "C_CUSTOMER_ID" AS "customer_id", SUM(("SS_EXT_LIST_PRICE" - "SS_EXT_DISCOUNT_AMT")) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.STORE_SALES  on ("C_CUSTOMER_SK" = "SS_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK")
where (("SS_CUSTOMER_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2001.000000000000000000))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_0" join ( select "C_CUSTOMER_ID" AS "customer_id", "C_FIRST_NAME" AS "customer_first_name", "C_LAST_NAME" AS "customer_last_name", "C_PREFERRED_CUST_FLAG" AS "customer_preferred_cust_flag", SUM(("SS_EXT_LIST_PRICE" - "SS_EXT_DISCOUNT_AMT")) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.STORE_SALES  on ("C_CUSTOMER_SK" = "SS_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK")
where (("SS_CUSTOMER_SK" IS NOT NULL AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2002.000000000000000000))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_1" on ("sparkora_0"."customer_id" = "sparkora_1"."customer_id") join ( select "customer_id" AS "customer_id", "year_total" AS "year_total"
from ( select "C_CUSTOMER_ID" AS "customer_id", SUM(("WS_EXT_LIST_PRICE" - "WS_EXT_DISCOUNT_AMT")) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.WEB_SALES  on ("C_CUSTOMER_SK" = "WS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where (("WS_BILL_CUSTOMER_SK" IS NOT NULL AND "WS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2001.000000000000000000))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) 
where ("year_total" IS NOT NULL AND ("year_total" > 0E-17)) ) "sparkora_2" on ("sparkora_0"."customer_id" = "sparkora_2"."customer_id") join ( select "C_CUSTOMER_ID" AS "customer_id", SUM(("WS_EXT_LIST_PRICE" - "WS_EXT_DISCOUNT_AMT")) AS "year_total"
from TPCDS.CUSTOMER  join TPCDS.WEB_SALES  on ("C_CUSTOMER_SK" = "WS_BILL_CUSTOMER_SK") join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where (("WS_BILL_CUSTOMER_SK" IS NOT NULL AND "WS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2002.000000000000000000))) group by "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS", "D_YEAR" ) "sparkora_3" on (("sparkora_0"."customer_id" = "sparkora_3"."customer_id") AND (CASE WHEN ("sparkora_2"."year_total" > 0E-17) THEN ("sparkora_3"."year_total" / "sparkora_2"."year_total") ELSE 0.000000 END > CASE WHEN ("sparkora_0"."year_total" > 0E-17) THEN ("sparkora_1"."year_total" / "sparkora_0"."year_total") ELSE 0.000000 END))
where ("sparkora_0"."year_total" IS NOT NULL AND ("sparkora_0"."year_total" > 0E-17))

Spark Plan with Pushdown turned off

== Physical Plan ==
TakeOrderedAndProject (77)
+- * Project (76)
   +- * SortMergeJoin Inner (75)
      :- * Project (57)
      :  +- * SortMergeJoin Inner (56)
      :     :- * SortMergeJoin Inner (36)
      :     :  :- * Sort (18)
      :     :  :  +- * Filter (17)
      :     :  :     +- * HashAggregate (16)
      :     :  :        +- * HashAggregate (15)
      :     :  :           +- * Project (14)
      :     :  :              +- * SortMergeJoin Inner (13)
      :     :  :                 :- * Sort (9)
      :     :  :                 :  +- * Project (8)
      :     :  :                 :     +- * SortMergeJoin Inner (7)
      :     :  :                 :        :- * Sort (3)
      :     :  :                 :        :  +- * Project (2)
      :     :  :                 :        :     +- BatchScan (1)
      :     :  :                 :        +- * Sort (6)
      :     :  :                 :           +- * Filter (5)
      :     :  :                 :              +- BatchScan (4)
      :     :  :                 +- * Sort (12)
      :     :  :                    +- * Filter (11)
      :     :  :                       +- BatchScan (10)
      :     :  +- * Sort (35)
      :     :     +- * HashAggregate (34)
      :     :        +- * HashAggregate (33)
      :     :           +- * Project (32)
      :     :              +- * SortMergeJoin Inner (31)
      :     :                 :- * Sort (27)
      :     :                 :  +- * Project (26)
      :     :                 :     +- * SortMergeJoin Inner (25)
      :     :                 :        :- * Sort (21)
      :     :                 :        :  +- * Project (20)
      :     :                 :        :     +- BatchScan (19)
      :     :                 :        +- * Sort (24)
      :     :                 :           +- * Filter (23)
      :     :                 :              +- BatchScan (22)
      :     :                 +- * Sort (30)
      :     :                    +- * Filter (29)
      :     :                       +- BatchScan (28)
      :     +- * Sort (55)
      :        +- * Project (54)
      :           +- * Filter (53)
      :              +- * HashAggregate (52)
      :                 +- * HashAggregate (51)
      :                    +- * Project (50)
      :                       +- * SortMergeJoin Inner (49)
      :                          :- * Sort (45)
      :                          :  +- * Project (44)
      :                          :     +- * SortMergeJoin Inner (43)
      :                          :        :- * Sort (39)
      :                          :        :  +- * Project (38)
      :                          :        :     +- BatchScan (37)
      :                          :        +- * Sort (42)
      :                          :           +- * Filter (41)
      :                          :              +- BatchScan (40)
      :                          +- * Sort (48)
      :                             +- * Filter (47)
      :                                +- BatchScan (46)
      +- * Sort (74)
         +- * HashAggregate (73)
            +- * HashAggregate (72)
               +- * Project (71)
                  +- * SortMergeJoin Inner (70)
                     :- * Sort (66)
                     :  +- * Project (65)
                     :     +- * SortMergeJoin Inner (64)
                     :        :- * Sort (60)
                     :        :  +- * Project (59)
                     :        :     +- BatchScan (58)
                     :        +- * Sort (63)
                     :           +- * Filter (62)
                     :              +- BatchScan (61)
                     +- * Sort (69)
                        +- * Filter (68)
                           +- BatchScan (67)


(1) BatchScan
Output [8]: [C_CUSTOMER_SK#9590, C_CUSTOMER_ID#9591, C_FIRST_NAME#9598, C_LAST_NAME#9599, C_PREFERRED_CUST_FLAG#9600, C_BIRTH_COUNTRY#9604, C_LOGIN#9605, C_EMAIL_ADDRESS#9606]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#10228, C_CUSTOMER_ID#10229, C_FIRST_NAME#10230, C_LAST_NAME#10231, C_PREFERRED_CUST_FLAG#10232, C_BIRTH_COUNTRY#10233, C_LOGIN#10234, C_EMAIL_ADDRESS#10235], [oracolumnref(C_CUSTOMER_SK#10228), oracolumnref(C_CUSTOMER_ID#10229), oracolumnref(C_FIRST_NAME#10230), oracolumnref(C_LAST_NAME#10231), oracolumnref(C_PREFERRED_CUST_FLAG#10232), oracolumnref(C_BIRTH_COUNTRY#10233), oracolumnref(C_LOGIN#10234), oracolumnref(C_EMAIL_ADDRESS#10235)]
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CUSTOMER_ID:string,C_FIRST_NAME:string,C_LAST_NAME:string,C_PREFERRED_CUST_FLAG:string,C_BIRTH_COUNTRY:string,C_LOGIN:string,C_EMAIL_ADDRESS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS"
from TPCDS.CUSTOMER

(2) Project [codegen id : 1]
Output [8]: [C_CUSTOMER_SK#9590, C_CUSTOMER_ID#9591, C_FIRST_NAME#9598, C_LAST_NAME#9599, C_PREFERRED_CUST_FLAG#9600, C_BIRTH_COUNTRY#9604, C_LOGIN#9605, C_EMAIL_ADDRESS#9606]
Input [8]: [C_CUSTOMER_SK#9590, C_CUSTOMER_ID#9591, C_FIRST_NAME#9598, C_LAST_NAME#9599, C_PREFERRED_CUST_FLAG#9600, C_BIRTH_COUNTRY#9604, C_LOGIN#9605, C_EMAIL_ADDRESS#9606]

(3) Sort [codegen id : 1]
Input [8]: [C_CUSTOMER_SK#9590, C_CUSTOMER_ID#9591, C_FIRST_NAME#9598, C_LAST_NAME#9599, C_PREFERRED_CUST_FLAG#9600, C_BIRTH_COUNTRY#9604, C_LOGIN#9605, C_EMAIL_ADDRESS#9606]
Arguments: [c_customer_sk#9590 ASC NULLS FIRST], false, 0

(4) BatchScan
Output [4]: [SS_CUSTOMER_SK#9611, SS_EXT_DISCOUNT_AMT#9622, SS_EXT_LIST_PRICE#9625, SS_SOLD_DATE_SK#9608]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_CUSTOMER_SK#10244, SS_EXT_DISCOUNT_AMT#10245, SS_EXT_LIST_PRICE#10246, SS_SOLD_DATE_SK#10247], [oracolumnref(SS_CUSTOMER_SK#10244), oracolumnref(SS_EXT_DISCOUNT_AMT#10245), oracolumnref(SS_EXT_LIST_PRICE#10246), oracolumnref(SS_SOLD_DATE_SK#10247)], orapostfixunaryopexpression(isnotnull(SS_CUSTOMER_SK#9611))
PartitionSchema: struct<SS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<SS_CUSTOMER_SK:decimal(38,18),SS_EXT_DISCOUNT_AMT:decimal(38,18),SS_EXT_LIST_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SS_CUSTOMER_SK", "SS_EXT_DISCOUNT_AMT", "SS_EXT_LIST_PRICE", "SS_SOLD_DATE_SK"
from TPCDS.STORE_SALES
where "SS_CUSTOMER_SK" IS NOT NULL and "SS_SOLD_DATE_SK" IS NOT NULL

(5) Filter [codegen id : 2]
Input [4]: [SS_CUSTOMER_SK#9611, SS_EXT_DISCOUNT_AMT#9622, SS_EXT_LIST_PRICE#9625, SS_SOLD_DATE_SK#9608]
Condition : isnotnull(SS_CUSTOMER_SK#9611)

(6) Sort [codegen id : 2]
Input [4]: [SS_CUSTOMER_SK#9611, SS_EXT_DISCOUNT_AMT#9622, SS_EXT_LIST_PRICE#9625, SS_SOLD_DATE_SK#9608]
Arguments: [ss_customer_sk#9611 ASC NULLS FIRST], false, 0

(7) SortMergeJoin [codegen id : 3]
Left keys [1]: [c_customer_sk#9590]
Right keys [1]: [ss_customer_sk#9611]
Join condition: None

(8) Project [codegen id : 3]
Output [10]: [C_CUSTOMER_ID#9591, C_FIRST_NAME#9598, C_LAST_NAME#9599, C_PREFERRED_CUST_FLAG#9600, C_BIRTH_COUNTRY#9604, C_LOGIN#9605, C_EMAIL_ADDRESS#9606, SS_SOLD_DATE_SK#9608, SS_EXT_DISCOUNT_AMT#9622, SS_EXT_LIST_PRICE#9625]
Input [12]: [C_CUSTOMER_SK#9590, C_CUSTOMER_ID#9591, C_FIRST_NAME#9598, C_LAST_NAME#9599, C_PREFERRED_CUST_FLAG#9600, C_BIRTH_COUNTRY#9604, C_LOGIN#9605, C_EMAIL_ADDRESS#9606, SS_CUSTOMER_SK#9611, SS_EXT_DISCOUNT_AMT#9622, SS_EXT_LIST_PRICE#9625, SS_SOLD_DATE_SK#9608]

(9) Sort [codegen id : 3]
Input [10]: [C_CUSTOMER_ID#9591, C_FIRST_NAME#9598, C_LAST_NAME#9599, C_PREFERRED_CUST_FLAG#9600, C_BIRTH_COUNTRY#9604, C_LOGIN#9605, C_EMAIL_ADDRESS#9606, SS_SOLD_DATE_SK#9608, SS_EXT_DISCOUNT_AMT#9622, SS_EXT_LIST_PRICE#9625]
Arguments: [ss_sold_date_sk#9608 ASC NULLS FIRST], false, 0

(10) BatchScan
Output [2]: [D_DATE_SK#9631, D_YEAR#9637]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#10252, D_YEAR#10253], [oracolumnref(D_DATE_SK#10252), oracolumnref(D_YEAR#10253)], orabinaryopexpression((isnotnull(D_YEAR#9637) AND (D_YEAR#9637 = 2001.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2001.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(11) Filter [codegen id : 4]
Input [2]: [D_DATE_SK#9631, D_YEAR#9637]
Condition : (isnotnull(D_YEAR#9637) AND (D_YEAR#9637 = 2001.000000000000000000))

(12) Sort [codegen id : 4]
Input [2]: [D_DATE_SK#9631, D_YEAR#9637]
Arguments: [d_date_sk#9631 ASC NULLS FIRST], false, 0

(13) SortMergeJoin [codegen id : 5]
Left keys [1]: [ss_sold_date_sk#9608]
Right keys [1]: [d_date_sk#9631]
Join condition: None

(14) Project [codegen id : 5]
Output [10]: [C_CUSTOMER_ID#9591, C_FIRST_NAME#9598, C_LAST_NAME#9599, C_PREFERRED_CUST_FLAG#9600, C_BIRTH_COUNTRY#9604, C_LOGIN#9605, C_EMAIL_ADDRESS#9606, SS_EXT_DISCOUNT_AMT#9622, SS_EXT_LIST_PRICE#9625, D_YEAR#9637]
Input [12]: [C_CUSTOMER_ID#9591, C_FIRST_NAME#9598, C_LAST_NAME#9599, C_PREFERRED_CUST_FLAG#9600, C_BIRTH_COUNTRY#9604, C_LOGIN#9605, C_EMAIL_ADDRESS#9606, SS_SOLD_DATE_SK#9608, SS_EXT_DISCOUNT_AMT#9622, SS_EXT_LIST_PRICE#9625, D_DATE_SK#9631, D_YEAR#9637]

(15) HashAggregate [codegen id : 5]
Input [10]: [C_CUSTOMER_ID#9591, C_FIRST_NAME#9598, C_LAST_NAME#9599, C_PREFERRED_CUST_FLAG#9600, C_BIRTH_COUNTRY#9604, C_LOGIN#9605, C_EMAIL_ADDRESS#9606, SS_EXT_DISCOUNT_AMT#9622, SS_EXT_LIST_PRICE#9625, D_YEAR#9637]
Keys [8]: [c_customer_id#9591, c_first_name#9598, c_last_name#9599, c_preferred_cust_flag#9600, c_birth_country#9604, c_login#9605, c_email_address#9606, d_year#9637]
Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#9625 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#9622 as decimal(38,17)))), DecimalType(38,17), true))]
Aggregate Attributes [2]: [sum#10388, isEmpty#10389]
Results [10]: [c_customer_id#9591, c_first_name#9598, c_last_name#9599, c_preferred_cust_flag#9600, c_birth_country#9604, c_login#9605, c_email_address#9606, d_year#9637, sum#10390, isEmpty#10391]

(16) HashAggregate [codegen id : 5]
Input [10]: [c_customer_id#9591, c_first_name#9598, c_last_name#9599, c_preferred_cust_flag#9600, c_birth_country#9604, c_login#9605, c_email_address#9606, d_year#9637, sum#10390, isEmpty#10391]
Keys [8]: [c_customer_id#9591, c_first_name#9598, c_last_name#9599, c_preferred_cust_flag#9600, c_birth_country#9604, c_login#9605, c_email_address#9606, d_year#9637]
Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#9625 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#9622 as decimal(38,17)))), DecimalType(38,17), true))]
Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#9625 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#9622 as decimal(38,17)))), DecimalType(38,17), true))#10186]
Results [2]: [c_customer_id#9591 AS customer_id#9570, sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#9625 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#9622 as decimal(38,17)))), DecimalType(38,17), true))#10186 AS year_total#9578]

(17) Filter [codegen id : 5]
Input [2]: [customer_id#9570, year_total#9578]
Condition : (isnotnull(year_total#9578) AND (year_total#9578 > 0E-17))

(18) Sort [codegen id : 5]
Input [2]: [customer_id#9570, year_total#9578]
Arguments: [customer_id#9570 ASC NULLS FIRST], false, 0

(19) BatchScan
Output [8]: [C_CUSTOMER_SK#9739, C_CUSTOMER_ID#9740, C_FIRST_NAME#9747, C_LAST_NAME#9748, C_PREFERRED_CUST_FLAG#9749, C_BIRTH_COUNTRY#9753, C_LOGIN#9754, C_EMAIL_ADDRESS#9755]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#10268, C_CUSTOMER_ID#10269, C_FIRST_NAME#10270, C_LAST_NAME#10271, C_PREFERRED_CUST_FLAG#10272, C_BIRTH_COUNTRY#10273, C_LOGIN#10274, C_EMAIL_ADDRESS#10275], [oracolumnref(C_CUSTOMER_SK#10268), oracolumnref(C_CUSTOMER_ID#10269), oracolumnref(C_FIRST_NAME#10270), oracolumnref(C_LAST_NAME#10271), oracolumnref(C_PREFERRED_CUST_FLAG#10272), oracolumnref(C_BIRTH_COUNTRY#10273), oracolumnref(C_LOGIN#10274), oracolumnref(C_EMAIL_ADDRESS#10275)]
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CUSTOMER_ID:string,C_FIRST_NAME:string,C_LAST_NAME:string,C_PREFERRED_CUST_FLAG:string,C_BIRTH_COUNTRY:string,C_LOGIN:string,C_EMAIL_ADDRESS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS"
from TPCDS.CUSTOMER

(20) Project [codegen id : 6]
Output [8]: [C_CUSTOMER_SK#9739, C_CUSTOMER_ID#9740, C_FIRST_NAME#9747, C_LAST_NAME#9748, C_PREFERRED_CUST_FLAG#9749, C_BIRTH_COUNTRY#9753, C_LOGIN#9754, C_EMAIL_ADDRESS#9755]
Input [8]: [C_CUSTOMER_SK#9739, C_CUSTOMER_ID#9740, C_FIRST_NAME#9747, C_LAST_NAME#9748, C_PREFERRED_CUST_FLAG#9749, C_BIRTH_COUNTRY#9753, C_LOGIN#9754, C_EMAIL_ADDRESS#9755]

(21) Sort [codegen id : 6]
Input [8]: [C_CUSTOMER_SK#9739, C_CUSTOMER_ID#9740, C_FIRST_NAME#9747, C_LAST_NAME#9748, C_PREFERRED_CUST_FLAG#9749, C_BIRTH_COUNTRY#9753, C_LOGIN#9754, C_EMAIL_ADDRESS#9755]
Arguments: [c_customer_sk#9739 ASC NULLS FIRST], false, 0

(22) BatchScan
Output [4]: [SS_CUSTOMER_SK#9760, SS_EXT_DISCOUNT_AMT#9771, SS_EXT_LIST_PRICE#9774, SS_SOLD_DATE_SK#9757]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_CUSTOMER_SK#10284, SS_EXT_DISCOUNT_AMT#10285, SS_EXT_LIST_PRICE#10286, SS_SOLD_DATE_SK#10287], [oracolumnref(SS_CUSTOMER_SK#10284), oracolumnref(SS_EXT_DISCOUNT_AMT#10285), oracolumnref(SS_EXT_LIST_PRICE#10286), oracolumnref(SS_SOLD_DATE_SK#10287)], orapostfixunaryopexpression(isnotnull(SS_CUSTOMER_SK#9760))
PartitionSchema: struct<SS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<SS_CUSTOMER_SK:decimal(38,18),SS_EXT_DISCOUNT_AMT:decimal(38,18),SS_EXT_LIST_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "SS_CUSTOMER_SK", "SS_EXT_DISCOUNT_AMT", "SS_EXT_LIST_PRICE", "SS_SOLD_DATE_SK"
from TPCDS.STORE_SALES
where "SS_CUSTOMER_SK" IS NOT NULL and "SS_SOLD_DATE_SK" IS NOT NULL

(23) Filter [codegen id : 7]
Input [4]: [SS_CUSTOMER_SK#9760, SS_EXT_DISCOUNT_AMT#9771, SS_EXT_LIST_PRICE#9774, SS_SOLD_DATE_SK#9757]
Condition : isnotnull(SS_CUSTOMER_SK#9760)

(24) Sort [codegen id : 7]
Input [4]: [SS_CUSTOMER_SK#9760, SS_EXT_DISCOUNT_AMT#9771, SS_EXT_LIST_PRICE#9774, SS_SOLD_DATE_SK#9757]
Arguments: [ss_customer_sk#9760 ASC NULLS FIRST], false, 0

(25) SortMergeJoin [codegen id : 8]
Left keys [1]: [c_customer_sk#9739]
Right keys [1]: [ss_customer_sk#9760]
Join condition: None

(26) Project [codegen id : 8]
Output [10]: [C_CUSTOMER_ID#9740, C_FIRST_NAME#9747, C_LAST_NAME#9748, C_PREFERRED_CUST_FLAG#9749, C_BIRTH_COUNTRY#9753, C_LOGIN#9754, C_EMAIL_ADDRESS#9755, SS_SOLD_DATE_SK#9757, SS_EXT_DISCOUNT_AMT#9771, SS_EXT_LIST_PRICE#9774]
Input [12]: [C_CUSTOMER_SK#9739, C_CUSTOMER_ID#9740, C_FIRST_NAME#9747, C_LAST_NAME#9748, C_PREFERRED_CUST_FLAG#9749, C_BIRTH_COUNTRY#9753, C_LOGIN#9754, C_EMAIL_ADDRESS#9755, SS_CUSTOMER_SK#9760, SS_EXT_DISCOUNT_AMT#9771, SS_EXT_LIST_PRICE#9774, SS_SOLD_DATE_SK#9757]

(27) Sort [codegen id : 8]
Input [10]: [C_CUSTOMER_ID#9740, C_FIRST_NAME#9747, C_LAST_NAME#9748, C_PREFERRED_CUST_FLAG#9749, C_BIRTH_COUNTRY#9753, C_LOGIN#9754, C_EMAIL_ADDRESS#9755, SS_SOLD_DATE_SK#9757, SS_EXT_DISCOUNT_AMT#9771, SS_EXT_LIST_PRICE#9774]
Arguments: [ss_sold_date_sk#9757 ASC NULLS FIRST], false, 0

(28) BatchScan
Output [2]: [D_DATE_SK#9780, D_YEAR#9786]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#10292, D_YEAR#10293], [oracolumnref(D_DATE_SK#10292), oracolumnref(D_YEAR#10293)], orabinaryopexpression((isnotnull(D_YEAR#9786) AND (D_YEAR#9786 = 2002.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(29) Filter [codegen id : 9]
Input [2]: [D_DATE_SK#9780, D_YEAR#9786]
Condition : (isnotnull(D_YEAR#9786) AND (D_YEAR#9786 = 2002.000000000000000000))

(30) Sort [codegen id : 9]
Input [2]: [D_DATE_SK#9780, D_YEAR#9786]
Arguments: [d_date_sk#9780 ASC NULLS FIRST], false, 0

(31) SortMergeJoin [codegen id : 10]
Left keys [1]: [ss_sold_date_sk#9757]
Right keys [1]: [d_date_sk#9780]
Join condition: None

(32) Project [codegen id : 10]
Output [10]: [C_CUSTOMER_ID#9740, C_FIRST_NAME#9747, C_LAST_NAME#9748, C_PREFERRED_CUST_FLAG#9749, C_BIRTH_COUNTRY#9753, C_LOGIN#9754, C_EMAIL_ADDRESS#9755, SS_EXT_DISCOUNT_AMT#9771, SS_EXT_LIST_PRICE#9774, D_YEAR#9786]
Input [12]: [C_CUSTOMER_ID#9740, C_FIRST_NAME#9747, C_LAST_NAME#9748, C_PREFERRED_CUST_FLAG#9749, C_BIRTH_COUNTRY#9753, C_LOGIN#9754, C_EMAIL_ADDRESS#9755, SS_SOLD_DATE_SK#9757, SS_EXT_DISCOUNT_AMT#9771, SS_EXT_LIST_PRICE#9774, D_DATE_SK#9780, D_YEAR#9786]

(33) HashAggregate [codegen id : 10]
Input [10]: [C_CUSTOMER_ID#9740, C_FIRST_NAME#9747, C_LAST_NAME#9748, C_PREFERRED_CUST_FLAG#9749, C_BIRTH_COUNTRY#9753, C_LOGIN#9754, C_EMAIL_ADDRESS#9755, SS_EXT_DISCOUNT_AMT#9771, SS_EXT_LIST_PRICE#9774, D_YEAR#9786]
Keys [8]: [c_customer_id#9740, c_first_name#9747, c_last_name#9748, c_preferred_cust_flag#9749, c_birth_country#9753, c_login#9754, c_email_address#9755, d_year#9786]
Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#9774 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#9771 as decimal(38,17)))), DecimalType(38,17), true))]
Aggregate Attributes [2]: [sum#10392, isEmpty#10393]
Results [10]: [c_customer_id#9740, c_first_name#9747, c_last_name#9748, c_preferred_cust_flag#9749, c_birth_country#9753, c_login#9754, c_email_address#9755, d_year#9786, sum#10394, isEmpty#10395]

(34) HashAggregate [codegen id : 10]
Input [10]: [c_customer_id#9740, c_first_name#9747, c_last_name#9748, c_preferred_cust_flag#9749, c_birth_country#9753, c_login#9754, c_email_address#9755, d_year#9786, sum#10394, isEmpty#10395]
Keys [8]: [c_customer_id#9740, c_first_name#9747, c_last_name#9748, c_preferred_cust_flag#9749, c_birth_country#9753, c_login#9754, c_email_address#9755, d_year#9786]
Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#9774 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#9771 as decimal(38,17)))), DecimalType(38,17), true))]
Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#9774 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#9771 as decimal(38,17)))), DecimalType(38,17), true))#10188]
Results [5]: [c_customer_id#9740 AS customer_id#10194, c_first_name#9747 AS customer_first_name#10195, c_last_name#9748 AS customer_last_name#10196, c_preferred_cust_flag#9749 AS customer_preferred_cust_flag#10197, sum(CheckOverflow((promote_precision(cast(ss_ext_list_price#9774 as decimal(38,17))) - promote_precision(cast(ss_ext_discount_amt#9771 as decimal(38,17)))), DecimalType(38,17), true))#10188 AS year_total#10202]

(35) Sort [codegen id : 10]
Input [5]: [customer_id#10194, customer_first_name#10195, customer_last_name#10196, customer_preferred_cust_flag#10197, year_total#10202]
Arguments: [customer_id#10194 ASC NULLS FIRST], false, 0

(36) SortMergeJoin [codegen id : 11]
Left keys [1]: [customer_id#9570]
Right keys [1]: [customer_id#10194]
Join condition: None

(37) BatchScan
Output [8]: [C_CUSTOMER_SK#9957, C_CUSTOMER_ID#9958, C_FIRST_NAME#9965, C_LAST_NAME#9966, C_PREFERRED_CUST_FLAG#9967, C_BIRTH_COUNTRY#9971, C_LOGIN#9972, C_EMAIL_ADDRESS#9973]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#10320, C_CUSTOMER_ID#10321, C_FIRST_NAME#10322, C_LAST_NAME#10323, C_PREFERRED_CUST_FLAG#10324, C_BIRTH_COUNTRY#10325, C_LOGIN#10326, C_EMAIL_ADDRESS#10327], [oracolumnref(C_CUSTOMER_SK#10320), oracolumnref(C_CUSTOMER_ID#10321), oracolumnref(C_FIRST_NAME#10322), oracolumnref(C_LAST_NAME#10323), oracolumnref(C_PREFERRED_CUST_FLAG#10324), oracolumnref(C_BIRTH_COUNTRY#10325), oracolumnref(C_LOGIN#10326), oracolumnref(C_EMAIL_ADDRESS#10327)]
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CUSTOMER_ID:string,C_FIRST_NAME:string,C_LAST_NAME:string,C_PREFERRED_CUST_FLAG:string,C_BIRTH_COUNTRY:string,C_LOGIN:string,C_EMAIL_ADDRESS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS"
from TPCDS.CUSTOMER

(38) Project [codegen id : 12]
Output [8]: [C_CUSTOMER_SK#9957, C_CUSTOMER_ID#9958, C_FIRST_NAME#9965, C_LAST_NAME#9966, C_PREFERRED_CUST_FLAG#9967, C_BIRTH_COUNTRY#9971, C_LOGIN#9972, C_EMAIL_ADDRESS#9973]
Input [8]: [C_CUSTOMER_SK#9957, C_CUSTOMER_ID#9958, C_FIRST_NAME#9965, C_LAST_NAME#9966, C_PREFERRED_CUST_FLAG#9967, C_BIRTH_COUNTRY#9971, C_LOGIN#9972, C_EMAIL_ADDRESS#9973]

(39) Sort [codegen id : 12]
Input [8]: [C_CUSTOMER_SK#9957, C_CUSTOMER_ID#9958, C_FIRST_NAME#9965, C_LAST_NAME#9966, C_PREFERRED_CUST_FLAG#9967, C_BIRTH_COUNTRY#9971, C_LOGIN#9972, C_EMAIL_ADDRESS#9973]
Arguments: [c_customer_sk#9957 ASC NULLS FIRST], false, 0

(40) BatchScan
Output [4]: [WS_BILL_CUSTOMER_SK#9979, WS_EXT_DISCOUNT_AMT#9997, WS_EXT_LIST_PRICE#10000, WS_SOLD_DATE_SK#9975]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_SALES, [WS_BILL_CUSTOMER_SK#10336, WS_EXT_DISCOUNT_AMT#10337, WS_EXT_LIST_PRICE#10338, WS_SOLD_DATE_SK#10339], [oracolumnref(WS_BILL_CUSTOMER_SK#10336), oracolumnref(WS_EXT_DISCOUNT_AMT#10337), oracolumnref(WS_EXT_LIST_PRICE#10338), oracolumnref(WS_SOLD_DATE_SK#10339)], orapostfixunaryopexpression(isnotnull(WS_BILL_CUSTOMER_SK#9979))
PartitionSchema: struct<WS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<WS_BILL_CUSTOMER_SK:decimal(38,18),WS_EXT_DISCOUNT_AMT:decimal(38,18),WS_EXT_LIST_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WS_BILL_CUSTOMER_SK", "WS_EXT_DISCOUNT_AMT", "WS_EXT_LIST_PRICE", "WS_SOLD_DATE_SK"
from TPCDS.WEB_SALES
where "WS_BILL_CUSTOMER_SK" IS NOT NULL and "WS_SOLD_DATE_SK" IS NOT NULL

(41) Filter [codegen id : 13]
Input [4]: [WS_BILL_CUSTOMER_SK#9979, WS_EXT_DISCOUNT_AMT#9997, WS_EXT_LIST_PRICE#10000, WS_SOLD_DATE_SK#9975]
Condition : isnotnull(WS_BILL_CUSTOMER_SK#9979)

(42) Sort [codegen id : 13]
Input [4]: [WS_BILL_CUSTOMER_SK#9979, WS_EXT_DISCOUNT_AMT#9997, WS_EXT_LIST_PRICE#10000, WS_SOLD_DATE_SK#9975]
Arguments: [ws_bill_customer_sk#9979 ASC NULLS FIRST], false, 0

(43) SortMergeJoin [codegen id : 14]
Left keys [1]: [c_customer_sk#9957]
Right keys [1]: [ws_bill_customer_sk#9979]
Join condition: None

(44) Project [codegen id : 14]
Output [10]: [C_CUSTOMER_ID#9958, C_FIRST_NAME#9965, C_LAST_NAME#9966, C_PREFERRED_CUST_FLAG#9967, C_BIRTH_COUNTRY#9971, C_LOGIN#9972, C_EMAIL_ADDRESS#9973, WS_SOLD_DATE_SK#9975, WS_EXT_DISCOUNT_AMT#9997, WS_EXT_LIST_PRICE#10000]
Input [12]: [C_CUSTOMER_SK#9957, C_CUSTOMER_ID#9958, C_FIRST_NAME#9965, C_LAST_NAME#9966, C_PREFERRED_CUST_FLAG#9967, C_BIRTH_COUNTRY#9971, C_LOGIN#9972, C_EMAIL_ADDRESS#9973, WS_BILL_CUSTOMER_SK#9979, WS_EXT_DISCOUNT_AMT#9997, WS_EXT_LIST_PRICE#10000, WS_SOLD_DATE_SK#9975]

(45) Sort [codegen id : 14]
Input [10]: [C_CUSTOMER_ID#9958, C_FIRST_NAME#9965, C_LAST_NAME#9966, C_PREFERRED_CUST_FLAG#9967, C_BIRTH_COUNTRY#9971, C_LOGIN#9972, C_EMAIL_ADDRESS#9973, WS_SOLD_DATE_SK#9975, WS_EXT_DISCOUNT_AMT#9997, WS_EXT_LIST_PRICE#10000]
Arguments: [ws_sold_date_sk#9975 ASC NULLS FIRST], false, 0

(46) BatchScan
Output [2]: [D_DATE_SK#10009, D_YEAR#10015]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#10344, D_YEAR#10345], [oracolumnref(D_DATE_SK#10344), oracolumnref(D_YEAR#10345)], orabinaryopexpression((isnotnull(D_YEAR#10015) AND (D_YEAR#10015 = 2001.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2001.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(47) Filter [codegen id : 15]
Input [2]: [D_DATE_SK#10009, D_YEAR#10015]
Condition : (isnotnull(D_YEAR#10015) AND (D_YEAR#10015 = 2001.000000000000000000))

(48) Sort [codegen id : 15]
Input [2]: [D_DATE_SK#10009, D_YEAR#10015]
Arguments: [d_date_sk#10009 ASC NULLS FIRST], false, 0

(49) SortMergeJoin [codegen id : 16]
Left keys [1]: [ws_sold_date_sk#9975]
Right keys [1]: [d_date_sk#10009]
Join condition: None

(50) Project [codegen id : 16]
Output [10]: [C_CUSTOMER_ID#9958, C_FIRST_NAME#9965, C_LAST_NAME#9966, C_PREFERRED_CUST_FLAG#9967, C_BIRTH_COUNTRY#9971, C_LOGIN#9972, C_EMAIL_ADDRESS#9973, WS_EXT_DISCOUNT_AMT#9997, WS_EXT_LIST_PRICE#10000, D_YEAR#10015]
Input [12]: [C_CUSTOMER_ID#9958, C_FIRST_NAME#9965, C_LAST_NAME#9966, C_PREFERRED_CUST_FLAG#9967, C_BIRTH_COUNTRY#9971, C_LOGIN#9972, C_EMAIL_ADDRESS#9973, WS_SOLD_DATE_SK#9975, WS_EXT_DISCOUNT_AMT#9997, WS_EXT_LIST_PRICE#10000, D_DATE_SK#10009, D_YEAR#10015]

(51) HashAggregate [codegen id : 16]
Input [10]: [C_CUSTOMER_ID#9958, C_FIRST_NAME#9965, C_LAST_NAME#9966, C_PREFERRED_CUST_FLAG#9967, C_BIRTH_COUNTRY#9971, C_LOGIN#9972, C_EMAIL_ADDRESS#9973, WS_EXT_DISCOUNT_AMT#9997, WS_EXT_LIST_PRICE#10000, D_YEAR#10015]
Keys [8]: [c_customer_id#9958, c_first_name#9965, c_last_name#9966, c_preferred_cust_flag#9967, c_birth_country#9971, c_login#9972, c_email_address#9973, d_year#10015]
Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10000 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#9997 as decimal(38,17)))), DecimalType(38,17), true))]
Aggregate Attributes [2]: [sum#10396, isEmpty#10397]
Results [10]: [c_customer_id#9958, c_first_name#9965, c_last_name#9966, c_preferred_cust_flag#9967, c_birth_country#9971, c_login#9972, c_email_address#9973, d_year#10015, sum#10398, isEmpty#10399]

(52) HashAggregate [codegen id : 16]
Input [10]: [c_customer_id#9958, c_first_name#9965, c_last_name#9966, c_preferred_cust_flag#9967, c_birth_country#9971, c_login#9972, c_email_address#9973, d_year#10015, sum#10398, isEmpty#10399]
Keys [8]: [c_customer_id#9958, c_first_name#9965, c_last_name#9966, c_preferred_cust_flag#9967, c_birth_country#9971, c_login#9972, c_email_address#9973, d_year#10015]
Functions [1]: [sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10000 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#9997 as decimal(38,17)))), DecimalType(38,17), true))]
Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10000 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#9997 as decimal(38,17)))), DecimalType(38,17), true))#10191]
Results [2]: [c_customer_id#9958 AS customer_id#9580, sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10000 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#9997 as decimal(38,17)))), DecimalType(38,17), true))#10191 AS year_total#9588]

(53) Filter [codegen id : 16]
Input [2]: [customer_id#9580, year_total#9588]
Condition : (isnotnull(year_total#9588) AND (year_total#9588 > 0E-17))

(54) Project [codegen id : 16]
Output [2]: [customer_id#9580 AS customer_id#10204, year_total#9588 AS year_total#10212]
Input [2]: [customer_id#9580, year_total#9588]

(55) Sort [codegen id : 16]
Input [2]: [customer_id#10204, year_total#10212]
Arguments: [customer_id#10204 ASC NULLS FIRST], false, 0

(56) SortMergeJoin [codegen id : 17]
Left keys [1]: [customer_id#9570]
Right keys [1]: [customer_id#10204]
Join condition: None

(57) Project [codegen id : 17]
Output [8]: [customer_id#9570, year_total#9578, customer_id#10194, customer_first_name#10195, customer_last_name#10196, customer_preferred_cust_flag#10197, year_total#10202, year_total#10212]
Input [9]: [customer_id#9570, year_total#9578, customer_id#10194, customer_first_name#10195, customer_last_name#10196, customer_preferred_cust_flag#10197, year_total#10202, customer_id#10204, year_total#10212]

(58) BatchScan
Output [8]: [C_CUSTOMER_SK#10106, C_CUSTOMER_ID#10107, C_FIRST_NAME#10114, C_LAST_NAME#10115, C_PREFERRED_CUST_FLAG#10116, C_BIRTH_COUNTRY#10120, C_LOGIN#10121, C_EMAIL_ADDRESS#10122]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER, [C_CUSTOMER_SK#10360, C_CUSTOMER_ID#10361, C_FIRST_NAME#10362, C_LAST_NAME#10363, C_PREFERRED_CUST_FLAG#10364, C_BIRTH_COUNTRY#10365, C_LOGIN#10366, C_EMAIL_ADDRESS#10367], [oracolumnref(C_CUSTOMER_SK#10360), oracolumnref(C_CUSTOMER_ID#10361), oracolumnref(C_FIRST_NAME#10362), oracolumnref(C_LAST_NAME#10363), oracolumnref(C_PREFERRED_CUST_FLAG#10364), oracolumnref(C_BIRTH_COUNTRY#10365), oracolumnref(C_LOGIN#10366), oracolumnref(C_EMAIL_ADDRESS#10367)]
PartitionSchema: struct<>
ReadSchema: struct<C_CUSTOMER_SK:decimal(38,18),C_CUSTOMER_ID:string,C_FIRST_NAME:string,C_LAST_NAME:string,C_PREFERRED_CUST_FLAG:string,C_BIRTH_COUNTRY:string,C_LOGIN:string,C_EMAIL_ADDRESS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "C_CUSTOMER_SK", "C_CUSTOMER_ID", "C_FIRST_NAME", "C_LAST_NAME", "C_PREFERRED_CUST_FLAG", "C_BIRTH_COUNTRY", "C_LOGIN", "C_EMAIL_ADDRESS"
from TPCDS.CUSTOMER

(59) Project [codegen id : 18]
Output [8]: [C_CUSTOMER_SK#10106, C_CUSTOMER_ID#10107, C_FIRST_NAME#10114, C_LAST_NAME#10115, C_PREFERRED_CUST_FLAG#10116, C_BIRTH_COUNTRY#10120, C_LOGIN#10121, C_EMAIL_ADDRESS#10122]
Input [8]: [C_CUSTOMER_SK#10106, C_CUSTOMER_ID#10107, C_FIRST_NAME#10114, C_LAST_NAME#10115, C_PREFERRED_CUST_FLAG#10116, C_BIRTH_COUNTRY#10120, C_LOGIN#10121, C_EMAIL_ADDRESS#10122]

(60) Sort [codegen id : 18]
Input [8]: [C_CUSTOMER_SK#10106, C_CUSTOMER_ID#10107, C_FIRST_NAME#10114, C_LAST_NAME#10115, C_PREFERRED_CUST_FLAG#10116, C_BIRTH_COUNTRY#10120, C_LOGIN#10121, C_EMAIL_ADDRESS#10122]
Arguments: [c_customer_sk#10106 ASC NULLS FIRST], false, 0

(61) BatchScan
Output [4]: [WS_BILL_CUSTOMER_SK#10128, WS_EXT_DISCOUNT_AMT#10146, WS_EXT_LIST_PRICE#10149, WS_SOLD_DATE_SK#10124]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_SALES, [WS_BILL_CUSTOMER_SK#10376, WS_EXT_DISCOUNT_AMT#10377, WS_EXT_LIST_PRICE#10378, WS_SOLD_DATE_SK#10379], [oracolumnref(WS_BILL_CUSTOMER_SK#10376), oracolumnref(WS_EXT_DISCOUNT_AMT#10377), oracolumnref(WS_EXT_LIST_PRICE#10378), oracolumnref(WS_SOLD_DATE_SK#10379)], orapostfixunaryopexpression(isnotnull(WS_BILL_CUSTOMER_SK#10128))
PartitionSchema: struct<WS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<WS_BILL_CUSTOMER_SK:decimal(38,18),WS_EXT_DISCOUNT_AMT:decimal(38,18),WS_EXT_LIST_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WS_BILL_CUSTOMER_SK", "WS_EXT_DISCOUNT_AMT", "WS_EXT_LIST_PRICE", "WS_SOLD_DATE_SK"
from TPCDS.WEB_SALES
where "WS_BILL_CUSTOMER_SK" IS NOT NULL and "WS_SOLD_DATE_SK" IS NOT NULL

(62) Filter [codegen id : 19]
Input [4]: [WS_BILL_CUSTOMER_SK#10128, WS_EXT_DISCOUNT_AMT#10146, WS_EXT_LIST_PRICE#10149, WS_SOLD_DATE_SK#10124]
Condition : isnotnull(WS_BILL_CUSTOMER_SK#10128)

(63) Sort [codegen id : 19]
Input [4]: [WS_BILL_CUSTOMER_SK#10128, WS_EXT_DISCOUNT_AMT#10146, WS_EXT_LIST_PRICE#10149, WS_SOLD_DATE_SK#10124]
Arguments: [ws_bill_customer_sk#10128 ASC NULLS FIRST], false, 0

(64) SortMergeJoin [codegen id : 20]
Left keys [1]: [c_customer_sk#10106]
Right keys [1]: [ws_bill_customer_sk#10128]
Join condition: None

(65) Project [codegen id : 20]
Output [10]: [C_CUSTOMER_ID#10107, C_FIRST_NAME#10114, C_LAST_NAME#10115, C_PREFERRED_CUST_FLAG#10116, C_BIRTH_COUNTRY#10120, C_LOGIN#10121, C_EMAIL_ADDRESS#10122, WS_SOLD_DATE_SK#10124, WS_EXT_DISCOUNT_AMT#10146, WS_EXT_LIST_PRICE#10149]
Input [12]: [C_CUSTOMER_SK#10106, C_CUSTOMER_ID#10107, C_FIRST_NAME#10114, C_LAST_NAME#10115, C_PREFERRED_CUST_FLAG#10116, C_BIRTH_COUNTRY#10120, C_LOGIN#10121, C_EMAIL_ADDRESS#10122, WS_BILL_CUSTOMER_SK#10128, WS_EXT_DISCOUNT_AMT#10146, WS_EXT_LIST_PRICE#10149, WS_SOLD_DATE_SK#10124]

(66) Sort [codegen id : 20]
Input [10]: [C_CUSTOMER_ID#10107, C_FIRST_NAME#10114, C_LAST_NAME#10115, C_PREFERRED_CUST_FLAG#10116, C_BIRTH_COUNTRY#10120, C_LOGIN#10121, C_EMAIL_ADDRESS#10122, WS_SOLD_DATE_SK#10124, WS_EXT_DISCOUNT_AMT#10146, WS_EXT_LIST_PRICE#10149]
Arguments: [ws_sold_date_sk#10124 ASC NULLS FIRST], false, 0

(67) BatchScan
Output [2]: [D_DATE_SK#10158, D_YEAR#10164]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#10384, D_YEAR#10385], [oracolumnref(D_DATE_SK#10384), oracolumnref(D_YEAR#10385)], orabinaryopexpression((isnotnull(D_YEAR#10164) AND (D_YEAR#10164 = 2002.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2002.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(68) Filter [codegen id : 21]
Input [2]: [D_DATE_SK#10158, D_YEAR#10164]
Condition : (isnotnull(D_YEAR#10164) AND (D_YEAR#10164 = 2002.000000000000000000))

(69) Sort [codegen id : 21]
Input [2]: [D_DATE_SK#10158, D_YEAR#10164]
Arguments: [d_date_sk#10158 ASC NULLS FIRST], false, 0

(70) SortMergeJoin [codegen id : 22]
Left keys [1]: [ws_sold_date_sk#10124]
Right keys [1]: [d_date_sk#10158]
Join condition: None

(71) Project [codegen id : 22]
Output [10]: [C_CUSTOMER_ID#10107, C_FIRST_NAME#10114, C_LAST_NAME#10115, C_PREFERRED_CUST_FLAG#10116, C_BIRTH_COUNTRY#10120, C_LOGIN#10121, C_EMAIL_ADDRESS#10122, WS_EXT_DISCOUNT_AMT#10146, WS_EXT_LIST_PRICE#10149, D_YEAR#10164]
Input [12]: [C_CUSTOMER_ID#10107, C_FIRST_NAME#10114, C_LAST_NAME#10115, C_PREFERRED_CUST_FLAG#10116, C_BIRTH_COUNTRY#10120, C_LOGIN#10121, C_EMAIL_ADDRESS#10122, WS_SOLD_DATE_SK#10124, WS_EXT_DISCOUNT_AMT#10146, WS_EXT_LIST_PRICE#10149, D_DATE_SK#10158, D_YEAR#10164]

(72) HashAggregate [codegen id : 22]
Input [10]: [C_CUSTOMER_ID#10107, C_FIRST_NAME#10114, C_LAST_NAME#10115, C_PREFERRED_CUST_FLAG#10116, C_BIRTH_COUNTRY#10120, C_LOGIN#10121, C_EMAIL_ADDRESS#10122, WS_EXT_DISCOUNT_AMT#10146, WS_EXT_LIST_PRICE#10149, D_YEAR#10164]
Keys [8]: [c_customer_id#10107, c_first_name#10114, c_last_name#10115, c_preferred_cust_flag#10116, c_birth_country#10120, c_login#10121, c_email_address#10122, d_year#10164]
Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10149 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#10146 as decimal(38,17)))), DecimalType(38,17), true))]
Aggregate Attributes [2]: [sum#10400, isEmpty#10401]
Results [10]: [c_customer_id#10107, c_first_name#10114, c_last_name#10115, c_preferred_cust_flag#10116, c_birth_country#10120, c_login#10121, c_email_address#10122, d_year#10164, sum#10402, isEmpty#10403]

(73) HashAggregate [codegen id : 22]
Input [10]: [c_customer_id#10107, c_first_name#10114, c_last_name#10115, c_preferred_cust_flag#10116, c_birth_country#10120, c_login#10121, c_email_address#10122, d_year#10164, sum#10402, isEmpty#10403]
Keys [8]: [c_customer_id#10107, c_first_name#10114, c_last_name#10115, c_preferred_cust_flag#10116, c_birth_country#10120, c_login#10121, c_email_address#10122, d_year#10164]
Functions [1]: [sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10149 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#10146 as decimal(38,17)))), DecimalType(38,17), true))]
Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10149 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#10146 as decimal(38,17)))), DecimalType(38,17), true))#10193]
Results [2]: [c_customer_id#10107 AS customer_id#10214, sum(CheckOverflow((promote_precision(cast(ws_ext_list_price#10149 as decimal(38,17))) - promote_precision(cast(ws_ext_discount_amt#10146 as decimal(38,17)))), DecimalType(38,17), true))#10193 AS year_total#10222]

(74) Sort [codegen id : 22]
Input [2]: [customer_id#10214, year_total#10222]
Arguments: [customer_id#10214 ASC NULLS FIRST], false, 0

(75) SortMergeJoin [codegen id : 23]
Left keys [1]: [customer_id#9570]
Right keys [1]: [customer_id#10214]
Join condition: (CASE WHEN (year_total#10212 > 0E-17) THEN CheckOverflow((promote_precision(year_total#10222) / promote_precision(year_total#10212)), DecimalType(38,6), true) ELSE 0.000000 END > CASE WHEN (year_total#9578 > 0E-17) THEN CheckOverflow((promote_precision(year_total#10202) / promote_precision(year_total#9578)), DecimalType(38,6), true) ELSE 0.000000 END)

(76) Project [codegen id : 23]
Output [4]: [customer_id#10194, customer_first_name#10195, customer_last_name#10196, customer_preferred_cust_flag#10197]
Input [10]: [customer_id#9570, year_total#9578, customer_id#10194, customer_first_name#10195, customer_last_name#10196, customer_preferred_cust_flag#10197, year_total#10202, year_total#10212, customer_id#10214, year_total#10222]

(77) TakeOrderedAndProject
Input [4]: [customer_id#10194, customer_first_name#10195, customer_last_name#10196, customer_preferred_cust_flag#10197]
Arguments: 100, [customer_id#10194 ASC NULLS FIRST, customer_first_name#10195 ASC NULLS FIRST, customer_last_name#10196 ASC NULLS FIRST, customer_preferred_cust_flag#10197 ASC NULLS FIRST], [customer_id#10194, customer_first_name#10195, customer_last_name#10196, customer_preferred_cust_flag#10197]


Query q12

Spark SQL

select  i_item_id
      ,i_item_desc
      ,i_category
      ,i_class
      ,i_current_price
      ,sum(ws_ext_sales_price) as itemrevenue
      ,sum(ws_ext_sales_price)*100/sum(sum(ws_ext_sales_price)) over
          (partition by i_class) as revenueratio
from
	web_sales
    	,item
    	,date_dim
where
	ws_item_sk = i_item_sk
  	and i_category in ('Sports', 'Books', 'Home')
  	and ws_sold_date_sk = d_date_sk
	and d_date between cast('1999-02-22' as date)
                                and date_add(cast('1999-02-22' as date), 30 )
group by
	i_item_id
        ,i_item_desc
        ,i_category
        ,i_class
        ,i_current_price
order by
	i_category
        ,i_class
        ,i_item_id
        ,i_item_desc
        ,revenueratio
 limit 100;
 

Spark Plan with Pushdown turned on

== Physical Plan ==
TakeOrderedAndProject (6)
+- * Project (5)
   +- Window (4)
      +- * Sort (3)
         +- * Project (2)
            +- BatchScan (1)


(1) BatchScan
Output [8]: [i_item_id#11385, i_item_desc#11388, i_category#11396, i_class#11394, i_current_price#11389, itemrevenue#11348, _w0#11438, _w1#11439]
OraPlan: 00 OraSingleQueryBlock [i_item_id#11385, i_item_desc#11388, i_category#11396, i_class#11394, i_current_price#11389, sum(ws_ext_sales_price#11373) AS itemrevenue#11348, sum(ws_ext_sales_price#11373) AS _w0#11438, sum(ws_ext_sales_price#11373) AS _w1#11439], [oracolumnref(i_item_id#11385), oracolumnref(i_item_desc#11388), oracolumnref(i_category#11396), oracolumnref(i_class#11394), oracolumnref(i_current_price#11389), oraalias(sum(ws_ext_sales_price#11373) AS itemrevenue#11348), oraalias(sum(ws_ext_sales_price#11373) AS _w0#11438), oraalias(sum(ws_ext_sales_price#11373) AS _w1#11439)], orabinaryopexpression(((isnotnull(WS_SOLD_DATE_SK#11350) AND I_CATEGORY#11396 IN (Sports,Books,Home)) AND ((isnotnull(D_DATE#11408) AND (D_DATE#11408 >= 10644)) AND (D_DATE#11408 <= 10674)))), List(oracolumnref(i_item_id#11385), oracolumnref(i_item_desc#11388), oracolumnref(i_category#11396), oracolumnref(i_class#11394), oracolumnref(i_current_price#11389))
01 :- OraTableScan TPCDS.WEB_SALES, [WS_ITEM_SK#11353, WS_EXT_SALES_PRICE#11373, WS_SOLD_DATE_SK#11350]
02 :- OraTableScan TPCDS.ITEM, [I_ITEM_SK#11384, I_ITEM_ID#11385, I_ITEM_DESC#11388, I_CURRENT_PRICE#11389, I_CLASS#11394, I_CATEGORY#11396]
03 +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#11406, D_DATE#11408]
ReadSchema: struct<i_item_id:string,i_item_desc:string,i_category:string,i_class:string,i_current_price:decimal(38,18),itemrevenue:decimal(38,18),_w0:decimal(38,18),_w1:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: Sports, Books, Home, 10644, 10674
oraPushdownSQL: select "I_ITEM_ID", "I_ITEM_DESC", "I_CATEGORY", "I_CLASS", "I_CURRENT_PRICE", SUM("WS_EXT_SALES_PRICE") AS "itemrevenue", SUM("WS_EXT_SALES_PRICE") AS "_w0", SUM("WS_EXT_SALES_PRICE") AS "_w1"
from TPCDS.WEB_SALES  join TPCDS.ITEM  on ("WS_ITEM_SK" = "I_ITEM_SK") join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where (("WS_SOLD_DATE_SK" IS NOT NULL AND "I_CATEGORY" IN ( ?, ?, ? )) AND (("D_DATE" IS NOT NULL AND ("D_DATE" >= ?)) AND ("D_DATE" <= ?))) group by "I_ITEM_ID", "I_ITEM_DESC", "I_CATEGORY", "I_CLASS", "I_CURRENT_PRICE"

(2) Project [codegen id : 1]
Output [8]: [i_item_id#11385, i_item_desc#11388, i_category#11396, i_class#11394, i_current_price#11389, itemrevenue#11348, _w0#11438, _w1#11439]
Input [8]: [i_item_id#11385, i_item_desc#11388, i_category#11396, i_class#11394, i_current_price#11389, itemrevenue#11348, _w0#11438, _w1#11439]

(3) Sort [codegen id : 1]
Input [8]: [i_item_id#11385, i_item_desc#11388, i_category#11396, i_class#11394, i_current_price#11389, itemrevenue#11348, _w0#11438, _w1#11439]
Arguments: [i_class#11394 ASC NULLS FIRST], false, 0

(4) Window
Input [8]: [i_item_id#11385, i_item_desc#11388, i_category#11396, i_class#11394, i_current_price#11389, itemrevenue#11348, _w0#11438, _w1#11439]
Arguments: [sum(_w1#11439) windowspecdefinition(i_class#11394, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#11440], [i_class#11394]

(5) Project [codegen id : 2]
Output [7]: [i_item_id#11385, i_item_desc#11388, i_category#11396, i_class#11394, i_current_price#11389, itemrevenue#11348, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#11438) * 100.000000000000000000), DecimalType(38,14), true) as decimal(38,18))) / promote_precision(_we0#11440)), DecimalType(38,6), true) AS revenueratio#11349]
Input [9]: [i_item_id#11385, i_item_desc#11388, i_category#11396, i_class#11394, i_current_price#11389, itemrevenue#11348, _w0#11438, _w1#11439, _we0#11440]

(6) TakeOrderedAndProject
Input [7]: [i_item_id#11385, i_item_desc#11388, i_category#11396, i_class#11394, i_current_price#11389, itemrevenue#11348, revenueratio#11349]
Arguments: 100, [i_category#11396 ASC NULLS FIRST, i_class#11394 ASC NULLS FIRST, i_item_id#11385 ASC NULLS FIRST, i_item_desc#11388 ASC NULLS FIRST, revenueratio#11349 ASC NULLS FIRST], [i_item_id#11385, i_item_desc#11388, i_category#11396, i_class#11394, i_current_price#11389, itemrevenue#11348, revenueratio#11349]


Pushed oracle sqls

select "I_ITEM_ID", "I_ITEM_DESC", "I_CATEGORY", "I_CLASS", "I_CURRENT_PRICE", SUM("WS_EXT_SALES_PRICE") AS "itemrevenue", SUM("WS_EXT_SALES_PRICE") AS "_w0", SUM("WS_EXT_SALES_PRICE") AS "_w1"
from TPCDS.WEB_SALES  join TPCDS.ITEM  on ("WS_ITEM_SK" = "I_ITEM_SK") join TPCDS.DATE_DIM  on ("WS_SOLD_DATE_SK" = "D_DATE_SK")
where (("WS_SOLD_DATE_SK" IS NOT NULL AND "I_CATEGORY" IN ( 'Sports', 'Books', 'Home' )) AND (("D_DATE" IS NOT NULL AND ("D_DATE" >= TRUNC(TIMESTAMP '1999-02-22 08:00:00.000000'))) AND ("D_DATE" <= TRUNC(TIMESTAMP '1999-03-24 08:00:00.000000')))) group by "I_ITEM_ID", "I_ITEM_DESC", "I_CATEGORY", "I_CLASS", "I_CURRENT_PRICE"

Spark Plan with Pushdown turned off

== Physical Plan ==
TakeOrderedAndProject (21)
+- * Project (20)
   +- Window (19)
      +- * Sort (18)
         +- * HashAggregate (17)
            +- * HashAggregate (16)
               +- * Project (15)
                  +- * SortMergeJoin Inner (14)
                     :- * Sort (9)
                     :  +- * Project (8)
                     :     +- * SortMergeJoin Inner (7)
                     :        :- * Sort (3)
                     :        :  +- * Project (2)
                     :        :     +- BatchScan (1)
                     :        +- * Sort (6)
                     :           +- * Filter (5)
                     :              +- BatchScan (4)
                     +- * Sort (13)
                        +- * Project (12)
                           +- * Filter (11)
                              +- BatchScan (10)


(1) BatchScan
Output [3]: [WS_ITEM_SK#11227, WS_EXT_SALES_PRICE#11247, WS_SOLD_DATE_SK#11224]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.WEB_SALES, [WS_ITEM_SK#11322, WS_EXT_SALES_PRICE#11323, WS_SOLD_DATE_SK#11324], [oracolumnref(WS_ITEM_SK#11322), oracolumnref(WS_EXT_SALES_PRICE#11323), oracolumnref(WS_SOLD_DATE_SK#11324)]
PartitionSchema: struct<WS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<WS_ITEM_SK:decimal(38,18),WS_EXT_SALES_PRICE:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "WS_ITEM_SK", "WS_EXT_SALES_PRICE", "WS_SOLD_DATE_SK"
from TPCDS.WEB_SALES
where "WS_SOLD_DATE_SK" IS NOT NULL

(2) Project [codegen id : 1]
Output [3]: [WS_SOLD_DATE_SK#11224, WS_ITEM_SK#11227, WS_EXT_SALES_PRICE#11247]
Input [3]: [WS_ITEM_SK#11227, WS_EXT_SALES_PRICE#11247, WS_SOLD_DATE_SK#11224]

(3) Sort [codegen id : 1]
Input [3]: [WS_SOLD_DATE_SK#11224, WS_ITEM_SK#11227, WS_EXT_SALES_PRICE#11247]
Arguments: [ws_item_sk#11227 ASC NULLS FIRST], false, 0

(4) BatchScan
Output [6]: [I_ITEM_SK#11258, I_ITEM_ID#11259, I_ITEM_DESC#11262, I_CURRENT_PRICE#11263, I_CLASS#11268, I_CATEGORY#11270]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.ITEM, [I_ITEM_SK#11328, I_ITEM_ID#11329, I_ITEM_DESC#11330, I_CURRENT_PRICE#11331, I_CLASS#11332, I_CATEGORY#11333], [oracolumnref(I_ITEM_SK#11328), oracolumnref(I_ITEM_ID#11329), oracolumnref(I_ITEM_DESC#11330), oracolumnref(I_CURRENT_PRICE#11331), oracolumnref(I_CLASS#11332), oracolumnref(I_CATEGORY#11333)], orain(I_CATEGORY#11270 IN (Sports,Books,Home))
PartitionSchema: struct<>
ReadSchema: struct<I_ITEM_SK:decimal(38,18),I_ITEM_ID:string,I_ITEM_DESC:string,I_CURRENT_PRICE:decimal(38,18),I_CLASS:string,I_CATEGORY:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: Sports, Books, Home
oraPushdownSQL: select "I_ITEM_SK", "I_ITEM_ID", "I_ITEM_DESC", "I_CURRENT_PRICE", "I_CLASS", "I_CATEGORY"
from TPCDS.ITEM
where "I_CATEGORY" IN ( ?, ?, ? )

(5) Filter [codegen id : 2]
Input [6]: [I_ITEM_SK#11258, I_ITEM_ID#11259, I_ITEM_DESC#11262, I_CURRENT_PRICE#11263, I_CLASS#11268, I_CATEGORY#11270]
Condition : I_CATEGORY#11270 IN (Sports,Books,Home)

(6) Sort [codegen id : 2]
Input [6]: [I_ITEM_SK#11258, I_ITEM_ID#11259, I_ITEM_DESC#11262, I_CURRENT_PRICE#11263, I_CLASS#11268, I_CATEGORY#11270]
Arguments: [i_item_sk#11258 ASC NULLS FIRST], false, 0

(7) SortMergeJoin [codegen id : 3]
Left keys [1]: [ws_item_sk#11227]
Right keys [1]: [i_item_sk#11258]
Join condition: None

(8) Project [codegen id : 3]
Output [7]: [WS_SOLD_DATE_SK#11224, WS_EXT_SALES_PRICE#11247, I_ITEM_ID#11259, I_ITEM_DESC#11262, I_CURRENT_PRICE#11263, I_CLASS#11268, I_CATEGORY#11270]
Input [9]: [WS_SOLD_DATE_SK#11224, WS_ITEM_SK#11227, WS_EXT_SALES_PRICE#11247, I_ITEM_SK#11258, I_ITEM_ID#11259, I_ITEM_DESC#11262, I_CURRENT_PRICE#11263, I_CLASS#11268, I_CATEGORY#11270]

(9) Sort [codegen id : 3]
Input [7]: [WS_SOLD_DATE_SK#11224, WS_EXT_SALES_PRICE#11247, I_ITEM_ID#11259, I_ITEM_DESC#11262, I_CURRENT_PRICE#11263, I_CLASS#11268, I_CATEGORY#11270]
Arguments: [ws_sold_date_sk#11224 ASC NULLS FIRST], false, 0

(10) BatchScan
Output [2]: [D_DATE_SK#11280, D_DATE#11282]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#11340, D_DATE#11341], [oracolumnref(D_DATE_SK#11340), oracolumnref(D_DATE#11341)], orabinaryopexpression(((isnotnull(D_DATE#11282) AND (D_DATE#11282 >= 10644)) AND (D_DATE#11282 <= 10674)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_DATE:date>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 10644, 10674
oraPushdownSQL: select "D_DATE_SK", "D_DATE"
from TPCDS.DATE_DIM
where (("D_DATE" IS NOT NULL AND ("D_DATE" >= ?)) AND ("D_DATE" <= ?))

(11) Filter [codegen id : 4]
Input [2]: [D_DATE_SK#11280, D_DATE#11282]
Condition : ((isnotnull(D_DATE#11282) AND (D_DATE#11282 >= 10644)) AND (D_DATE#11282 <= 10674))

(12) Project [codegen id : 4]
Output [1]: [D_DATE_SK#11280]
Input [2]: [D_DATE_SK#11280, D_DATE#11282]

(13) Sort [codegen id : 4]
Input [1]: [D_DATE_SK#11280]
Arguments: [d_date_sk#11280 ASC NULLS FIRST], false, 0

(14) SortMergeJoin [codegen id : 5]
Left keys [1]: [ws_sold_date_sk#11224]
Right keys [1]: [d_date_sk#11280]
Join condition: None

(15) Project [codegen id : 5]
Output [6]: [WS_EXT_SALES_PRICE#11247, I_ITEM_ID#11259, I_ITEM_DESC#11262, I_CURRENT_PRICE#11263, I_CLASS#11268, I_CATEGORY#11270]
Input [8]: [WS_SOLD_DATE_SK#11224, WS_EXT_SALES_PRICE#11247, I_ITEM_ID#11259, I_ITEM_DESC#11262, I_CURRENT_PRICE#11263, I_CLASS#11268, I_CATEGORY#11270, D_DATE_SK#11280]

(16) HashAggregate [codegen id : 5]
Input [6]: [WS_EXT_SALES_PRICE#11247, I_ITEM_ID#11259, I_ITEM_DESC#11262, I_CURRENT_PRICE#11263, I_CLASS#11268, I_CATEGORY#11270]
Keys [5]: [i_item_id#11259, i_item_desc#11262, i_category#11270, i_class#11268, i_current_price#11263]
Functions [1]: [partial_sum(ws_ext_sales_price#11247)]
Aggregate Attributes [2]: [sum#11344, isEmpty#11345]
Results [7]: [i_item_id#11259, i_item_desc#11262, i_category#11270, i_class#11268, i_current_price#11263, sum#11346, isEmpty#11347]

(17) HashAggregate [codegen id : 5]
Input [7]: [i_item_id#11259, i_item_desc#11262, i_category#11270, i_class#11268, i_current_price#11263, sum#11346, isEmpty#11347]
Keys [5]: [i_item_id#11259, i_item_desc#11262, i_category#11270, i_class#11268, i_current_price#11263]
Functions [1]: [sum(ws_ext_sales_price#11247)]
Aggregate Attributes [1]: [sum(ws_ext_sales_price#11247)#11308]
Results [8]: [i_item_id#11259, i_item_desc#11262, i_category#11270, i_class#11268, i_current_price#11263, sum(ws_ext_sales_price#11247)#11308 AS itemrevenue#11222, sum(ws_ext_sales_price#11247)#11308 AS _w0#11312, sum(ws_ext_sales_price#11247)#11308 AS _w1#11313]

(18) Sort [codegen id : 5]
Input [8]: [i_item_id#11259, i_item_desc#11262, i_category#11270, i_class#11268, i_current_price#11263, itemrevenue#11222, _w0#11312, _w1#11313]
Arguments: [i_class#11268 ASC NULLS FIRST], false, 0

(19) Window
Input [8]: [i_item_id#11259, i_item_desc#11262, i_category#11270, i_class#11268, i_current_price#11263, itemrevenue#11222, _w0#11312, _w1#11313]
Arguments: [sum(_w1#11313) windowspecdefinition(i_class#11268, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#11314], [i_class#11268]

(20) Project [codegen id : 6]
Output [7]: [i_item_id#11259, i_item_desc#11262, i_category#11270, i_class#11268, i_current_price#11263, itemrevenue#11222, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#11312) * 100.000000000000000000), DecimalType(38,14), true) as decimal(38,18))) / promote_precision(_we0#11314)), DecimalType(38,6), true) AS revenueratio#11223]
Input [9]: [i_item_id#11259, i_item_desc#11262, i_category#11270, i_class#11268, i_current_price#11263, itemrevenue#11222, _w0#11312, _w1#11313, _we0#11314]

(21) TakeOrderedAndProject
Input [7]: [i_item_id#11259, i_item_desc#11262, i_category#11270, i_class#11268, i_current_price#11263, itemrevenue#11222, revenueratio#11223]
Arguments: 100, [i_category#11270 ASC NULLS FIRST, i_class#11268 ASC NULLS FIRST, i_item_id#11259 ASC NULLS FIRST, i_item_desc#11262 ASC NULLS FIRST, revenueratio#11223 ASC NULLS FIRST], [i_item_id#11259, i_item_desc#11262, i_category#11270, i_class#11268, i_current_price#11263, itemrevenue#11222, revenueratio#11223]


Query q13

Spark SQL

 select avg(ss_quantity)
       ,avg(ss_ext_sales_price)
       ,avg(ss_ext_wholesale_cost)
       ,sum(ss_ext_wholesale_cost)
 from store_sales
     ,store
     ,customer_demographics
     ,household_demographics
     ,customer_address
     ,date_dim
 where s_store_sk = ss_store_sk
 and  ss_sold_date_sk = d_date_sk and d_year = 2001
 and((ss_hdemo_sk=hd_demo_sk
  and cd_demo_sk = ss_cdemo_sk
  and cd_marital_status = 'M'
  and cd_education_status = 'Advanced Degree'
  and ss_sales_price between 100.00 and 150.00
  and hd_dep_count = 3
     )or
     (ss_hdemo_sk=hd_demo_sk
  and cd_demo_sk = ss_cdemo_sk
  and cd_marital_status = 'S'
  and cd_education_status = 'College'
  and ss_sales_price between 50.00 and 100.00
  and hd_dep_count = 1
     ) or
     (ss_hdemo_sk=hd_demo_sk
  and cd_demo_sk = ss_cdemo_sk
  and cd_marital_status = 'W'
  and cd_education_status = '2 yr Degree'
  and ss_sales_price between 150.00 and 200.00
  and hd_dep_count = 1
     ))
 and((ss_addr_sk = ca_address_sk
  and ca_country = 'United States'
  and ca_state in ('TX', 'OH', 'TX')
  and ss_net_profit between 100 and 200
     ) or
     (ss_addr_sk = ca_address_sk
  and ca_country = 'United States'
  and ca_state in ('OR', 'NM', 'KY')
  and ss_net_profit between 150 and 300
     ) or
     (ss_addr_sk = ca_address_sk
  and ca_country = 'United States'
  and ca_state in ('VA', 'TX', 'MS')
  and ss_net_profit between 50 and 250
     ))
; 

Spark Plan with Pushdown turned on

== Physical Plan ==
* Project (2)
+- BatchScan (1)


(1) BatchScan
Output [4]: [avg(ss_quantity)#11758, avg(ss_ext_sales_price)#11759, avg(ss_ext_wholesale_cost)#11760, sum(ss_ext_wholesale_cost)#11761]
OraPlan: 00 OraSingleQueryBlock [avg(ss_quantity#11657) AS avg(ss_quantity)#11758, avg(ss_ext_sales_price#11662) AS avg(ss_ext_sales_price)#11759, avg(ss_ext_wholesale_cost#11663) AS avg(ss_ext_wholesale_cost)#11760, sum(ss_ext_wholesale_cost#11663) AS sum(ss_ext_wholesale_cost)#11761], [oraalias(avg(ss_quantity#11657) AS avg(ss_quantity)#11758), oraalias(avg(ss_ext_sales_price#11662) AS avg(ss_ext_sales_price)#11759), oraalias(avg(ss_ext_wholesale_cost#11663) AS avg(ss_ext_wholesale_cost)#11760), oraalias(sum(ss_ext_wholesale_cost#11663) AS sum(ss_ext_wholesale_cost)#11761)], orabinaryopexpression(((((((isnotnull(SS_STORE_SK#11654) AND isnotnull(SS_ADDR_SK#11653)) AND isnotnull(SS_CDEMO_SK#11651)) AND isnotnull(SS_HDEMO_SK#11652)) AND ((((SS_NET_PROFIT#11669 >= 100.000000000000000000) AND (SS_NET_PROFIT#11669 <= 200.000000000000000000)) OR ((SS_NET_PROFIT#11669 >= 150.000000000000000000) AND (SS_NET_PROFIT#11669 <= 300.000000000000000000))) OR ((SS_NET_PROFIT#11669 >= 50.000000000000000000) AND (SS_NET_PROFIT#11669 <= 250.000000000000000000)))) AND ((((SS_SALES_PRICE#11660 >= 100.000000000000000000) AND (SS_SALES_PRICE#11660 <= 150.000000000000000000)) OR ((SS_SALES_PRICE#11660 >= 50.000000000000000000) AND (SS_SALES_PRICE#11660 <= 100.000000000000000000))) OR ((SS_SALES_PRICE#11660 >= 150.000000000000000000) AND (SS_SALES_PRICE#11660 <= 200.000000000000000000)))) AND (isnotnull(D_YEAR#11732) AND (D_YEAR#11732 = 2001.000000000000000000)))), List()
01 :- OraTableScan TPCDS.STORE_SALES, [SS_CDEMO_SK#11651, SS_HDEMO_SK#11652, SS_ADDR_SK#11653, SS_STORE_SK#11654, SS_QUANTITY#11657, SS_SALES_PRICE#11660, SS_EXT_SALES_PRICE#11662, SS_EXT_WHOLESALE_COST#11663, SS_NET_PROFIT#11669, SS_SOLD_DATE_SK#11647]
02 :- OraTableScan TPCDS.STORE, [S_STORE_SK#11670]
03 :- OraSingleQueryBlock [CA_ADDRESS_SK#11713, CA_STATE#11721], [oracolumnref(CA_ADDRESS_SK#11713), oracolumnref(CA_STATE#11721)], orabinaryopexpression(((isnotnull(CA_COUNTRY#11723) AND (CA_COUNTRY#11723 = United States)) AND ((CA_STATE#11721 IN (TX,OH) OR CA_STATE#11721 IN (OR,NM,KY)) OR CA_STATE#11721 IN (VA,TX,MS))))
04 :  +- OraTableScan TPCDS.CUSTOMER_ADDRESS, [CA_ADDRESS_SK#11713, CA_STATE#11721, CA_COUNTRY#11723]
05 :- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#11726, D_YEAR#11732]
06 :- OraSingleQueryBlock [CD_DEMO_SK#11699, CD_MARITAL_STATUS#11701, CD_EDUCATION_STATUS#11702], [oracolumnref(CD_DEMO_SK#11699), oracolumnref(CD_MARITAL_STATUS#11701), oracolumnref(CD_EDUCATION_STATUS#11702)], orabinaryopexpression(((((CD_MARITAL_STATUS#11701 = M) AND (CD_EDUCATION_STATUS#11702 = Advanced Degree)) OR ((CD_MARITAL_STATUS#11701 = S) AND (CD_EDUCATION_STATUS#11702 = College))) OR ((CD_MARITAL_STATUS#11701 = W) AND (CD_EDUCATION_STATUS#11702 = 2 yr Degree))))
07 :  +- OraTableScan TPCDS.CUSTOMER_DEMOGRAPHICS, [CD_DEMO_SK#11699, CD_MARITAL_STATUS#11701, CD_EDUCATION_STATUS#11702]
08 +- OraSingleQueryBlock [HD_DEMO_SK#11708, HD_DEP_COUNT#11711], [oracolumnref(HD_DEMO_SK#11708), oracolumnref(HD_DEP_COUNT#11711)], orabinaryopexpression((((HD_DEP_COUNT#11711 = 3.000000000000000000) OR (HD_DEP_COUNT#11711 = 1.000000000000000000)) OR (HD_DEP_COUNT#11711 = 1.000000000000000000)))
09    +- OraTableScan TPCDS.HOUSEHOLD_DEMOGRAPHICS, [HD_DEMO_SK#11708, HD_DEP_COUNT#11711]
ReadSchema: struct<avg(ss_quantity):decimal(38,22),avg(ss_ext_sales_price):decimal(38,22),avg(ss_ext_wholesale_cost):decimal(38,22),sum(ss_ext_wholesale_cost):decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: United States, TX, OH, OR, NM, KY, VA, TX, MS, M, Advanced Degree, S, College, W, 2 yr Degree, 3.000000000000000000, 1.000000000000000000, 1.000000000000000000, 100.000000000000000000, 200.000000000000000000, 150.000000000000000000, 300.000000000000000000, 50.000000000000000000, 250.000000000000000000, 100.000000000000000000, 150.000000000000000000, 50.000000000000000000, 100.000000000000000000, 150.000000000000000000, 200.000000000000000000, 2001.000000000000000000
oraPushdownSQL: select AVG("SS_QUANTITY") AS "avg(ss_quantity)", AVG("SS_EXT_SALES_PRICE") AS "avg(ss_ext_sales_price)", AVG("SS_EXT_WHOLESALE_COST") AS "avg(ss_ext_wholesale_cost)", SUM("SS_EXT_WHOLESALE_COST") AS "sum(ss_ext_wholesale_cost)"
from TPCDS.STORE_SALES  join TPCDS.STORE  on ("SS_STORE_SK" = "S_STORE_SK") join ( select "CA_ADDRESS_SK", "CA_STATE"
from TPCDS.CUSTOMER_ADDRESS 
where (("CA_COUNTRY" IS NOT NULL AND ("CA_COUNTRY" = ?)) AND (("CA_STATE" IN ( ?, ? ) OR "CA_STATE" IN ( ?, ?, ? )) OR "CA_STATE" IN ( ?, ?, ? ))) )  on (("SS_ADDR_SK" = "CA_ADDRESS_SK") AND (((("CA_STATE" IN ( 'TX', 'OH' ) AND ("SS_NET_PROFIT" >= 100.000000000000000000)) AND ("SS_NET_PROFIT" <= 200.000000000000000000)) OR (("CA_STATE" IN ( 'OR', 'NM', 'KY' ) AND ("SS_NET_PROFIT" >= 150.000000000000000000)) AND ("SS_NET_PROFIT" <= 300.000000000000000000))) OR (("CA_STATE" IN ( 'VA', 'TX', 'MS' ) AND ("SS_NET_PROFIT" >= 50.000000000000000000)) AND ("SS_NET_PROFIT" <= 250.000000000000000000)))) join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK") join ( select "CD_DEMO_SK", "CD_MARITAL_STATUS", "CD_EDUCATION_STATUS"
from TPCDS.CUSTOMER_DEMOGRAPHICS 
where (((("CD_MARITAL_STATUS" = ?) AND ("CD_EDUCATION_STATUS" = ?)) OR (("CD_MARITAL_STATUS" = ?) AND ("CD_EDUCATION_STATUS" = ?))) OR (("CD_MARITAL_STATUS" = ?) AND ("CD_EDUCATION_STATUS" = ?))) )  on (("SS_CDEMO_SK" = "CD_DEMO_SK") AND (((((("CD_MARITAL_STATUS" = 'M') AND ("CD_EDUCATION_STATUS" = 'Advanced Degree')) AND ("SS_SALES_PRICE" >= 100.000000000000000000)) AND ("SS_SALES_PRICE" <= 150.000000000000000000)) OR (((("CD_MARITAL_STATUS" = 'S') AND ("CD_EDUCATION_STATUS" = 'College')) AND ("SS_SALES_PRICE" >= 50.000000000000000000)) AND ("SS_SALES_PRICE" <= 100.000000000000000000))) OR (((("CD_MARITAL_STATUS" = 'W') AND ("CD_EDUCATION_STATUS" = '2 yr Degree')) AND ("SS_SALES_PRICE" >= 150.000000000000000000)) AND ("SS_SALES_PRICE" <= 200.000000000000000000)))) join ( select "HD_DEMO_SK", "HD_DEP_COUNT"
from TPCDS.HOUSEHOLD_DEMOGRAPHICS 
where ((("HD_DEP_COUNT" = ?) OR ("HD_DEP_COUNT" = ?)) OR ("HD_DEP_COUNT" = ?)) )  on (("SS_HDEMO_SK" = "HD_DEMO_SK") AND ((((((("CD_MARITAL_STATUS" = 'M') AND ("CD_EDUCATION_STATUS" = 'Advanced Degree')) AND ("SS_SALES_PRICE" >= 100.000000000000000000)) AND ("SS_SALES_PRICE" <= 150.000000000000000000)) AND ("HD_DEP_COUNT" = 3.000000000000000000)) OR ((((("CD_MARITAL_STATUS" = 'S') AND ("CD_EDUCATION_STATUS" = 'College')) AND ("SS_SALES_PRICE" >= 50.000000000000000000)) AND ("SS_SALES_PRICE" <= 100.000000000000000000)) AND ("HD_DEP_COUNT" = 1.000000000000000000))) OR ((((("CD_MARITAL_STATUS" = 'W') AND ("CD_EDUCATION_STATUS" = '2 yr Degree')) AND ("SS_SALES_PRICE" >= 150.000000000000000000)) AND ("SS_SALES_PRICE" <= 200.000000000000000000)) AND ("HD_DEP_COUNT" = 1.000000000000000000))))
where ((((((("SS_STORE_SK" IS NOT NULL AND "SS_ADDR_SK" IS NOT NULL) AND "SS_CDEMO_SK" IS NOT NULL) AND "SS_HDEMO_SK" IS NOT NULL) AND (((("SS_NET_PROFIT" >= ?) AND ("SS_NET_PROFIT" <= ?)) OR (("SS_NET_PROFIT" >= ?) AND ("SS_NET_PROFIT" <= ?))) OR (("SS_NET_PROFIT" >= ?) AND ("SS_NET_PROFIT" <= ?)))) AND (((("SS_SALES_PRICE" >= ?) AND ("SS_SALES_PRICE" <= ?)) OR (("SS_SALES_PRICE" >= ?) AND ("SS_SALES_PRICE" <= ?))) OR (("SS_SALES_PRICE" >= ?) AND ("SS_SALES_PRICE" <= ?)))) AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?)))

(2) Project [codegen id : 1]
Output [4]: [avg(ss_quantity)#11758, avg(ss_ext_sales_price)#11759, avg(ss_ext_wholesale_cost)#11760, sum(ss_ext_wholesale_cost)#11761]
Input [4]: [avg(ss_quantity)#11758, avg(ss_ext_sales_price)#11759, avg(ss_ext_wholesale_cost)#11760, sum(ss_ext_wholesale_cost)#11761]


Pushed oracle sqls

select AVG("SS_QUANTITY") AS "avg(ss_quantity)", AVG("SS_EXT_SALES_PRICE") AS "avg(ss_ext_sales_price)", AVG("SS_EXT_WHOLESALE_COST") AS "avg(ss_ext_wholesale_cost)", SUM("SS_EXT_WHOLESALE_COST") AS "sum(ss_ext_wholesale_cost)"
from TPCDS.STORE_SALES  join TPCDS.STORE  on ("SS_STORE_SK" = "S_STORE_SK") join ( select "CA_ADDRESS_SK", "CA_STATE"
from TPCDS.CUSTOMER_ADDRESS 
where (("CA_COUNTRY" IS NOT NULL AND ("CA_COUNTRY" = 'United States')) AND (("CA_STATE" IN ( 'TX', 'OH' ) OR "CA_STATE" IN ( 'OR', 'NM', 'KY' )) OR "CA_STATE" IN ( 'VA', 'TX', 'MS' ))) )  on (("SS_ADDR_SK" = "CA_ADDRESS_SK") AND (((("CA_STATE" IN ( 'TX', 'OH' ) AND ("SS_NET_PROFIT" >= 100.000000000000000000)) AND ("SS_NET_PROFIT" <= 200.000000000000000000)) OR (("CA_STATE" IN ( 'OR', 'NM', 'KY' ) AND ("SS_NET_PROFIT" >= 150.000000000000000000)) AND ("SS_NET_PROFIT" <= 300.000000000000000000))) OR (("CA_STATE" IN ( 'VA', 'TX', 'MS' ) AND ("SS_NET_PROFIT" >= 50.000000000000000000)) AND ("SS_NET_PROFIT" <= 250.000000000000000000)))) join TPCDS.DATE_DIM  on ("SS_SOLD_DATE_SK" = "D_DATE_SK") join ( select "CD_DEMO_SK", "CD_MARITAL_STATUS", "CD_EDUCATION_STATUS"
from TPCDS.CUSTOMER_DEMOGRAPHICS 
where (((("CD_MARITAL_STATUS" = 'M') AND ("CD_EDUCATION_STATUS" = 'Advanced Degree')) OR (("CD_MARITAL_STATUS" = 'S') AND ("CD_EDUCATION_STATUS" = 'College'))) OR (("CD_MARITAL_STATUS" = 'W') AND ("CD_EDUCATION_STATUS" = '2 yr Degree'))) )  on (("SS_CDEMO_SK" = "CD_DEMO_SK") AND (((((("CD_MARITAL_STATUS" = 'M') AND ("CD_EDUCATION_STATUS" = 'Advanced Degree')) AND ("SS_SALES_PRICE" >= 100.000000000000000000)) AND ("SS_SALES_PRICE" <= 150.000000000000000000)) OR (((("CD_MARITAL_STATUS" = 'S') AND ("CD_EDUCATION_STATUS" = 'College')) AND ("SS_SALES_PRICE" >= 50.000000000000000000)) AND ("SS_SALES_PRICE" <= 100.000000000000000000))) OR (((("CD_MARITAL_STATUS" = 'W') AND ("CD_EDUCATION_STATUS" = '2 yr Degree')) AND ("SS_SALES_PRICE" >= 150.000000000000000000)) AND ("SS_SALES_PRICE" <= 200.000000000000000000)))) join ( select "HD_DEMO_SK", "HD_DEP_COUNT"
from TPCDS.HOUSEHOLD_DEMOGRAPHICS 
where ((("HD_DEP_COUNT" = 3.000000000000000000) OR ("HD_DEP_COUNT" = 1.000000000000000000)) OR ("HD_DEP_COUNT" = 1.000000000000000000)) )  on (("SS_HDEMO_SK" = "HD_DEMO_SK") AND ((((((("CD_MARITAL_STATUS" = 'M') AND ("CD_EDUCATION_STATUS" = 'Advanced Degree')) AND ("SS_SALES_PRICE" >= 100.000000000000000000)) AND ("SS_SALES_PRICE" <= 150.000000000000000000)) AND ("HD_DEP_COUNT" = 3.000000000000000000)) OR ((((("CD_MARITAL_STATUS" = 'S') AND ("CD_EDUCATION_STATUS" = 'College')) AND ("SS_SALES_PRICE" >= 50.000000000000000000)) AND ("SS_SALES_PRICE" <= 100.000000000000000000)) AND ("HD_DEP_COUNT" = 1.000000000000000000))) OR ((((("CD_MARITAL_STATUS" = 'W') AND ("CD_EDUCATION_STATUS" = '2 yr Degree')) AND ("SS_SALES_PRICE" >= 150.000000000000000000)) AND ("SS_SALES_PRICE" <= 200.000000000000000000)) AND ("HD_DEP_COUNT" = 1.000000000000000000))))
where ((((((("SS_STORE_SK" IS NOT NULL AND "SS_ADDR_SK" IS NOT NULL) AND "SS_CDEMO_SK" IS NOT NULL) AND "SS_HDEMO_SK" IS NOT NULL) AND (((("SS_NET_PROFIT" >= 100.000000000000000000) AND ("SS_NET_PROFIT" <= 200.000000000000000000)) OR (("SS_NET_PROFIT" >= 150.000000000000000000) AND ("SS_NET_PROFIT" <= 300.000000000000000000))) OR (("SS_NET_PROFIT" >= 50.000000000000000000) AND ("SS_NET_PROFIT" <= 250.000000000000000000)))) AND (((("SS_SALES_PRICE" >= 100.000000000000000000) AND ("SS_SALES_PRICE" <= 150.000000000000000000)) OR (("SS_SALES_PRICE" >= 50.000000000000000000) AND ("SS_SALES_PRICE" <= 100.000000000000000000))) OR (("SS_SALES_PRICE" >= 150.000000000000000000) AND ("SS_SALES_PRICE" <= 200.000000000000000000)))) AND "SS_SOLD_DATE_SK" IS NOT NULL) AND ("D_YEAR" IS NOT NULL AND ("D_YEAR" = 2001.000000000000000000)))

Spark Plan with Pushdown turned off

== Physical Plan ==
* HashAggregate (36)
+- * HashAggregate (35)
   +- * Project (34)
      +- * SortMergeJoin Inner (33)
         :- * Sort (29)
         :  +- * Project (28)
         :     +- * SortMergeJoin Inner (27)
         :        :- * Sort (23)
         :        :  +- * Project (22)
         :        :     +- * SortMergeJoin Inner (21)
         :        :        :- * Sort (16)
         :        :        :  +- * Project (15)
         :        :        :     +- * SortMergeJoin Inner (14)
         :        :        :        :- * Sort (9)
         :        :        :        :  +- * Project (8)
         :        :        :        :     +- * SortMergeJoin Inner (7)
         :        :        :        :        :- * Sort (3)
         :        :        :        :        :  +- * Filter (2)
         :        :        :        :        :     +- BatchScan (1)
         :        :        :        :        +- * Sort (6)
         :        :        :        :           +- * Project (5)
         :        :        :        :              +- BatchScan (4)
         :        :        :        +- * Sort (13)
         :        :        :           +- * Project (12)
         :        :        :              +- * Filter (11)
         :        :        :                 +- BatchScan (10)
         :        :        +- * Sort (20)
         :        :           +- * Project (19)
         :        :              +- * Filter (18)
         :        :                 +- BatchScan (17)
         :        +- * Sort (26)
         :           +- * Filter (25)
         :              +- BatchScan (24)
         +- * Sort (32)
            +- * Filter (31)
               +- BatchScan (30)


(1) BatchScan
Output [10]: [SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_ADDR_SK#11476, SS_STORE_SK#11477, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, SS_NET_PROFIT#11492, SS_SOLD_DATE_SK#11470]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE_SALES, [SS_CDEMO_SK#11589, SS_HDEMO_SK#11590, SS_ADDR_SK#11591, SS_STORE_SK#11592, SS_QUANTITY#11593, SS_SALES_PRICE#11594, SS_EXT_SALES_PRICE#11595, SS_EXT_WHOLESALE_COST#11596, SS_NET_PROFIT#11597, SS_SOLD_DATE_SK#11598], [oracolumnref(SS_CDEMO_SK#11589), oracolumnref(SS_HDEMO_SK#11590), oracolumnref(SS_ADDR_SK#11591), oracolumnref(SS_STORE_SK#11592), oracolumnref(SS_QUANTITY#11593), oracolumnref(SS_SALES_PRICE#11594), oracolumnref(SS_EXT_SALES_PRICE#11595), oracolumnref(SS_EXT_WHOLESALE_COST#11596), oracolumnref(SS_NET_PROFIT#11597), oracolumnref(SS_SOLD_DATE_SK#11598)], orabinaryopexpression((((((isnotnull(SS_STORE_SK#11477) AND isnotnull(SS_ADDR_SK#11476)) AND isnotnull(SS_CDEMO_SK#11474)) AND isnotnull(SS_HDEMO_SK#11475)) AND ((((SS_NET_PROFIT#11492 >= 100.000000000000000000) AND (SS_NET_PROFIT#11492 <= 200.000000000000000000)) OR ((SS_NET_PROFIT#11492 >= 150.000000000000000000) AND (SS_NET_PROFIT#11492 <= 300.000000000000000000))) OR ((SS_NET_PROFIT#11492 >= 50.000000000000000000) AND (SS_NET_PROFIT#11492 <= 250.000000000000000000)))) AND ((((SS_SALES_PRICE#11483 >= 100.000000000000000000) AND (SS_SALES_PRICE#11483 <= 150.000000000000000000)) OR ((SS_SALES_PRICE#11483 >= 50.000000000000000000) AND (SS_SALES_PRICE#11483 <= 100.000000000000000000))) OR ((SS_SALES_PRICE#11483 >= 150.000000000000000000) AND (SS_SALES_PRICE#11483 <= 200.000000000000000000)))))
PartitionSchema: struct<SS_SOLD_DATE_SK:decimal(38,18)>
ReadSchema: struct<SS_CDEMO_SK:decimal(38,18),SS_HDEMO_SK:decimal(38,18),SS_ADDR_SK:decimal(38,18),SS_STORE_SK:decimal(38,18),SS_QUANTITY:decimal(38,18),SS_SALES_PRICE:decimal(38,18),SS_EXT_SALES_PRICE:decimal(38,18),SS_EXT_WHOLESALE_COST:decimal(38,18),SS_NET_PROFIT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 100.000000000000000000, 200.000000000000000000, 150.000000000000000000, 300.000000000000000000, 50.000000000000000000, 250.000000000000000000, 100.000000000000000000, 150.000000000000000000, 50.000000000000000000, 100.000000000000000000, 150.000000000000000000, 200.000000000000000000
oraPushdownSQL: select "SS_CDEMO_SK", "SS_HDEMO_SK", "SS_ADDR_SK", "SS_STORE_SK", "SS_QUANTITY", "SS_SALES_PRICE", "SS_EXT_SALES_PRICE", "SS_EXT_WHOLESALE_COST", "SS_NET_PROFIT", "SS_SOLD_DATE_SK"
from TPCDS.STORE_SALES
where ((((("SS_STORE_SK" IS NOT NULL AND "SS_ADDR_SK" IS NOT NULL) AND "SS_CDEMO_SK" IS NOT NULL) AND "SS_HDEMO_SK" IS NOT NULL) AND (((("SS_NET_PROFIT" >= ?) AND ("SS_NET_PROFIT" <= ?)) OR (("SS_NET_PROFIT" >= ?) AND ("SS_NET_PROFIT" <= ?))) OR (("SS_NET_PROFIT" >= ?) AND ("SS_NET_PROFIT" <= ?)))) AND (((("SS_SALES_PRICE" >= ?) AND ("SS_SALES_PRICE" <= ?)) OR (("SS_SALES_PRICE" >= ?) AND ("SS_SALES_PRICE" <= ?))) OR (("SS_SALES_PRICE" >= ?) AND ("SS_SALES_PRICE" <= ?)))) and "SS_SOLD_DATE_SK" IS NOT NULL

(2) Filter [codegen id : 1]
Input [10]: [SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_ADDR_SK#11476, SS_STORE_SK#11477, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, SS_NET_PROFIT#11492, SS_SOLD_DATE_SK#11470]
Condition : (((((isnotnull(SS_STORE_SK#11477) AND isnotnull(SS_ADDR_SK#11476)) AND isnotnull(SS_CDEMO_SK#11474)) AND isnotnull(SS_HDEMO_SK#11475)) AND ((((SS_NET_PROFIT#11492 >= 100.000000000000000000) AND (SS_NET_PROFIT#11492 <= 200.000000000000000000)) OR ((SS_NET_PROFIT#11492 >= 150.000000000000000000) AND (SS_NET_PROFIT#11492 <= 300.000000000000000000))) OR ((SS_NET_PROFIT#11492 >= 50.000000000000000000) AND (SS_NET_PROFIT#11492 <= 250.000000000000000000)))) AND ((((SS_SALES_PRICE#11483 >= 100.000000000000000000) AND (SS_SALES_PRICE#11483 <= 150.000000000000000000)) OR ((SS_SALES_PRICE#11483 >= 50.000000000000000000) AND (SS_SALES_PRICE#11483 <= 100.000000000000000000))) OR ((SS_SALES_PRICE#11483 >= 150.000000000000000000) AND (SS_SALES_PRICE#11483 <= 200.000000000000000000))))

(3) Sort [codegen id : 1]
Input [10]: [SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_ADDR_SK#11476, SS_STORE_SK#11477, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, SS_NET_PROFIT#11492, SS_SOLD_DATE_SK#11470]
Arguments: [ss_store_sk#11477 ASC NULLS FIRST], false, 0

(4) BatchScan
Output [1]: [S_STORE_SK#11493]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.STORE, [S_STORE_SK#11609], [oracolumnref(S_STORE_SK#11609)]
PartitionSchema: struct<>
ReadSchema: struct<S_STORE_SK:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownSQL: select "S_STORE_SK"
from TPCDS.STORE

(5) Project [codegen id : 2]
Output [1]: [S_STORE_SK#11493]
Input [1]: [S_STORE_SK#11493]

(6) Sort [codegen id : 2]
Input [1]: [S_STORE_SK#11493]
Arguments: [s_store_sk#11493 ASC NULLS FIRST], false, 0

(7) SortMergeJoin [codegen id : 3]
Left keys [1]: [ss_store_sk#11477]
Right keys [1]: [s_store_sk#11493]
Join condition: None

(8) Project [codegen id : 3]
Output [9]: [SS_SOLD_DATE_SK#11470, SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_ADDR_SK#11476, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, SS_NET_PROFIT#11492]
Input [11]: [SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_ADDR_SK#11476, SS_STORE_SK#11477, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, SS_NET_PROFIT#11492, SS_SOLD_DATE_SK#11470, S_STORE_SK#11493]

(9) Sort [codegen id : 3]
Input [9]: [SS_SOLD_DATE_SK#11470, SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_ADDR_SK#11476, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, SS_NET_PROFIT#11492]
Arguments: [ss_addr_sk#11476 ASC NULLS FIRST], false, 0

(10) BatchScan
Output [3]: [CA_ADDRESS_SK#11536, CA_STATE#11544, CA_COUNTRY#11546]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER_ADDRESS, [CA_ADDRESS_SK#11611, CA_STATE#11612, CA_COUNTRY#11613], [oracolumnref(CA_ADDRESS_SK#11611), oracolumnref(CA_STATE#11612), oracolumnref(CA_COUNTRY#11613)], orabinaryopexpression(((isnotnull(CA_COUNTRY#11546) AND (CA_COUNTRY#11546 = United States)) AND ((CA_STATE#11544 IN (TX,OH) OR CA_STATE#11544 IN (OR,NM,KY)) OR CA_STATE#11544 IN (VA,TX,MS))))
PartitionSchema: struct<>
ReadSchema: struct<CA_ADDRESS_SK:decimal(38,18),CA_STATE:string,CA_COUNTRY:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: United States, TX, OH, OR, NM, KY, VA, TX, MS
oraPushdownSQL: select "CA_ADDRESS_SK", "CA_STATE", "CA_COUNTRY"
from TPCDS.CUSTOMER_ADDRESS
where (("CA_COUNTRY" IS NOT NULL AND ("CA_COUNTRY" = ?)) AND (("CA_STATE" IN ( ?, ? ) OR "CA_STATE" IN ( ?, ?, ? )) OR "CA_STATE" IN ( ?, ?, ? )))

(11) Filter [codegen id : 4]
Input [3]: [CA_ADDRESS_SK#11536, CA_STATE#11544, CA_COUNTRY#11546]
Condition : ((isnotnull(CA_COUNTRY#11546) AND (CA_COUNTRY#11546 = United States)) AND ((CA_STATE#11544 IN (TX,OH) OR CA_STATE#11544 IN (OR,NM,KY)) OR CA_STATE#11544 IN (VA,TX,MS)))

(12) Project [codegen id : 4]
Output [2]: [CA_ADDRESS_SK#11536, CA_STATE#11544]
Input [3]: [CA_ADDRESS_SK#11536, CA_STATE#11544, CA_COUNTRY#11546]

(13) Sort [codegen id : 4]
Input [2]: [CA_ADDRESS_SK#11536, CA_STATE#11544]
Arguments: [ca_address_sk#11536 ASC NULLS FIRST], false, 0

(14) SortMergeJoin [codegen id : 5]
Left keys [1]: [ss_addr_sk#11476]
Right keys [1]: [ca_address_sk#11536]
Join condition: ((((ca_state#11544 IN (TX,OH) AND (ss_net_profit#11492 >= 100.000000000000000000)) AND (ss_net_profit#11492 <= 200.000000000000000000)) OR ((ca_state#11544 IN (OR,NM,KY) AND (ss_net_profit#11492 >= 150.000000000000000000)) AND (ss_net_profit#11492 <= 300.000000000000000000))) OR ((ca_state#11544 IN (VA,TX,MS) AND (ss_net_profit#11492 >= 50.000000000000000000)) AND (ss_net_profit#11492 <= 250.000000000000000000)))

(15) Project [codegen id : 5]
Output [7]: [SS_SOLD_DATE_SK#11470, SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486]
Input [11]: [SS_SOLD_DATE_SK#11470, SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_ADDR_SK#11476, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, SS_NET_PROFIT#11492, CA_ADDRESS_SK#11536, CA_STATE#11544]

(16) Sort [codegen id : 5]
Input [7]: [SS_SOLD_DATE_SK#11470, SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486]
Arguments: [ss_sold_date_sk#11470 ASC NULLS FIRST], false, 0

(17) BatchScan
Output [2]: [D_DATE_SK#11549, D_YEAR#11555]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#11617, D_YEAR#11618], [oracolumnref(D_DATE_SK#11617), oracolumnref(D_YEAR#11618)], orabinaryopexpression((isnotnull(D_YEAR#11555) AND (D_YEAR#11555 = 2001.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<D_DATE_SK:decimal(38,18),D_YEAR:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 2001.000000000000000000
oraPushdownSQL: select "D_DATE_SK", "D_YEAR"
from TPCDS.DATE_DIM
where ("D_YEAR" IS NOT NULL AND ("D_YEAR" = ?))

(18) Filter [codegen id : 6]
Input [2]: [D_DATE_SK#11549, D_YEAR#11555]
Condition : (isnotnull(D_YEAR#11555) AND (D_YEAR#11555 = 2001.000000000000000000))

(19) Project [codegen id : 6]
Output [1]: [D_DATE_SK#11549]
Input [2]: [D_DATE_SK#11549, D_YEAR#11555]

(20) Sort [codegen id : 6]
Input [1]: [D_DATE_SK#11549]
Arguments: [d_date_sk#11549 ASC NULLS FIRST], false, 0

(21) SortMergeJoin [codegen id : 7]
Left keys [1]: [ss_sold_date_sk#11470]
Right keys [1]: [d_date_sk#11549]
Join condition: None

(22) Project [codegen id : 7]
Output [6]: [SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486]
Input [8]: [SS_SOLD_DATE_SK#11470, SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, D_DATE_SK#11549]

(23) Sort [codegen id : 7]
Input [6]: [SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486]
Arguments: [ss_cdemo_sk#11474 ASC NULLS FIRST], false, 0

(24) BatchScan
Output [3]: [CD_DEMO_SK#11522, CD_MARITAL_STATUS#11524, CD_EDUCATION_STATUS#11525]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.CUSTOMER_DEMOGRAPHICS, [CD_DEMO_SK#11621, CD_MARITAL_STATUS#11622, CD_EDUCATION_STATUS#11623], [oracolumnref(CD_DEMO_SK#11621), oracolumnref(CD_MARITAL_STATUS#11622), oracolumnref(CD_EDUCATION_STATUS#11623)], orabinaryopexpression(((((CD_MARITAL_STATUS#11524 = M) AND (CD_EDUCATION_STATUS#11525 = Advanced Degree)) OR ((CD_MARITAL_STATUS#11524 = S) AND (CD_EDUCATION_STATUS#11525 = College))) OR ((CD_MARITAL_STATUS#11524 = W) AND (CD_EDUCATION_STATUS#11525 = 2 yr Degree))))
PartitionSchema: struct<>
ReadSchema: struct<CD_DEMO_SK:decimal(38,18),CD_MARITAL_STATUS:string,CD_EDUCATION_STATUS:string>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: M, Advanced Degree, S, College, W, 2 yr Degree
oraPushdownSQL: select "CD_DEMO_SK", "CD_MARITAL_STATUS", "CD_EDUCATION_STATUS"
from TPCDS.CUSTOMER_DEMOGRAPHICS
where (((("CD_MARITAL_STATUS" = ?) AND ("CD_EDUCATION_STATUS" = ?)) OR (("CD_MARITAL_STATUS" = ?) AND ("CD_EDUCATION_STATUS" = ?))) OR (("CD_MARITAL_STATUS" = ?) AND ("CD_EDUCATION_STATUS" = ?)))

(25) Filter [codegen id : 8]
Input [3]: [CD_DEMO_SK#11522, CD_MARITAL_STATUS#11524, CD_EDUCATION_STATUS#11525]
Condition : ((((CD_MARITAL_STATUS#11524 = M) AND (CD_EDUCATION_STATUS#11525 = Advanced Degree)) OR ((CD_MARITAL_STATUS#11524 = S) AND (CD_EDUCATION_STATUS#11525 = College))) OR ((CD_MARITAL_STATUS#11524 = W) AND (CD_EDUCATION_STATUS#11525 = 2 yr Degree)))

(26) Sort [codegen id : 8]
Input [3]: [CD_DEMO_SK#11522, CD_MARITAL_STATUS#11524, CD_EDUCATION_STATUS#11525]
Arguments: [cd_demo_sk#11522 ASC NULLS FIRST], false, 0

(27) SortMergeJoin [codegen id : 9]
Left keys [1]: [ss_cdemo_sk#11474]
Right keys [1]: [cd_demo_sk#11522]
Join condition: ((((((cd_marital_status#11524 = M) AND (cd_education_status#11525 = Advanced Degree)) AND (ss_sales_price#11483 >= 100.000000000000000000)) AND (ss_sales_price#11483 <= 150.000000000000000000)) OR ((((cd_marital_status#11524 = S) AND (cd_education_status#11525 = College)) AND (ss_sales_price#11483 >= 50.000000000000000000)) AND (ss_sales_price#11483 <= 100.000000000000000000))) OR ((((cd_marital_status#11524 = W) AND (cd_education_status#11525 = 2 yr Degree)) AND (ss_sales_price#11483 >= 150.000000000000000000)) AND (ss_sales_price#11483 <= 200.000000000000000000)))

(28) Project [codegen id : 9]
Output [7]: [SS_HDEMO_SK#11475, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, CD_MARITAL_STATUS#11524, CD_EDUCATION_STATUS#11525]
Input [9]: [SS_CDEMO_SK#11474, SS_HDEMO_SK#11475, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, CD_DEMO_SK#11522, CD_MARITAL_STATUS#11524, CD_EDUCATION_STATUS#11525]

(29) Sort [codegen id : 9]
Input [7]: [SS_HDEMO_SK#11475, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, CD_MARITAL_STATUS#11524, CD_EDUCATION_STATUS#11525]
Arguments: [ss_hdemo_sk#11475 ASC NULLS FIRST], false, 0

(30) BatchScan
Output [2]: [HD_DEMO_SK#11531, HD_DEP_COUNT#11534]
Format: orafile
OraPlan: 00 OraTableScan TPCDS.HOUSEHOLD_DEMOGRAPHICS, [HD_DEMO_SK#11627, HD_DEP_COUNT#11628], [oracolumnref(HD_DEMO_SK#11627), oracolumnref(HD_DEP_COUNT#11628)], orabinaryopexpression((((HD_DEP_COUNT#11534 = 3.000000000000000000) OR (HD_DEP_COUNT#11534 = 1.000000000000000000)) OR (HD_DEP_COUNT#11534 = 1.000000000000000000)))
PartitionSchema: struct<>
ReadSchema: struct<HD_DEMO_SK:decimal(38,18),HD_DEP_COUNT:decimal(38,18)>
dsKey: DataSourceKey(jdbc:oracle:thin:@mammoth_medium,tpcds)
oraPushdownBindValues: 3.000000000000000000, 1.000000000000000000, 1.000000000000000000
oraPushdownSQL: select "HD_DEMO_SK", "HD_DEP_COUNT"
from TPCDS.HOUSEHOLD_DEMOGRAPHICS
where ((("HD_DEP_COUNT" = ?) OR ("HD_DEP_COUNT" = ?)) OR ("HD_DEP_COUNT" = ?))

(31) Filter [codegen id : 10]
Input [2]: [HD_DEMO_SK#11531, HD_DEP_COUNT#11534]
Condition : (((HD_DEP_COUNT#11534 = 3.000000000000000000) OR (HD_DEP_COUNT#11534 = 1.000000000000000000)) OR (HD_DEP_COUNT#11534 = 1.000000000000000000))

(32) Sort [codegen id : 10]
Input [2]: [HD_DEMO_SK#11531, HD_DEP_COUNT#11534]
Arguments: [hd_demo_sk#11531 ASC NULLS FIRST], false, 0

(33) SortMergeJoin [codegen id : 11]
Left keys [1]: [ss_hdemo_sk#11475]
Right keys [1]: [hd_demo_sk#11531]
Join condition: (((((((cd_marital_status#11524 = M) AND (cd_education_status#11525 = Advanced Degree)) AND (ss_sales_price#11483 >= 100.000000000000000000)) AND (ss_sales_price#11483 <= 150.000000000000000000)) AND (hd_dep_count#11534 = 3.000000000000000000)) OR (((((cd_marital_status#11524 = S) AND (cd_education_status#11525 = College)) AND (ss_sales_price#11483 >= 50.000000000000000000)) AND (ss_sales_price#11483 <= 100.000000000000000000)) AND (hd_dep_count#11534 = 1.000000000000000000))) OR (((((cd_marital_status#11524 = W) AND (cd_education_status#11525 = 2 yr Degree)) AND (ss_sales_price#11483 >= 150.000000000000000000)) AND (ss_sales_price#11483 <= 200.000000000000000000)) AND (hd_dep_count#11534 = 1.000000000000000000)))

(34) Project [codegen id : 11]
Output [3]: [SS_QUANTITY#11480, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486]
Input [9]: [SS_HDEMO_SK#11475, SS_QUANTITY#11480, SS_SALES_PRICE#11483, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486, CD_MARITAL_STATUS#11524, CD_EDUCATION_STATUS#11525, HD_DEMO_SK#11531, HD_DEP_COUNT#11534]

(35) HashAggregate [codegen id : 11]
Input [3]: [SS_QUANTITY#11480, SS_EXT_SALES_PRICE#11485, SS_EXT_WHOLESALE_COST#11486]
Keys: []
Functions [4]: [partial_avg(ss_quantity#11480), partial_avg(ss_ext_sales_price#11485), partial_avg(ss_ext_wholesale_cost#11486), partial_sum(ss_ext_wholesale_cost#11486)]
Aggregate Attributes [8]: [sum#11631, count#11632L, sum#11633, count#11634L, sum#11635, count#11636L, sum#11637, isEmpty#11638]
Results [8]: [sum#11639, count#11640L, sum#11641, count#11642L, sum#11643, count#11644L, sum#11645, isEmpty#11646]

(36) HashAggregate [codegen id : 11]
Input [8]: [sum#11639, count#11640L, sum#11641, count#11642L, sum#11643, count#11644L, sum#11645, isEmpty#11646]
Keys: []
Functions [4]: [avg(ss_quantity#11480), avg(ss_ext_sales_price#11485), avg(ss_ext_wholesale_cost#11486), sum(ss_ext_wholesale_cost#11486)]
Aggregate Attributes [4]: [avg(ss_quantity#11480)#11577, avg(ss_ext_sales_price#11485)#11578, avg(ss_ext_wholesale_cost#11486)#11579, sum(ss_ext_wholesale_cost#11486)#11580]
Results [4]: [avg(ss_quantity#11480)#11577 AS avg(ss_quantity)#11581, avg(ss_ext_sales_price#11485)#11578 AS avg(ss_ext_sales_price)#11582, avg(ss_ext_wholesale_cost#11486)#11579 AS avg(ss_ext_wholesale_cost)#11583, sum(ss_ext_wholesale_cost#11486)#11580 AS sum(ss_ext_wholesale_cost)#11584]


Query q14-1

Spark SQL

 with cross_items as
 (select i_item_sk ss_item_sk
 from item,
 (select iss.i_brand_id brand_id
     ,iss.i_class_id class_id
     ,iss.i_category_id category_id
 from store_sales
     ,item iss
     ,date_dim d1
 where ss_item_sk = iss.i_item_sk
   and ss_sold_date_sk = d1.d_date_sk
   and d1.d_year between 1999 AND 1999 + 2
 intersect
 select ics.i_brand_id
     ,ics.i_class_id
     ,ics.i_category_id
 from catalog_sales
     ,item ics
     ,date_dim d2
 where cs_item_sk = ics.i_item_sk
   and cs_sold_date_sk = d2.d_date_sk
   and d2.d_year between 1999 AND 1999 + 2
 intersect
 select iws.i_brand_id
     ,iws.i_class_id
     ,iws.i_category_id
 from web_sales
     ,item iws
     ,date_dim d3
 where ws_item_sk = iws.i_item_sk
   and ws_sold_date_sk = d3.d_date_sk
   and d3.d_year between 1999 AND 1999 + 2)
 where i_brand_id = brand_id
      and i_class_id = class_id
      and i_category_id = category_id
),
 avg_sales as
 (select avg(quantity*list_price) average_sales
  from (select ss_quantity quantity
             ,ss_list_price list_price
       from store_sales
           ,date_dim
       where ss_sold_date_sk = d_date_sk
         and d_year between 1999 and 1999 + 2
       union all
       select cs_quantity quantity
             ,cs_list_price list_price
       from catalog_sales
           ,date_dim
       where cs_sold_date_sk = d_date_sk
         and d_year between 1999 and 1999 + 2
       union all
       select ws_quantity quantity
             ,ws_list_price list_price
       from web_sales
           ,date_dim
       where ws_sold_date_sk = d_date_sk
         and d_year between 1999 and 1999 + 2) x)
  select  channel, i_brand_id,i_class_id,i_category_id,sum(sales), sum(number_sales)
 from(
       select 'store' channel, i_brand_id,i_class_id
             ,i_category_id,sum(ss_quantity*ss_list_price) sales
             , count(*) number_sales
       from store_sales
           ,item
           ,date_dim
       where ss_item_sk in (select ss_item_sk from cross_items)
         and ss_item_sk = i_item_sk
         and ss_sold_date_sk = d_date_sk
         and d_year = 1999+2
         and d_moy = 11
       group by i_brand_id,i_class_id,i_category_id
       having sum(ss_quantity*ss_list_price) > (select average_sales from avg_sales)
       union all
       select 'catalog' channel, i_brand_id,i_class_id,i_category_id, sum(cs_quantity*cs_list_price) sales, count(*) number_sales
       from catalog_sales
           ,item
           ,date_dim
       where cs_item_sk in (select ss_item_sk from cross_items)
         and cs_item_sk = i_item_sk
         and cs_sold_date_sk = d_date_sk
         and d_year = 1999+2
         and d_moy = 11
       group by i_brand_id,i_class_id,i_category_id
       having sum(cs_quantity*cs_list_price) > (select average_sales from avg_sales)
       union all
       select 'web' channel, i_brand_id,i_class_id,i_category_id, sum(ws_quantity*ws_list_price) sales , count(*) number_sales
       from web_sales
           ,item
           ,date_dim
       where ws_item_sk in (select ss_item_sk from cross_items)
         and ws_item_sk = i_item_sk
         and ws_sold_date_sk = d_date_sk
         and d_year = 1999+2
         and d_moy = 11
       group by i_brand_id,i_class_id,i_category_id
       having sum(ws_quantity*ws_list_price) > (select average_sales from avg_sales)
 ) y
 group by rollup (channel, i_brand_id,i_class_id,i_category_id)
 order by channel,i_brand_id,i_class_id,i_category_id
  limit 100; 

Spark Plan with Pushdown turned on

== Physical Plan ==
TakeOrderedAndProject (3)
+- * Project (2)
   +- BatchScan (1)


(1) BatchScan
Output [6]: [channel#15445, i_brand_id#15446, i_class_id#15447, i_category_id#15448, sum(sales)#15435, sum(number_sales)#15436L]
OraPlan: 00 OraSingleQueryBlock [channel#15445, i_brand_id#15446, i_class_id#15447, i_category_id#15448, sum(sales#13836) AS sum(sales)#15435, sum(number_sales#13837L) AS sum(number_sales)#15436L], [oracolumnref(channel#15445), oracolumnref(i_brand_id#15446), oracolumnref(i_class_id#15447), oracolumnref(i_category_id#15448), oraalias(sum(sales#13836) AS sum(sales)#15435), oraalias(sum(number_sales#13837L) AS sum(number_sales)#15436L)], List(oracolumnref(channel#15445), oracolumnref(i_brand_id#15446), oracolumnref(i_class_id#15447), oracolumnref(i_category_id#15448), oracolumnref(spark_grouping_id#15444L))
01 +- OraCompositeQueryBlock Union false, false, [sales#13836, number_sales#13837L, channel#15440, i_brand_id#13890, i_class_id#13892, i_category_id#13894], SQLSnippet(value: UNION ALL, parameters: ArrayBuffer())
02    :- OraSingleQueryBlock [sales#13836, number_sales#13837L, store AS channel#15440, i_brand_id#13890, i_class_id#13892, i_category_id#13894], [oracolumnref(sales#13836), oracolumnref(number_sales#13837L), oraalias(store AS channel#15440), oracolumnref(i_brand_id#13890), oracolumnref(i_class_id#13892), oracolumnref(i_category_id#13894)], orabinaryopexpression((isnotnull(sum(CheckOverflow((promote_precision(cast(ss_quantity#13870 as decimal(38,18))) * promote_precision(cast(ss_list_price#13872 as decimal(38,18)))), DecimalType(38,6), true))#15426) AND (cast(sum(CheckOverflow((promote_precision(cast(ss_quantity#13870 as decimal(38,18))) * promote_precision(cast(ss_list_price#13872 as decimal(38,18)))), DecimalType(38,6), true))#15426 as decimal(38,10)) > scalar-subquery#13838 [])))
03    :  +- OraSingleQueryBlock [i_brand_id#13890, i_class_id#13892, i_category_id#13894, sum(CheckOverflow((promote_precision(ss_quantity#13870) * promote_precision(ss_list_price#13872)), DecimalType(38,6), true)) AS sales#13836, count(1) AS number_sales#13837L, sum(CheckOverflow((promote_precision(ss_quantity#13870) * promote_precision(ss_list_price#13872)), DecimalType(38,6), true)) AS sum(CheckOverflow((promote_precision(cast(ss_quantity#13870 as decimal(38,18))) * promote_precision(cast(ss_list_price#13872 as decimal(38,18)))), DecimalType(38,6), true))#15426], [oracolumnref(i_brand_id#13890), oracolumnref(i_class_id#13892), oracolumnref(i_category_id#13894), oraalias(sum(CheckOverflow((promote_precision(ss_quantity#13870) * promote_precision(ss_list_price#13872)), DecimalType(38,6), true)) AS sales#13836), oraalias(count(1) AS number_sales#13837L), oraalias(sum(CheckOverflow((promote_precision(ss_quantity#13870) * promote_precision(ss_list_price#13872)), DecimalType(38,6), true)) AS sum(CheckOverflow((promote_precision(cast(ss_quantity#13870 as decimal(38,18))) * promote_precision(cast(ss_list_price#13872 as decimal(38,18)))), DecimalType(38,6), true))#15426)], orabinaryopexpression((((isnotnull(SS_SOLD_DATE_SK#13860) AND (SS_ITEM_SK#13862 = ss_item_sk#13852)) AND (I_ITEM_SK#13883 = ss_item_sk#13852)) AND (((isnotnull(D_YEAR#13911) AND isnotnull(D_MOY#13913)) AND (D_YEAR#13911 = 2001.000000000000000000)) AND (D_MOY#13913 = 11.000000000000000000)))), List(oracolumnref(i_brand_id#13890), oracolumnref(i_class_id#13892), oracolumnref(i_category_id#13894))
04    :     :- OraTableScan TPCDS.STORE_SALES, [SS_ITEM_SK#13862, SS_QUANTITY#13870, SS_LIST_PRICE#13872, SS_SOLD_DATE_SK#13860]
05    :     :- OraTableScan TPCDS.ITEM, [I_ITEM_SK#13883, I_BRAND_ID#13890, I_CLASS_ID#13892, I_CATEGORY_ID#13894]
06    :     +- OraTableScan TPCDS.DATE_DIM, [D_DATE_SK#13905, D_YEAR#13911, D_MOY#13913]
07    :- OraSingleQueryBlock [sales#13841, number_sales#13842L, catalog AS channel#15732, i_brand_id#13974, i_class_id#13976, i_category_id#13978], [oracolumnref(sales#13841), oracolumnref(number_sales#13842L), oraalias(catalog AS channel#15732), oracolumnref(i_brand_id#13974), oracolumnref(i_class_id#13976), oracolumnref(i_category_id#13978)], orabinaryopexpression((isnotnull(sum(CheckOverflow((promote_precision(cast(cs_quantity#13951 as decimal(38,18))) * promote_precision(cast(cs_list_price#13953 as decimal(38,18)))), DecimalType(38,6), true))#15429) AND (cast(sum(CheckOverflow((promote_precision(cast(cs_quantity#13951 as decimal(38,18))) * promote_precision(cast(cs_list_price#13953 as decimal(38,18)))), DecimalType(38,6), true))#15429 as decimal(38,10)) > scalar-subquery#13843 [])))
08    :  +- OraSingleQueryBlock [i_brand_id#13974, i_class_id#13976, i_category_id#13978, sum(CheckOverflow((promote_precision(c
Clone this wiki locally