Repository: kylin Updated Branches: refs/heads/v1.6.0-rc2 783d39917 -> 33bb7c293
KYLIN-2221 rethink on KYLIN-1684 Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/33bb7c29 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/33bb7c29 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/33bb7c29 Branch: refs/heads/v1.6.0-rc2 Commit: 33bb7c293982a052a8c436820c708a038878e30f Parents: 783d399 Author: Hongbin Ma <mahong...@apache.org> Authored: Tue Nov 22 13:42:46 2016 +0800 Committer: shaofengshi <shaofeng...@apache.org> Committed: Tue Nov 22 15:59:17 2016 +0800 ---------------------------------------------------------------------- .../apache/kylin/common/KylinConfigBase.java | 5 ++++ .../gtrecord/GTCubeStorageQueryBase.java | 26 ++++---------------- 2 files changed, 10 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/33bb7c29/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java index 011155f..c2595fb 100644 --- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java +++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java @@ -477,6 +477,11 @@ abstract public class KylinConfigBase implements Serializable { return Float.parseFloat(getOptional("kylin.hbase.hfile.size.gb", "2.0")); } + //check KYLIN-1684, in most cases keep the default value + public boolean isSkippingEmptySegments() { + return Boolean.valueOf(getOptional("kylin.query.skip-empty-segments", "true")); + } + public int getStoragePushDownLimitMax() { return Integer.parseInt(getOptional("kylin.query.pushdown.limit.max", "10000")); } http://git-wip-us.apache.org/repos/asf/kylin/blob/33bb7c29/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 76a8c7b..5e8af88 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 @@ -122,24 +122,12 @@ public abstract class GTCubeStorageQueryBase implements IStorageQuery { List<CubeSegmentScanner> scanners = Lists.newArrayList(); for (CubeSegment cubeSeg : cubeInstance.getSegments(SegmentStatusEnum.READY)) { CubeSegmentScanner scanner; - if (cubeSeg.getInputRecords() == 0) { - if (!skipZeroInputSegment(cubeSeg)) { - logger.warn("cube segment {} input record is 0, " + "it may caused by kylin failed to get the job counter " + "as the hadoop history server wasn't running", cubeSeg); - } else { - logger.warn("cube segment {} input record is 0, skip it ", cubeSeg); - continue; - } - } - try { - scanner = new CubeSegmentScanner(cubeSeg, cuboid, dimensionsD, groupsD, metrics, filterD, context, getGTStorage()); - } catch (IllegalArgumentException ex) { - // ref KYLIN-1967, real empty segment can trigger dictionary exception -- IllegalArgumentException: Value not exists! - if (cubeSeg.getInputRecords() == 0) { - logger.warn("cube segment {} input record is 0, skip it still", cubeSeg); - continue; - } - throw ex; + if (cubeDesc.getConfig().isSkippingEmptySegments() && cubeSeg.getInputRecords() == 0) { + logger.info("Skip cube segment {} because its input record is 0", cubeSeg); + continue; } + + scanner = new CubeSegmentScanner(cubeSeg, cuboid, dimensionsD, groupsD, metrics, filterD, context, getGTStorage()); scanners.add(scanner); } @@ -149,10 +137,6 @@ public abstract class GTCubeStorageQueryBase implements IStorageQuery { return new SequentialCubeTupleIterator(scanners, cuboid, dimensionsD, metrics, returnTupleInfo, context); } - protected boolean skipZeroInputSegment(CubeSegment cubeSegment) { - return false; - } - protected abstract String getGTStorage(); private void buildDimensionsAndMetrics(SQLDigest sqlDigest, Collection<TblColRef> dimensions, Collection<FunctionDesc> metrics) {