You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by jd...@apache.org on 2015/06/23 12:25:10 UTC

[22/51] [abbrv] incubator-lens git commit: LENS-599 : Include only fact subqueries to filter fact records in columnar rewriter

LENS-599 : Include only fact subqueries to filter fact records 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/7a7bdecb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-lens/tree/7a7bdecb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-lens/diff/7a7bdecb

Branch: refs/heads/current-release-line
Commit: 7a7bdecb3a7b97b4860534fdd23b8ec02433a860
Parents: 0776290
Author: Sushil Mohanty <su...@gmail.com>
Authored: Fri Jun 12 11:28:33 2015 +0530
Committer: Amareshwari Sriramadasu <am...@apache.org>
Committed: Fri Jun 12 11:28:33 2015 +0530

----------------------------------------------------------------------
 .../lens/driver/jdbc/ColumnarSQLRewriter.java   |  5 ++-
 .../driver/jdbc/TestColumnarSQLRewriter.java    | 41 +++++++++++++++++++-
 2 files changed, 44 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/7a7bdecb/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 51a06c4..9ba136f 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
@@ -537,7 +537,10 @@ public class ColumnarSQLRewriter implements QueryRewriter {
           // dim_table.key2 = 'abc' and dim_table.key3 = 'xyz'"
           subquery = queryphase1.concat(factFilters.toString().substring(0, factFilters.toString().lastIndexOf("and")))
             .concat(")");
-          allSubQueries.append(subquery).append(" and ");
+          // include subqueries which are applicable only to filter records from fact
+          if (subquery.matches("(.*)" + getFactAlias() + "(.*)")) {
+            allSubQueries.append(subquery).append(" and ");
+          }
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/7a7bdecb/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 556ca2c..aab7f31 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
@@ -126,7 +126,7 @@ public class TestColumnarSQLRewriter {
    *
    * create table item_dim ( item_key integer, item_name varchar(500) );
    *
-   * create table branch_dim ( branch_key integer, branch_key varchar(100));
+   * create table branch_dim ( branch_key integer, branch_name varchar(100));
    *
    * create table location_dim (location_key integer,location_name varchar(100));
    */
@@ -595,6 +595,45 @@ public class TestColumnarSQLRewriter {
   }
 
   @Test
+  public void testFilter() throws ParseException, SemanticException, LensException {
+
+    String query = "select max(fact.dollars_sold) 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 "
+        + "inner join branch_dim branch_dim on branch_dim.branch_key = location_dim.location_key "
+        + "and location_dim.location_name = 'test123'  "
+        + "where time_dim.time_key between date_add('2013-01-01', 1) and date_sub('2013-01-31',3) "
+        + "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";
+
+    SessionState.start(hconf);
+
+    String actual = qtest.rewrite(query, conf, hconf);
+    String expected = "select max(max_sales_fact___fact_dollars_sold) from  (select sales_fact___fact.time_key, "
+        + "sales_fact___fact.location_key, sales_fact___fact.item_key,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  inner )  inner join branch_dim branch_dim___branch_dim "
+        + "on ((( branch_dim___branch_dim . branch_key ) = ( location_dim___location_dim . location_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);
+  }
+
+  @Test
   public void testCountReplace() throws ParseException, SemanticException, LensException {
 
     String query = "SELECT  count(location_dim.name) FROM location_dim "