You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by pr...@apache.org on 2015/04/22 18:03:06 UTC
incubator-lens git commit: LENS-503: Add MaxCoveringFactResolver
after fact partitions are resolved
Repository: incubator-lens
Updated Branches:
refs/heads/master e39a466ca -> 6008ffb1c
LENS-503: Add MaxCoveringFactResolver after fact partitions are resolved
Project: http://git-wip-us.apache.org/repos/asf/incubator-lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-lens/commit/6008ffb1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-lens/tree/6008ffb1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-lens/diff/6008ffb1
Branch: refs/heads/master
Commit: 6008ffb1c33bd31e5c29695d39935b1e9184ee85
Parents: e39a466
Author: Rajat Khandelwal <ra...@gmail.com>
Authored: Wed Apr 22 21:32:57 2015 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
Committed: Wed Apr 22 21:32:57 2015 +0530
----------------------------------------------------------------------
.../lens/cube/metadata/FactPartition.java | 7 +-
.../timeline/EndsAndHolesPartitionTimeline.java | 2 +
.../timeline/RangesPartitionTimeline.java | 11 ++
.../timeline/StoreAllPartitionTimeline.java | 2 +
.../cube/parse/CandidateTablePruneCause.java | 12 ++
.../lens/cube/parse/CubeQueryContext.java | 7 +-
.../lens/cube/parse/CubeQueryRewriter.java | 12 ++
.../org/apache/lens/cube/parse/DateUtil.java | 6 +-
.../cube/parse/MaxCoveringFactResolver.java | 139 ++++++++++++++
.../lens/cube/parse/StorageTableResolver.java | 5 +-
.../apache/lens/cube/parse/CubeTestSetup.java | 15 +-
.../lens/cube/parse/TestAggregateResolver.java | 17 +-
.../lens/cube/parse/TestCubeRewriter.java | 188 ++++++++++++-------
.../apache/lens/cube/parse/TestDateUtil.java | 149 +++++++++------
.../lens/cube/parse/TestQueryMetrics.java | 41 ++--
.../lens/cube/parse/TestRewriterPlan.java | 33 ++--
16 files changed, 472 insertions(+), 174 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactPartition.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactPartition.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactPartition.java
index 44c6915..8a6dcba 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactPartition.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactPartition.java
@@ -42,6 +42,9 @@ public class FactPartition implements Comparable<FactPartition> {
@Setter
private FactPartition containingPart;
private final DateFormat partFormat;
+ @Getter
+ @Setter
+ private boolean found = false;
public FactPartition(String partCol, Date partSpec, UpdatePeriod period,
FactPartition containingPart, DateFormat partFormat) {
@@ -62,10 +65,6 @@ public class FactPartition implements Comparable<FactPartition> {
return containingPart != null;
}
- public boolean found() {
- return !getStorageTables().isEmpty();
- }
-
public String getFormattedPartSpec() {
if (partFormat == null) {
return getPartString();
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/EndsAndHolesPartitionTimeline.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/EndsAndHolesPartitionTimeline.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/EndsAndHolesPartitionTimeline.java
index 10b18e2..e52ed58 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/EndsAndHolesPartitionTimeline.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/EndsAndHolesPartitionTimeline.java
@@ -31,6 +31,7 @@ import com.google.common.base.Strings;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString;
@@ -40,6 +41,7 @@ import lombok.ToString;
* which Timeline Class to use in it's params.
*/
@Data
+@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class EndsAndHolesPartitionTimeline extends PartitionTimeline {
private TimePartition first;
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/RangesPartitionTimeline.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/RangesPartitionTimeline.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/RangesPartitionTimeline.java
index 8d80f0b..24f7f1a 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/RangesPartitionTimeline.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/RangesPartitionTimeline.java
@@ -34,6 +34,7 @@ import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
@@ -42,6 +43,7 @@ import lombok.ToString;
* the second element of the tuple
*/
@Data
+@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class RangesPartitionTimeline extends PartitionTimeline {
private List<TimePartitionRange> ranges = Lists.newArrayList();
@@ -231,4 +233,13 @@ public class RangesPartitionTimeline extends PartitionTimeline {
}
};
}
+
+
+ public long getTimeCovered() {
+ long t = 0;
+ for (TimePartitionRange range : ranges) {
+ t += (range.getEnd().getDate().getTime() - range.getBegin().getDate().getTime());
+ }
+ return t;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/StoreAllPartitionTimeline.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/StoreAllPartitionTimeline.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/StoreAllPartitionTimeline.java
index 2364400..91e172f 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/StoreAllPartitionTimeline.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/timeline/StoreAllPartitionTimeline.java
@@ -30,6 +30,7 @@ import org.apache.commons.lang.StringUtils;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString;
@@ -38,6 +39,7 @@ import lombok.ToString;
* Helps in test cases. In real life scenarios, this would be almost always end up causing out of memory error.
*/
@Data
+@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class StoreAllPartitionTimeline extends PartitionTimeline {
TreeSet<TimePartition> allPartitions;
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTablePruneCause.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTablePruneCause.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTablePruneCause.java
index 2c191fc..165525d 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTablePruneCause.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTablePruneCause.java
@@ -35,8 +35,11 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
public class CandidateTablePruneCause {
+
public enum CandidateTablePruneCode {
MORE_WEIGHT("Picked table had more weight than minimum."),
+ // partial data is enabled, another fact has more data.
+ LESS_DATA("Picked table has less data than the maximum"),
// cube table has more partitions
MORE_PARTITIONS("Picked table has more partitions than minimum"),
// invalid cube table
@@ -194,6 +197,9 @@ public class CandidateTablePruneCause {
// the columns that are missing default aggregate. only set in case of MISSING_DEFAULT_AGGREGATE
private List<String> columnsMissingDefaultAggregate;
+ // time covered
+ private MaxCoveringFactResolver.TimeCovered maxTimeCovered;
+
public CandidateTablePruneCause(CandidateTablePruneCode cause) {
this.cause = cause;
}
@@ -223,6 +229,12 @@ public class CandidateTablePruneCause {
return cause;
}
+ public static CandidateTablePruneCause lessData(MaxCoveringFactResolver.TimeCovered timeCovered) {
+ CandidateTablePruneCause cause = new CandidateTablePruneCause(CandidateTablePruneCode.LESS_DATA);
+ cause.setMaxTimeCovered(timeCovered);
+ return cause;
+ }
+
public static CandidateTablePruneCause noColumnPartOfAJoinPath(final Collection<String> colSet) {
CandidateTablePruneCause cause =
new CandidateTablePruneCause(CandidateTablePruneCode.NO_COLUMN_PART_OF_A_JOIN_PATH);
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java
index 0df4b2e..b7c3ee9 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java
@@ -1043,6 +1043,11 @@ public class CubeQueryContext {
*/
public void pruneCandidateFactWithCandidateSet(CandidateTablePruneCode pruneCause) {
// remove candidate facts that are not part of any covering set
+ pruneCandidateFactWithCandidateSet(new CandidateTablePruneCause(pruneCause));
+ }
+
+ public void pruneCandidateFactWithCandidateSet(CandidateTablePruneCause pruneCause) {
+ // remove candidate facts that are not part of any covering set
Set<CandidateFact> allCoveringFacts = new HashSet<CandidateFact>();
for (Set<CandidateFact> set : candidateFactSets) {
allCoveringFacts.addAll(set);
@@ -1051,7 +1056,7 @@ public class CubeQueryContext {
CandidateFact cfact = i.next();
if (!allCoveringFacts.contains(cfact)) {
LOG.info("Not considering fact table:" + cfact + " as " + pruneCause);
- addFactPruningMsgs(cfact.fact, new CandidateTablePruneCause(pruneCause));
+ addFactPruningMsgs(cfact.fact, pruneCause);
i.remove();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryRewriter.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryRewriter.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryRewriter.java
index 24c6ab1..e40df44 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryRewriter.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryRewriter.java
@@ -109,6 +109,17 @@ public class CubeQueryRewriter {
* If LightestFact first flag is enabled, LightestFactResolver is applied
* before StorageTableResolver.
*
+ * MaxCoveringFactResolver runs just after all candidate facts' partitions
+ * are resolved. It then sees how much time range each fact set is able to cover
+ * and finds the maximum coverable range. It then prunes all fact sets that
+ * are covering less than that range. If fail on partial is true, then by the
+ * time this resolver runs, all the candidate fact sets cover full range.
+ * So there this resolver is a no-op. Same thing when fail on partial is false
+ * and no fact set has any data. This is most useful when facts actually have
+ * partial data. There it'll ensure the facts that are covering the maximum
+ * time range will be picked.
+ *
+ *
* Once all rewriters are done, finally picks up one of the available
* candidate sets to answer the query, after all the resolvers are done. Once
* the final candidate fact set is picked, if number of elements in the fact
@@ -152,6 +163,7 @@ public class CubeQueryRewriter {
}
// Phase 2: resolve fact table partitions.
rewriters.add(storageTableResolver);
+ rewriters.add(new MaxCoveringFactResolver(conf));
if (!lightFactFirst) {
rewriters.add(new LightestFactResolver(conf));
}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/main/java/org/apache/lens/cube/parse/DateUtil.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/DateUtil.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/DateUtil.java
index a4988d4..82c43a7 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/DateUtil.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/DateUtil.java
@@ -214,7 +214,7 @@ public final class DateUtil {
boolean hasFraction = false;
switch (interval) {
case YEARLY:
- if (cal.get(Calendar.MONTH) != 1) {
+ if (cal.get(Calendar.MONTH) != 0) {
hasFraction = true;
break;
}
@@ -263,7 +263,7 @@ public final class DateUtil {
cal.setTime(toDate);
switch (interval) {
case YEARLY:
- cal.set(Calendar.MONTH, 1);
+ cal.set(Calendar.MONTH, 0);
case MONTHLY:
cal.set(Calendar.DAY_OF_MONTH, 1);
case DAILY:
@@ -273,12 +273,14 @@ public final class DateUtil {
case MINUTELY:
cal.set(Calendar.SECOND, 0);
case SECONDLY:
+ cal.set(Calendar.MILLISECOND, 0);
break;
case WEEKLY:
cal.set(Calendar.DAY_OF_WEEK, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MILLISECOND, 0);
break;
}
return cal.getTime();
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/main/java/org/apache/lens/cube/parse/MaxCoveringFactResolver.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/MaxCoveringFactResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/MaxCoveringFactResolver.java
new file mode 100644
index 0000000..e3a90d5
--- /dev/null
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/MaxCoveringFactResolver.java
@@ -0,0 +1,139 @@
+/**
+ * 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.
+ */
+package org.apache.lens.cube.parse;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.lens.api.LensException;
+import org.apache.lens.cube.metadata.FactPartition;
+import org.apache.lens.cube.metadata.TimePartition;
+import org.apache.lens.cube.metadata.TimePartitionRange;
+import org.apache.lens.cube.metadata.UpdatePeriod;
+import org.apache.lens.cube.metadata.timeline.RangesPartitionTimeline;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.ql.parse.SemanticException;
+
+import com.google.common.collect.Maps;
+
+/**
+ * Prune candidate fact sets so that the facts except the ones that are covering maximum of range are pruned
+ */
+class MaxCoveringFactResolver implements ContextRewriter {
+ public static final Log LOG = LogFactory.getLog(MaxCoveringFactResolver.class.getName());
+ private final boolean failOnPartialData;
+
+ public MaxCoveringFactResolver(Configuration conf) {
+ this.failOnPartialData = conf.getBoolean(CubeQueryConfUtil.FAIL_QUERY_ON_PARTIAL_DATA, false);
+ }
+
+ @Override
+ public void rewriteContext(CubeQueryContext cubeql) throws SemanticException {
+ if (failOnPartialData) {
+ // if fail on partial data is true, by the time this resolver starts,
+ // all candidate fact sets are covering full time range. We can avoid
+ // redundant computation.
+ return;
+ }
+ if (cubeql.getCube() != null && !cubeql.getCandidateFactSets().isEmpty()) {
+ Map<Set<CandidateFact>, Long> factPartCount = Maps.newHashMap();
+ for (Set<CandidateFact> facts : cubeql.getCandidateFactSets()) {
+ factPartCount.put(facts, getTimeCovered(facts));
+ }
+ long maxTimeCovered = Collections.max(factPartCount.values());
+ TimeCovered timeCovered = new TimeCovered(maxTimeCovered);
+ for (Iterator<Set<CandidateFact>> i = cubeql.getCandidateFactSets().iterator(); i.hasNext();) {
+ Set<CandidateFact> facts = i.next();
+ if (factPartCount.get(facts) < maxTimeCovered) {
+ LOG.info("Not considering facts:" + facts + " from candidate fact tables as it covers less time than the max."
+ + "which is: " + timeCovered);
+ i.remove();
+ }
+ }
+ cubeql.pruneCandidateFactWithCandidateSet(CandidateTablePruneCause.lessData(timeCovered));
+ }
+ }
+
+ private long getTimeCovered(Set<CandidateFact> facts) {
+ UpdatePeriod smallest = UpdatePeriod.values()[UpdatePeriod.values().length - 1];
+ for (CandidateFact fact : facts) {
+ for (FactPartition part : fact.getPartsQueried()) {
+ if (part.getPeriod().compareTo(smallest) < 0) {
+ smallest = part.getPeriod();
+ }
+ }
+ }
+ RangesPartitionTimeline range = new RangesPartitionTimeline(null, smallest, null);
+ for (CandidateFact fact : facts) {
+ for (FactPartition part : fact.getPartsQueried()) {
+ if (part.isFound()) {
+ try {
+ TimePartitionRange subrange =
+ TimePartition.of(part.getPeriod(), part.getPartSpec()).singletonRange();
+ for (TimePartition partition : TimePartition.of(smallest, subrange.getBegin().getDate()).rangeUpto(
+ TimePartition.of(smallest, subrange.getEnd().getDate()))) {
+ range.add(partition);
+ }
+ } catch (LensException e) {
+ LOG.error("invalid partition: " + e);
+ }
+ }
+ }
+ }
+ return range.getTimeCovered();
+ }
+
+ public static class TimeCovered {
+ private final long days;
+ private final long hours;
+ private final long minutes;
+ private final long seconds;
+ private final long milliseconds;
+
+ public TimeCovered(long ms) {
+ milliseconds = ms % (24 * 60 * 60 * 1000);
+ long seconds = ms / (24 * 60 * 60 * 1000);
+ this.seconds = seconds % (24 * 60 * 60);
+ long minutes = seconds / (24 * 60 * 60);
+ this.minutes = minutes % (24 * 60);
+ long hours = minutes / (24 * 60);
+ this.hours = hours % 24;
+ this.days = hours / 24;
+ }
+
+ public String toString() {
+ return new StringBuilder()
+ .append(days)
+ .append(" days, ")
+ .append(hours)
+ .append(" hours, ")
+ .append(minutes)
+ .append(" minutes, ")
+ .append(seconds)
+ .append(" seconds, ")
+ .append(milliseconds)
+ .append(" milliseconds.").toString();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageTableResolver.java
----------------------------------------------------------------------
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 ab2c3f9..70296aa 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
@@ -462,7 +462,7 @@ class StorageTableResolver implements ContextRewriter {
LOG.info("candidate storage tables for searching partitions: " + storageTbls);
updateFactPartitionStorageTablesFrom(fact, part, storageTbls);
LOG.info("Storage tables containing Partition " + part + " are: " + part.getStorageTables());
- if (part.found()) {
+ if (part.isFound()) {
LOG.info("Adding existing partition" + part);
partitions.add(part);
LOG.info("Looking for look ahead process time partitions for " + part);
@@ -490,7 +490,7 @@ class StorageTableResolver implements ContextRewriter {
partWhereClauseFormat);
updateFactPartitionStorageTablesFrom(fact, processTimePartition,
part.getStorageTables());
- if (processTimePartition.found()) {
+ if (processTimePartition.isFound()) {
LOG.info("Finer parts not required for look-ahead partition :" + part);
} else {
LOG.info("Looked ahead process time partition " + processTimePartition + " is not found");
@@ -562,6 +562,7 @@ class StorageTableResolver implements ContextRewriter {
for (String storageTableName : storageTableNames) {
if (client.factPartitionExists(fact, part, storageTableName)) {
part.getStorageTables().add(storageTableName);
+ part.setFound(true);
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
index 3807068..5d9e97e 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
@@ -30,6 +30,7 @@ import org.apache.lens.cube.metadata.timeline.StoreAllPartitionTimeline;
import org.apache.lens.server.api.LensConfConstants;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.DateUtils;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.api.Database;
import org.apache.hadoop.hive.metastore.api.FieldSchema;
@@ -101,10 +102,13 @@ public class CubeTestSetup {
public static final Date TWO_MONTHS_BACK;
public static final Date BEFORE_4_DAYS_START;
public static final Date BEFORE_4_DAYS_END;
+ public static final Date THIS_YEAR_START;
+ public static final Date THIS_YEAR_END;
// Time Ranges
public static final String LAST_HOUR_TIME_RANGE;
public static final String TWO_DAYS_RANGE;
+ public static final String THIS_YEAR_RANGE;
public static final String TWO_MONTHS_RANGE_UPTO_MONTH;
public static final String TWO_MONTHS_RANGE_UPTO_HOURS;
public static final String TWO_DAYS_RANGE_BEFORE_4_DAYS;
@@ -148,11 +152,18 @@ public class CubeTestSetup {
BEFORE_4_DAYS_END = cal.getTime();
cal.add(Calendar.DAY_OF_MONTH, -2);
BEFORE_4_DAYS_START = cal.getTime();
+
+
+ THIS_YEAR_START = DateUtils.truncate(NOW, UpdatePeriod.YEARLY.calendarField());
+ THIS_YEAR_END = DateUtils.addYears(THIS_YEAR_START, 1);
TWO_DAYS_RANGE_BEFORE_4_DAYS =
"time_range_in(dt, '" + CubeTestSetup.getDateUptoHours(BEFORE_4_DAYS_START) + "','"
+ CubeTestSetup.getDateUptoHours(BEFORE_4_DAYS_END) + "')";
+
TWO_DAYS_RANGE = "time_range_in(dt, '" + getDateUptoHours(TWODAYS_BACK) + "','" + getDateUptoHours(NOW) + "')";
+ THIS_YEAR_RANGE =
+ "time_range_in(dt, '" + getDateUptoHours(THIS_YEAR_START) + "','" + getDateUptoHours(THIS_YEAR_END) + "')";
TWO_MONTHS_RANGE_UPTO_MONTH =
"time_range_in(dt, '" + getDateUptoMonth(TWO_MONTHS_BACK) + "','" + getDateUptoMonth(NOW) + "')";
TWO_MONTHS_RANGE_UPTO_HOURS =
@@ -1226,9 +1237,11 @@ public class CubeTestSetup {
s1.setPartCols(partCols);
s1.setTimePartCols(timePartCols);
storageAggregatePeriods.put(c1, updates);
+ storageAggregatePeriods.put(c3, updates);
Map<String, StorageTableDesc> storageTables = new HashMap<String, StorageTableDesc>();
storageTables.put(c1, s1);
+ storageTables.put(c3, s1);
// create cube fact
Map<String, String> properties = new HashMap<String, String>();
@@ -1247,7 +1260,7 @@ public class CubeTestSetup {
Map<String, Date> timeParts = new HashMap<String, Date>();
timeParts.put(TestCubeMetastoreClient.getDatePartitionKey(), temp);
StoragePartitionDesc sPartSpec = new StoragePartitionDesc(fact2.getName(), timeParts, null, UpdatePeriod.HOURLY);
- client.addPartition(sPartSpec, c1);
+ client.addPartition(sPartSpec, c3);
cal.add(Calendar.HOUR_OF_DAY, 1);
temp = cal.getTime();
}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java
index 71f328f..965ec94 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java
@@ -38,11 +38,19 @@ public class TestAggregateResolver extends TestQueryRewrite {
@BeforeTest
public void setupDriver() throws Exception {
conf = new Configuration();
- conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1,C2");
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
conf.setBoolean(CubeQueryConfUtil.DISABLE_AUTO_JOINS, true);
conf.setBoolean(CubeQueryConfUtil.ENABLE_SELECT_TO_GROUPBY, true);
conf.setBoolean(CubeQueryConfUtil.ENABLE_GROUP_BY_TO_SELECT, true);
}
+ private Configuration getConf() {
+ return new Configuration(conf);
+ }
+ private Configuration getConf(String storages) {
+ Configuration conf = getConf();
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, storages);
+ return conf;
+ }
private CubeQueryContext rewrittenQuery;
@@ -138,7 +146,7 @@ public class TestAggregateResolver extends TestQueryRewrite {
compareQueries(expected[i], hql);
}
aggregateFactSelectionTests(conf);
- rawFactSelectionTests(conf);
+ rawFactSelectionTests(getConf("C1,C2"));
}
@Test
@@ -192,7 +200,7 @@ public class TestAggregateResolver extends TestQueryRewrite {
@Test
public void testAggregateResolverOff() throws SemanticException, ParseException {
- Configuration conf2 = new Configuration(this.conf);
+ Configuration conf2 = getConf("C1,C2");
conf2.setBoolean(CubeQueryConfUtil.DISABLE_AGGREGATE_RESOLVER, true);
// Test if raw fact is selected for query with no aggregate function on a
@@ -207,8 +215,9 @@ public class TestAggregateResolver extends TestQueryRewrite {
getExpectedQuery(cubeName, "SELECT testcube.cityid," + " testCube.msr2 from ", null, null,
getWhereForHourly2days("c1_testfact2_raw"));
compareQueries(expectedQL, hQL);
-
+ conf2.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
aggregateFactSelectionTests(conf2);
+ conf2.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1,C2");
rawFactSelectionTests(conf2);
}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
index b85f60e..097f228 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
@@ -54,6 +54,21 @@ public class TestCubeRewriter extends TestQueryRewrite {
conf.setBoolean(CubeQueryConfUtil.DISABLE_AGGREGATE_RESOLVER, false);
return conf;
}
+ public Configuration getC1Conf() {
+ Configuration conf = getConf();
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1");
+ return conf;
+ }
+ public Configuration getC2Conf() {
+ Configuration conf = getConf();
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
+ return conf;
+ }
+ public Configuration getC3Conf() {
+ Configuration conf = getConf();
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C3");
+ return conf;
+ }
@Test
public void testQueryWithNow() throws Exception {
@@ -77,7 +92,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
@Test
public void testCubeQuery() throws Exception {
CubeQueryContext rewrittenQuery =
- rewriteCtx("cube select" + " SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getConf());
+ rewriteCtx("cube select" + " SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getC2Conf());
String expected =
getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
@@ -87,20 +102,40 @@ public class TestCubeRewriter extends TestQueryRewrite {
// Query with column life not in the range
SemanticException th = getSemanticExceptionInRewrite(
- "cube select SUM(newmeasure) from testCube" + " where " + TWO_DAYS_RANGE, getConf());
+ "cube select SUM(newmeasure) from testCube" + " where " + TWO_DAYS_RANGE, getC2Conf());
Assert.assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.NOT_AVAILABLE_IN_RANGE.getErrorCode());
}
@Test
+ public void testMaxCoveringFact() throws Exception {
+ Configuration conf = getConf();
+ conf.setClass(CubeQueryConfUtil.TIME_RANGE_WRITER_CLASS, AbridgedTimeRangeWriter.class, TimeRangeWriter.class);
+ conf.setBoolean(CubeQueryConfUtil.FAIL_QUERY_ON_PARTIAL_DATA, false);
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1,C2,C4");
+ CubeQueryContext cubeQueryContext =
+ rewriteCtx("cube select" + " SUM(msr2) from testCube where " + THIS_YEAR_RANGE, conf);
+ PruneCauses<CubeFactTable> pruneCause = cubeQueryContext.getFactPruningMsgs();
+ int lessDataCauses = 0;
+ for (Map.Entry<CubeFactTable, List<CandidateTablePruneCause>> entry : pruneCause.entrySet()) {
+ for (CandidateTablePruneCause cause : entry.getValue()) {
+ if (cause.getCause().equals(CandidateTablePruneCode.LESS_DATA)) {
+ lessDataCauses++;
+ }
+ }
+ }
+ Assert.assertTrue(lessDataCauses > 0);
+ }
+
+ @Test
public void testLightestFactFirst() throws Exception {
// testFact is lighter than testFact2.
- String hqlQuery = rewrite("cube select" + " SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getConf());
+ String hqlQuery = rewrite("cube select" + " SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getC2Conf());
String expected =
getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
- Configuration conf = getConf();
+ Configuration conf = getC1Conf();
conf.setBoolean(CubeQueryConfUtil.FAIL_QUERY_ON_PARTIAL_DATA, true);
hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, conf);
expected =
@@ -127,7 +162,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
@Test
public void testDerivedCube() throws SemanticException, ParseException {
CubeQueryContext rewrittenQuery =
- rewriteCtx("cube select" + " SUM(msr2) from derivedCube where " + TWO_DAYS_RANGE, getConf());
+ rewriteCtx("cube select" + " SUM(msr2) from derivedCube where " + TWO_DAYS_RANGE, getC2Conf());
String expected =
getExpectedQuery(CubeTestSetup.DERIVED_CUBE_NAME, "select sum(derivedCube.msr2) FROM ", null, null,
getWhereForDailyAndHourly2days(CubeTestSetup.DERIVED_CUBE_NAME, "C2_testfact"));
@@ -169,41 +204,43 @@ public class TestCubeRewriter extends TestQueryRewrite {
@Test
public void testCubeInsert() throws Exception {
+ Configuration conf = getConf();
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
String hqlQuery = rewrite("insert overwrite directory" + " '/tmp/test' select SUM(msr2) from testCube where "
- + TWO_DAYS_RANGE, getConf());
+ + TWO_DAYS_RANGE, conf);
String expected = "insert overwrite directory '/tmp/test' "
+ getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
hqlQuery = rewrite("insert overwrite directory" + " '/tmp/test' cube select SUM(msr2) from testCube where "
- + TWO_DAYS_RANGE, getConf());
+ + TWO_DAYS_RANGE, conf);
compareQueries(expected, hqlQuery);
hqlQuery = rewrite("insert overwrite local directory" + " '/tmp/test' select SUM(msr2) from testCube where "
- + TWO_DAYS_RANGE, getConf());
+ + TWO_DAYS_RANGE, conf);
expected = "insert overwrite local directory '/tmp/test' "
+ getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
hqlQuery = rewrite("insert overwrite local directory" + " '/tmp/test' cube select SUM(msr2) from testCube where "
- + TWO_DAYS_RANGE, getConf());
+ + TWO_DAYS_RANGE, conf);
compareQueries(expected, hqlQuery);
hqlQuery = rewrite("insert overwrite table temp" + " select SUM(msr2) from testCube where " + TWO_DAYS_RANGE,
- getConf());
+ conf);
expected = "insert overwrite table temp "
+ getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
hqlQuery = rewrite("insert overwrite table temp" + " cube select SUM(msr2) from testCube where " + TWO_DAYS_RANGE,
- getConf());
+ conf);
compareQueries(expected, hqlQuery);
}
- static void compareQueries(String expected, String actual) {
+ static void compareQueries(String actual, String expected) {
if (expected == null && actual == null) {
return;
} else if (expected == null) {
@@ -254,7 +291,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
@Test
public void testCubeWhereQuery() throws Exception {
String hqlQuery, expected;
- hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, getConf());
+ hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, getC2Conf());
expected =
getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
@@ -326,7 +363,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1,C2");
hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, conf);
expected =
- getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, getWhereForHourly2days("c2_testfact"));
+ getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, getWhereForHourly2days("c1_testfact2"));
compareQueries(expected, hqlQuery);
}
@@ -335,6 +372,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
Configuration conf = getConf();
conf.set(CubeQueryConfUtil.getValidStorageTablesKey("testfact"), "C1_testFact,C2_testFact");
conf.set(CubeQueryConfUtil.getValidUpdatePeriodsKey("testfact", "C1"), "DAILY");
+ conf.set(CubeQueryConfUtil.getValidUpdatePeriodsKey("testfact2", "C1"), "YEARLY");
conf.set(CubeQueryConfUtil.getValidUpdatePeriodsKey("testfact", "C2"), "HOURLY");
String hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, conf);
@@ -373,6 +411,8 @@ public class TestCubeRewriter extends TestQueryRewrite {
conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "");
conf.set(CubeQueryConfUtil.getValidStorageTablesKey("testfact"), "");
conf.set(CubeQueryConfUtil.getValidUpdatePeriodsKey("testfact", "C1"), "HOURLY");
+ conf.set(CubeQueryConfUtil.getValidUpdatePeriodsKey("testfact2", "C1"), "YEARLY");
+ conf.set(CubeQueryConfUtil.getValidUpdatePeriodsKey("testfact2_raw", "C3"), "YEARLY");
conf.set(CubeQueryConfUtil.getValidUpdatePeriodsKey("testfact", "C2"), "DAILY");
conf.set(CubeQueryConfUtil.getValidUpdatePeriodsKey("testfact", "C3"), "MONTHLY");
@@ -387,7 +427,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
getWhereForMonthlyDailyAndHourly2months("c1_testfact", "c2_testfact", "c3_testFact"));
}
- compareQueries(expected, hqlQuery);
+ compareQueries(hqlQuery, expected);
// monthly - c1,c2; daily - c1, hourly -c2
conf.set(CubeQueryConfUtil.getValidStorageTablesKey("testfact"), "C1_testFact,C2_testFact");
@@ -396,8 +436,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
try {
hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_MONTHS_RANGE_UPTO_HOURS, conf);
System.out.println("union query:" + hqlQuery);
- // TODO: uncomment the following once union query
- // rewriting has been done
+ // TODO: uncomment the following once union query rewriting has been done
// expected = getExpectedQuery(cubeName,
// "select sum(testcube.msr2) FROM ", null, null,
// getWhereForMonthlyDailyAndHourly2months("C1_testfact"));
@@ -419,12 +458,10 @@ public class TestCubeRewriter extends TestQueryRewrite {
+ TWO_DAYS_RANGE, conf);
expected =
getExpectedQuery(cubeName, "select countrydim.name, sum(testcube.msr2)" + " FROM ", " JOIN " + getDbName()
- + "c3_statetable_partitioned statedim ON" + " testCube.stateid = statedim.id and statedim.dt = 'latest' JOIN "
- + getDbName()
- + "c3_countrytable_partitioned countrydim on statedim.countryid=countrydim.id and countrydim.dt='latest'",
+ + "c3_countrytable_partitioned countrydim on testcube.countryid=countrydim.id and countrydim.dt='latest'",
"countrydim.region='asia'",
" group by countrydim.name ", null,
- getWhereForDailyAndHourly2days(cubeName, "C3_testfact"));
+ getWhereForHourly2days(cubeName, "C3_testfact2_raw"));
compareQueries(hql, expected);
hql = rewrite(
"select statedim.name, statedim.countryid, msr2 from" + " testCube" + " where statedim.countryid = 5 and "
@@ -435,32 +472,34 @@ public class TestCubeRewriter extends TestQueryRewrite {
+ "c3_statetable_partitioned statedim ON" + " testCube.stateid = statedim.id and statedim.dt = 'latest'",
"statedim.countryid=5",
" group by statedim.name, statedim.countryid", null,
- getWhereForDailyAndHourly2days(cubeName, "C3_testfact"));
+ getWhereForHourly2days(cubeName, "C3_testfact2_raw"));
compareQueries(hql, expected);
}
@Test
public void testCubeJoinQuery() throws Exception {
// q1
+ Configuration conf = getConf();
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
String hqlQuery =
rewrite("select SUM(msr2) from testCube" + " join citydim on testCube.cityid = citydim.id" + " where "
- + TWO_DAYS_RANGE, getConf());
+ + TWO_DAYS_RANGE, conf);
List<String> joinWhereConds = new ArrayList<String>();
- joinWhereConds.add(StorageUtil.getWherePartClause("dt", "citydim", StorageConstants.getPartitionsForLatest()));
+// joinWhereConds.add(StorageUtil.getWherePartClause("dt", "citydim", StorageConstants.getPartitionsForLatest()));
String expected =
getExpectedQuery(cubeName, "select sum(testcube.msr2)" + " FROM ", " INNER JOIN " + getDbName()
- + "c1_citytable citydim ON" + " testCube.cityid = citydim.id", null, null, joinWhereConds,
+ + "c2_citytable citydim ON" + " testCube.cityid = citydim.id", null, null, joinWhereConds,
getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
hqlQuery =
rewrite("select SUM(msr2) from testCube" + " join citydim on cityid = citydim.id" + " where " + TWO_DAYS_RANGE,
- getConf());
+ conf);
compareQueries(expected, hqlQuery);
hqlQuery =
rewrite("select SUM(msr2) from testCube" + " join citydim on cityid = id" + " where " + TWO_DAYS_RANGE,
- getConf());
+ getC2Conf());
compareQueries(expected, hqlQuery);
// q2
@@ -477,7 +516,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
+ "c1_statetable statedim" + " ON statedim.id = citydim.stateid AND "
+ "(statedim.dt = 'latest') RIGHT OUTER JOIN " + getDbName() + "c1_ziptable"
+ " zipdim ON citydim.zipcode = zipdim.code", null, " group by" + " statedim.name ", joinWhereConds,
- getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
+ getWhereForHourly2days(cubeName, "C1_testfact2"));
compareQueries(expected, hqlQuery);
// q3
@@ -493,7 +532,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
+ "c1_citytable ct ON" + " tc.cityid = ct.id LEFT OUTER JOIN " + getDbName() + "c1_statetable st"
+ " ON st.id = ct.stateid and (st.dt = 'latest') " + "RIGHT OUTER JOIN " + getDbName() + "c1_ziptable"
+ " zt ON ct.zipcode = zt.code", null, " group by" + " st.name ", joinWhereConds,
- getWhereForDailyAndHourly2days("tc", "C2_testfact"));
+ getWhereForHourly2days("tc", "C1_testfact2"));
compareQueries(expected, hqlQuery);
// q4
@@ -506,7 +545,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
+ getDbName() + "c1_citytable citydim ON" + " testCube.cityid = citydim.id and (citydim.dt = 'latest') "
+ " LEFT OUTER JOIN " + getDbName() + "c1_ziptable" + " zipdim ON citydim.zipcode = zipdim.code AND "
+ "(zipdim.dt = 'latest')", null, " group by" + " citydim.name ", null,
- getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
+ getWhereForHourly2days(cubeName, "C1_testfact2"));
compareQueries(expected, hqlQuery);
hqlQuery =
@@ -527,8 +566,10 @@ public class TestCubeRewriter extends TestQueryRewrite {
@Test
public void testCubeGroupbyWithConstantProjected() throws Exception {
// check constants
+ Configuration conf = getConf();
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
String hqlQuery1 = rewrite("select cityid, 99, \"placeHolder\", -1001, SUM(msr2) from testCube" + " where "
- + TWO_DAYS_RANGE, getConf());
+ + TWO_DAYS_RANGE, conf);
String expected1 = getExpectedQuery(cubeName, "select testcube.cityid, 99, \"placeHolder\", -1001,"
+ " sum(testcube.msr2) FROM ", null, " group by testcube.cityid ",
getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
@@ -537,7 +578,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
// check constants with expression
String hqlQuery2 = rewrite(
"select cityid, case when stateid = 'za' then \"Not Available\" end, 99, \"placeHolder\", -1001, "
- + "SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, getConf());
+ + "SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, conf);
String expected2 = getExpectedQuery(cubeName,
"select testcube.cityid, case when testcube.stateid = 'za' then \"Not Available\" end, 99, \"placeHolder\","
+ " -1001, sum(testcube.msr2) FROM ", null,
@@ -549,7 +590,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
String hqlQuery3 = rewrite(
"select cityid,stateid + 99, 44 + stateid, stateid - 33, 999 - stateid, TRUE, FALSE, round(123.4567,2), "
+ "case when stateid='za' then 99 else -1001 end, "
- + "SUM(msr2), SUM(msr2 + 39), SUM(msr2) + 567 from testCube" + " where " + TWO_DAYS_RANGE, getConf());
+ + "SUM(msr2), SUM(msr2 + 39), SUM(msr2) + 567 from testCube" + " where " + TWO_DAYS_RANGE, conf);
String expected3 = getExpectedQuery(
cubeName,
"select testcube.cityid, testcube.stateid + 99, 44 + testcube.stateid, testcube.stateid - 33,"
@@ -566,36 +607,38 @@ public class TestCubeRewriter extends TestQueryRewrite {
@Test
public void testCubeGroupbyQuery() throws Exception {
+ Configuration conf = getConf();
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
String hqlQuery =
rewrite("select name, SUM(msr2) from" + " testCube join citydim on testCube.cityid = citydim.id where "
- + TWO_DAYS_RANGE, getConf());
+ + TWO_DAYS_RANGE, conf);
List<String> joinWhereConds = new ArrayList<String>();
- joinWhereConds.add(StorageUtil.getWherePartClause("dt", "citydim", StorageConstants.getPartitionsForLatest()));
+// joinWhereConds.add(StorageUtil.getWherePartClause("dt", "citydim", StorageConstants.getPartitionsForLatest()));
String expected =
getExpectedQuery(cubeName, "select citydim.name," + " sum(testcube.msr2) FROM ", "INNER JOIN " + getDbName()
- + "c1_citytable citydim ON" + " testCube.cityid = citydim.id", null, " group by citydim.name ",
+ + "c2_citytable citydim ON" + " testCube.cityid = citydim.id", null, " group by citydim.name ",
joinWhereConds, getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
hqlQuery =
rewrite("select SUM(msr2) from testCube" + " join citydim on testCube.cityid = citydim.id" + " where "
- + TWO_DAYS_RANGE + " group by name", getConf());
+ + TWO_DAYS_RANGE + " group by name", conf);
compareQueries(expected, hqlQuery);
- hqlQuery = rewrite("select cityid, SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, getConf());
+ hqlQuery = rewrite("select cityid, SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, conf);
expected =
getExpectedQuery(cubeName, "select testcube.cityid," + " sum(testcube.msr2) FROM ", null,
" group by testcube.cityid ", getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
- hqlQuery = rewrite("select round(cityid), SUM(msr2) from" + " testCube where " + TWO_DAYS_RANGE, getConf());
+ hqlQuery = rewrite("select round(cityid), SUM(msr2) from" + " testCube where " + TWO_DAYS_RANGE, conf);
expected =
getExpectedQuery(cubeName, "select round(testcube.cityid)," + " sum(testcube.msr2) FROM ", null,
" group by round(testcube.cityid) ", getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
hqlQuery =
- rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE + "group by round(zipcode)", getConf());
+ rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE + "group by round(zipcode)", conf);
expected =
getExpectedQuery(cubeName, "select round(testcube.zipcode)," + " sum(testcube.msr2) FROM ", null,
" group by round(testcube.zipcode) ", getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
@@ -603,13 +646,13 @@ public class TestCubeRewriter extends TestQueryRewrite {
hqlQuery =
rewrite("select round(cityid), SUM(msr2) from" + " testCube where " + TWO_DAYS_RANGE + " group by zipcode",
- getConf());
+ conf);
expected =
getExpectedQuery(cubeName, "select " + " round(testcube.cityid), sum(testcube.msr2) FROM ", null,
" group by testcube.zipcode", getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
- hqlQuery = rewrite("select round(cityid), SUM(msr2) from" + " testCube where " + TWO_DAYS_RANGE, getConf());
+ hqlQuery = rewrite("select round(cityid), SUM(msr2) from" + " testCube where " + TWO_DAYS_RANGE, conf);
expected =
getExpectedQuery(cubeName, "select " + " round(testcube.cityid), sum(testcube.msr2) FROM ", null,
" group by round(testcube.cityid)", getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
@@ -617,21 +660,21 @@ public class TestCubeRewriter extends TestQueryRewrite {
hqlQuery =
rewrite("select cityid, SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE + " group by round(zipcode)",
- getConf());
+ conf);
expected =
getExpectedQuery(cubeName, "select " + " testcube.cityid, sum(testcube.msr2) FROM ", null,
" group by round(testcube.zipcode)", getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
hqlQuery =
- rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE + " group by round(zipcode)", getConf());
+ rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE + " group by round(zipcode)", conf);
expected =
getExpectedQuery(cubeName, "select round(testcube.zipcode)," + " sum(testcube.msr2) FROM ", null,
" group by round(testcube.zipcode)", getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
hqlQuery =
- rewrite("select cityid, msr2 from testCube" + " where " + TWO_DAYS_RANGE + " group by round(zipcode)", getConf());
+ rewrite("select cityid, msr2 from testCube" + " where " + TWO_DAYS_RANGE + " group by round(zipcode)", conf);
expected =
getExpectedQuery(cubeName, "select " + " testcube.cityid, sum(testcube.msr2) FROM ", null,
" group by round(testcube.zipcode)", getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
@@ -639,15 +682,15 @@ public class TestCubeRewriter extends TestQueryRewrite {
hqlQuery =
rewrite("select round(zipcode) rzc," + " msr2 from testCube where " + TWO_DAYS_RANGE + " group by zipcode"
- + " order by rzc", getConf());
+ + " order by rzc", conf);
expected =
getExpectedQuery(cubeName, "select round(testcube.zipcode) rzc," + " sum(testcube.msr2) FROM ", null,
" group by testcube.zipcode order by rzc asc", getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
// rewrite with expressions
- Configuration conf = getConf();
conf.setBoolean(CubeQueryConfUtil.DISABLE_AUTO_JOINS, false);
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1, C2");
hqlQuery =
rewrite("SELECT citydim.name AS g1," + " CASE WHEN citydim.name=='NULL' THEN 'NULL' "
+ " WHEN citydim.name=='X' THEN 'X-NAME' " + " WHEN citydim.name=='Y' THEN 'Y-NAME' "
@@ -785,11 +828,11 @@ public class TestCubeRewriter extends TestQueryRewrite {
+ " on testCube.cityid = citydim.id where " + LAST_HOUR_TIME_RANGE;
String expectedRewrittenQuery = "SELECT ( citydim . name ) as `Alias With Spaces` , sum(( testcube . msr2 )) "
- + "testmeasure FROM TestQueryRewrite.c2_testfact testcube inner JOIN TestQueryRewrite.c1_citytable citydim ON "
+ + "testmeasure FROM TestQueryRewrite.c2_testfact testcube inner JOIN TestQueryRewrite.c2_citytable citydim ON "
+ "(( testcube . cityid ) = ( citydim . id )) WHERE (((( testcube . dt ) = '"
- + CubeTestSetup.getDateUptoHours(LAST_HOUR) + "' ) AND ((citydim.dt = 'latest')))) GROUP BY ( citydim . name )";
+ + CubeTestSetup.getDateUptoHours(LAST_HOUR) + "' ))) GROUP BY ( citydim . name )";
- String actualRewrittenQuery = rewrite(inputQuery, getConf());
+ String actualRewrittenQuery = rewrite(inputQuery, getC2Conf());
Assert.assertEquals(actualRewrittenQuery, expectedRewrittenQuery);
}
@@ -802,42 +845,42 @@ public class TestCubeRewriter extends TestQueryRewrite {
+ " on testCube.cityid = citydim.id where " + LAST_HOUR_TIME_RANGE;
String expectedRewrittenQuery = "SELECT ( citydim . name ) as `Alias With Spaces` , sum(( testcube . msr2 )) "
- + "testmeasure FROM TestQueryRewrite.c2_testfact testcube inner JOIN TestQueryRewrite.c1_citytable citydim ON "
+ + "testmeasure FROM TestQueryRewrite.c2_testfact testcube inner JOIN TestQueryRewrite.c2_citytable citydim ON "
+ "(( testcube . cityid ) = ( citydim . id )) WHERE (((( testcube . dt ) = '"
- + CubeTestSetup.getDateUptoHours(LAST_HOUR) + "' ) AND ((citydim.dt = 'latest')))) GROUP BY ( citydim . name )";
+ + CubeTestSetup.getDateUptoHours(LAST_HOUR) + "' ))) GROUP BY ( citydim . name )";
- String actualRewrittenQuery = rewrite(inputQuery, getConf());
+ String actualRewrittenQuery = rewrite(inputQuery, getC2Conf());
Assert.assertEquals(actualRewrittenQuery, expectedRewrittenQuery);
}
@Test
public void testCubeQueryWithAilas() throws Exception {
- String hqlQuery = rewrite("select SUM(msr2) m2 from" + " testCube where " + TWO_DAYS_RANGE, getConf());
+ String hqlQuery = rewrite("select SUM(msr2) m2 from" + " testCube where " + TWO_DAYS_RANGE, getC2Conf());
String expected =
getExpectedQuery(cubeName, "select sum(testcube.msr2)" + " m2 FROM ", null, null,
getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
- hqlQuery = rewrite("select SUM(msr2) from testCube mycube" + " where " + TWO_DAYS_RANGE, getConf());
+ hqlQuery = rewrite("select SUM(msr2) from testCube mycube" + " where " + TWO_DAYS_RANGE, getC2Conf());
expected =
getExpectedQuery("mycube", "select sum(mycube.msr2) FROM ", null, null,
getWhereForDailyAndHourly2days("mycube", "C2_testfact"));
compareQueries(expected, hqlQuery);
- hqlQuery = rewrite("select SUM(testCube.msr2) from testCube" + " where " + TWO_DAYS_RANGE, getConf());
+ hqlQuery = rewrite("select SUM(testCube.msr2) from testCube" + " where " + TWO_DAYS_RANGE, getC2Conf());
expected =
getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, hqlQuery);
- hqlQuery = rewrite("select mycube.msr2 m2 from testCube" + " mycube where " + TWO_DAYS_RANGE, getConf());
+ hqlQuery = rewrite("select mycube.msr2 m2 from testCube" + " mycube where " + TWO_DAYS_RANGE, getC2Conf());
expected =
getExpectedQuery("mycube", "select sum(mycube.msr2) m2 FROM ", null, null,
getWhereForDailyAndHourly2days("mycube", "C2_testfact"));
compareQueries(expected, hqlQuery);
- hqlQuery = rewrite("select testCube.msr2 m2 from testCube" + " where " + TWO_DAYS_RANGE, getConf());
+ hqlQuery = rewrite("select testCube.msr2 m2 from testCube" + " where " + TWO_DAYS_RANGE, getC2Conf());
expected =
getExpectedQuery(cubeName, "select sum(testcube.msr2) m2 FROM ", null, null,
getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
@@ -846,7 +889,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
@Test
public void testCubeWhereQueryForMonth() throws Exception {
- String hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_MONTHS_RANGE_UPTO_HOURS, getConf());
+ String hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_MONTHS_RANGE_UPTO_HOURS, getC2Conf());
String expected =
getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
getWhereForMonthlyDailyAndHourly2months("C2_testfact"));
@@ -892,7 +935,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
public void testCubeWhereQueryForMonthUptoMonths() throws Exception {
// this should consider only two month partitions.
String hqlQuery = rewrite("select cityid, SUM(msr2) from testCube" + " where " + TWO_MONTHS_RANGE_UPTO_MONTH,
- getConf());
+ getC2Conf());
String expected =
getExpectedQuery(cubeName, "select testcube.cityid," + " sum(testcube.msr2) FROM ", null,
"group by testcube.cityid", getWhereForMonthly2months("c2_testfact"));
@@ -1086,9 +1129,10 @@ public class TestCubeRewriter extends TestQueryRewrite {
+ " sum(testCube.msr2 < 1000) orderby testCube.cityid asc",
getWhereForDailyAndHourly2days(cubeName, "C2_testfact")),
};
-
+ Configuration conf = getConf();
+ conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
for (int i = 0; i < queries.length; i++) {
- String hql = rewrite(queries[i], getConf());
+ String hql = rewrite(queries[i], conf);
compareQueries(expectedQueries[i], hql);
}
}
@@ -1096,14 +1140,14 @@ public class TestCubeRewriter extends TestQueryRewrite {
@Test
public void testFactsWithInvalidColumns() throws Exception {
String hqlQuery = rewrite("select dim1, max(msr3)," + " msr2 from testCube" + " where " + TWO_DAYS_RANGE,
- getConf());
+ getC1Conf());
String expected =
getExpectedQuery(cubeName, "select testcube.dim1, max(testcube.msr3), sum(testcube.msr2) FROM ", null,
" group by testcube.dim1", getWhereForDailyAndHourly2days(cubeName, "C1_summary1"));
compareQueries(expected, hqlQuery);
hqlQuery =
rewrite("select dim1, dim2, COUNT(msr4)," + " SUM(msr2), msr3 from testCube" + " where " + TWO_DAYS_RANGE,
- getConf());
+ getC1Conf());
expected =
getExpectedQuery(cubeName, "select testcube.dim1, testcube,dim2, count(testcube.msr4),"
+ " sum(testcube.msr2), max(testcube.msr3) FROM ", null, " group by testcube.dim1, testcube.dim2",
@@ -1111,7 +1155,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
compareQueries(expected, hqlQuery);
hqlQuery =
rewrite("select dim1, dim2, cityid, msr4," + " SUM(msr2), msr3 from testCube" + " where " + TWO_DAYS_RANGE,
- getConf());
+ getC1Conf());
expected =
getExpectedQuery(cubeName, "select testcube.dim1, testcube,dim2, testcube.cityid,"
+ " count(testcube.msr4), sum(testcube.msr2), max(testcube.msr3) FROM ", null,
@@ -1264,7 +1308,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
public void testCubeQueryWithMultipleRanges() throws Exception {
String hqlQuery =
rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE + " OR "
- + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getConf());
+ + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getC2Conf());
String expectedRangeWhere =
getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "dt", TWODAYS_BACK, NOW)
@@ -1276,14 +1320,14 @@ public class TestCubeRewriter extends TestQueryRewrite {
compareQueries(expected, hqlQuery);
hqlQuery =
rewrite("select dim1, max(msr3)," + " msr2 from testCube" + " where " + TWO_DAYS_RANGE + " OR "
- + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getConf());
+ + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getC1Conf());
expected =
getExpectedQuery(cubeName, "select testcube.dim1, max(testcube.msr3), sum(testcube.msr2) FROM ", null,
" group by testcube.dim1", expectedRangeWhere, "C1_summary1");
compareQueries(expected, hqlQuery);
hqlQuery =
rewrite("select dim1, dim2, COUNT(msr4)," + " SUM(msr2), msr3 from testCube" + " where " + TWO_DAYS_RANGE
- + " OR " + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getConf());
+ + " OR " + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getC1Conf());
expected =
getExpectedQuery(cubeName, "select testcube.dim1, testcube,dim2, count(testcube.msr4),"
+ " sum(testcube.msr2), max(testcube.msr3) FROM ", null, " group by testcube.dim1, testcube.dim2",
@@ -1291,7 +1335,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
compareQueries(expected, hqlQuery);
hqlQuery =
rewrite("select dim1, dim2, cityid, count(msr4)," + " SUM(msr2), msr3 from testCube" + " where " + TWO_DAYS_RANGE
- + " OR " + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getConf());
+ + " OR " + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getC1Conf());
expected =
getExpectedQuery(cubeName, "select testcube.dim1, testcube,dim2, testcube.cityid,"
+ " count(testcube.msr4), sum(testcube.msr2), max(testcube.msr3) FROM ", null,
@@ -1324,7 +1368,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
"SELECT SUM(msr2) from testCube left outer join citydim c1 on testCube.cityid = c1.id"
+ " left outer join statedim s1 on c1.stateid = s1.id"
+ " left outer join citydim c2 on s1.countryid = c2.id where " + TWO_DAYS_RANGE;
- Configuration conf = getConf();
+ Configuration conf = getC1Conf();
conf.setBoolean(CubeQueryConfUtil.DISABLE_AUTO_JOINS, true);
String hqlQuery = rewrite(cubeQl, conf);
String db = getDbName();
@@ -1336,8 +1380,8 @@ public class TestCubeRewriter extends TestQueryRewrite {
String expected =
getExpectedQuery(cubeName, "select sum(testcube.msr2)" + " FROM ", expectedJoin, null, null, null,
- getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
- compareQueries(expected, hqlQuery);
+ getWhereForHourly2days(cubeName, "C1_testfact2"));
+ compareQueries(hqlQuery, expected);
}
@Test
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDateUtil.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDateUtil.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDateUtil.java
index 9efd1f7..3df704d 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDateUtil.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDateUtil.java
@@ -18,16 +18,23 @@
*/
package org.apache.lens.cube.parse;
-import static org.apache.lens.cube.parse.DateUtil.resolveDate;
+import static org.apache.lens.cube.metadata.UpdatePeriod.*;
+import static org.apache.lens.cube.parse.DateUtil.*;
+import static org.apache.commons.lang.time.DateUtils.addMilliseconds;
+
+import static org.testng.Assert.assertEquals;
+
+import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
+import org.apache.lens.cube.parse.DateUtil.*;
+
import org.apache.commons.lang.time.DateUtils;
-import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
@@ -43,6 +50,15 @@ public class TestDateUtil {
};
public static final SimpleDateFormat DATE_FMT = new SimpleDateFormat("yyyy-MMM-dd");
+ public static final String ABS_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss:SSS";
+
+ public static final ThreadLocal<DateFormat> ABS_DATE_PARSER =
+ new ThreadLocal<DateFormat>() {
+ @Override
+ protected SimpleDateFormat initialValue() {
+ return new SimpleDateFormat(ABS_DATE_FORMAT);
+ }
+ };
private Date[] pairs;
@@ -61,121 +77,121 @@ public class TestDateUtil {
@Test
public void testMonthsBetween() throws Exception {
int i = 0;
- Assert.assertEquals(DateUtil.getMonthlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], Calendar.MONTH)),
- new DateUtil.CoveringInfo(1, true),
+ assertEquals(getMonthlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], Calendar.MONTH)),
+ new CoveringInfo(1, true),
"2013-Jan-01 to 2013-Jan-31");
i += 2;
- Assert.assertEquals(DateUtil.getMonthlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], Calendar.MONTH)),
- new DateUtil.CoveringInfo(5, true),
+ assertEquals(getMonthlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], Calendar.MONTH)),
+ new CoveringInfo(5, true),
"2013-Jan-01 to 2013-May-31");
i += 2;
- Assert.assertEquals(DateUtil.getMonthlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], Calendar.MONTH)),
- new DateUtil.CoveringInfo(12, true),
+ assertEquals(getMonthlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], Calendar.MONTH)),
+ new CoveringInfo(12, true),
"2013-Jan-01 to 2013-Dec-31");
i += 2;
- Assert.assertEquals(DateUtil.getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(2, false),
+ assertEquals(getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(2, false),
"2013-Feb-01 to 2013-Apr-25");
i += 2;
- Assert.assertEquals(DateUtil.getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(12, true),
+ assertEquals(getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(12, true),
"2012-Feb-01 to 2013-Feb-01");
i += 2;
- Assert.assertEquals(DateUtil.getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(24, true),
+ assertEquals(getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(24, true),
"2011-Feb-01 to 2013-Feb-01");
i += 2;
- Assert.assertEquals(DateUtil.getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(0, false),
+ assertEquals(getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
"2013-Jan-02 to 2013-Feb-02");
i += 2;
- Assert.assertEquals(DateUtil.getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(1, false),
+ assertEquals(getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(1, false),
"2013-Jan-02 to 2013-Mar-02");
}
@Test
public void testQuartersBetween() throws Exception {
int i = 0;
- Assert.assertEquals(DateUtil.getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(0, false),
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
"2013-Jan-01 to 2013-Jan-31");
i += 2;
- Assert.assertEquals(DateUtil.getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(1, false),
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(1, false),
"2013-Jan-01 to 2013-May-31");
i += 2;
- Assert.assertEquals(DateUtil.getQuarterlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], Calendar.MONTH)),
- new DateUtil.CoveringInfo(4, true),
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], Calendar.MONTH)),
+ new CoveringInfo(4, true),
"2013-Jan-01 to 2013-Dec-31");
i += 2;
- Assert.assertEquals(DateUtil.getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(0, false),
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
"2013-Feb-01 to 2013-Apr-25");
i += 2;
- Assert.assertEquals(DateUtil.getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(3, false),
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(3, false),
"2012-Feb-01 to 2013-Feb-01");
i += 2;
- Assert.assertEquals(DateUtil.getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(7, false),
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(7, false),
"2011-Feb-01 to 2013-Feb-01");
}
@Test
public void testYearsBetween() throws Exception {
int i = 0;
- Assert.assertEquals(DateUtil.getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(0, false),
+ assertEquals(getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
"" + pairs[i] + "->" + pairs[i + 1]);
i += 2;
- Assert.assertEquals(DateUtil.getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(0, false),
+ assertEquals(getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
"" + pairs[i] + "->" + pairs[i + 1]);
i += 2;
- Assert.assertEquals(DateUtil.getYearlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], Calendar.MONTH)),
- new DateUtil.CoveringInfo(1, true), ""
+ assertEquals(getYearlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], Calendar.MONTH)),
+ new CoveringInfo(1, true), ""
+ pairs[i] + "->" + pairs[i + 1]);
i += 2;
- Assert.assertEquals(DateUtil.getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(0, false),
+ assertEquals(getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
"" + pairs[i] + "->" + pairs[i + 1]);
i += 2;
- Assert.assertEquals(DateUtil.getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(0, false),
+ assertEquals(getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
"" + pairs[i] + "->" + pairs[i + 1]);
i += 2;
- Assert.assertEquals(DateUtil.getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new DateUtil.CoveringInfo(1, false),
+ assertEquals(getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(1, false),
"" + pairs[i] + "->" + pairs[i + 1]);
}
@Test
public void testWeeksBetween() throws Exception {
- DateUtil.CoveringInfo weeks;
+ CoveringInfo weeks;
- weeks = DateUtil.getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-26"), DATE_FMT.parse("2013-Jun-2"));
- Assert.assertEquals(weeks, new DateUtil.CoveringInfo(1, true), "2013-May-26 to 2013-Jun-2");
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-26"), DATE_FMT.parse("2013-Jun-2"));
+ assertEquals(weeks, new CoveringInfo(1, true), "2013-May-26 to 2013-Jun-2");
- weeks = DateUtil.getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-27"), DATE_FMT.parse("2013-Jun-3"));
- Assert.assertEquals(weeks, new DateUtil.CoveringInfo(0, false), "2013-May-26 to 2013-Jun-2");
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-27"), DATE_FMT.parse("2013-Jun-3"));
+ assertEquals(weeks, new CoveringInfo(0, false), "2013-May-26 to 2013-Jun-2");
- weeks = DateUtil.getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-27"), DATE_FMT.parse("2013-Jun-9"));
- Assert.assertEquals(weeks, new DateUtil.CoveringInfo(1, false), "2013-May-26 to 2013-Jun-2");
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-27"), DATE_FMT.parse("2013-Jun-9"));
+ assertEquals(weeks, new CoveringInfo(1, false), "2013-May-26 to 2013-Jun-2");
- weeks = DateUtil.getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-27"), DATE_FMT.parse("2013-Jun-1"));
- Assert.assertEquals(weeks, new DateUtil.CoveringInfo(0, false), "2013-May-27 to 2013-Jun-1");
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-27"), DATE_FMT.parse("2013-Jun-1"));
+ assertEquals(weeks, new CoveringInfo(0, false), "2013-May-27 to 2013-Jun-1");
- weeks = DateUtil.getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-25"), DATE_FMT.parse("2013-Jun-2"));
- Assert.assertEquals(weeks, new DateUtil.CoveringInfo(1, false), "2013-May-25 to 2013-Jun-1");
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-25"), DATE_FMT.parse("2013-Jun-2"));
+ assertEquals(weeks, new CoveringInfo(1, false), "2013-May-25 to 2013-Jun-1");
- weeks = DateUtil.getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-26"), DATE_FMT.parse("2013-Jun-9"));
- Assert.assertEquals(weeks, new DateUtil.CoveringInfo(2, true), "2013-May-26 to 2013-Jun-8");
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-26"), DATE_FMT.parse("2013-Jun-9"));
+ assertEquals(weeks, new CoveringInfo(2, true), "2013-May-26 to 2013-Jun-8");
- weeks = DateUtil.getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-26"), DATE_FMT.parse("2013-Jun-10"));
- Assert.assertEquals(weeks, new DateUtil.CoveringInfo(2, false), "2013-May-26 to 2013-Jun-10");
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-26"), DATE_FMT.parse("2013-Jun-10"));
+ assertEquals(weeks, new CoveringInfo(2, false), "2013-May-26 to 2013-Jun-10");
}
@Test
@@ -189,22 +205,45 @@ public class TestDateUtil {
System.out.print("@@ testDateStr=" + testDateStr + " parsed date=" + testDate);
// Tests without a diff, just resolve now with different granularity
- Assert.assertEquals(testDateStr, sdf.format(resolveDate("now", testDate)));
- Assert.assertEquals("2014/01/01-00.00.00.000", sdf.format(resolveDate("now.year", testDate)));
- Assert.assertEquals("2014/09/01-00.00.00.000", sdf.format(resolveDate("now.month", testDate)));
+ assertEquals(testDateStr, sdf.format(resolveDate("now", testDate)));
+ assertEquals("2014/01/01-00.00.00.000", sdf.format(resolveDate("now.year", testDate)));
+ assertEquals("2014/09/01-00.00.00.000", sdf.format(resolveDate("now.month", testDate)));
// Start of week resolves to Sunday
- Assert.assertEquals("2014/09/21-00.00.00.000", sdf.format(resolveDate("now.week", testDate)));
- Assert.assertEquals("2014/09/23-00.00.00.000", sdf.format(resolveDate("now.day", testDate)));
- Assert.assertEquals("2014/09/23-12.00.00.000", sdf.format(resolveDate("now.hour", testDate)));
- Assert.assertEquals("2014/09/23-12.02.00.000", sdf.format(resolveDate("now.minute", testDate)));
- Assert.assertEquals("2014/09/23-12.02.05.000", sdf.format(resolveDate("now.second", testDate)));
+ assertEquals("2014/09/21-00.00.00.000", sdf.format(resolveDate("now.week", testDate)));
+ assertEquals("2014/09/23-00.00.00.000", sdf.format(resolveDate("now.day", testDate)));
+ assertEquals("2014/09/23-12.00.00.000", sdf.format(resolveDate("now.hour", testDate)));
+ assertEquals("2014/09/23-12.02.00.000", sdf.format(resolveDate("now.minute", testDate)));
+ assertEquals("2014/09/23-12.02.05.000", sdf.format(resolveDate("now.second", testDate)));
// Tests with a diff
- Assert.assertEquals("2014/09/22-00.00.00.000", sdf.format(resolveDate("now.day -1day", testDate)));
- Assert.assertEquals("2014/09/23-10.00.00.000", sdf.format(resolveDate("now.hour -2hour", testDate)));
- Assert.assertEquals("2014/09/24-12.00.00.000", sdf.format(resolveDate("now.hour +24hour", testDate)));
- Assert.assertEquals("2015/01/01-00.00.00.000", sdf.format(resolveDate("now.year +1year", testDate)));
- Assert.assertEquals("2014/02/01-00.00.00.000", sdf.format(resolveDate("now.year +1month", testDate)));
+ assertEquals("2014/09/22-00.00.00.000", sdf.format(resolveDate("now.day -1day", testDate)));
+ assertEquals("2014/09/23-10.00.00.000", sdf.format(resolveDate("now.hour -2hour", testDate)));
+ assertEquals("2014/09/24-12.00.00.000", sdf.format(resolveDate("now.hour +24hour", testDate)));
+ assertEquals("2015/01/01-00.00.00.000", sdf.format(resolveDate("now.year +1year", testDate)));
+ assertEquals("2014/02/01-00.00.00.000", sdf.format(resolveDate("now.year +1month", testDate)));
}
+ @Test
+ public void testFloorDate() throws ParseException {
+ Date date = ABS_DATE_PARSER.get().parse("2015-01-01T00:00:00:000Z");
+ Date curDate = date;
+ for (int i = 0; i < 284; i++) {
+ assertEquals(getFloorDate(curDate, YEARLY), date);
+ curDate = addMilliseconds(curDate, 111111111);
+ }
+ assertEquals(getFloorDate(curDate, YEARLY), DateUtils.addYears(date, 1));
+ assertEquals(getFloorDate(date, WEEKLY), ABS_DATE_PARSER.get().parse("2014-12-28T00:00:00:000Z"));
+ }
+
+ @Test
+ public void testCeilDate() throws ParseException {
+ Date date = ABS_DATE_PARSER.get().parse("2015-12-26T06:30:15:040Z");
+ assertEquals(getCeilDate(date, YEARLY), ABS_DATE_PARSER.get().parse("2016-01-01T00:00:00:000Z"));
+ assertEquals(getCeilDate(date, MONTHLY), ABS_DATE_PARSER.get().parse("2016-01-01T00:00:00:000Z"));
+ assertEquals(getCeilDate(date, DAILY), ABS_DATE_PARSER.get().parse("2015-12-27T00:00:00:000Z"));
+ assertEquals(getCeilDate(date, HOURLY), ABS_DATE_PARSER.get().parse("2015-12-26T07:00:00:000Z"));
+ assertEquals(getCeilDate(date, MINUTELY), ABS_DATE_PARSER.get().parse("2015-12-26T06:31:00:000Z"));
+ assertEquals(getCeilDate(date, SECONDLY), ABS_DATE_PARSER.get().parse("2015-12-26T06:30:16:000Z"));
+ assertEquals(getCeilDate(date, WEEKLY), ABS_DATE_PARSER.get().parse("2015-12-27T00:00:00:000Z"));
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java
index 5cf76ca..4304f94 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java
@@ -45,25 +45,26 @@ public class TestQueryMetrics extends TestQueryRewrite {
MetricRegistry reg = LensMetricsRegistry.getStaticRegistry();
Assert.assertTrue(reg.getGauges().keySet().containsAll(Arrays.asList(
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ExpressionResolver-ITER-0",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ColumnResolver-ITER-1",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.AliasReplacer-ITER-2",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.DenormalizationResolver-ITER-3",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.CandidateTableResolver-ITER-4",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.AggregateResolver-ITER-5",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.GroupbyResolver-ITER-6",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.FieldValidator-ITER-7",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.JoinResolver-ITER-8",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.TimerangeResolver-ITER-9",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.CandidateTableResolver-ITER-10",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-11",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-12",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestFactResolver-ITER-13",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-14",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.DenormalizationResolver-ITER-15",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LeastPartitionResolver-ITER-16",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestFactResolver-ITER-17",
- "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestDimensionResolver-ITER-18"
- )));
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.AggregateResolver-ITER-5",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.AliasReplacer-ITER-2",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.CandidateTableResolver-ITER-10",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.CandidateTableResolver-ITER-4",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ColumnResolver-ITER-1",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.DenormalizationResolver-ITER-16",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.DenormalizationResolver-ITER-3",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ExpressionResolver-ITER-0",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.FieldValidator-ITER-7",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.GroupbyResolver-ITER-6",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.JoinResolver-ITER-8",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LeastPartitionResolver-ITER-17",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestDimensionResolver-ITER-19",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestFactResolver-ITER-14",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestFactResolver-ITER-18",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.MaxCoveringFactResolver-ITER-13",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-11",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-12",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-15",
+ "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.TimerangeResolver-ITER-9")
+ ));
}
}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/6008ffb1/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java
index 544f4a0..f039977 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java
@@ -38,17 +38,24 @@ public class TestRewriterPlan extends TestQueryRewrite {
Configuration conf = new Configuration();
TestRewriterPlan() {
- conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1,C2");
conf.setBoolean(CubeQueryConfUtil.DISABLE_AUTO_JOINS, false);
conf.setBoolean(CubeQueryConfUtil.ENABLE_SELECT_TO_GROUPBY, true);
conf.setBoolean(CubeQueryConfUtil.ENABLE_GROUP_BY_TO_SELECT, true);
conf.setBoolean(CubeQueryConfUtil.DISABLE_AGGREGATE_RESOLVER, false);
}
+ private Configuration getConf(){
+ return new Configuration(conf);
+ }
+ private Configuration getConf(String storages) {
+ Configuration c = getConf();
+ c.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, storages);
+ return c;
+ }
@Test
public void testPlanExtractionForSimpleQuery() throws Exception {
// simple query
- CubeQueryContext ctx = rewriteCtx("cube select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, conf);
+ CubeQueryContext ctx = rewriteCtx("cube select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getConf("C2"));
ctx.toHQL();
RewriterPlan plan = new RewriterPlan(Collections.singleton(ctx));
Assert.assertNotNull(plan);
@@ -64,18 +71,18 @@ public class TestRewriterPlan extends TestQueryRewrite {
public void testPlanExtractionForComplexQuery() throws Exception {
// complex query
CubeQueryContext ctx = rewriteCtx("cube select citydim.name, SUM(msr2) from testCube where citydim.name != \"XYZ\""
- + " and " + TWO_DAYS_RANGE + " having sum(msr2) > 1000 order by citydim.name limit 50", conf);
+ + " and " + TWO_DAYS_RANGE + " having sum(msr2) > 1000 order by citydim.name limit 50", getConf("C1,C2"));
ctx.toHQL();
RewriterPlan plan = new RewriterPlan(Collections.singleton(ctx));
Assert.assertNotNull(plan);
Assert.assertFalse(plan.getTablesQueried().isEmpty());
- Assert.assertTrue(plan.getTablesQueried().contains("TestQueryRewrite.c2_testfact"));
+ Assert.assertTrue(plan.getTablesQueried().contains("TestQueryRewrite.c1_testfact2"));
Assert.assertTrue(plan.getTablesQueried().contains("TestQueryRewrite.c1_citytable"));
- Assert.assertEquals(plan.getTableWeights().get("TestQueryRewrite.c2_testfact"), 1.0);
+ Assert.assertEquals(plan.getTableWeights().get("TestQueryRewrite.c1_testfact2"), 1.0);
Assert.assertEquals(plan.getTableWeights().get("TestQueryRewrite.c1_citytable"), 100.0);
Assert.assertFalse(plan.getPartitions().isEmpty());
- Assert.assertFalse(plan.getPartitions().get("testfact").isEmpty());
- Assert.assertTrue(plan.getPartitions().get("testfact").size() > 1);
+ Assert.assertFalse(plan.getPartitions().get("testfact2").isEmpty());
+ Assert.assertTrue(plan.getPartitions().get("testfact2").size() > 1);
Assert.assertFalse(plan.getPartitions().get("citytable").isEmpty());
Assert.assertEquals(plan.getPartitions().get("citytable").size(), 1);
}
@@ -83,21 +90,21 @@ public class TestRewriterPlan extends TestQueryRewrite {
@Test
public void testPlanExtractionForMultipleQueries() throws Exception {
// simple query
- CubeQueryContext ctx1 = rewriteCtx("cube select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, conf);
+ CubeQueryContext ctx1 = rewriteCtx("cube select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getConf("C1,C2"));
ctx1.toHQL();
CubeQueryContext ctx2 = rewriteCtx("cube select citydim.name, SUM(msr2) from testCube where citydim.name != \"XYZ\""
- + " and " + TWO_DAYS_RANGE + " having sum(msr2) > 1000 order by citydim.name limit 50", conf);
+ + " and " + TWO_DAYS_RANGE + " having sum(msr2) > 1000 order by citydim.name limit 50", getConf("C1,C2"));
ctx2.toHQL();
RewriterPlan plan = new RewriterPlan(Arrays.asList(ctx1, ctx2));
Assert.assertNotNull(plan);
Assert.assertFalse(plan.getTablesQueried().isEmpty());
- Assert.assertTrue(plan.getTablesQueried().contains("TestQueryRewrite.c2_testfact"));
+ Assert.assertTrue(plan.getTablesQueried().contains("TestQueryRewrite.c1_testfact2"));
Assert.assertTrue(plan.getTablesQueried().contains("TestQueryRewrite.c1_citytable"));
- Assert.assertEquals(plan.getTableWeights().get("TestQueryRewrite.c2_testfact"), 1.0);
+ Assert.assertEquals(plan.getTableWeights().get("TestQueryRewrite.c1_testfact2"), 1.0);
Assert.assertEquals(plan.getTableWeights().get("TestQueryRewrite.c1_citytable"), 100.0);
Assert.assertFalse(plan.getPartitions().isEmpty());
- Assert.assertFalse(plan.getPartitions().get("testfact").isEmpty());
- Assert.assertTrue(plan.getPartitions().get("testfact").size() > 1);
+ Assert.assertFalse(plan.getPartitions().get("testfact2").isEmpty());
+ Assert.assertTrue(plan.getPartitions().get("testfact2").size() > 1);
Assert.assertFalse(plan.getPartitions().get("citytable").isEmpty());
Assert.assertEquals(plan.getPartitions().get("citytable").size(), 1);
}