You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ka...@apache.org on 2017/08/09 12:09:28 UTC
kylin git commit: KYLIN-2706 Only compare with group columns in
SortedIteratorMergerWithLimit
Repository: kylin
Updated Branches:
refs/heads/master 714b22512 -> 659eeaedd
KYLIN-2706 Only compare with group columns in SortedIteratorMergerWithLimit
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/659eeaed
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/659eeaed
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/659eeaed
Branch: refs/heads/master
Commit: 659eeaedd571c837df3beae44456dadde3036c3d
Parents: 714b225
Author: kangkaisen <ka...@meituan.com>
Authored: Sat Jul 22 20:40:45 2017 +0800
Committer: kangkaisen <ka...@meituan.com>
Committed: Wed Aug 9 19:59:58 2017 +0800
----------------------------------------------------------------------
.../gtrecord/GTCubeStorageQueryBase.java | 2 +-
.../gtrecord/SequentialCubeTupleIterator.java | 17 ++++++++++++----
.../test/resources/query/sql_limit/query05.sql | 21 ++++++++++++++++++++
3 files changed, 35 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/659eeaed/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 f89fc47..3543c75 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
@@ -94,7 +94,7 @@ public abstract class GTCubeStorageQueryBase implements IStorageQuery {
return ITupleIterator.EMPTY_TUPLE_ITERATOR;
return new SequentialCubeTupleIterator(scanners, request.getCuboid(), request.getDimensions(),
- request.getMetrics(), returnTupleInfo, request.getContext(), sqlDigest);
+ request.getGroups(), request.getMetrics(), returnTupleInfo, request.getContext(), sqlDigest);
}
protected GTCubeStorageQueryRequest getStorageQueryRequest(StorageContext context, SQLDigest sqlDigest, TupleInfo returnTupleInfo) {
http://git-wip-us.apache.org/repos/asf/kylin/blob/659eeaed/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java
----------------------------------------------------------------------
diff --git a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java
index f7cb1b9..3cbb538 100644
--- a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java
+++ b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java
@@ -23,6 +23,7 @@ import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import java.util.TreeSet;
import org.apache.kylin.common.exceptions.KylinTimeoutException;
import org.apache.kylin.cube.cuboid.Cuboid;
@@ -53,7 +54,7 @@ public class SequentialCubeTupleIterator implements ITupleIterator {
private int scanCountDelta;
public SequentialCubeTupleIterator(List<CubeSegmentScanner> scanners, Cuboid cuboid, Set<TblColRef> selectedDimensions, //
- Set<FunctionDesc> selectedMetrics, TupleInfo returnTupleInfo, StorageContext context, SQLDigest sqlDigest) {
+ Set<TblColRef> groups, Set<FunctionDesc> selectedMetrics, TupleInfo returnTupleInfo, StorageContext context, SQLDigest sqlDigest) {
this.context = context;
this.scanners = scanners;
@@ -66,7 +67,7 @@ public class SequentialCubeTupleIterator implements ITupleIterator {
//query with limit
logger.info("Using SortedIteratorMergerWithLimit to merge segment results");
Iterator<Iterator<ITuple>> transformed = (Iterator<Iterator<ITuple>>) (Iterator<?>) segmentCubeTupleIterators.iterator();
- tupleIterator = new SortedIteratorMergerWithLimit<ITuple>(transformed, context.getFinalPushDownLimit(), getTupleDimensionComparator(cuboid, returnTupleInfo)).getIterator();
+ tupleIterator = new SortedIteratorMergerWithLimit<ITuple>(transformed, context.getFinalPushDownLimit(), getTupleDimensionComparator(cuboid, groups, returnTupleInfo)).getIterator();
} else {
//normal case
logger.info("Using Iterators.concat to merge segment results");
@@ -74,10 +75,18 @@ public class SequentialCubeTupleIterator implements ITupleIterator {
}
}
- public Comparator<ITuple> getTupleDimensionComparator(Cuboid cuboid, TupleInfo returnTupleInfo) {
+ public Comparator<ITuple> getTupleDimensionComparator(Cuboid cuboid, Set<TblColRef> groups, TupleInfo returnTupleInfo) {
// dimensionIndexOnTuple is for SQL with limit
+ List<TblColRef> dimColumns = cuboid.getColumns();
+
+ TreeSet<Integer> groupIndexOnDim = new TreeSet<>();
+ for (TblColRef colRef: groups) {
+ groupIndexOnDim.add(dimColumns.indexOf(colRef));
+ }
+
List<Integer> temp = Lists.newArrayList();
- for (TblColRef dim : cuboid.getColumns()) {
+ for (Integer index: groupIndexOnDim) {
+ TblColRef dim = dimColumns.get(index);
if (returnTupleInfo.hasColumn(dim)) {
temp.add(returnTupleInfo.getColumnIndex(dim));
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/659eeaed/kylin-it/src/test/resources/query/sql_limit/query05.sql
----------------------------------------------------------------------
diff --git a/kylin-it/src/test/resources/query/sql_limit/query05.sql b/kylin-it/src/test/resources/query/sql_limit/query05.sql
new file mode 100644
index 0000000..ba5523a
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_limit/query05.sql
@@ -0,0 +1,21 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License. You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+select sum(price) from test_kylin_fact
+ where CAL_DT >= '2012-02-16' and CAL_DT <= '2012-03-16'
+ limit 1