diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryConfUtil.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryConfUtil.java index a6374f654..19ab11acc 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryConfUtil.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryConfUtil.java @@ -43,6 +43,7 @@ private CubeQueryConfUtil() { public static final String VALID_STORAGE_DIM_TABLES = "lens.cube.query.valid." + "dim.storgaetables"; public static final String DRIVER_SUPPORTED_STORAGES = "lens.cube.query.driver." + "supported.storages"; public static final String FAIL_QUERY_ON_PARTIAL_DATA = "lens.cube.query.fail.if.data.partial"; + public static final String SKIP_FACTS_ON_NO_DATA = "lens.cube.facts.skip.on.no.data"; public static final String NON_EXISTING_PARTITIONS = "lens.cube.query.nonexisting.partitions"; public static final String ENABLE_MULTI_TABLE_SELECT = "lens.cube.query.enable.multi.table.select"; public static final String QUERY_MAX_INTERVAL = "lens.cube.query.max.interval"; diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageTableResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageTableResolver.java index 6e63483dc..160068f80 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageTableResolver.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageTableResolver.java @@ -54,6 +54,7 @@ class StorageTableResolver implements ContextRewriter { private final boolean allStoragesSupported; CubeMetastoreClient client; private final boolean failOnPartialData; + private final boolean skipOnNoData; private final List validDimTables; private final Map>> validStorageMap = new HashMap>>(); @@ -85,6 +86,7 @@ public StorageTableResolver(Configuration conf) { this.supportedStorages = getSupportedStorages(conf); this.allStoragesSupported = (supportedStorages == null); this.failOnPartialData = conf.getBoolean(CubeQueryConfUtil.FAIL_QUERY_ON_PARTIAL_DATA, false); + this.skipOnNoData = conf.getBoolean(CubeQueryConfUtil.SKIP_FACTS_ON_NO_DATA, false); String str = conf.get(CubeQueryConfUtil.VALID_STORAGE_DIM_TABLES); validDimTables = StringUtils.isBlank(str) ? null : Arrays.asList(StringUtils.split(str.toLowerCase(), ",")); this.processTimePartCol = conf.get(CubeQueryConfUtil.PROCESS_TIME_PART_COL); @@ -191,7 +193,7 @@ private void resolveDimStorageTablesAndPartitions(CubeQueryContext cubeql) throw } else { LOG.info("Partition " + StorageConstants.LATEST_PARTITION_VALUE + " does not exist on " + tableName); } - if (!failOnPartialData || foundPart) { + if ((!skipOnNoData && !failOnPartialData) || foundPart) { storageTables.add(tableName); String whereClause = StorageUtil.getWherePartClause(dim.getTimedDimension(), null, @@ -325,7 +327,15 @@ private void resolveFactStoragePartitions(CubeQueryContext cubeql) throws Semant noPartsForRange = true; continue; } - cfact.incrementPartsQueried(rangeParts.size()); + if (skipOnNoData) { + for (FactPartition part : rangeParts) { + if (part.found()) { + cfact.incrementPartsQueried(1); + } + } + } else { + cfact.incrementPartsQueried(rangeParts.size()); + } answeringParts.addAll(rangeParts); cfact.getPartsQueried().addAll(rangeParts); cfact.getRangeToWhereClause().put(range, rangeWriter.getTimeRangeWhereClause(cubeql, @@ -512,10 +522,6 @@ private boolean getPartitions(CubeFactTable fact, Date fromDate, Date toDate, St partWhereClauseFormat)); } LOG.info("added all sub partitions blindly in pPart: " + pPart); -// if (!getPartitions(fact, dt, cal.getTime(), partCol, pPart, partitions, newset, false, -// skipStorageCauses, nonExistingParts)) { -// LOG.info("No partitions found in look ahead range"); -// } } } }