public IRealization getLatestRealization() { if (getRealizations().length > 0) { return realizations[realizations.length - 1]; } return null; }
@Override public int getCost() { int c = Integer.MAX_VALUE; for (IRealization realization : getRealizations()) { c = Math.min(realization.getCost(), c); } return c; }
public HybridStorageQuery(HybridInstance hybridInstance) { this.realizations = hybridInstance.getRealizations(); storageEngines = new IStorageQuery[realizations.length]; for (int i = 0; i < realizations.length; i++) { storageEngines[i] = StorageFactory.createQuery(realizations[i]); } }
@Override public CapabilityResult isCapable(SQLDigest digest) { CapabilityResult result = new CapabilityResult(); result.cost = Integer.MAX_VALUE; for (IRealization realization : getRealizations()) { CapabilityResult child = realization.isCapable(digest); if (child.capable) { result.capable = true; result.cost = Math.min(result.cost, child.cost); result.influences.addAll(child.influences); } else { result.incapableCause = child.incapableCause; } } if (result.cost > 0) result.cost--; // let hybrid win its children return result; }
public static List<Dictionary<String>> getAllDictionaries(TblColRef col, IRealization realization) { Set<Dictionary<String>> result = Sets.newHashSet(); if (realization instanceof CubeInstance) { final CubeInstance cube = (CubeInstance) realization; for (CubeSegment segment : cube.getSegments(SegmentStatusEnum.READY)) { result.add(segment.getDictionary(col)); } } else if (realization instanceof HybridInstance) { final HybridInstance hybridInstance = (HybridInstance) realization; for (IRealization entry : hybridInstance.getRealizations()) { result.addAll(getAllDictionaries(col, entry)); } } else { throw new IllegalStateException("All leaf realizations should be CubeInstance"); } return Lists.newArrayList(result); }
private static boolean ifColumnHaveDictionary(TblColRef col, IRealization realization, boolean enableCheck) { if (realization instanceof CubeInstance) { final CubeInstance cube = (CubeInstance) realization; boolean ifEnabled = !enableCheck || cube.getConfig().isDictionaryEnumeratorEnabled(); return ifEnabled && cube.getDescriptor().getAllDimsHaveDictionary().contains(col); } else if (realization instanceof HybridInstance) { final HybridInstance hybridInstance = (HybridInstance) realization; for (IRealization entry : hybridInstance.getRealizations()) { if (!ifColumnHaveDictionary(col, entry, enableCheck)) { return false; } } return true; } return false; }
static HybridSignature getHybridSignature(KylinConfig config, String realizationName) { HybridInstance hybridInstance = HybridManager.getInstance(config).getHybridInstance(realizationName); if (hybridInstance == null) { return null; } IRealization[] realizations = hybridInstance.getRealizations(); Set<RealizationSignature> realizationSignatureSet = Sets.newHashSetWithExpectedSize(realizations.length); for (IRealization realization : realizations) { RealizationSignature realizationSignature = null; if (realization.getType() == RealizationType.CUBE) { realizationSignature = CubeSignature.getCubeSignature(config, realization.getName()); } else if (realization.getType() == RealizationType.HYBRID) { realizationSignature = getHybridSignature(config, realization.getName()); } if (realizationSignature != null) { realizationSignatureSet.add(realizationSignature); } } return new HybridSignature(realizationName, realizationSignatureSet); } }
@Test public void testBasics() throws Exception { HybridInstance hybridInstance = getHybridManager().getHybridInstance("test_kylin_hybrid_ready"); System.out.println(JsonUtil.writeValueAsIndentString(hybridInstance)); IRealization[] realizations = hybridInstance.getRealizations(); Assert.assertEquals(realizations.length, 2); IRealization lastReal = hybridInstance.getLatestRealization(); Assert.assertTrue(lastReal instanceof CubeInstance); Assert.assertEquals(lastReal.getName(), "test_kylin_cube_with_slr_ready_2_segments"); }
HybridInstance hybridInstance = (HybridInstance) realization; addRequired(HybridInstance.concatResourcePath(hybridInstance.getName())); for (IRealization iRealization : hybridInstance.getRealizations()) { if (iRealization.getType() != RealizationType.CUBE) { throw new RuntimeException("Hybrid " + iRealization.getName() + " contains non cube child "
public IRealization getLatestRealization() { if (getRealizations().length > 0) { return realizations[realizations.length - 1]; } return null; }
public HybridStorageQuery(HybridInstance hybridInstance) { this.realizations = hybridInstance.getRealizations(); storageEngines = new IStorageQuery[realizations.length]; for (int i = 0; i < realizations.length; i++) { storageEngines[i] = StorageFactory.createQuery(realizations[i]); } }
@Override public int getCost() { int c = Integer.MAX_VALUE; for (IRealization realization : getRealizations()) { c = Math.min(realization.getCost(), c); } return c; }
public static List<Dictionary<String>> getAllDictionaries(TblColRef col, IRealization realization) { Set<Dictionary<String>> result = Sets.newHashSet(); if (realization instanceof CubeInstance) { final CubeInstance cube = (CubeInstance) realization; for (CubeSegment segment : cube.getSegments(SegmentStatusEnum.READY)) { result.add(segment.getDictionary(col)); } } else if (realization instanceof HybridInstance) { final HybridInstance hybridInstance = (HybridInstance) realization; for (IRealization entry : hybridInstance.getRealizations()) { result.addAll(getAllDictionaries(col, entry)); } } else { throw new IllegalStateException("All leaf realizations should be CubeInstance"); } return Lists.newArrayList(result); }
@Override public CapabilityResult isCapable(SQLDigest digest) { CapabilityResult result = new CapabilityResult(); result.cost = Integer.MAX_VALUE; for (IRealization realization : getRealizations()) { CapabilityResult child = realization.isCapable(digest); if (child.capable) { result.capable = true; result.cost = Math.min(result.cost, child.cost); result.influences.addAll(child.influences); } else { result.incapableCause = child.incapableCause; } } if (result.cost > 0) result.cost--; // let hybrid win its children return result; }
private static boolean ifColumnHaveDictionary(TblColRef col, IRealization realization, boolean enableCheck) { if (realization instanceof CubeInstance) { final CubeInstance cube = (CubeInstance) realization; boolean ifEnabled = !enableCheck || cube.getConfig().isDictionaryEnumeratorEnabled(); return ifEnabled && cube.getDescriptor().getAllDimsHaveDictionary().contains(col); } else if (realization instanceof HybridInstance) { final HybridInstance hybridInstance = (HybridInstance) realization; for (IRealization entry : hybridInstance.getRealizations()) { if (!ifColumnHaveDictionary(col, entry, enableCheck)) { return false; } } return true; } return false; }
HybridInstance hybridInstance = (HybridInstance) realization; addRequired(HybridInstance.concatResourcePath(hybridInstance.getName())); for (IRealization iRealization : hybridInstance.getRealizations()) { if (iRealization.getType() != RealizationType.CUBE) { throw new RuntimeException("Hybrid " + iRealization.getName() + " contains non cube child "