MeasureDesc measureDesc = measureDescs.get(i); MeasureType measureType = measureDesc.getFunction().getMeasureType(); List<TblColRef> columns = measureType.getColumnsNeedDictionary(measureDesc.getFunction()); boolean needReEncode = false; for (TblColRef col : columns) { dictMeasures.add(Pair.newPair(i, measureType.newIngester()));
public boolean hasMemHungryMeasures() { for (int i = projectionIndex.nextSetBit(0); i >= 0; i = projectionIndex.nextSetBit(i + 1)) { FunctionDesc func = measures[i].getFunction(); if (func.getMeasureType().isMemoryHungry()) return true; } return false; }
public static long toCuboidId(CubeDesc cubeDesc, Set<TblColRef> dimensions, Collection<FunctionDesc> metrics) { for (FunctionDesc metric : metrics) { if (metric.getMeasureType().onlyAggrInBaseCuboid()) return Cuboid.getBaseCuboidId(cubeDesc); } long cuboidID = 0; for (TblColRef column : dimensions) { int index = cubeDesc.getRowkey().getColumnBitIndex(column); cuboidID |= 1L << index; } return cuboidID; }
private static void registerUDAF(MeasureTypeFactory<?> factory) { MeasureType<?> type = factory.createMeasureType(factory.getAggrFunctionName(), DataType.getType(factory.getAggrDataTypeName())); Map<String, Class<?>> udafs = type.getRewriteCalciteAggrFunctions(); if (type.needRewrite() == false || udafs == null) return; for (String udaf : udafs.keySet()) { udaf = udaf.toUpperCase(Locale.ROOT); if (udaf.equals(FunctionDesc.FUNC_COUNT_DISTINCT)) continue; // skip built-in function if (udafFactories.containsKey(udaf)) throw new IllegalStateException( "UDAF '" + udaf + "' was dup declared by " + udafFactories.get(udaf) + " and " + factory); udafFactories.put(udaf, factory); udafMap.put(udaf, udafs.get(udaf)); } }
if (measureType.needAdvancedTupleFilling()) { Map<TblColRef, Dictionary<String>> dictionaryMap = buildDictionaryMap(measureType.getColumnsNeedDictionary(metric)); advMeasureFillers.add(measureType.getAdvancedTupleFiller(metric, returnTupleInfo, dictionaryMap)); advMeasureIndexInGTValues.add(i); } else {
@Override public MeasureIngester newIngester() { return origMeasureType.newIngester(); }
/** * Get columns that have dictionary */ public Set<TblColRef> getAllColumnsHaveDictionary() { Set<TblColRef> result = Sets.newLinkedHashSet(); // dictionaries in dimensions result.addAll(getAllDimsHaveDictionary()); // dictionaries in measures for (MeasureDesc measure : measures) { MeasureType<?> aggrType = measure.getFunction().getMeasureType(); result.addAll(aggrType.getColumnsNeedDictionary(measure.getFunction())); } // any additional dictionaries if (dictionaries != null) { for (DictionaryDesc dictDesc : dictionaries) { TblColRef col = dictDesc.getColumnRef(); result.add(col); } } return result; }
public NeedRewriteOnlyMeasureType(String funcName, List<MeasureTypeFactory<?>> factory) { for (MeasureTypeFactory<?> f : factory) { boolean b = f.createMeasureType(funcName, null).needRewrite(); if (needRewrite == null) needRewrite = Boolean.valueOf(b); else if (needRewrite.booleanValue() != b) throw new IllegalStateException( "needRewrite() of factorys " + factory + " does not have consensus"); } }
@Override public MeasureAggregator newAggregator() { return origMeasureType.newAggregator(); }
@Override public Map<String, Class<?>> getRewriteCalciteAggrFunctions() { return origMeasureType.getRewriteCalciteAggrFunctions(); } }
public boolean needRewriteField() { if (!needRewrite()) return false; return getMeasureType().needRewriteField(); }
private static void tryCustomMeasureTypes(Collection<TblColRef> unmatchedDimensions, Collection<FunctionDesc> unmatchedAggregations, SQLDigest digest, CubeInstance cube, CapabilityResult result) { CubeDesc cubeDesc = cube.getDescriptor(); List<String> influencingMeasures = Lists.newArrayList(); for (MeasureDesc measure : cubeDesc.getMeasures()) { // if (unmatchedDimensions.isEmpty() && unmatchedAggregations.isEmpty()) // break; MeasureType<?> measureType = measure.getFunction().getMeasureType(); if (measureType instanceof BasicMeasureType) continue; CapabilityInfluence inf = measureType.influenceCapabilityCheck(unmatchedDimensions, unmatchedAggregations, digest, measure); if (inf != null) { result.influences.add(inf); influencingMeasures.add(measure.getName() + "@" + measureType.getClass()); } } if (influencingMeasures.size() != 0) logger.info("Cube {} CapabilityInfluences: {}", cube.getCanonicalName(), StringUtils.join(influencingMeasures, ",")); }
public static MeasureIngester<?> create(MeasureDesc measure) { return measure.getFunction().getMeasureType().newIngester(); }
if (measureType.needAdvancedTupleFilling()) { Map<TblColRef, Dictionary<String>> dictionaryMap = buildDictionaryMap(measureType.getColumnsNeedDictionary(metric)); advMeasureFillers.add(measureType.getAdvancedTupleFiller(metric, returnTupleInfo, dictionaryMap)); advMeasureIndexInGTValues.add(i); } else {
/** * Get columns that have dictionary */ public Set<TblColRef> getAllColumnsHaveDictionary() { Set<TblColRef> result = Sets.newLinkedHashSet(); // dictionaries in dimensions result.addAll(getAllDimsHaveDictionary()); // dictionaries in measures for (MeasureDesc measure : measures) { MeasureType<?> aggrType = measure.getFunction().getMeasureType(); result.addAll(aggrType.getColumnsNeedDictionary(measure.getFunction())); } // any additional dictionaries if (dictionaries != null) { for (DictionaryDesc dictDesc : dictionaries) { TblColRef col = dictDesc.getColumnRef(); result.add(col); } } return result; }
private static void registerUDAF(MeasureTypeFactory<?> factory) { MeasureType<?> type = factory.createMeasureType(factory.getAggrFunctionName(), DataType.getType(factory.getAggrDataTypeName())); Map<String, Class<?>> udafs = type.getRewriteCalciteAggrFunctions(); if (type.needRewrite() == false || udafs == null) return; for (String udaf : udafs.keySet()) { udaf = udaf.toUpperCase(Locale.ROOT); if (udaf.equals(FunctionDesc.FUNC_COUNT_DISTINCT)) continue; // skip built-in function if (udafFactories.containsKey(udaf)) throw new IllegalStateException( "UDAF '" + udaf + "' was dup declared by " + udafFactories.get(udaf) + " and " + factory); udafFactories.put(udaf, factory); udafMap.put(udaf, udafs.get(udaf)); } }
@Override public boolean needRewrite() { return origMeasureType.needRewrite(); }
public static MeasureAggregator<?> create(String funcName, DataType dataType) { return MeasureTypeFactory.create(funcName, dataType).newAggregator(); }
SqlAggFunction newAgg = aggCall.getAggregation(); Map<String, Class<?>> udafMap = func.getMeasureType().getRewriteCalciteAggrFunctions(); if (func.isCount()) { newAgg = SqlStdOperatorTable.SUM0;
cubeFunc.getMeasureType().needRewriteField()) { aggCall = new KylinAggregateCall(aggCall, cubeFunc);