You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by am...@apache.org on 2014/12/23 13:17:19 UTC
incubator-lens git commit: LENS-141 : Exclude join condition as
filter in inner fact query in ColumnarSqlRewriter (Sushil Mohanty via
amareshwari)
Repository: incubator-lens
Updated Branches:
refs/heads/master f18e60097 -> e51c14c04
LENS-141 : Exclude join condition as filter in inner fact query in ColumnarSqlRewriter (Sushil Mohanty via amareshwari)
Project: http://git-wip-us.apache.org/repos/asf/incubator-lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-lens/commit/e51c14c0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-lens/tree/e51c14c0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-lens/diff/e51c14c0
Branch: refs/heads/master
Commit: e51c14c042b80e9cb960cb3e1be0da1054506a32
Parents: f18e600
Author: Amareshwari Sriramdasu <am...@inmobi.com>
Authored: Tue Dec 23 17:47:08 2014 +0530
Committer: Amareshwari Sriramdasu <am...@inmobi.com>
Committed: Tue Dec 23 17:47:08 2014 +0530
----------------------------------------------------------------------
.../lens/driver/jdbc/ColumnarSQLRewriter.java | 23 ++++++++++++++++++
.../driver/jdbc/TestColumnarSQLRewriter.java | 25 ++++++++++++++++++++
2 files changed, 48 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/e51c14c0/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 b05d87f..5b7f519 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
@@ -419,6 +419,16 @@ public class ColumnarSQLRewriter implements QueryRewriter {
String filterCond = "";
if (node.getToken().getType() == HiveParser.KW_AND) {
+
+ ASTNode parentNode = (ASTNode) node.getChild(0).getParent();
+ // Skip the join conditions used as "and" for fact filter pushdown.
+ // eg. inner join fact.id1 = dim.id and fact.id2 = dim.id
+ if (parentNode.getChild(0).getChild(0).getType() == HiveParser.DOT
+ && parentNode.getChild(0).getChild(1).getType() == HiveParser.DOT
+ && parentNode.getChild(1).getChild(0).getType() == HiveParser.DOT
+ && parentNode.getChild(1).getChild(1).getType() == HiveParser.DOT)
+ return;
+
ASTNode right = (ASTNode) node.getChild(1);
filterCond = HQLParser.getString(right);
}
@@ -498,6 +508,19 @@ public class ColumnarSQLRewriter implements QueryRewriter {
ASTNode left = (ASTNode) node.getChild(0);
ASTNode right = (ASTNode) node.getChild(1);
+ ASTNode parentNode = (ASTNode) node.getParent();
+ HQLParser.printAST(parentNode);
+
+ // Skip the join conditions used as "and" while building subquery
+ // eg. inner join fact.id1 = dim.id and fact.id2 = dim.id
+ if (parentNode.getChild(0).getChild(0).getType() == HiveParser.DOT
+ && parentNode.getChild(0).getChild(1).getType() == HiveParser.DOT
+ && parentNode.getChild(1).getChild(0).getType() == HiveParser.DOT
+ && parentNode.getChild(1).getChild(1).getType() == HiveParser.DOT) {
+ HQLParser.printAST(parentNode);
+ return;
+ }
+
// Get the fact and dimension columns in table_name.column_name format
String factJoinKeys = HQLParser.getString(left).toString().replaceAll("\\s+", "")
.replaceAll("[(,)]", "");
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/e51c14c0/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 6ca0d2d..5af6ead 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
@@ -735,6 +735,31 @@ public void testCountReplace() throws ParseException, SemanticException, LensExc
compareQueries(expected, actual);
}
+ @Test
+ public void testExcludeJoinFilterFromFactQuery() throws ParseException, SemanticException, LensException {
+
+ String query = "SELECT (dim1 . date) dim1_date , sum((f . msr1)) msr1 , (dim2 . name) dim2_name "
+ + "FROM fact f INNER JOIN dim1 dim1 ON f.dim1_id = dim1.id and f.m2 = '1234' "
+ + "INNER JOIN dim2 dim2 ON f.dim2_id = dim2.id and f.dim3_id = dim2.id "
+ + "WHERE ((dim1 . date) = '2014-11-25 00:00:00') and f.m4 is not null "
+ + "GROUP BY (dim1 . date), (dim2 . name) ORDER BY dim1_date";
+
+ SessionState.start(conf);
+
+ String actual = qtest.rewrite(query, conf);
+ String expected = "select ( dim1___dim1 . date ) dim1_date , sum(sum_fact___f_msr1) msr1 , ( dim2___dim2 . name ) dim2_name "
+ + "from (select fact___f.dim2_id, fact___f.dim1_id, fact___f.dim3_id, fact___f.m4, fact___f.m2,sum(( fact___f . msr1 )) "
+ + "as sum_fact___f_msr1 from fact fact___f where ( fact___f . m4 ) is not null and (( fact___f . m2 ) = '1234' ) and "
+ + "fact___f.dim1_id in ( select dim1 .id from dim1 where (( dim1. date ) = '2014-11-25 00:00:00' ) ) "
+ + "group by fact___f.dim2_id, fact___f.dim1_id, fact___f.dim3_id, fact___f.m4, fact___f.m2) fact___f inner join dim1 "
+ + "dim1___dim1 on ((( fact___f . dim1_id ) = ( dim1___dim1 . id )) and (( fact___f . m2 ) = '1234' )) inner join "
+ + "dim2 dim2___dim2 on ((( fact___f . dim2_id ) = ( dim2___dim2 . id )) and (( fact___f . dim3_id ) = ( dim2___dim2 . id ))) "
+ + " where ((( dim1___dim1 . date ) = '2014-11-25 00:00:00' ) and ( fact___f . m4 ) is not null ) group by ( dim1___dim1 . date ), "
+ + "( dim2___dim2 . name ) order by dim1_date asc";
+
+ compareQueries(expected, actual);
+ }
+
/**
* Test replace db name.
*