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/12/06 12:10:19 UTC
kylin git commit: KYLIN-3055 Fix NPE for intersect_count query
Repository: kylin
Updated Branches:
refs/heads/master 14dd92e00 -> 9265e150d
KYLIN-3055 Fix NPE for intersect_count query
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/9265e150
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/9265e150
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/9265e150
Branch: refs/heads/master
Commit: 9265e150d80519d3e4f532c5f106e6718543daba
Parents: 14dd92e
Author: yuchuqian <yc...@meitu.com>
Authored: Mon Dec 4 14:30:28 2017 +0800
Committer: kangkaisen <ka...@meituan.com>
Committed: Wed Dec 6 20:09:44 2017 +0800
----------------------------------------------------------------------
.../gtrecord/GTCubeStorageQueryBase.java | 11 ++++++--
.../query/sql_intersect_count/query01.sql | 27 ++++++++++++++++++++
2 files changed, 36 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/9265e150/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 e9c6885..024990f 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
@@ -39,6 +39,7 @@ import org.apache.kylin.cube.model.RowKeyColDesc;
import org.apache.kylin.dict.lookup.LookupStringTable;
import org.apache.kylin.gridtable.StorageLimitLevel;
import org.apache.kylin.measure.MeasureType;
+import org.apache.kylin.measure.bitmap.BitmapMeasureType;
import org.apache.kylin.metadata.filter.CaseTupleFilter;
import org.apache.kylin.metadata.filter.ColumnTupleFilter;
import org.apache.kylin.metadata.filter.CompareTupleFilter;
@@ -143,7 +144,7 @@ public abstract class GTCubeStorageQueryBase implements IStorageQuery {
// exactAggregation mean: needn't aggregation at storage and query engine both.
boolean exactAggregation = isExactAggregation(context, cuboid, groups, otherDimsD, singleValuesD,
- derivedPostAggregation, sqlDigest.aggregations);
+ derivedPostAggregation, sqlDigest.aggregations, sqlDigest.aggrSqlCalls);
context.setExactAggregation(exactAggregation);
// replace derived columns in filter with host columns; columns on loosened condition must be added to group by
@@ -518,7 +519,7 @@ public abstract class GTCubeStorageQueryBase implements IStorageQuery {
private boolean isExactAggregation(StorageContext context, Cuboid cuboid, Collection<TblColRef> groups,
Set<TblColRef> othersD, Set<TblColRef> singleValuesD, Set<TblColRef> derivedPostAggregation,
- Collection<FunctionDesc> functionDescs) {
+ Collection<FunctionDesc> functionDescs, List<SQLDigest.SQLCall> aggrSQLCalls) {
if (context.isNeedStorageAggregation()) {
logger.info("exactAggregation is false because need storage aggregation");
return false;
@@ -550,6 +551,12 @@ public abstract class GTCubeStorageQueryBase implements IStorageQuery {
return false;
}
}
+ for (SQLDigest.SQLCall aggrSQLCall : aggrSQLCalls) {
+ if (aggrSQLCall.function.equals(BitmapMeasureType.FUNC_INTERSECT_COUNT_DISTINCT)) {
+ logger.info("exactAggregation is false because has INTERSECT_COUNT");
+ return false;
+ }
+ }
// for partitioned cube, the partition column must belong to group by or has single value
PartitionDesc partDesc = cuboid.getCubeDesc().getModel().getPartitionDesc();
http://git-wip-us.apache.org/repos/asf/kylin/blob/9265e150/kylin-it/src/test/resources/query/sql_intersect_count/query01.sql
----------------------------------------------------------------------
diff --git a/kylin-it/src/test/resources/query/sql_intersect_count/query01.sql b/kylin-it/src/test/resources/query/sql_intersect_count/query01.sql
new file mode 100644
index 0000000..7fd5ca2
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_intersect_count/query01.sql
@@ -0,0 +1,27 @@
+--
+-- 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 CAL_DT,
+intersect_count(TEST_COUNT_DISTINCT_BITMAP, CAL_DT, array[date'2012-01-01']) as first_day,
+intersect_count(TEST_COUNT_DISTINCT_BITMAP, CAL_DT, array[date'2012-01-02']) as second_day,
+intersect_count(TEST_COUNT_DISTINCT_BITMAP, CAL_DT, array[date'2012-01-03']) as third_day,
+intersect_count(TEST_COUNT_DISTINCT_BITMAP, CAL_DT, array[date'2012-01-01',date'2012-01-02']) as retention_oneday,
+intersect_count(TEST_COUNT_DISTINCT_BITMAP, CAL_DT, array[date'2012-01-01',date'2012-01-02',date'2012-01-03']) as retention_twoday
+from test_kylin_fact
+where CAL_DT in (date'2012-01-01',date'2012-01-02',date'2012-01-03')
+group by CAL_DT
+