[SPARK-23167][SQL] Add TPCDS queries v2.7 in TPCDSQuerySuite

## What changes were proposed in this pull request?
This pr added TPCDS v2.7 (latest) queries in `TPCDSQuerySuite` because the 
current `TPCDSQuerySuite` tests older one (v1.4) and some queries are different 
from v1.4 and v2.7. Since the original v2.7 queries have the syntaxes that 
Spark cannot parse, I changed these queries in a following way:

 - [date] + 14 days -> date + `INTERVAL` 14 days
 - [column name] as "30 days" -> [column name] as \`30 days\`
 - Fix some syntax errors, e.g., missing brackets

## How was this patch tested?
Added tests in `TPCDSQuerySuite`.

Author: Takeshi Yamamuro <yamam...@apache.org>

Closes #20343 from maropu/TPCDSV2_7.


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/5f653d4f
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/5f653d4f
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/5f653d4f

Branch: refs/heads/master
Commit: 5f653d4f7c84e6147cd323cd650da65e0381ebe8
Parents: 816a549
Author: Takeshi Yamamuro <yamam...@apache.org>
Authored: Sun Mar 25 09:18:26 2018 -0700
Committer: gatorsmile <gatorsm...@gmail.com>
Committed: Sun Mar 25 09:18:26 2018 -0700

----------------------------------------------------------------------
 .../src/test/resources/tpcds-v2.7.0/q10a.sql    |  69 ++++++
 .../src/test/resources/tpcds-v2.7.0/q11.sql     |  84 ++++++++
 .../src/test/resources/tpcds-v2.7.0/q12.sql     |  23 ++
 .../src/test/resources/tpcds-v2.7.0/q14.sql     | 135 ++++++++++++
 .../src/test/resources/tpcds-v2.7.0/q14a.sql    | 215 +++++++++++++++++++
 .../src/test/resources/tpcds-v2.7.0/q18a.sql    | 133 ++++++++++++
 .../src/test/resources/tpcds-v2.7.0/q20.sql     |  19 ++
 .../src/test/resources/tpcds-v2.7.0/q22.sql     |  15 ++
 .../src/test/resources/tpcds-v2.7.0/q22a.sql    |  94 ++++++++
 .../src/test/resources/tpcds-v2.7.0/q24.sql     |  40 ++++
 .../src/test/resources/tpcds-v2.7.0/q27a.sql    |  70 ++++++
 .../src/test/resources/tpcds-v2.7.0/q34.sql     |  37 ++++
 .../src/test/resources/tpcds-v2.7.0/q35.sql     |  65 ++++++
 .../src/test/resources/tpcds-v2.7.0/q35a.sql    |  62 ++++++
 .../src/test/resources/tpcds-v2.7.0/q36a.sql    |  70 ++++++
 .../src/test/resources/tpcds-v2.7.0/q47.sql     |  64 ++++++
 .../src/test/resources/tpcds-v2.7.0/q49.sql     | 133 ++++++++++++
 .../src/test/resources/tpcds-v2.7.0/q51a.sql    | 103 +++++++++
 .../src/test/resources/tpcds-v2.7.0/q57.sql     |  57 +++++
 .../src/test/resources/tpcds-v2.7.0/q5a.sql     | 158 ++++++++++++++
 sql/core/src/test/resources/tpcds-v2.7.0/q6.sql |  23 ++
 .../src/test/resources/tpcds-v2.7.0/q64.sql     | 111 ++++++++++
 .../src/test/resources/tpcds-v2.7.0/q67a.sql    | 208 ++++++++++++++++++
 .../src/test/resources/tpcds-v2.7.0/q70a.sql    |  70 ++++++
 .../src/test/resources/tpcds-v2.7.0/q72.sql     |  40 ++++
 .../src/test/resources/tpcds-v2.7.0/q74.sql     |  60 ++++++
 .../src/test/resources/tpcds-v2.7.0/q75.sql     |  78 +++++++
 .../src/test/resources/tpcds-v2.7.0/q77a.sql    | 121 +++++++++++
 .../src/test/resources/tpcds-v2.7.0/q78.sql     |  75 +++++++
 .../src/test/resources/tpcds-v2.7.0/q80a.sql    | 147 +++++++++++++
 .../src/test/resources/tpcds-v2.7.0/q86a.sql    |  61 ++++++
 .../src/test/resources/tpcds-v2.7.0/q98.sql     |  22 ++
 .../org/apache/spark/sql/TPCDSQuerySuite.scala  |  38 +++-
 33 files changed, 2691 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q10a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q10a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q10a.sql
new file mode 100644
index 0000000..50e5215
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q10a.sql
@@ -0,0 +1,69 @@
+-- This is a new query in TPCDS v2.7
+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 ('Walker County', 'Richland County', 'Gaines County', 
'Douglas County', 'Dona Ana 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 4 and 4 + 3)
+    and exists (
+        select *
+        from (
+            select
+              ws_bill_customer_sk as customer_sk,
+              d_year,
+              d_moy
+            from web_sales, date_dim
+            where ws_sold_date_sk = d_date_sk
+              and d_year = 2002
+              and d_moy between 4 and 4 + 3
+            union all
+            select
+              cs_ship_customer_sk as customer_sk,
+              d_year,
+              d_moy
+            from catalog_sales, date_dim
+            where cs_sold_date_sk = d_date_sk
+              and d_year = 2002
+              and d_moy between 4 and 4 + 3) x
+    where c.c_customer_sk = customer_sk)
+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

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q11.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q11.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q11.sql
new file mode 100755
index 0000000..97bed33
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q11.sql
@@ -0,0 +1,84 @@
+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
+    , d_year
+    , 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
+  -- select list of q11 in TPCDS v1.4 is below:
+  -- t_s_secyear.customer_preferred_cust_flag
+  t_s_secyear.customer_id,
+  t_s_secyear.customer_first_name,
+  t_s_secyear.customer_last_name,
+  t_s_secyear.customer_email_address
+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
+  -- q11 in TPCDS v1.4 used NULL
+  --     ELSE NULL END
+      ELSE 0.0 END
+  > CASE WHEN t_s_firstyear.year_total > 0
+  THEN t_s_secyear.year_total / t_s_firstyear.year_total
+  -- q11 in TPCDS v1.4 used NULL
+  --   ELSE NULL END
+    ELSE 0.0 END
+ORDER BY
+  -- order-by list of q11 in TPCDS v1.4 is below:
+  -- t_s_secyear.customer_preferred_cust_flag
+  t_s_secyear.customer_id,
+  t_s_secyear.customer_first_name,
+  t_s_secyear.customer_last_name,
+  t_s_secyear.customer_email_address
+LIMIT 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q12.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q12.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q12.sql
new file mode 100755
index 0000000..7a6fafd
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q12.sql
@@ -0,0 +1,23 @@
+SELECT
+  i_item_id, -- This column did not exist in TPCDS v1.4
+  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 (cast('1999-02-22' AS DATE) + INTERVAL 30 days)
+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

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q14.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q14.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q14.sql
new file mode 100644
index 0000000..b2ca3dd
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q14.sql
@@ -0,0 +1,135 @@
+-- This query is the alternative form of 
sql/core/src/test/resources/tpcds/q14a.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 1998 AND 1998 + 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 1998 AND 1998 + 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 1998 AND 1998 + 2) x
+      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 1998 and 1998 + 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 1998 and 1998 + 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 1998 and 1998 + 2) x)
+select
+  *
+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_week_seq = (
+            select d_week_seq
+            from date_dim
+            where d_year = 1998 + 1
+              and d_moy = 12
+              and d_dom = 16)
+    group by
+      i_brand_id,
+      i_class_id,
+      i_category_id
+    having
+      sum(ss_quantity*ss_list_price) > (select average_sales from avg_sales)) 
this_year,
+  (
+    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_week_seq = (
+            select d_week_seq
+            from date_dim
+            where d_year = 1998
+              and d_moy = 12
+              and d_dom = 16)
+    group by
+      i_brand_id,
+      i_class_id,
+      i_category_id
+    having
+      sum(ss_quantity * ss_list_price) > (select average_sales from 
avg_sales)) last_year
+where
+  this_year.i_brand_id = last_year.i_brand_id
+    and this_year.i_class_id = last_year.i_class_id
+    and this_year.i_category_id = last_year.i_category_id
+order by
+  this_year.channel,
+  this_year.i_brand_id,
+  this_year.i_class_id,
+  this_year.i_category_id
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q14a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q14a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q14a.sql
new file mode 100644
index 0000000..bfa70fe
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q14a.sql
@@ -0,0 +1,215 @@
+-- This query is the alternative form of 
sql/core/src/test/resources/tpcds/q14b.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) x
+    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 2001
+         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 1998 and 1998 + 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 1998 and 1998 + 2) x),
+results AS (
+    select
+      channel,
+      i_brand_id,
+      i_class_id,
+      i_category_id,
+      sum(sales) sum_sales,
+      sum(number_sales) 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 = 1998 + 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 = 1998+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 = 1998 + 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
+      channel,
+      i_brand_id,
+      i_class_id,
+      i_category_id)
+select
+  channel,
+  i_brand_id,
+  i_class_id,
+  i_category_id,
+  sum_sales,
+  number_sales
+from (
+    select
+      channel,
+      i_brand_id,
+      i_class_id,
+      i_category_id,
+      sum_sales,
+      number_sales
+    from
+      results
+    union
+    select
+      channel,
+      i_brand_id,
+      i_class_id,
+      null as i_category_id,
+      sum(sum_sales),
+      sum(number_sales)
+    from results
+    group by
+      channel,
+      i_brand_id,
+      i_class_id
+    union
+    select
+      channel,
+      i_brand_id,
+      null as i_class_id,
+      null as i_category_id,
+      sum(sum_sales),
+      sum(number_sales)
+    from results
+    group by
+      channel,
+      i_brand_id
+    union
+    select
+      channel,
+      null as i_brand_id,
+      null as i_class_id,
+      null as i_category_id,
+      sum(sum_sales),
+      sum(number_sales)
+    from results
+    group by
+      channel
+    union
+    select
+      null as channel,
+      null as i_brand_id,
+      null as i_class_id,
+      null as i_category_id,
+      sum(sum_sales),
+      sum(number_sales)
+    from results) z
+order by
+  channel,
+  i_brand_id,
+  i_class_id,
+  i_category_id
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q18a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q18a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q18a.sql
new file mode 100644
index 0000000..2201a30
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q18a.sql
@@ -0,0 +1,133 @@
+-- This is a new query in TPCDS v2.7
+with results as (
+    select
+      i_item_id,
+      ca_country,
+      ca_state,
+      ca_county,
+      cast(cs_quantity as decimal(12,2)) agg1,
+      cast(cs_list_price as decimal(12,2)) agg2,
+      cast(cs_coupon_amt as decimal(12,2)) agg3,
+      cast(cs_sales_price as decimal(12,2)) agg4,
+      cast(cs_net_profit as decimal(12,2)) agg5,
+      cast(c_birth_year as decimal(12,2)) agg6,
+      cast(cd1.cd_dep_count as decimal(12,2)) agg7
+    from
+      catalog_sales, customer_demographics cd1, customer_demographics cd2, 
customer,
+      customer_address, date_dim, item
+    where
+      cs_sold_date_sk = d_date_sk
+        and cs_item_sk = i_item_sk
+        and cs_bill_cdemo_sk = cd1.cd_demo_sk
+        and cs_bill_customer_sk = c_customer_sk
+        and cd1.cd_gender = 'M'
+        and cd1.cd_education_status = 'College'
+        and c_current_cdemo_sk = cd2.cd_demo_sk
+        and c_current_addr_sk = ca_address_sk
+        and c_birth_month in (9,5,12,4,1,10)
+        and d_year = 2001
+        and ca_state in ('ND','WI','AL','NC','OK','MS','TN'))
+select
+  i_item_id,
+  ca_country,
+  ca_state,
+  ca_county,
+  agg1,
+  agg2,
+  agg3,
+  agg4,
+  agg5,
+  agg6,
+  agg7
+from (
+    select
+      i_item_id,
+      ca_country,
+      ca_state,
+      ca_county,
+      avg(agg1) agg1,
+      avg(agg2) agg2,
+      avg(agg3) agg3,
+      avg(agg4) agg4,
+      avg(agg5) agg5,
+      avg(agg6) agg6,
+      avg(agg7) agg7
+    from
+      results
+    group by
+      i_item_id,
+      ca_country,
+      ca_state,
+      ca_county
+    union all
+    select
+      i_item_id,
+      ca_country,
+      ca_state,
+      NULL as county,
+      avg(agg1) agg1,
+      avg(agg2) agg2,
+      avg(agg3) agg3,
+      avg(agg4) agg4,
+      avg(agg5) agg5,
+      avg(agg6) agg6,
+      avg(agg7) agg7
+    from
+      results
+    group by
+      i_item_id,
+      ca_country,
+      ca_state
+    union all
+    select
+      i_item_id,
+      ca_country,
+      NULL as ca_state,
+      NULL as county,
+      avg(agg1) agg1,
+      avg(agg2) agg2,
+      avg(agg3) agg3,
+      avg(agg4) agg4,
+      avg(agg5) agg5,
+      avg(agg6) agg6,
+      avg(agg7) agg7
+    from results
+    group by
+      i_item_id,
+      ca_country
+    union all
+    select
+      i_item_id,
+      NULL as ca_country,
+      NULL as ca_state,
+      NULL as county,
+      avg(agg1) agg1,
+      avg(agg2) agg2,
+      avg(agg3) agg3,
+      avg(agg4) agg4,
+      avg(agg5) agg5,
+      avg(agg6) agg6,
+      avg(agg7) agg7
+    from results
+    group by
+      i_item_id
+    union all
+    select
+      NULL AS i_item_id,
+      NULL as ca_country,
+      NULL as ca_state,
+      NULL as county,
+      avg(agg1) agg1,
+      avg(agg2) agg2,
+      avg(agg3) agg3,
+      avg(agg4) agg4,
+      avg(agg5) agg5,
+      avg(agg6) agg6,
+      avg(agg7) agg7
+    from results) foo
+order by
+  ca_country,
+  ca_state,
+  ca_county,
+  i_item_id
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q20.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q20.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q20.sql
new file mode 100755
index 0000000..34d46b1
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q20.sql
@@ -0,0 +1,19 @@
+SELECT
+  i_item_id, -- This column did not exist in TPCDS v1.4
+  i_item_desc,
+  i_category,
+  i_class,
+  i_current_price,
+  sum(cs_ext_sales_price) AS itemrevenue,
+  sum(cs_ext_sales_price) * 100 / sum(sum(cs_ext_sales_price))
+  OVER
+  (PARTITION BY i_class) AS revenueratio
+FROM catalog_sales, item, date_dim
+WHERE cs_item_sk = i_item_sk
+  AND i_category IN ('Sports', 'Books', 'Home')
+  AND cs_sold_date_sk = d_date_sk
+  AND d_date BETWEEN cast('1999-02-22' AS DATE)
+AND (cast('1999-02-22' AS DATE) + INTERVAL 30 days)
+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

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q22.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q22.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q22.sql
new file mode 100755
index 0000000..e7bea08
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q22.sql
@@ -0,0 +1,15 @@
+SELECT
+  i_product_name,
+  i_brand,
+  i_class,
+  i_category,
+  avg(inv_quantity_on_hand) qoh
+FROM inventory, date_dim, item, warehouse
+WHERE inv_date_sk = d_date_sk
+  AND inv_item_sk = i_item_sk
+  -- q22 in TPCDS v1.4 had a condition below:
+  -- AND inv_warehouse_sk = w_warehouse_sk
+  AND d_month_seq BETWEEN 1200 AND 1200 + 11
+GROUP BY ROLLUP (i_product_name, i_brand, i_class, i_category)
+ORDER BY qoh, i_product_name, i_brand, i_class, i_category
+LIMIT 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q22a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q22a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q22a.sql
new file mode 100644
index 0000000..c886e62
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q22a.sql
@@ -0,0 +1,94 @@
+-- This is a new query in TPCDS v2.7
+with results as (
+    select
+      i_product_name,
+      i_brand,
+      i_class,
+      i_category,
+      avg(inv_quantity_on_hand) qoh
+    from
+      inventory, date_dim, item, warehouse
+    where
+      inv_date_sk = d_date_sk
+        and inv_item_sk = i_item_sk
+        and inv_warehouse_sk = w_warehouse_sk
+        and d_month_seq between 1212 and 1212 + 11
+    group by
+      i_product_name,
+      i_brand,
+      i_class,
+      i_category),
+results_rollup as (
+    select
+      i_product_name,
+      i_brand,
+      i_class,
+      i_category,
+      avg(qoh) qoh
+    from
+      results
+    group by
+      i_product_name,
+      i_brand,
+      i_class,
+      i_category
+    union all
+    select
+      i_product_name,
+      i_brand,
+      i_class,
+      null i_category,
+      avg(qoh) qoh
+    from
+      results
+    group by
+      i_product_name,
+      i_brand,
+      i_class
+    union all
+    select
+      i_product_name,
+      i_brand,
+      null i_class,
+      null i_category,
+      avg(qoh) qoh
+    from
+      results
+    group by
+      i_product_name,
+      i_brand
+    union all
+    select
+      i_product_name,
+      null i_brand,
+      null i_class,
+      null i_category,
+      avg(qoh) qoh
+    from
+      results
+    group by
+      i_product_name
+    union all
+    select
+      null i_product_name,
+      null i_brand,
+      null i_class,
+      null i_category,
+      avg(qoh) qoh
+    from
+      results)
+select
+  i_product_name,
+  i_brand,
+  i_class,
+  i_category,
+  qoh
+from
+  results_rollup
+order by
+  qoh,
+  i_product_name,
+  i_brand,
+  i_class,
+  i_category
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q24.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q24.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q24.sql
new file mode 100755
index 0000000..92d64bc
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q24.sql
@@ -0,0 +1,40 @@
+WITH ssales AS
+(SELECT
+    c_last_name,
+    c_first_name,
+    s_store_name,
+    ca_state,
+    s_state,
+    i_color,
+    i_current_price,
+    i_manager_id,
+    i_units,
+    i_size,
+    sum(ss_net_paid) netpaid
+  FROM store_sales, store_returns, store, item, customer, customer_address
+  WHERE ss_ticket_number = sr_ticket_number
+    AND ss_item_sk = sr_item_sk
+    AND ss_customer_sk = c_customer_sk
+    AND ss_item_sk = i_item_sk
+    AND ss_store_sk = s_store_sk
+    AND c_current_addr_sk = ca_address_sk -- This condition did not exist in 
TPCDS v1.4
+    AND c_birth_country = upper(ca_country)
+    AND s_zip = ca_zip
+    AND s_market_id = 8
+  GROUP BY c_last_name, c_first_name, s_store_name, ca_state, s_state, i_color,
+    i_current_price, i_manager_id, i_units, i_size)
+SELECT
+  c_last_name,
+  c_first_name,
+  s_store_name,
+  sum(netpaid) paid
+FROM ssales
+WHERE i_color = 'pale'
+GROUP BY c_last_name, c_first_name, s_store_name
+HAVING sum(netpaid) > (SELECT 0.05 * avg(netpaid)
+FROM ssales)
+-- no order-by exists in q24a of TPCDS v1.4
+ORDER BY
+  c_last_name,
+  c_first_name,
+  s_store_name

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q27a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q27a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q27a.sql
new file mode 100644
index 0000000..c70a242
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q27a.sql
@@ -0,0 +1,70 @@
+-- This is a new query in TPCDS v2.7
+with results as (
+    select
+        i_item_id,
+        s_state, 0 as g_state,
+        ss_quantity agg1,
+        ss_list_price agg2,
+        ss_coupon_amt agg3,
+        ss_sales_price agg4
+    from
+      store_sales, customer_demographics, date_dim, store, item
+    where
+      ss_sold_date_sk = d_date_sk
+        and ss_item_sk = i_item_sk
+        and ss_store_sk = s_store_sk
+        and ss_cdemo_sk = cd_demo_sk
+        and cd_gender = 'F'
+        and cd_marital_status = 'W'
+        and cd_education_status = 'Primary'
+        and d_year = 1998
+        and s_state in ('TN','TN', 'TN', 'TN', 'TN', 'TN'))
+select
+  i_item_id,
+  s_state,
+  g_state,
+  agg1,
+  agg2,
+  agg3,
+  agg4
+from (
+    select
+      i_item_id,
+      s_state,
+      0 as g_state,
+      avg(agg1) agg1,
+      avg(agg2) agg2,
+      avg(agg3) agg3,
+      avg(agg4) agg4
+    from
+      results
+    group by
+      i_item_id,
+      s_state
+    union all
+    select
+      i_item_id,
+      NULL AS s_state,
+      1 AS g_state,
+      avg(agg1) agg1,
+      avg(agg2) agg2,
+      avg(agg3) agg3,
+      avg(agg4) agg4
+    from results
+    group by
+      i_item_id
+    union all
+    select
+      NULL AS i_item_id,
+      NULL as s_state,
+      1 as g_state,
+      avg(agg1) agg1,
+      avg(agg2) agg2,
+      avg(agg3) agg3,
+      avg(agg4) agg4
+    from
+      results) foo
+order by
+  i_item_id,
+  s_state
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q34.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q34.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q34.sql
new file mode 100755
index 0000000..bbede62
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q34.sql
@@ -0,0 +1,37 @@
+SELECT
+  c_last_name,
+  c_first_name,
+  c_salutation,
+  c_preferred_cust_flag,
+  ss_ticket_number,
+  cnt
+FROM
+  (SELECT
+    ss_ticket_number,
+    ss_customer_sk,
+    count(*) cnt
+  FROM store_sales, date_dim, store, household_demographics
+  WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk
+    AND store_sales.ss_store_sk = store.s_store_sk
+    AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
+    AND (date_dim.d_dom BETWEEN 1 AND 3 OR date_dim.d_dom BETWEEN 25 AND 28)
+    AND (household_demographics.hd_buy_potential = '>10000' OR
+    household_demographics.hd_buy_potential = 'unknown')
+    AND household_demographics.hd_vehicle_count > 0
+    AND (CASE WHEN household_demographics.hd_vehicle_count > 0
+    THEN household_demographics.hd_dep_count / 
household_demographics.hd_vehicle_count
+         ELSE NULL
+         END) > 1.2
+    AND date_dim.d_year IN (1999, 1999 + 1, 1999 + 2)
+    AND store.s_county IN
+    ('Williamson County', 'Williamson County', 'Williamson County', 
'Williamson County',
+     'Williamson County', 'Williamson County', 'Williamson County', 
'Williamson County')
+  GROUP BY ss_ticket_number, ss_customer_sk) dn, customer
+WHERE ss_customer_sk = c_customer_sk
+  AND cnt BETWEEN 15 AND 20
+ORDER BY
+  c_last_name,
+  c_first_name,
+  c_salutation,
+  c_preferred_cust_flag DESC,
+  ss_ticket_number -- This order-by condition did not exist in TPCDS v1.4

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q35.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q35.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q35.sql
new file mode 100755
index 0000000..27116a5
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q35.sql
@@ -0,0 +1,65 @@
+SELECT
+  -- select list of q35 in TPCDS v1.4 is below:
+  -- ca_state,
+  -- cd_gender,
+  -- cd_marital_status,
+  -- count(*) cnt1,
+  -- min(cd_dep_count),
+  -- max(cd_dep_count),
+  -- avg(cd_dep_count),
+  -- cd_dep_employed_count,
+  -- count(*) cnt2,
+  -- min(cd_dep_employed_count),
+  -- max(cd_dep_employed_count),
+  -- avg(cd_dep_employed_count),
+  -- cd_dep_college_count,
+  -- count(*) cnt3,
+  -- min(cd_dep_college_count),
+  -- max(cd_dep_college_count),
+  -- avg(cd_dep_college_count)
+  ca_state,
+  cd_gender,
+  cd_marital_status,
+  cd_dep_count,
+  count(*) cnt1,
+  avg(cd_dep_count),
+  max(cd_dep_count),
+  sum(cd_dep_count),
+  cd_dep_employed_count,
+  count(*) cnt2,
+  avg(cd_dep_employed_count),
+  max(cd_dep_employed_count),
+  sum(cd_dep_employed_count),
+  cd_dep_college_count,
+  count(*) cnt3,
+  avg(cd_dep_college_count),
+  max(cd_dep_college_count),
+  sum(cd_dep_college_count)
+FROM
+  customer c, customer_address ca, customer_demographics
+WHERE
+  c.c_current_addr_sk = ca.ca_address_sk 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_qoy < 4) 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_qoy < 4) 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_qoy < 4))
+GROUP BY ca_state, cd_gender, cd_marital_status, cd_dep_count,
+  cd_dep_employed_count, cd_dep_college_count
+ORDER BY ca_state, cd_gender, cd_marital_status, cd_dep_count,
+  cd_dep_employed_count, cd_dep_college_count
+LIMIT 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q35a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q35a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q35a.sql
new file mode 100644
index 0000000..1c1463e
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q35a.sql
@@ -0,0 +1,62 @@
+-- This is a new query in TPCDS v2.7
+select
+  ca_state,
+  cd_gender,
+  cd_marital_status,
+  cd_dep_count,
+  count(*) cnt1,
+  avg(cd_dep_count),
+  max(cd_dep_count),
+  sum(cd_dep_count),
+  cd_dep_employed_count,
+  count(*) cnt2,
+  avg(cd_dep_employed_count),
+  max(cd_dep_employed_count),
+  sum(cd_dep_employed_count),
+  cd_dep_college_count,
+  count(*) cnt3,
+  avg(cd_dep_college_count),
+  max(cd_dep_college_count),
+  sum(cd_dep_college_count)
+from
+  customer c, customer_address ca, customer_demographics
+where
+  c.c_current_addr_sk = ca.ca_address_sk
+    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 = 1999
+          and d_qoy < 4)
+    and exists (
+        select *
+        from (
+            select ws_bill_customer_sk customsk
+            from web_sales, date_dim
+            where ws_sold_date_sk = d_date_sk
+              and d_year = 1999
+              and d_qoy < 4
+        union all
+        select cs_ship_customer_sk customsk
+        from catalog_sales, date_dim
+        where cs_sold_date_sk = d_date_sk
+          and d_year = 1999
+          and d_qoy < 4) x
+        where x.customsk = c.c_customer_sk)
+group by
+  ca_state,
+  cd_gender,
+  cd_marital_status,
+  cd_dep_count,
+  cd_dep_employed_count,
+  cd_dep_college_count
+order by
+  ca_state,
+  cd_gender,
+  cd_marital_status,
+  cd_dep_count,
+  cd_dep_employed_count,
+  cd_dep_college_count
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q36a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q36a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q36a.sql
new file mode 100644
index 0000000..9d98f32
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q36a.sql
@@ -0,0 +1,70 @@
+-- This is a new query in TPCDS v2.7
+with results as (
+    select
+      sum(ss_net_profit) as ss_net_profit,
+      sum(ss_ext_sales_price) as ss_ext_sales_price,
+      sum(ss_net_profit)/sum(ss_ext_sales_price) as gross_margin,
+      i_category,
+      i_class,
+      0 as g_category,
+      0 as g_class
+    from
+      store_sales,
+      date_dim d1,
+      item,
+      store
+    where
+      d1.d_year = 2001
+        and d1.d_date_sk = ss_sold_date_sk
+        and i_item_sk  = ss_item_sk
+        and s_store_sk  = ss_store_sk
+        and s_state in ('TN', 'TN', 'TN', 'TN', 'TN', 'TN', 'TN', 'TN')
+    group by
+      i_category,
+      i_class),
+ results_rollup as (
+     select
+       gross_margin,
+       i_category,
+       i_class,
+       0 as t_category,
+       0 as t_class,
+       0 as lochierarchy
+     from
+       results
+     union
+     select
+       sum(ss_net_profit) / sum(ss_ext_sales_price) as gross_margin,
+       i_category, NULL AS i_class,
+       0 as t_category,
+       1 as t_class,
+       1 as lochierarchy
+     from
+       results
+     group by
+       i_category
+     union
+     select
+       sum(ss_net_profit) / sum(ss_ext_sales_price) as gross_margin,
+       NULL AS i_category,
+       NULL AS i_class,
+       1 as t_category,
+       1 as t_class,
+       2 as lochierarchy
+     from
+       results)
+select
+  gross_margin,
+  i_category,
+  i_class,
+  lochierarchy,
+  rank() over (
+    partition by lochierarchy, case when t_class = 0 then i_category end
+    order by gross_margin asc) as rank_within_parent
+from
+  results_rollup
+order by
+  lochierarchy desc,
+  case when lochierarchy = 0 then i_category end,
+  rank_within_parent
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q47.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q47.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q47.sql
new file mode 100755
index 0000000..9f7ee45
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q47.sql
@@ -0,0 +1,64 @@
+WITH v1 AS (
+  SELECT
+    i_category,
+    i_brand,
+    s_store_name,
+    s_company_name,
+    d_year,
+    d_moy,
+    sum(ss_sales_price) sum_sales,
+    avg(sum(ss_sales_price))
+    OVER
+    (PARTITION BY i_category, i_brand,
+      s_store_name, s_company_name, d_year)
+    avg_monthly_sales,
+    rank()
+    OVER
+    (PARTITION BY i_category, i_brand,
+      s_store_name, s_company_name
+      ORDER BY d_year, d_moy) rn
+  FROM item, store_sales, date_dim, store
+  WHERE ss_item_sk = i_item_sk AND
+    ss_sold_date_sk = d_date_sk AND
+    ss_store_sk = s_store_sk AND
+    (
+      d_year = 1999 OR
+        (d_year = 1999 - 1 AND d_moy = 12) OR
+        (d_year = 1999 + 1 AND d_moy = 1)
+    )
+  GROUP BY i_category, i_brand,
+    s_store_name, s_company_name,
+    d_year, d_moy),
+    v2 AS (
+    SELECT
+      v1.i_category,
+      -- q47 in TPCDS v1.4 had more columns below:
+      -- v1.i_brand,
+      -- v1.s_store_name,
+      -- v1.s_company_name,
+      v1.d_year,
+      v1.d_moy,
+      v1.avg_monthly_sales,
+      v1.sum_sales,
+      v1_lag.sum_sales psum,
+      v1_lead.sum_sales nsum
+    FROM v1, v1 v1_lag, v1 v1_lead
+    WHERE v1.i_category = v1_lag.i_category AND
+      v1.i_category = v1_lead.i_category AND
+      v1.i_brand = v1_lag.i_brand AND
+      v1.i_brand = v1_lead.i_brand AND
+      v1.s_store_name = v1_lag.s_store_name AND
+      v1.s_store_name = v1_lead.s_store_name AND
+      v1.s_company_name = v1_lag.s_company_name AND
+      v1.s_company_name = v1_lead.s_company_name AND
+      v1.rn = v1_lag.rn + 1 AND
+      v1.rn = v1_lead.rn - 1)
+SELECT *
+FROM v2
+WHERE d_year = 1999 AND
+  avg_monthly_sales > 0 AND
+  CASE WHEN avg_monthly_sales > 0
+    THEN abs(sum_sales - avg_monthly_sales) / avg_monthly_sales
+  ELSE NULL END > 0.1
+ORDER BY sum_sales - avg_monthly_sales, 3
+LIMIT 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q49.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q49.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q49.sql
new file mode 100755
index 0000000..e8061bd
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q49.sql
@@ -0,0 +1,133 @@
+-- The first SELECT query below is different from q49 of TPCDS v1.4
+SELECT
+  channel,
+  item,
+  return_ratio,
+  return_rank,
+  currency_rank
+FROM (
+       SELECT
+         'web' as channel,
+         in_web.item,
+         in_web.return_ratio,
+         in_web.return_rank,
+         in_web.currency_rank
+       FROM
+         (SELECT
+           item,
+           return_ratio,
+           currency_ratio,
+           rank() over (ORDER BY return_ratio) AS return_rank,
+           rank() over (ORDER BY currency_ratio) AS currency_rank
+         FROM (
+            SELECT
+              ws.ws_item_sk AS item,
+              CAST(SUM(COALESCE(wr.wr_return_quantity, 0)) AS DECIMAL(15, 4)) /
+                CAST(SUM(COALESCE(ws.ws_quantity, 0)) AS DECIMAL(15, 4)) AS 
return_ratio,
+              CAST(SUM(COALESCE(wr.wr_return_amt, 0)) AS DECIMAL(15, 4)) /
+                CAST(SUM(COALESCE(ws.ws_net_paid, 0)) AS DECIMAL(15, 4)) AS 
currency_ratio
+            FROM
+              web_sales ws LEFT OUTER JOIN web_returns wr
+                ON (ws.ws_order_number = wr.wr_order_number AND ws.ws_item_sk 
= wr.wr_item_sk),
+              date_dim
+            WHERE
+              wr.wr_return_amt > 10000
+                AND ws.ws_net_profit > 1
+                AND ws.ws_net_paid > 0
+                AND ws.ws_quantity > 0
+                AND ws_sold_date_sk = d_date_sk
+                AND d_year = 2001
+                AND d_moy = 12
+            GROUP BY
+              ws.ws_item_sk)
+         ) in_web
+     ) web
+WHERE (web.return_rank <= 10 OR web.currency_rank <= 10)
+UNION
+SELECT
+  'catalog' AS channel,
+  catalog.item,
+  catalog.return_ratio,
+  catalog.return_rank,
+  catalog.currency_rank
+FROM (
+       SELECT
+         item,
+         return_ratio,
+         currency_ratio,
+         rank()
+         OVER (
+           ORDER BY return_ratio) AS return_rank,
+         rank()
+         OVER (
+           ORDER BY currency_ratio) AS currency_rank
+       FROM
+         (SELECT
+           cs.cs_item_sk AS item,
+           (cast(sum(coalesce(cr.cr_return_quantity, 0)) AS DECIMAL(15, 4)) /
+             cast(sum(coalesce(cs.cs_quantity, 0)) AS DECIMAL(15, 4))) AS 
return_ratio,
+           (cast(sum(coalesce(cr.cr_return_amount, 0)) AS DECIMAL(15, 4)) /
+             cast(sum(coalesce(cs.cs_net_paid, 0)) AS DECIMAL(15, 4))) AS 
currency_ratio
+         FROM
+           catalog_sales cs LEFT OUTER JOIN catalog_returns cr
+             ON (cs.cs_order_number = cr.cr_order_number AND
+             cs.cs_item_sk = cr.cr_item_sk)
+           , date_dim
+         WHERE
+           cr.cr_return_amount > 10000
+             AND cs.cs_net_profit > 1
+             AND cs.cs_net_paid > 0
+             AND cs.cs_quantity > 0
+             AND cs_sold_date_sk = d_date_sk
+             AND d_year = 2001
+             AND d_moy = 12
+         GROUP BY cs.cs_item_sk
+         ) in_cat
+     ) catalog
+WHERE (catalog.return_rank <= 10 OR catalog.currency_rank <= 10)
+UNION
+SELECT
+  'store' AS channel,
+  store.item,
+  store.return_ratio,
+  store.return_rank,
+  store.currency_rank
+FROM (
+       SELECT
+         item,
+         return_ratio,
+         currency_ratio,
+         rank()
+         OVER (
+           ORDER BY return_ratio) AS return_rank,
+         rank()
+         OVER (
+           ORDER BY currency_ratio) AS currency_rank
+       FROM
+         (SELECT
+           sts.ss_item_sk AS item,
+           (cast(sum(coalesce(sr.sr_return_quantity, 0)) AS DECIMAL(15, 4)) /
+             cast(sum(coalesce(sts.ss_quantity, 0)) AS DECIMAL(15, 4))) AS 
return_ratio,
+           (cast(sum(coalesce(sr.sr_return_amt, 0)) AS DECIMAL(15, 4)) /
+             cast(sum(coalesce(sts.ss_net_paid, 0)) AS DECIMAL(15, 4))) AS 
currency_ratio
+         FROM
+           store_sales sts LEFT OUTER JOIN store_returns sr
+             ON (sts.ss_ticket_number = sr.sr_ticket_number AND sts.ss_item_sk 
= sr.sr_item_sk)
+           , date_dim
+         WHERE
+           sr.sr_return_amt > 10000
+             AND sts.ss_net_profit > 1
+             AND sts.ss_net_paid > 0
+             AND sts.ss_quantity > 0
+             AND ss_sold_date_sk = d_date_sk
+             AND d_year = 2001
+             AND d_moy = 12
+         GROUP BY sts.ss_item_sk
+         ) in_store
+     ) store
+WHERE (store.return_rank <= 10 OR store.currency_rank <= 10)
+ORDER BY
+  -- order-by list of q49 in TPCDS v1.4 is below:
+  -- 1, 4, 5
+  1, 4, 5, 2
+LIMIT 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q51a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q51a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q51a.sql
new file mode 100644
index 0000000..b8cbbbc
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q51a.sql
@@ -0,0 +1,103 @@
+-- This is a new query in TPCDS v2.7
+WITH web_tv as (
+    select
+      ws_item_sk item_sk,
+      d_date,
+      sum(ws_sales_price) sumws,
+      row_number() over (partition by ws_item_sk order by d_date) rk
+    from
+      web_sales, date_dim
+    where
+      ws_sold_date_sk=d_date_sk
+        and d_month_seq between 1212 and 1212 + 11
+        and ws_item_sk is not NULL
+    group by
+      ws_item_sk, d_date),
+web_v1 as (
+    select
+      v1.item_sk,
+      v1.d_date,
+      v1.sumws,
+      sum(v2.sumws) cume_sales
+    from
+      web_tv v1, web_tv v2
+    where
+      v1.item_sk = v2.item_sk
+        and v1.rk >= v2.rk
+    group by
+      v1.item_sk,
+      v1.d_date,
+      v1.sumws),
+store_tv as (
+    select
+      ss_item_sk item_sk,
+      d_date,
+      sum(ss_sales_price) sumss,
+      row_number() over (partition by ss_item_sk order by d_date) rk
+    from
+      store_sales, date_dim
+    where
+      ss_sold_date_sk = d_date_sk
+        and d_month_seq between 1212 and 1212 + 11
+        and ss_item_sk is not NULL
+    group by ss_item_sk, d_date),
+store_v1 as (
+    select
+      v1.item_sk,
+      v1.d_date,
+      v1.sumss,
+      sum(v2.sumss) cume_sales
+    from
+      store_tv v1, store_tv v2
+    where
+      v1.item_sk = v2.item_sk
+        and v1.rk >= v2.rk
+    group by
+      v1.item_sk,
+      v1.d_date,
+      v1.sumss),
+v as (
+    select
+      item_sk,
+      d_date,
+      web_sales,
+      store_sales,
+      row_number() over (partition by item_sk order by d_date) rk
+    from (
+        select
+          case when web.item_sk is not null
+            then web.item_sk
+            else store.item_sk end item_sk,
+          case when web.d_date is not null
+            then web.d_date
+            else store.d_date end d_date,
+          web.cume_sales web_sales,
+          store.cume_sales store_sales
+        from
+          web_v1 web full outer join store_v1 store
+            on (web.item_sk = store.item_sk and web.d_date = store.d_date)))
+select *
+from (
+    select
+      v1.item_sk,
+      v1.d_date,
+      v1.web_sales,
+      v1.store_sales,
+      max(v2.web_sales) web_cumulative,
+      max(v2.store_sales) store_cumulative
+    from
+      v v1, v v2
+    where
+      v1.item_sk = v2.item_sk
+        and v1.rk >= v2.rk
+    group by
+      v1.item_sk,
+      v1.d_date,
+      v1.web_sales,
+      v1.store_sales) x
+where
+  web_cumulative > store_cumulative
+order by
+  item_sk,
+  d_date
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q57.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q57.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q57.sql
new file mode 100755
index 0000000..ccefaac
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q57.sql
@@ -0,0 +1,57 @@
+WITH v1 AS (
+  SELECT
+    i_category,
+    i_brand,
+    cc_name,
+    d_year,
+    d_moy,
+    sum(cs_sales_price) sum_sales,
+    avg(sum(cs_sales_price))
+    OVER
+    (PARTITION BY i_category, i_brand, cc_name, d_year)
+    avg_monthly_sales,
+    rank()
+    OVER
+    (PARTITION BY i_category, i_brand, cc_name
+      ORDER BY d_year, d_moy) rn
+  FROM item, catalog_sales, date_dim, call_center
+  WHERE cs_item_sk = i_item_sk AND
+    cs_sold_date_sk = d_date_sk AND
+    cc_call_center_sk = cs_call_center_sk AND
+    (
+      d_year = 1999 OR
+        (d_year = 1999 - 1 AND d_moy = 12) OR
+        (d_year = 1999 + 1 AND d_moy = 1)
+    )
+  GROUP BY i_category, i_brand,
+    cc_name, d_year, d_moy),
+    v2 AS (
+    SELECT
+      v1.i_category,
+      v1.i_brand,
+      -- q57 in TPCDS v1.4 had a column below:
+      -- v1.cc_name,
+      v1.d_year,
+      v1.d_moy,
+      v1.avg_monthly_sales,
+      v1.sum_sales,
+      v1_lag.sum_sales psum,
+      v1_lead.sum_sales nsum
+    FROM v1, v1 v1_lag, v1 v1_lead
+    WHERE v1.i_category = v1_lag.i_category AND
+      v1.i_category = v1_lead.i_category AND
+      v1.i_brand = v1_lag.i_brand AND
+      v1.i_brand = v1_lead.i_brand AND
+      v1.cc_name = v1_lag.cc_name AND
+      v1.cc_name = v1_lead.cc_name AND
+      v1.rn = v1_lag.rn + 1 AND
+      v1.rn = v1_lead.rn - 1)
+SELECT *
+FROM v2
+WHERE d_year = 1999 AND
+  avg_monthly_sales > 0 AND
+  CASE WHEN avg_monthly_sales > 0
+    THEN abs(sum_sales - avg_monthly_sales) / avg_monthly_sales
+  ELSE NULL END > 0.1
+ORDER BY sum_sales - avg_monthly_sales, 3
+LIMIT 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q5a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q5a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q5a.sql
new file mode 100644
index 0000000..42bcf59
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q5a.sql
@@ -0,0 +1,158 @@
+-- This is a new query in TPCDS v2.7
+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('1998-08-04' as date)
+        and (cast('1998-08-04' as date) + INTERVAL 14 days)
+        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('1998-08-04' as date)
+        and (cast('1998-08-04' as date) +  INTERVAL 14 days)
+        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('1998-08-04' as date)
+        and (cast('1998-08-04' as date) +  INTERVAL 14 days)
+        and wsr_web_site_sk = web_site_sk
+    group by
+      web_site_id),
+results as (
+    select
+      channel,
+      id,
+      sum(sales) as sales,
+      sum(returns) as returns,
+      sum(profit) as profit
+    from (
+      select
+        'store channel' as channel,
+        'store' || s_store_id as id,
+        sales,
+        returns,
+        (profit - profit_loss) as profit
+      from
+        ssr
+      union all
+      select
+        'catalog channel' as channel,
+        'catalog_page' || cp_catalog_page_id as id,
+        sales,
+        returns,
+        (profit - profit_loss) as profit
+      from
+        csr
+      union all
+      select
+        'web channel' as channel,
+        'web_site' || web_site_id as id,
+        sales,
+        returns,
+        (profit - profit_loss) as profit
+    from
+      wsr) x
+    group by
+      channel, id)
+select
+  channel, id, sales, returns, profit
+from (
+  select channel, id, sales, returns, profit
+  from results
+  union
+  select channel, null as id, sum(sales), sum(returns), sum(profit)
+  from results
+  group by channel
+  union
+  select null as channel, null as id, sum(sales), sum(returns), sum(profit)
+  from results) foo
+  order by channel, id
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q6.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q6.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q6.sql
new file mode 100755
index 0000000..c0bfa40
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q6.sql
@@ -0,0 +1,23 @@
+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 = 2000 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 list of q6 in TPCDS v1.4 is below:
+-- order by cnt
+order by cnt, a.ca_state
+LIMIT 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q64.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q64.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q64.sql
new file mode 100755
index 0000000..cdcd848
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q64.sql
@@ -0,0 +1,111 @@
+WITH cs_ui AS
+(SELECT
+    cs_item_sk,
+    sum(cs_ext_list_price) AS sale,
+    sum(cr_refunded_cash + cr_reversed_charge + cr_store_credit) AS refund
+  FROM catalog_sales
+    , catalog_returns
+  WHERE cs_item_sk = cr_item_sk
+    AND cs_order_number = cr_order_number
+  GROUP BY cs_item_sk
+  HAVING sum(cs_ext_list_price) > 2 * sum(cr_refunded_cash + 
cr_reversed_charge + cr_store_credit)),
+    cross_sales AS
+  (SELECT
+    i_product_name product_name,
+    i_item_sk item_sk,
+    s_store_name store_name,
+    s_zip store_zip,
+    ad1.ca_street_number b_street_number,
+    ad1.ca_street_name b_streen_name,
+    ad1.ca_city b_city,
+    ad1.ca_zip b_zip,
+    ad2.ca_street_number c_street_number,
+    ad2.ca_street_name c_street_name,
+    ad2.ca_city c_city,
+    ad2.ca_zip c_zip,
+    d1.d_year AS syear,
+    d2.d_year AS fsyear,
+    d3.d_year s2year,
+    count(*) cnt,
+    sum(ss_wholesale_cost) s1,
+    sum(ss_list_price) s2,
+    sum(ss_coupon_amt) s3
+  FROM store_sales, store_returns, cs_ui, date_dim d1, date_dim d2, date_dim 
d3,
+    store, customer, customer_demographics cd1, customer_demographics cd2,
+    promotion, household_demographics hd1, household_demographics hd2,
+    customer_address ad1, customer_address ad2, income_band ib1, income_band 
ib2, item
+  WHERE ss_store_sk = s_store_sk AND
+    ss_sold_date_sk = d1.d_date_sk AND
+    ss_customer_sk = c_customer_sk AND
+    ss_cdemo_sk = cd1.cd_demo_sk AND
+    ss_hdemo_sk = hd1.hd_demo_sk AND
+    ss_addr_sk = ad1.ca_address_sk AND
+    ss_item_sk = i_item_sk AND
+    ss_item_sk = sr_item_sk AND
+    ss_ticket_number = sr_ticket_number AND
+    ss_item_sk = cs_ui.cs_item_sk AND
+    c_current_cdemo_sk = cd2.cd_demo_sk AND
+    c_current_hdemo_sk = hd2.hd_demo_sk AND
+    c_current_addr_sk = ad2.ca_address_sk AND
+    c_first_sales_date_sk = d2.d_date_sk AND
+    c_first_shipto_date_sk = d3.d_date_sk AND
+    ss_promo_sk = p_promo_sk AND
+    hd1.hd_income_band_sk = ib1.ib_income_band_sk AND
+    hd2.hd_income_band_sk = ib2.ib_income_band_sk AND
+    cd1.cd_marital_status <> cd2.cd_marital_status AND
+    i_color IN ('purple', 'burlywood', 'indian', 'spring', 'floral', 'medium') 
AND
+    i_current_price BETWEEN 64 AND 64 + 10 AND
+    i_current_price BETWEEN 64 + 1 AND 64 + 15
+  GROUP BY
+    i_product_name,
+    i_item_sk,
+    s_store_name,
+    s_zip,
+    ad1.ca_street_number,
+    ad1.ca_street_name,
+    ad1.ca_city,
+    ad1.ca_zip,
+    ad2.ca_street_number,
+    ad2.ca_street_name,
+    ad2.ca_city,
+    ad2.ca_zip,
+    d1.d_year,
+    d2.d_year,
+    d3.d_year
+  )
+SELECT
+  cs1.product_name,
+  cs1.store_name,
+  cs1.store_zip,
+  cs1.b_street_number,
+  cs1.b_streen_name,
+  cs1.b_city,
+  cs1.b_zip,
+  cs1.c_street_number,
+  cs1.c_street_name,
+  cs1.c_city,
+  cs1.c_zip,
+  cs1.syear,
+  cs1.cnt,
+  cs1.s1,
+  cs1.s2,
+  cs1.s3,
+  cs2.s1,
+  cs2.s2,
+  cs2.s3,
+  cs2.syear,
+  cs2.cnt
+FROM cross_sales cs1, cross_sales cs2
+WHERE cs1.item_sk = cs2.item_sk AND
+  cs1.syear = 1999 AND
+  cs2.syear = 1999 + 1 AND
+  cs2.cnt <= cs1.cnt AND
+  cs1.store_name = cs2.store_name AND
+  cs1.store_zip = cs2.store_zip
+ORDER BY
+  cs1.product_name,
+  cs1.store_name,
+  cs2.cnt,
+  -- The two columns below are newly added in TPCDS v2.7
+  cs1.s1,
+  cs2.s1

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q67a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q67a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q67a.sql
new file mode 100644
index 0000000..70a1404
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q67a.sql
@@ -0,0 +1,208 @@
+-- This is a new query in TPCDS v2.7
+with results as (
+    select
+        i_category,
+        i_class,
+        i_brand,
+        i_product_name,
+        d_year,
+        d_qoy,
+        d_moy,
+        s_store_id,
+        sum(coalesce(ss_sales_price * ss_quantity, 0)) sumsales
+    from
+      store_sales, date_dim, store, item
+    where
+      ss_sold_date_sk=d_date_sk
+        and ss_item_sk=i_item_sk
+        and ss_store_sk = s_store_sk
+        and d_month_seq between 1212 and 1212 + 11
+    group by
+      i_category,
+      i_class,
+      i_brand,
+      i_product_name,
+      d_year,
+      d_qoy,
+      d_moy,
+      s_store_id),
+results_rollup as (
+    select
+      i_category,
+      i_class,
+      i_brand,
+      i_product_name,
+      d_year,
+      d_qoy,
+      d_moy,
+      s_store_id,
+      sumsales
+    from
+      results
+    union all
+    select
+      i_category,
+      i_class,
+      i_brand,
+      i_product_name,
+      d_year,
+      d_qoy,
+      d_moy,
+      null s_store_id,
+      sum(sumsales) sumsales
+    from
+      results
+    group by
+      i_category,
+      i_class,
+      i_brand,
+      i_product_name,
+      d_year,
+      d_qoy,
+      d_moy
+    union all
+    select
+      i_category,
+      i_class,
+      i_brand,
+      i_product_name,
+      d_year,
+      d_qoy,
+      null d_moy,
+      null s_store_id,
+      sum(sumsales) sumsales
+    from
+      results
+    group by
+      i_category,
+      i_class,
+      i_brand,
+      i_product_name,
+      d_year,
+      d_qoy
+    union all
+    select
+      i_category,
+      i_class,
+      i_brand,
+      i_product_name,
+      d_year,
+      null d_qoy,
+      null d_moy,
+      null s_store_id,
+      sum(sumsales) sumsales
+    from
+      results
+    group by
+      i_category,
+      i_class,
+      i_brand,
+      i_product_name,
+      d_year
+    union all
+    select
+      i_category,
+      i_class,
+      i_brand,
+      i_product_name,
+      null d_year,
+      null d_qoy,
+      null d_moy,
+      null s_store_id,
+      sum(sumsales) sumsales
+  from
+    results
+  group by
+    i_category,
+    i_class,
+    i_brand,
+    i_product_name
+  union all
+  select
+    i_category,
+    i_class,
+    i_brand,
+    null i_product_name,
+    null d_year,
+    null d_qoy,
+    null d_moy,
+    null s_store_id,
+    sum(sumsales) sumsales
+  from
+    results
+  group by
+    i_category,
+    i_class,
+    i_brand
+  union all
+  select
+    i_category,
+    i_class,
+    null i_brand,
+    null i_product_name,
+    null d_year,
+    null d_qoy,
+    null d_moy,
+    null s_store_id,
+    sum(sumsales) sumsales
+  from
+    results
+  group by
+    i_category,
+    i_class
+  union all
+  select
+    i_category,
+    null i_class,
+    null i_brand,
+    null i_product_name,
+    null d_year,
+    null d_qoy,
+    null d_moy,
+    null s_store_id,
+    sum(sumsales) sumsales
+  from results
+  group by
+    i_category
+  union all
+  select
+    null i_category,
+    null i_class,
+    null i_brand,
+    null i_product_name,
+    null d_year,
+    null d_qoy,
+    null d_moy,
+    null s_store_id,
+    sum(sumsales) sumsales
+  from
+    results)
+select
+  *
+from (
+    select
+      i_category,
+      i_class,
+      i_brand,
+      i_product_name,
+      d_year,
+      d_qoy,
+      d_moy,
+      s_store_id,
+      sumsales,
+      rank() over (partition by i_category order by sumsales desc) rk
+    from results_rollup) dw2
+where
+  rk <= 100
+order by
+  i_category,
+  i_class,
+  i_brand,
+  i_product_name,
+  d_year,
+  d_qoy,
+  d_moy,
+  s_store_id,
+  sumsales,
+  rk
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q70a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q70a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q70a.sql
new file mode 100644
index 0000000..4aec9c7
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q70a.sql
@@ -0,0 +1,70 @@
+-- This is a new query in TPCDS v2.7
+with results as (
+    select
+      sum(ss_net_profit) as total_sum,
+      s_state ,s_county,
+      0 as gstate,
+      0 as g_county
+    from
+      store_sales, date_dim d1, store
+    where
+      d1.d_month_seq between 1212 and 1212 + 11
+        and d1.d_date_sk = ss_sold_date_sk
+        and s_store_sk  = ss_store_sk
+        and s_state in (
+            select s_state
+            from (
+                select
+                  s_state as s_state,
+                  rank() over (partition by s_state order by 
sum(ss_net_profit) desc) as ranking
+                from store_sales, store, date_dim
+                where d_month_seq between 1212 and 1212 + 11
+                  and d_date_sk = ss_sold_date_sk
+                  and s_store_sk  = ss_store_sk
+                group by s_state) tmp1
+              where ranking <= 5)
+    group by
+      s_state, s_county),
+results_rollup as (
+    select
+      total_sum,
+      s_state,
+      s_county,
+      0 as g_state,
+      0 as g_county,
+      0 as lochierarchy
+    from results
+    union
+    select
+      sum(total_sum) as total_sum,s_state,
+      NULL as s_county,
+      0 as g_state,
+      1 as g_county,
+      1 as lochierarchy
+    from results
+    group by s_state
+    union
+    select
+      sum(total_sum) as total_sum,
+      NULL as s_state,
+      NULL as s_county,
+      1 as g_state,
+      1 as g_county,
+      2 as lochierarchy
+    from results)
+select
+  total_sum,
+  s_state,
+  s_county,
+  lochierarchy,
+  rank() over (
+      partition by lochierarchy,
+      case when g_county = 0 then s_state end
+      order by total_sum desc) as rank_within_parent
+from
+  results_rollup
+order by
+  lochierarchy desc,
+  case when lochierarchy = 0 then s_state end,
+  rank_within_parent
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q72.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q72.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q72.sql
new file mode 100755
index 0000000..066d6a5
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q72.sql
@@ -0,0 +1,40 @@
+SELECT
+  i_item_desc,
+  w_warehouse_name,
+  d1.d_week_seq,
+  count(CASE WHEN p_promo_sk IS NULL
+    THEN 1
+        ELSE 0 END) no_promo,
+  count(CASE WHEN p_promo_sk IS NOT NULL
+    THEN 1
+        ELSE 0 END) promo,
+  count(*) total_cnt
+FROM catalog_sales
+  JOIN inventory ON (cs_item_sk = inv_item_sk)
+  JOIN warehouse ON (w_warehouse_sk = inv_warehouse_sk)
+  JOIN item ON (i_item_sk = cs_item_sk)
+  JOIN customer_demographics ON (cs_bill_cdemo_sk = cd_demo_sk)
+  JOIN household_demographics ON (cs_bill_hdemo_sk = hd_demo_sk)
+  JOIN date_dim d1 ON (cs_sold_date_sk = d1.d_date_sk)
+  JOIN date_dim d2 ON (inv_date_sk = d2.d_date_sk)
+  JOIN date_dim d3 ON (cs_ship_date_sk = d3.d_date_sk)
+  LEFT OUTER JOIN promotion ON (cs_promo_sk = p_promo_sk)
+  LEFT OUTER JOIN catalog_returns ON (cr_item_sk = cs_item_sk AND 
cr_order_number = cs_order_number)
+-- q72 in TPCDS v1.4 had conditions below:
+-- WHERE d1.d_week_seq = d2.d_week_seq
+--   AND inv_quantity_on_hand < cs_quantity
+--   AND d3.d_date > (cast(d1.d_date AS DATE) + interval 5 days)
+--   AND hd_buy_potential = '>10000'
+--   AND d1.d_year = 1999
+--   AND hd_buy_potential = '>10000'
+--   AND cd_marital_status = 'D'
+--   AND d1.d_year = 1999
+WHERE d1.d_week_seq = d2.d_week_seq
+    AND inv_quantity_on_hand < cs_quantity
+    AND d3.d_date > d1.d_date + INTERVAL 5 days
+    AND hd_buy_potential = '1001-5000'
+    AND d1.d_year = 2001
+    AND cd_marital_status = 'M'
+GROUP BY i_item_desc, w_warehouse_name, d1.d_week_seq
+ORDER BY total_cnt DESC, i_item_desc, w_warehouse_name, d_week_seq
+LIMIT 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q74.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q74.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q74.sql
new file mode 100755
index 0000000..94a0063
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q74.sql
@@ -0,0 +1,60 @@
+WITH year_total AS (
+  SELECT
+    c_customer_id customer_id,
+    c_first_name customer_first_name,
+    c_last_name customer_last_name,
+    d_year AS year,
+    sum(ss_net_paid) 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
+    AND d_year IN (2001, 2001 + 1)
+  GROUP BY
+    c_customer_id, c_first_name, c_last_name, d_year
+  UNION ALL
+  SELECT
+    c_customer_id customer_id,
+    c_first_name customer_first_name,
+    c_last_name customer_last_name,
+    d_year AS year,
+    sum(ws_net_paid) 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
+    AND d_year IN (2001, 2001 + 1)
+  GROUP BY
+    c_customer_id, c_first_name, c_last_name, d_year)
+SELECT
+  t_s_secyear.customer_id,
+  t_s_secyear.customer_first_name,
+  t_s_secyear.customer_last_name
+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.year = 2001
+  AND t_s_secyear.year = 2001 + 1
+  AND t_w_firstyear.year = 2001
+  AND t_w_secyear.year = 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 NULL END
+  > CASE WHEN t_s_firstyear.year_total > 0
+  THEN t_s_secyear.year_total / t_s_firstyear.year_total
+    ELSE NULL END
+-- order-by list of q74 in TPCDS v1.4 is below:
+-- ORDER BY 1, 1, 1
+ORDER BY 2, 1, 3
+LIMIT 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q75.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q75.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q75.sql
new file mode 100755
index 0000000..ae5dc97
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q75.sql
@@ -0,0 +1,78 @@
+WITH all_sales AS (
+  SELECT
+    d_year,
+    i_brand_id,
+    i_class_id,
+    i_category_id,
+    i_manufact_id,
+    SUM(sales_cnt) AS sales_cnt,
+    SUM(sales_amt) AS sales_amt
+  FROM (
+         SELECT
+           d_year,
+           i_brand_id,
+           i_class_id,
+           i_category_id,
+           i_manufact_id,
+           cs_quantity - COALESCE(cr_return_quantity, 0) AS sales_cnt,
+           cs_ext_sales_price - COALESCE(cr_return_amount, 0.0) AS sales_amt
+         FROM catalog_sales
+           JOIN item ON i_item_sk = cs_item_sk
+           JOIN date_dim ON d_date_sk = cs_sold_date_sk
+           LEFT JOIN catalog_returns ON (cs_order_number = cr_order_number
+             AND cs_item_sk = cr_item_sk)
+         WHERE i_category = 'Books'
+         UNION
+         SELECT
+           d_year,
+           i_brand_id,
+           i_class_id,
+           i_category_id,
+           i_manufact_id,
+           ss_quantity - COALESCE(sr_return_quantity, 0) AS sales_cnt,
+           ss_ext_sales_price - COALESCE(sr_return_amt, 0.0) AS sales_amt
+         FROM store_sales
+           JOIN item ON i_item_sk = ss_item_sk
+           JOIN date_dim ON d_date_sk = ss_sold_date_sk
+           LEFT JOIN store_returns ON (ss_ticket_number = sr_ticket_number
+             AND ss_item_sk = sr_item_sk)
+         WHERE i_category = 'Books'
+         UNION
+         SELECT
+           d_year,
+           i_brand_id,
+           i_class_id,
+           i_category_id,
+           i_manufact_id,
+           ws_quantity - COALESCE(wr_return_quantity, 0) AS sales_cnt,
+           ws_ext_sales_price - COALESCE(wr_return_amt, 0.0) AS sales_amt
+         FROM web_sales
+           JOIN item ON i_item_sk = ws_item_sk
+           JOIN date_dim ON d_date_sk = ws_sold_date_sk
+           LEFT JOIN web_returns ON (ws_order_number = wr_order_number
+             AND ws_item_sk = wr_item_sk)
+         WHERE i_category = 'Books') sales_detail
+  GROUP BY d_year, i_brand_id, i_class_id, i_category_id, i_manufact_id)
+SELECT
+  prev_yr.d_year AS prev_year,
+  curr_yr.d_year AS year,
+  curr_yr.i_brand_id,
+  curr_yr.i_class_id,
+  curr_yr.i_category_id,
+  curr_yr.i_manufact_id,
+  prev_yr.sales_cnt AS prev_yr_cnt,
+  curr_yr.sales_cnt AS curr_yr_cnt,
+  curr_yr.sales_cnt - prev_yr.sales_cnt AS sales_cnt_diff,
+  curr_yr.sales_amt - prev_yr.sales_amt AS sales_amt_diff
+FROM all_sales curr_yr, all_sales prev_yr
+WHERE curr_yr.i_brand_id = prev_yr.i_brand_id
+  AND curr_yr.i_class_id = prev_yr.i_class_id
+  AND curr_yr.i_category_id = prev_yr.i_category_id
+  AND curr_yr.i_manufact_id = prev_yr.i_manufact_id
+  AND curr_yr.d_year = 2002
+  AND prev_yr.d_year = 2002 - 1
+  AND CAST(curr_yr.sales_cnt AS DECIMAL(17, 2)) / CAST(prev_yr.sales_cnt AS 
DECIMAL(17, 2)) < 0.9
+ORDER BY
+  sales_cnt_diff,
+  sales_amt_diff -- This order-by condition did not exist in TPCDS v1.4
+LIMIT 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q77a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q77a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q77a.sql
new file mode 100644
index 0000000..fc69c43
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q77a.sql
@@ -0,0 +1,121 @@
+-- This is a new query in TPCDS v2.7
+with ss as (
+    select
+      s_store_sk,
+      sum(ss_ext_sales_price) as sales,
+      sum(ss_net_profit) as profit
+    from
+      store_sales, date_dim, store
+    where
+      ss_sold_date_sk = d_date_sk
+        and d_date between cast('1998-08-04' as date)
+        and (cast('1998-08-04' as date) + interval 30 days)
+        and ss_store_sk = s_store_sk
+    group by
+      s_store_sk),
+sr as (
+    select
+      s_store_sk,
+      sum(sr_return_amt) as returns,
+      sum(sr_net_loss) as profit_loss
+    from
+      store_returns, date_dim, store
+    where
+      sr_returned_date_sk = d_date_sk
+        and d_date between cast('1998-08-04' as date)
+        and (cast('1998-08-04' as date) + interval 30 days)
+        and sr_store_sk = s_store_sk
+     group by
+       s_store_sk),
+cs as (
+    select
+      cs_call_center_sk,
+      sum(cs_ext_sales_price) as sales,
+      sum(cs_net_profit) as profit
+    from
+      catalog_sales,
+      date_dim
+    where
+      cs_sold_date_sk = d_date_sk
+        and d_date between cast('1998-08-04' as date)
+        and (cast('1998-08-04' as date) + interval 30 days)
+    group by
+      cs_call_center_sk),
+ cr as (
+     select
+       sum(cr_return_amount) as returns,
+       sum(cr_net_loss) as profit_loss
+     from catalog_returns,
+       date_dim
+     where
+       cr_returned_date_sk = d_date_sk
+         and d_date between cast('1998-08-04' as date)
+         and (cast('1998-08-04' as date) + interval 30 days)),
+ws as ( select wp_web_page_sk,
+        sum(ws_ext_sales_price) as sales,
+        sum(ws_net_profit) as profit
+ from web_sales,
+      date_dim,
+      web_page
+ where ws_sold_date_sk = d_date_sk
+       and d_date between cast('1998-08-04' as date)
+                  and (cast('1998-08-04' as date) +  interval 30 days)
+       and ws_web_page_sk = wp_web_page_sk
+ group by wp_web_page_sk), 
+ wr as
+ (select wp_web_page_sk,
+        sum(wr_return_amt) as returns,
+        sum(wr_net_loss) as profit_loss
+ from web_returns,
+      date_dim,
+      web_page
+ where wr_returned_date_sk = d_date_sk
+       and d_date between cast('1998-08-04' as date)
+                  and (cast('1998-08-04' as date) +  interval 30 days)
+       and wr_web_page_sk = wp_web_page_sk
+ group by wp_web_page_sk)
+ ,
+ results as
+ (select channel
+        , id
+        , sum(sales) as sales
+        , sum(returns) as returns
+        , sum(profit) as profit
+ from 
+ (select 'store channel' as channel
+        , ss.s_store_sk as id
+        , sales
+        , coalesce(returns, 0) as returns
+        , (profit - coalesce(profit_loss,0)) as profit
+ from   ss left join sr
+        on  ss.s_store_sk = sr.s_store_sk
+ union all
+ select 'catalog channel' as channel
+        , cs_call_center_sk as id
+        , sales
+        , returns
+        , (profit - profit_loss) as profit
+ from  cs
+       , cr
+ union all
+ select 'web channel' as channel
+        , ws.wp_web_page_sk as id
+        , sales
+        , coalesce(returns, 0) returns
+        , (profit - coalesce(profit_loss,0)) as profit
+ from   ws left join wr
+        on  ws.wp_web_page_sk = wr.wp_web_page_sk
+ ) x
+ group by channel, id )
+
+  select  *
+ from (
+ select channel, id, sales, returns, profit from  results
+ union
+ select channel, NULL AS id, sum(sales) as sales, sum(returns) as returns, 
sum(profit) as profit from  results group by channel
+ union
+ select NULL AS channel, NULL AS id, sum(sales) as sales, sum(returns) as 
returns, sum(profit) as profit from  results
+) foo
+order by
+  channel, id
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q78.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q78.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q78.sql
new file mode 100755
index 0000000..d03d8af
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q78.sql
@@ -0,0 +1,75 @@
+WITH ws AS
+(SELECT
+    d_year AS ws_sold_year,
+    ws_item_sk,
+    ws_bill_customer_sk ws_customer_sk,
+    sum(ws_quantity) ws_qty,
+    sum(ws_wholesale_cost) ws_wc,
+    sum(ws_sales_price) ws_sp
+  FROM web_sales
+    LEFT JOIN web_returns ON wr_order_number = ws_order_number AND ws_item_sk 
= wr_item_sk
+    JOIN date_dim ON ws_sold_date_sk = d_date_sk
+  WHERE wr_order_number IS NULL
+  GROUP BY d_year, ws_item_sk, ws_bill_customer_sk
+),
+    cs AS
+  (SELECT
+    d_year AS cs_sold_year,
+    cs_item_sk,
+    cs_bill_customer_sk cs_customer_sk,
+    sum(cs_quantity) cs_qty,
+    sum(cs_wholesale_cost) cs_wc,
+    sum(cs_sales_price) cs_sp
+  FROM catalog_sales
+    LEFT JOIN catalog_returns ON cr_order_number = cs_order_number AND 
cs_item_sk = cr_item_sk
+    JOIN date_dim ON cs_sold_date_sk = d_date_sk
+  WHERE cr_order_number IS NULL
+  GROUP BY d_year, cs_item_sk, cs_bill_customer_sk
+  ),
+    ss AS
+  (SELECT
+    d_year AS ss_sold_year,
+    ss_item_sk,
+    ss_customer_sk,
+    sum(ss_quantity) ss_qty,
+    sum(ss_wholesale_cost) ss_wc,
+    sum(ss_sales_price) ss_sp
+  FROM store_sales
+    LEFT JOIN store_returns ON sr_ticket_number = ss_ticket_number AND 
ss_item_sk = sr_item_sk
+    JOIN date_dim ON ss_sold_date_sk = d_date_sk
+  WHERE sr_ticket_number IS NULL
+  GROUP BY d_year, ss_item_sk, ss_customer_sk
+  )
+SELECT
+  round(ss_qty / (coalesce(ws_qty + cs_qty, 1)), 2) ratio,
+  ss_qty store_qty,
+  ss_wc store_wholesale_cost,
+  ss_sp store_sales_price,
+  coalesce(ws_qty, 0) + coalesce(cs_qty, 0) other_chan_qty,
+  coalesce(ws_wc, 0) + coalesce(cs_wc, 0) other_chan_wholesale_cost,
+  coalesce(ws_sp, 0) + coalesce(cs_sp, 0) other_chan_sales_price
+FROM ss
+  LEFT JOIN ws
+    ON (ws_sold_year = ss_sold_year AND ws_item_sk = ss_item_sk AND 
ws_customer_sk = ss_customer_sk)
+  LEFT JOIN cs
+    ON (cs_sold_year = ss_sold_year AND cs_item_sk = ss_item_sk AND 
cs_customer_sk = ss_customer_sk)
+WHERE coalesce(ws_qty, 0) > 0 AND coalesce(cs_qty, 0) > 0 AND ss_sold_year = 
2000
+ORDER BY
+  -- order-by list of q78 in TPCDS v1.4 is below:
+  -- ratio,
+  -- ss_qty DESC, ss_wc DESC, ss_sp DESC,
+  -- other_chan_qty,
+  -- other_chan_wholesale_cost,
+  -- other_chan_sales_price,
+  -- round(ss_qty / (coalesce(ws_qty + cs_qty, 1)), 2)
+  ss_sold_year,
+  ss_item_sk,
+  ss_customer_sk,
+  ss_qty desc,
+  ss_wc desc,
+  ss_sp desc,
+  other_chan_qty,
+  other_chan_wholesale_cost,
+  other_chan_sales_price,
+  ratio
+LIMIT 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q80a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q80a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q80a.sql
new file mode 100644
index 0000000..686e03b
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q80a.sql
@@ -0,0 +1,147 @@
+-- This is a new query in TPCDS v2.7
+with ssr as (
+    select
+      s_store_id as store_id,
+      sum(ss_ext_sales_price) as sales,
+      sum(coalesce(sr_return_amt, 0)) as returns,
+      sum(ss_net_profit - coalesce(sr_net_loss, 0)) as profit
+    from
+      store_sales left outer join store_returns on (
+          ss_item_sk = sr_item_sk and ss_ticket_number = sr_ticket_number),
+      date_dim,
+      store,
+      item,
+      promotion
+    where
+      ss_sold_date_sk = d_date_sk
+        and d_date between cast('1998-08-04' as date)
+        and (cast('1998-08-04' as date) + interval 30 days)
+        and ss_store_sk = s_store_sk
+        and ss_item_sk = i_item_sk
+        and i_current_price > 50
+        and ss_promo_sk = p_promo_sk
+        and p_channel_tv = 'N'
+    group by
+      s_store_id),
+csr as (
+    select
+      cp_catalog_page_id as catalog_page_id,
+      sum(cs_ext_sales_price) as sales,
+      sum(coalesce(cr_return_amount, 0)) as returns,
+      sum(cs_net_profit - coalesce(cr_net_loss, 0)) as profit
+    from
+      catalog_sales left outer join catalog_returns on
+          (cs_item_sk = cr_item_sk and cs_order_number = cr_order_number),
+      date_dim,
+      catalog_page,
+      item,
+      promotion
+    where
+      cs_sold_date_sk = d_date_sk
+        and d_date between cast('1998-08-04' as date)
+        and (cast('1998-08-04' as date) + interval 30 days)
+        and cs_catalog_page_sk = cp_catalog_page_sk
+        and cs_item_sk = i_item_sk
+        and i_current_price > 50
+        and cs_promo_sk = p_promo_sk
+        and p_channel_tv = 'N'
+    group by
+      cp_catalog_page_id),
+wsr as (
+    select
+      web_site_id,
+      sum(ws_ext_sales_price) as sales,
+      sum(coalesce(wr_return_amt, 0)) as returns,
+      sum(ws_net_profit - coalesce(wr_net_loss, 0)) as profit
+    from
+      web_sales left outer join web_returns on (
+          ws_item_sk = wr_item_sk and ws_order_number = wr_order_number),
+      date_dim,
+      web_site,
+      item,
+      promotion
+    where
+      ws_sold_date_sk = d_date_sk
+        and d_date between cast('1998-08-04' as date)
+        and (cast('1998-08-04' as date) + interval 30 days)
+        and ws_web_site_sk = web_site_sk
+        and ws_item_sk = i_item_sk
+        and i_current_price > 50
+        and ws_promo_sk = p_promo_sk
+        and p_channel_tv = 'N'
+    group by
+      web_site_id),
+results as (
+    select
+      channel,
+      id,
+      sum(sales) as sales,
+      sum(returns) as returns,
+      sum(profit) as profit
+    from (
+        select
+          'store channel' as channel,
+          'store' || store_id as id,
+          sales,
+          returns,
+          profit
+        from
+          ssr
+        union all
+        select
+          'catalog channel' as channel,
+          'catalog_page' || catalog_page_id as id,
+          sales,
+          returns,
+          profit
+        from
+          csr
+        union all
+        select
+          'web channel' as channel,
+          'web_site' || web_site_id as id,
+          sales,
+          returns,
+          profit
+        from
+          wsr) x
+    group by
+      channel, id)
+select
+  channel,
+  id,
+  sales,
+  returns,
+  profit
+from (
+    select
+      channel,
+      id,
+      sales,
+      returns,
+      profit
+    from
+      results
+    union
+    select
+      channel,
+      NULL AS id,
+      sum(sales) as sales,
+      sum(returns) as returns,
+      sum(profit) as profit
+    from
+      results
+    group by
+      channel
+    union
+    select
+      NULL AS channel,
+      NULL AS id,
+      sum(sales) as sales,
+      sum(returns) as returns,
+      sum(profit) as profit
+    from
+      results) foo
+order by
+  channel, id
+limit 100

http://git-wip-us.apache.org/repos/asf/spark/blob/5f653d4f/sql/core/src/test/resources/tpcds-v2.7.0/q86a.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/tpcds-v2.7.0/q86a.sql 
b/sql/core/src/test/resources/tpcds-v2.7.0/q86a.sql
new file mode 100644
index 0000000..fff76b0
--- /dev/null
+++ b/sql/core/src/test/resources/tpcds-v2.7.0/q86a.sql
@@ -0,0 +1,61 @@
+-- This is a new query in TPCDS v2.7
+with results as (
+    select
+      sum(ws_net_paid) as total_sum,
+      i_category, i_class,
+      0 as g_category,
+      0 as g_class
+    from
+      web_sales, date_dim d1, item
+    where
+      d1.d_month_seq between 1212 and 1212 + 11
+        and d1.d_date_sk = ws_sold_date_sk
+        and i_item_sk = ws_item_sk
+    group by
+      i_category, i_class),
+results_rollup as(
+    select
+      total_sum,
+      i_category,
+      i_class,
+      g_category,
+      g_class,
+      0 as lochierarchy
+    from
+      results
+    union
+    select
+      sum(total_sum) as total_sum,
+      i_category,
+      NULL as i_class,
+      0 as g_category,
+      1 as g_class,
+      1 as lochierarchy
+    from
+      results
+    group by
+      i_category
+    union
+    select
+      sum(total_sum) as total_sum,
+      NULL as i_category,
+      NULL as i_class,
+      1 as g_category,
+      1 as g_class,
+      2 as lochierarchy
+    from
+      results)
+select
+  total_sum,
+  i_category ,i_class, lochierarchy,
+  rank() over (
+      partition by lochierarchy,
+        case when g_class = 0 then i_category end
+      order by total_sum desc) as rank_within_parent
+from
+  results_rollup
+order by
+  lochierarchy desc,
+  case when lochierarchy = 0 then i_category end,
+  rank_within_parent
+limit 100


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org
For additional commands, e-mail: commits-h...@spark.apache.org

Reply via email to