You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by pr...@apache.org on 2015/06/19 08:41:00 UTC
incubator-lens git commit: LENS-603: Skip expression rewrite in
columnar rewriter
Repository: incubator-lens
Updated Branches:
refs/heads/master 17080940e -> 6d5f955fb
LENS-603: Skip expression rewrite in columnar rewriter
Project: http://git-wip-us.apache.org/repos/asf/incubator-lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-lens/commit/6d5f955f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-lens/tree/6d5f955f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-lens/diff/6d5f955f
Branch: refs/heads/master
Commit: 6d5f955fbdb904790506fcb1c8fa5fbe4458aa05
Parents: 1708094
Author: Sushil Mohanty <su...@gmail.com>
Authored: Fri Jun 19 12:10:47 2015 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
Committed: Fri Jun 19 12:10:47 2015 +0530
----------------------------------------------------------------------
.../lens/driver/jdbc/ColumnarSQLRewriter.java | 41 +++-
.../driver/jdbc/TestColumnarSQLRewriter.java | 201 +++++++++----------
2 files changed, 132 insertions(+), 110 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6d5f955f/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/ColumnarSQLRewriter.java
----------------------------------------------------------------------
diff --git a/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/ColumnarSQLRewriter.java b/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/ColumnarSQLRewriter.java
index 9ba136f..17ddbfd 100644
--- a/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/ColumnarSQLRewriter.java
+++ b/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/ColumnarSQLRewriter.java
@@ -333,6 +333,43 @@ public class ColumnarSQLRewriter implements QueryRewriter {
return joinCondition;
}
+ /**
+ * Get the count of columns in a given select expression
+ *
+ * @param node
+ * @return Column count
+ */
+ public int getColumnCount(ASTNode node) {
+ int count = 0;
+ for (int i = 0; i < node.getChildCount(); i++) {
+ ASTNode child = (ASTNode) node.getChild(i);
+ if (child.getToken().getType() == TOK_TABLE_OR_COL) {
+ count++;
+ } else {
+ count += getColumnCount(child);
+ }
+ }
+ return count;
+ }
+
+ /**
+ * Check if expression is used in select
+ *
+ * @param node
+ * @return true if expressions is used
+ */
+ public boolean isExpressionsUsed(ASTNode node) {
+ for (int i = 0; i < node.getChildCount(); i++) {
+ if (node.getChild(i).getType() == HiveParser.TOK_SELEXPR) {
+ int cnt = getColumnCount((ASTNode) node.getChild(i));
+ if (cnt >= 2) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
/*
* Get filter conditions if user has specified a join condition for filter pushdown.
*/
@@ -844,7 +881,9 @@ public class ColumnarSQLRewriter implements QueryRewriter {
// Construct the final fact in-line query with keys,
// measures and individual sub queries built.
- if (whereTree == null || joinTree == null || allSubQueries.length() == 0 || aggColumn.isEmpty()) {
+
+ if (whereTree == null || joinTree == null || allSubQueries.length() == 0
+ || aggColumn.isEmpty() || isExpressionsUsed(selectAST)) {
LOG.info("@@@Query not eligible for inner subquery rewrite");
// construct query without fact sub query
constructQuery(selectTree, whereTree, groupByTree, havingTree, orderByTree, limit);
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6d5f955f/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java
----------------------------------------------------------------------
diff --git a/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java b/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java
index aab7f31..6d35b80 100644
--- a/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java
+++ b/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java
@@ -444,34 +444,21 @@ public class TestColumnarSQLRewriter {
String actual = qtest.rewrite(query, conf, hconf);
String expected = "select ( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), "
- + "date(( time_dim___time_dim . day )), ( item_dim___item_dim . item_key ), case when "
- + "(sum(sum_sales_fact___fact_dollars_sold) = 0 ) then 0.0 else sum(sum_sales_fact___fact_dollars_sold) "
- + "end dollars_sold , format(sum(sum_sales_fact___fact_units_sold), 4 ), "
- + "format(avg(avg_sales_fact___fact_dollars_sold), "
- + "'##################.###' ), min(min_sales_fact___fact_dollars_sold), max(max_sales_fact___fact_dollars_sold) "
- + "from (select sales_fact___fact.time_key,sales_fact___fact.location_key,sales_fact___fact.item_key,"
- + "sum(( sales_fact___fact . dollars_sold )) as sum_sales_fact___fact_dollars_sold, "
- + "sum(( sales_fact___fact . units_sold )) as sum_sales_fact___fact_units_sold, "
- + "avg(( sales_fact___fact . dollars_sold )) as avg_sales_fact___fact_dollars_sold, "
- + "min(( sales_fact___fact . dollars_sold )) as min_sales_fact___fact_dollars_sold, "
- + "max(( sales_fact___fact . dollars_sold )) as max_sales_fact___fact_dollars_sold "
- + "from sales_fact sales_fact___fact where sales_fact___fact.time_key in ( select time_dim .time_key "
- + "from time_dim where ( time_dim. time_key ) between date_add( '2013-01-01' , interval 1 day) "
- + "and date_sub( '2013-01-31' , interval 3 day) ) and sales_fact___fact.location_key in "
- + "( select location_dim .location_key from location_dim where "
- + "(( location_dim. location_name ) = 'test123' ) ) "
- + "and sales_fact___fact.item_key in ( select item_dim .item_key from item_dim where "
- + "(( item_dim. item_name ) = 'item_1' ) ) group by sales_fact___fact.time_key,"
- + "sales_fact___fact.location_key,sales_fact___fact.item_key) sales_fact___fact "
- + "inner join time_dim time_dim___time_dim on (( sales_fact___fact . time_key ) = "
- + "( time_dim___time_dim . time_key )) inner join location_dim location_dim___location_dim "
- + "on (( sales_fact___fact . location_key ) = ( location_dim___location_dim . location_key )) "
- + "inner join item_dim item_dim___item_dim on ((( sales_fact___fact . item_key ) = "
- + "( item_dim___item_dim . item_key )) and (( location_dim___location_dim . location_name ) = "
- + " 'test123' )) where (( time_dim___time_dim . time_key ) between date_add( '2013-01-01' , interval 1 day) "
- + "and date_sub( '2013-01-31' , interval 3 day) and (( item_dim___item_dim . item_name ) = 'item_1' )) "
- + "group by ( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), "
- + "( time_dim___time_dim . day ), ( item_dim___item_dim . item_key ) order by dollars_sold asc";
+ + "date(( time_dim___time_dim . day )), ( item_dim___item_dim . item_key ), case when "
+ + "(sum(( sales_fact___fact . dollars_sold )) = 0 ) then 0.0 else sum(( sales_fact___fact . dollars_sold )) "
+ + "end dollars_sold , format(sum(( sales_fact___fact . units_sold )), 4 ), "
+ + "format(avg(( sales_fact___fact . dollars_sold )), '##################.###' ), "
+ + "min(( sales_fact___fact . dollars_sold )), max(( sales_fact___fact . dollars_sold )) "
+ + "from sales_fact sales_fact___fact inner join time_dim time_dim___time_dim on "
+ + "(( sales_fact___fact . time_key ) = ( time_dim___time_dim . time_key )) inner join "
+ + "location_dim location_dim___location_dim on (( sales_fact___fact . location_key ) = "
+ + "( location_dim___location_dim . location_key )) inner join item_dim item_dim___item_dim "
+ + "on ((( sales_fact___fact . item_key ) = ( item_dim___item_dim . item_key )) and "
+ + "(( location_dim___location_dim . location_name ) = 'test123' )) where "
+ + "(( time_dim___time_dim . time_key ) between date_add( '2013-01-01' , interval 1 day) "
+ + "and date_sub( '2013-01-31' , interval 3 day) and (( item_dim___item_dim . item_name ) = 'item_1' )) "
+ + "group by ( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), "
+ + "( time_dim___time_dim . day ), ( item_dim___item_dim . item_key ) order by dollars_sold asc";
compareQueries(expected, actual);
}
@@ -514,63 +501,33 @@ public class TestColumnarSQLRewriter {
String actual = qtest.rewrite(query, conf, hconf);
String expected = "select ( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), "
- + "( time_dim___time_dim . day ), case when (sum(sum_sales_fact___fact_dollars_sold) = 0 ) then "
- + "0.0 else sum(sum_sales_fact___fact_dollars_sold) end dollars_sold "
- + "from (select sales_fact___fact.time_key,"
- + "sales_fact___fact.location_key,sum(( sales_fact___fact . dollars_sold )) "
- + "as sum_sales_fact___fact_dollars_sold "
- + "from sales_fact sales_fact___fact where sales_fact___fact.time_key in "
- + "( select time_dim .time_key from time_dim "
- + "where ( time_dim. time_key ) between '2013-01-01' and '2013-01-05' ) "
- + "and sales_fact___fact.location_key in "
- + "( select location_dim .location_key from location_dim where "
- + "(( location_dim. location_name ) = 'test123' ) ) "
- + "group by sales_fact___fact.time_key,sales_fact___fact.location_key) sales_fact___fact inner join time_dim "
- + "time_dim___time_dim on (( sales_fact___fact . time_key ) = ( time_dim___time_dim . time_key )) "
- + "inner join location_dim location_dim___location_dim on ((( sales_fact___fact . location_key ) = "
- + "( location_dim___location_dim . location_key )) "
- + "and (( location_dim___location_dim . location_name ) = 'test123' )) "
- + " where ( time_dim___time_dim . time_key ) between '2013-01-01' and '2013-01-05' group by "
- + "( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), ( time_dim___time_dim . day ) "
- + "order by dollars_sold asc union all select ( sales_fact___fact . time_key ), ( time_dim___time_dim . "
- + "day_of_week ), ( time_dim___time_dim . day ), case when (sum(sum_sales_fact___fact_dollars_sold) = 0 ) "
- + "then 0.0 else sum(sum_sales_fact___fact_dollars_sold) end dollars_sold "
- + "from (select sales_fact___fact.time_key,"
- + "sales_fact___fact.location_key,sum(( sales_fact___fact . dollars_sold ))"
- + " as sum_sales_fact___fact_dollars_sold "
- + "from sales_fact sales_fact___fact where sales_fact___fact.time_key in ( select time_dim .time_key "
- + "from time_dim where ( time_dim. time_key ) between '2013-02-01' and '2013-02-05' ) and "
- + "sales_fact___fact.location_key in ( select location_dim .location_key from location_dim where "
- + "(( location_dim. location_name ) = 'test123' ) ) "
- + "group by sales_fact___fact.time_key,sales_fact___fact.location_key) "
- + "sales_fact___fact inner join time_dim time_dim___time_dim on (( sales_fact___fact . time_key ) = "
- + "( time_dim___time_dim . time_key )) inner join location_dim location_dim___location_dim "
- + "on ((( sales_fact___fact . "
- + "location_key ) = ( location_dim___location_dim . location_key )) "
- + "and (( location_dim___location_dim . location_name ) = "
- + "'test123' )) where ( time_dim___time_dim . time_key ) between '2013-02-01' and '2013-02-05' group by "
- + "( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), ( time_dim___time_dim . day ) "
- + "order by dollars_sold asc union all "
- + "select ( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), "
- + "( time_dim___time_dim . day ), case when (sum(sum_sales_fact___fact_dollars_sold) = 0 ) then 0.0 else "
- + "sum(sum_sales_fact___fact_dollars_sold) end dollars_sold from (select sales_fact___fact.time_key,"
- + "sales_fact___fact.location_key,sum(( sales_fact___fact . dollars_sold )) "
- + "as sum_sales_fact___fact_dollars_sold "
- + "from sales_fact sales_fact___fact where sales_fact___fact.time_key in "
- + "( select time_dim .time_key from time_dim "
- + "where ( time_dim. time_key ) between '2013-03-01' and '2013-03-05' ) "
- + "and sales_fact___fact.location_key in "
- + "( select location_dim .location_key from location_dim where "
- + "(( location_dim. location_name ) = 'test123' ) ) "
- + " group by sales_fact___fact.time_key,sales_fact___fact.location_key) sales_fact___fact "
- + "inner join time_dim time_dim___time_dim "
- + "on (( sales_fact___fact . time_key ) = ( time_dim___time_dim . time_key )) "
- + "inner join location_dim location_dim___location_dim on ((( sales_fact___fact . location_key ) = "
- + "( location_dim___location_dim . location_key )) "
- + "and (( location_dim___location_dim . location_name ) = 'test123' )) "
- + "where ( time_dim___time_dim . time_key ) between '2013-03-01' and '2013-03-05' "
- + "group by ( sales_fact___fact . time_key ), "
- + "( time_dim___time_dim . day_of_week ), ( time_dim___time_dim . day ) order by dollars_sold asc";
+ + "( time_dim___time_dim . day ), case when (sum(( sales_fact___fact . dollars_sold )) = 0 ) "
+ + "then 0.0 else sum(( sales_fact___fact . dollars_sold )) end dollars_sold from sales_fact s"
+ + "ales_fact___fact inner join time_dim time_dim___time_dim on (( sales_fact___fact . time_key ) "
+ + "= ( time_dim___time_dim . time_key )) inner join location_dim location_dim___location_dim on "
+ + "((( sales_fact___fact . location_key ) = ( location_dim___location_dim . location_key )) and "
+ + "(( location_dim___location_dim . location_name ) = 'test123' )) where ( time_dim___time_dim . time_key ) "
+ + "between '2013-01-01' and '2013-01-05' group by ( sales_fact___fact . time_key ), "
+ + "( time_dim___time_dim . day_of_week ), ( time_dim___time_dim . day ) order by dollars_sold "
+ + "asc union all select ( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), "
+ + "( time_dim___time_dim . day ), case when (sum(( sales_fact___fact . dollars_sold )) = 0 ) then 0.0 "
+ + "else sum(( sales_fact___fact . dollars_sold )) end dollars_sold from sales_fact sales_fact___fact "
+ + "inner join time_dim time_dim___time_dim on (( sales_fact___fact . time_key ) = "
+ + "( time_dim___time_dim . time_key )) inner join location_dim location_dim___location_dim on "
+ + "((( sales_fact___fact . location_key ) = ( location_dim___location_dim . location_key )) and "
+ + "(( location_dim___location_dim . location_name ) = 'test123' )) where ( time_dim___time_dim . time_key ) "
+ + "between '2013-02-01' and '2013-02-05' group by ( sales_fact___fact . time_key ), "
+ + "( time_dim___time_dim . day_of_week ), ( time_dim___time_dim . day ) order by dollars_sold asc union all "
+ + "select ( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), "
+ + "( time_dim___time_dim . day ), case when (sum(( sales_fact___fact . dollars_sold )) = 0 ) then 0.0 "
+ + "else sum(( sales_fact___fact . dollars_sold )) end dollars_sold from sales_fact sales_fact___fact "
+ + "inner join time_dim time_dim___time_dim on (( sales_fact___fact . time_key ) = "
+ + "( time_dim___time_dim . time_key )) inner join location_dim location_dim___location_dim on "
+ + "((( sales_fact___fact . location_key ) = ( location_dim___location_dim . location_key )) and "
+ + "(( location_dim___location_dim . location_name ) = 'test123' )) where "
+ + "( time_dim___time_dim . time_key ) between '2013-03-01' and '2013-03-05' "
+ + " group by ( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), "
+ + "( time_dim___time_dim . day ) order by dollars_sold asc";
compareQueries(expected, actual);
}
@@ -595,6 +552,41 @@ public class TestColumnarSQLRewriter {
}
@Test
+ public void testSkipExpression() throws ParseException, SemanticException, LensException {
+
+ String query = "select fact.time_key,time_dim.day_of_week,time_dim.day,item_dim.item_key, "
+ + "sum(case when fact.dollars_sold = 0 then 0.0 else fact.dollars_sold end) dollars_sold, "
+ + "round(sum(fact.units_sold),2),avg(fact.dollars_sold),min(fact.dollars_sold),max(fact.dollars_sold), "
+ + "location_name from sales_fact fact " + "inner join time_dim time_dim on fact.time_key = time_dim.time_key "
+ + "inner join location_dim location_dim on fact.location_key = location_dim.location_key "
+ + "inner join item_dim item_dim on fact.item_key = item_dim.item_key "
+ + "and location_dim.location_name = 'test123' "
+ + "where time_dim.time_key between '2013-01-01' and '2013-01-31' " + "and item_dim.item_name = 'item_1' "
+ + "group by fact.time_key,time_dim.day_of_week,time_dim.day,item_dim.item_key " + "order by dollars_sold desc ";
+
+ SessionState.start(hconf);
+
+ String actual = qtest.rewrite(query, conf, hconf);
+ String expected = "select ( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), "
+ + "( time_dim___time_dim . day ), ( item_dim___item_dim . item_key ), sum( case when "
+ + "(( sales_fact___fact . dollars_sold ) = 0 ) then 0.0 else ( sales_fact___fact . dollars_sold ) end ) "
+ + "dollars_sold , round(sum(( sales_fact___fact . units_sold )), 2 ), "
+ + "avg(( sales_fact___fact . dollars_sold )), "
+ + "min(( sales_fact___fact . dollars_sold )), max(( sales_fact___fact . dollars_sold )), location_name , "
+ + " from sales_fact sales_fact___fact inner join time_dim time_dim___time_dim "
+ + "on (( sales_fact___fact . time_key ) = ( time_dim___time_dim . time_key )) inner join location_dim "
+ + "location_dim___location_dim on (( sales_fact___fact . location_key ) = "
+ + "( location_dim___location_dim . location_key )) inner join item_dim item_dim___item_dim on "
+ + "((( sales_fact___fact . item_key ) = ( item_dim___item_dim . item_key )) and "
+ + "(( location_dim___location_dim . location_name ) = 'test123' )) where (( time_dim___time_dim . time_key ) "
+ + "between '2013-01-01' and '2013-01-31' and (( item_dim___item_dim . item_name ) = 'item_1' )) "
+ + "group by ( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), "
+ + "( time_dim___time_dim . day ), ( item_dim___item_dim . item_key ) order by dollars_sold desc";
+ compareQueries(expected, actual);
+
+ }
+
+ @Test
public void testFilter() throws ParseException, SemanticException, LensException {
String query = "select max(fact.dollars_sold) from sales_fact fact "
@@ -659,35 +651,26 @@ public class TestColumnarSQLRewriter {
public void testReplaceAlias() throws ParseException, SemanticException, LensException {
String query = "select fact.time_key,time_dim.day_of_week,time_dim.day,"
- + "case when sum(fact.dollars_sold) = 0 then 0.0 else sum(fact.dollars_sold) end dollars_sold "
- + "from db.sales_fact as fact " + "inner join time_dim as time_dim on fact.time_key = time_dim.time_key "
- + "inner join db.location_dim ld on fact.location_key = ld.location_key " + "and ld.location_name = 'test123' "
- + "where time_dim.time_key between '2013-01-01' and '2013-01-31' "
- + "group by fact.time_key,time_dim.day_of_week,time_dim.day " + "order by dollars_sold desc ";
+ + "case when sum(fact.dollars_sold) = 0 then 0.0 else sum(fact.dollars_sold) end dollars_sold "
+ + "from db.sales_fact as fact " + "inner join time_dim as time_dim on fact.time_key = time_dim.time_key "
+ + "inner join db.location_dim ld on fact.location_key = ld.location_key " + "and ld.location_name = 'test123' "
+ + "where time_dim.time_key between '2013-01-01' and '2013-01-31' "
+ + "group by fact.time_key,time_dim.day_of_week,time_dim.day " + "order by dollars_sold desc ";
SessionState.start(hconf);
String actual = qtest.rewrite(query, conf, hconf);
String expected = "select ( sales_fact__db_sales_fact_fact . time_key ), ( time_dim___time_dim . day_of_week ), "
- + "( time_dim___time_dim . day ), case when (sum(sum_sales_fact__db_sales_fact_fact_dollars_sold) = 0 ) "
- + "then 0.0 else sum(sum_sales_fact__db_sales_fact_fact_dollars_sold) end dollars_sold from "
- + "(select sales_fact__db_sales_fact_fact.location_key, sales_fact__db_sales_fact_fact.time_key,"
- + "sum(( sales_fact__db_sales_fact_fact . dollars_sold )) as sum_sales_fact__db_sales_fact_fact_dollars_sold "
- + "from db.sales_fact sales_fact__db_sales_fact_fact where sales_fact__db_sales_fact_fact.time_key in "
- + "( select time_dim .time_key from time_dim "
- + "where ( time_dim. time_key ) between '2013-01-01' and '2013-01-31' ) "
- + "and sales_fact__db_sales_fact_fact.location_key in ( select location_dim .location_key from "
- + "location_dim where (( location_dim. location_name ) = 'test123' ) ) group by "
- + "sales_fact__db_sales_fact_fact.location_key, sales_fact__db_sales_fact_fact.time_key) "
- + "sales_fact__db_sales_fact_fact inner join time_dim time_dim___time_dim on "
- + "(( sales_fact__db_sales_fact_fact . time_key ) = ( time_dim___time_dim . time_key )) "
- + "inner join db.location_dim location_dim__db_location_dim_ld "
- + "on ((( sales_fact__db_sales_fact_fact . location_key ) "
- + "= ( location_dim__db_location_dim_ld . location_key )) and "
- + "(( location_dim__db_location_dim_ld . location_name ) = 'test123' )) "
- + " where ( time_dim___time_dim . time_key ) "
- + "between '2013-01-01' and '2013-01-31' group by ( sales_fact__db_sales_fact_fact . time_key ), "
- + "( time_dim___time_dim . day_of_week ), ( time_dim___time_dim . day ) order by dollars_sold desc";
+ + "( time_dim___time_dim . day ), case when (sum(( sales_fact__db_sales_fact_fact . dollars_sold )) = 0 ) "
+ + "then 0.0 else sum(( sales_fact__db_sales_fact_fact . dollars_sold )) end dollars_sold "
+ + "from db.sales_fact sales_fact__db_sales_fact_fact inner join time_dim time_dim___time_dim "
+ + "on (( sales_fact__db_sales_fact_fact . time_key ) = ( time_dim___time_dim . time_key )) "
+ + "inner join db.location_dim location_dim__db_location_dim_ld on "
+ + "((( sales_fact__db_sales_fact_fact . location_key ) = ( location_dim__db_location_dim_ld . location_key )) "
+ + "and (( location_dim__db_location_dim_ld . location_name ) = 'test123' )) where "
+ + "( time_dim___time_dim . time_key ) between '2013-01-01' and '2013-01-31' "
+ + "group by ( sales_fact__db_sales_fact_fact . time_key ), ( time_dim___time_dim . day_of_week ), "
+ + "( time_dim___time_dim . day ) order by dollars_sold desc";
compareQueries(expected, actual);
}