You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ma...@apache.org on 2016/11/03 10:39:18 UTC

[6/8] kylin git commit: if outer query does not have aggr, join columns with subquery should not be added to groupbycolumns

if outer query does not have aggr, join columns with subquery should not be added to groupbycolumns


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

Branch: refs/heads/yang21-hbase1.x
Commit: cb0a1a39555994b481da7b9151b4bc8a3955c179
Parents: dc01e15
Author: Hongbin Ma <ma...@apache.org>
Authored: Thu Nov 3 18:32:19 2016 +0800
Committer: Hongbin Ma <ma...@apache.org>
Committed: Thu Nov 3 18:32:59 2016 +0800

----------------------------------------------------------------------
 .../org/apache/kylin/metadata/realization/SQLDigest.java     | 4 +++-
 .../kylin/storage/gtrecord/GTCubeStorageQueryBase.java       | 8 ++++++++
 .../java/org/apache/kylin/storage/hbase/ITStorageTest.java   | 2 +-
 .../java/org/apache/kylin/query/relnode/OLAPContext.java     | 3 ++-
 .../java/org/apache/kylin/query/relnode/OLAPJoinRel.java     | 5 ++---
 5 files changed, 16 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/cb0a1a39/core-metadata/src/main/java/org/apache/kylin/metadata/realization/SQLDigest.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/realization/SQLDigest.java b/core-metadata/src/main/java/org/apache/kylin/metadata/realization/SQLDigest.java
index d2bba66..3aa39e4 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/realization/SQLDigest.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/realization/SQLDigest.java
@@ -39,6 +39,7 @@ public class SQLDigest {
     public Collection<JoinDesc> joinDescs;
     public Collection<TblColRef> allColumns;
     public Collection<TblColRef> groupbyColumns;
+    public Collection<TblColRef> subqueryJoinParticipants;
     public Collection<TblColRef> filterColumns;
     public Collection<TblColRef> metricColumns;
     public Collection<FunctionDesc> aggregations;
@@ -48,12 +49,13 @@ public class SQLDigest {
 
     //initialized when org.apache.kylin.query.routing.QueryRouter.selectRealization()
     public SQLDigest(String factTable, TupleFilter filter, Collection<JoinDesc> joinDescs, Collection<TblColRef> allColumns, //
-            Collection<TblColRef> groupbyColumns, Collection<TblColRef> filterColumns, Collection<TblColRef> aggregatedColumns, Collection<FunctionDesc> aggregateFunnc, Collection<MeasureDesc> sortMeasures, Collection<OrderEnum> sortOrders) {
+            Collection<TblColRef> groupbyColumns, Collection<TblColRef> subqueryJoinParticipants, Collection<TblColRef> filterColumns, Collection<TblColRef> aggregatedColumns, Collection<FunctionDesc> aggregateFunnc, Collection<MeasureDesc> sortMeasures, Collection<OrderEnum> sortOrders) {
         this.factTable = factTable;
         this.filter = filter;
         this.joinDescs = joinDescs;
         this.allColumns = allColumns;
         this.groupbyColumns = groupbyColumns;
+        this.subqueryJoinParticipants = subqueryJoinParticipants;
         this.filterColumns = filterColumns;
         this.metricColumns = aggregatedColumns;
         this.aggregations = aggregateFunnc;

http://git-wip-us.apache.org/repos/asf/kylin/blob/cb0a1a39/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
----------------------------------------------------------------------
diff --git a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
index fa23be1..86d66af 100644
--- a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
+++ b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
@@ -74,6 +74,14 @@ public abstract class GTCubeStorageQueryBase implements IStorageQuery {
     @Override
     public ITupleIterator search(StorageContext context, SQLDigest sqlDigest, TupleInfo returnTupleInfo) {
 
+        //deal with participant columns in subquery join
+        if (sqlDigest.isRawQuery) {
+            sqlDigest.allColumns.addAll(sqlDigest.subqueryJoinParticipants);
+        } else {
+            sqlDigest.groupbyColumns.addAll(sqlDigest.subqueryJoinParticipants);
+            sqlDigest.allColumns.addAll(sqlDigest.subqueryJoinParticipants);
+        }
+
         //cope with queries with no aggregations
         RawQueryLastHacker.hackNoAggregations(sqlDigest, cubeDesc);
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/cb0a1a39/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITStorageTest.java
----------------------------------------------------------------------
diff --git a/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITStorageTest.java b/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITStorageTest.java
index 136342d..bb3257b 100644
--- a/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITStorageTest.java
+++ b/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITStorageTest.java
@@ -144,7 +144,7 @@ public class ITStorageTest extends HBaseMetadataTestCase {
         int count = 0;
         ITupleIterator iterator = null;
         try {
-            SQLDigest sqlDigest = new SQLDigest("default.test_kylin_fact", filter, null, Collections.<TblColRef> emptySet(), groups, Collections.<TblColRef> emptySet(), Collections.<TblColRef> emptySet(), aggregations, new ArrayList<MeasureDesc>(), new ArrayList<SQLDigest.OrderEnum>());
+            SQLDigest sqlDigest = new SQLDigest("default.test_kylin_fact", filter, null, Collections.<TblColRef> emptySet(), groups, Collections.<TblColRef> emptySet(), Collections.<TblColRef> emptySet(), Collections.<TblColRef> emptySet(), aggregations, new ArrayList<MeasureDesc>(), new ArrayList<SQLDigest.OrderEnum>());
             iterator = storageEngine.search(context, sqlDigest, StorageMockUtils.newTupleInfo(groups, aggregations));
             while (iterator.hasNext()) {
                 ITuple tuple = iterator.next();

http://git-wip-us.apache.org/repos/asf/kylin/blob/cb0a1a39/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java
index 41a3b4d..19980b7 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java
@@ -118,6 +118,7 @@ public class OLAPContext {
 
     public Collection<TblColRef> allColumns = new HashSet<TblColRef>();
     public Collection<TblColRef> groupByColumns = new ArrayList<TblColRef>();
+    public Collection<TblColRef> subqueryJoinParticipants = new HashSet<TblColRef>();//subqueryJoinParticipants will be added to groupByColumns(only when other group by co-exists) and allColumns
     public Collection<TblColRef> metricsColumns = new HashSet<TblColRef>();
     public List<FunctionDesc> aggregations = new ArrayList<FunctionDesc>();
     public Collection<TblColRef> filterColumns = new HashSet<TblColRef>();
@@ -144,7 +145,7 @@ public class OLAPContext {
 
     public SQLDigest getSQLDigest() {
         if (sqlDigest == null)
-            sqlDigest = new SQLDigest(firstTableScan.getTableName(), filter, joins, allColumns, groupByColumns, filterColumns, metricsColumns, aggregations, sortMeasures, sortOrders);
+            sqlDigest = new SQLDigest(firstTableScan.getTableName(), filter, joins, allColumns, groupByColumns, subqueryJoinParticipants, filterColumns, metricsColumns, aggregations, sortMeasures, sortOrders);
         return sqlDigest;
     }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/cb0a1a39/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
index 2a143fb..c445671 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
@@ -48,9 +48,9 @@ import org.apache.calcite.rel.core.JoinInfo;
 import org.apache.calcite.rel.core.JoinRelType;
 import org.apache.calcite.rel.metadata.RelMetadataQuery;
 import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeFactory.FieldInfoBuilder;
 import org.apache.calcite.rel.type.RelDataTypeField;
 import org.apache.calcite.rel.type.RelDataTypeFieldImpl;
-import org.apache.calcite.rel.type.RelDataTypeFactory.FieldInfoBuilder;
 import org.apache.calcite.rex.RexCall;
 import org.apache.calcite.rex.RexInputRef;
 import org.apache.calcite.rex.RexNode;
@@ -165,8 +165,7 @@ public class OLAPJoinRel extends EnumerableJoin implements OLAPRel {
 
             for (Map.Entry<TblColRef, TblColRef> columnPair : joinCol.entrySet()) {
                 TblColRef fromCol = (rightHasSubquery ? columnPair.getKey() : columnPair.getValue());
-                this.context.groupByColumns.add(fromCol);
-                this.context.allColumns.add(fromCol);
+                this.context.subqueryJoinParticipants.add(fromCol);
             }
             joinCol.clear();
         }