You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2015/03/03 11:08:05 UTC

[09/26] incubator-kylin git commit: KYLIN-609 Add Hybrid as a federation of Cube and Inverted-index realization

KYLIN-609 Add Hybrid as a federation of Cube and Inverted-index realization

Project: http://git-wip-us.apache.org/repos/asf/incubator-kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kylin/commit/06e4b203
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kylin/tree/06e4b203
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kylin/diff/06e4b203

Branch: refs/heads/streaming
Commit: 06e4b20386621ca4bdd70513da4156c3022e8c80
Parents: 7f1abe0
Author: Shao Feng, Shi <sh...@ebay.com>
Authored: Sat Feb 28 09:41:13 2015 +0800
Committer: Shao Feng, Shi <sh...@ebay.com>
Committed: Sat Feb 28 09:41:13 2015 +0800

----------------------------------------------------------------------
 .../RoutingRules/RealizationPriorityRule.java   |  5 ++--
 .../kylin/storage/hybrid/HybridInstance.java    | 28 +++++++++++---------
 .../storage/hybrid/HybridTupleIterator.java     | 15 ++++++++---
 3 files changed, 30 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/06e4b203/query/src/main/java/org/apache/kylin/query/routing/RoutingRules/RealizationPriorityRule.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/routing/RoutingRules/RealizationPriorityRule.java b/query/src/main/java/org/apache/kylin/query/routing/RoutingRules/RealizationPriorityRule.java
index 6a67140..09a7dce 100644
--- a/query/src/main/java/org/apache/kylin/query/routing/RoutingRules/RealizationPriorityRule.java
+++ b/query/src/main/java/org/apache/kylin/query/routing/RoutingRules/RealizationPriorityRule.java
@@ -33,8 +33,9 @@ public class RealizationPriorityRule extends RoutingRule {
     static Map<RealizationType, Integer> priorities = Maps.newHashMap();
 
     static {
-        priorities.put(RealizationType.CUBE, 0);
-        priorities.put(RealizationType.INVERTED_INDEX, 1);
+        priorities.put(RealizationType.HYBRID, 0);
+        priorities.put(RealizationType.CUBE, 1);
+        priorities.put(RealizationType.INVERTED_INDEX, 2);
     }
 
     public static void setPriorities(Map<RealizationType, Integer> priorities) {

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/06e4b203/storage/src/main/java/org/apache/kylin/storage/hybrid/HybridInstance.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/org/apache/kylin/storage/hybrid/HybridInstance.java b/storage/src/main/java/org/apache/kylin/storage/hybrid/HybridInstance.java
index ebba9f5..789ddc0 100644
--- a/storage/src/main/java/org/apache/kylin/storage/hybrid/HybridInstance.java
+++ b/storage/src/main/java/org/apache/kylin/storage/hybrid/HybridInstance.java
@@ -53,15 +53,11 @@ public class HybridInstance extends RootPersistentEntity implements IRealization
             throw new IllegalArgumentException("Didn't find realization '" + realTimeRealization.getType() + "'" + " with name '" + realTimeRealization.getRealization() + "' in '" + name + "'");
         }
 
-
-        if (realTimeRealizationInstance.getDateRangeEnd() < historyRealizationInstance.getDateRangeEnd()) {
-            throw new IllegalStateException("The real time realization's dateRangeEnd should be greater than history realization's dateRangeEnd.");
-        }
     }
 
     @Override
     public boolean isCapable(SQLDigest digest) {
-        return historyRealizationInstance.isCapable(digest) || realTimeRealizationInstance.isCapable(digest);
+        return getHistoryRealizationInstance().isCapable(digest) || getRealTimeRealizationInstance().isCapable(digest);
     }
 
     @Override
@@ -78,17 +74,17 @@ public class HybridInstance extends RootPersistentEntity implements IRealization
 
     @Override
     public String getFactTable() {
-        return null;
+        return getHistoryRealizationInstance().getFactTable();
     }
 
     @Override
     public List<TblColRef> getAllColumns() {
-        return null;
+        return getHistoryRealizationInstance().getAllColumns();
     }
 
     @Override
     public List<MeasureDesc> getMeasures() {
-        return null;
+        return getHistoryRealizationInstance().getMeasures();
     }
 
     @Override
@@ -138,28 +134,34 @@ public class HybridInstance extends RootPersistentEntity implements IRealization
     }
 
     public IRealization getHistoryRealizationInstance() {
+        if (historyRealizationInstance == null) {
+            this.init();
+        }
         return historyRealizationInstance;
     }
 
     public IRealization getRealTimeRealizationInstance() {
+        if (realTimeRealizationInstance == null) {
+            this.init();
+        }
         return realTimeRealizationInstance;
     }
 
     @Override
     public long getDateRangeStart() {
-        return historyRealizationInstance.getDateRangeStart();
+        return Math.min(getHistoryRealizationInstance().getDateRangeStart(), getRealTimeRealizationInstance().getDateRangeStart());
     }
 
     @Override
     public long getDateRangeEnd() {
-        return realTimeRealizationInstance.getDateRangeEnd();
+        return Math.max(getHistoryRealizationInstance().getDateRangeEnd(), getRealTimeRealizationInstance().getDateRangeEnd());
     }
 
     public String getModelName() {
-        if(historyRealizationInstance instanceof CubeInstance) {
-            return ((CubeInstance)historyRealizationInstance).getDescriptor().getModelName();
+        if (getHistoryRealizationInstance() instanceof CubeInstance) {
+            return ((CubeInstance) historyRealizationInstance).getDescriptor().getModelName();
         }
 
-        return ((IIInstance)historyRealizationInstance).getDescriptor().getModelName();
+        return ((IIInstance) historyRealizationInstance).getDescriptor().getModelName();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/06e4b203/storage/src/main/java/org/apache/kylin/storage/hybrid/HybridTupleIterator.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/org/apache/kylin/storage/hybrid/HybridTupleIterator.java b/storage/src/main/java/org/apache/kylin/storage/hybrid/HybridTupleIterator.java
index daf3057..516bc58 100644
--- a/storage/src/main/java/org/apache/kylin/storage/hybrid/HybridTupleIterator.java
+++ b/storage/src/main/java/org/apache/kylin/storage/hybrid/HybridTupleIterator.java
@@ -19,12 +19,19 @@ public class HybridTupleIterator implements ITupleIterator {
 
     @Override
     public boolean hasNext() {
-        return iterators[currentIndex].hasNext() || (currentIndex + 1 < iterators.length && iterators[currentIndex + 1].hasNext());
+        if (iterators[currentIndex].hasNext())
+            return true;
+
+        while (!iterators[currentIndex].hasNext() && currentIndex + 1 < iterators.length) {
+            currentIndex++;
+        }
+
+        return iterators[currentIndex].hasNext();
     }
 
     @Override
     public ITuple next() {
-        if (!iterators[currentIndex].hasNext() && currentIndex + 1 < iterators.length) {
+        while (!iterators[currentIndex].hasNext() && currentIndex + 1 < iterators.length) {
             currentIndex++;
         }
 
@@ -33,6 +40,8 @@ public class HybridTupleIterator implements ITupleIterator {
 
     @Override
     public void close() {
-
+        for (ITupleIterator i : iterators) {
+            i.close();
+        }
     }
 }