/** * @return all functions from each measure. */ public List<FunctionDesc> listAllFunctions() { List<FunctionDesc> functions = new ArrayList<FunctionDesc>(); for (MeasureDesc m : measures) { functions.add(m.getFunction()); } return functions; }
@SuppressWarnings("deprecation") private void initMeasureColumns() { if (measures == null || measures.isEmpty()) { return; } for (MeasureDesc m : measures) { m.setName(m.getName().toUpperCase(Locale.ROOT)); if (m.getDependentMeasureRef() != null) { m.setDependentMeasureRef(m.getDependentMeasureRef().toUpperCase(Locale.ROOT)); } FunctionDesc func = m.getFunction(); func.init(model); allColumns.addAll(func.getParameter().getColRefs()); if (ExtendedColumnMeasureType.FUNC_EXTENDED_COLUMN.equalsIgnoreCase(m.getFunction().getExpression())) { FunctionDesc functionDesc = m.getFunction(); List<TblColRef> hosts = ExtendedColumnMeasureType.getExtendedColumnHosts(functionDesc); TblColRef extendedColumn = ExtendedColumnMeasureType.getExtendedColumn(functionDesc); initExtendedColumnMap(hosts.toArray(new TblColRef[hosts.size()]), extendedColumn); } } }
public static MeasureDesc getMeasureMax(String column, String dataType) { ParameterDesc parameterDesc = new ParameterDesc(); parameterDesc.setValue(column); parameterDesc.setType(FunctionDesc.PARAMETER_TYPE_COLUMN); FunctionDesc function = new FunctionDesc(); function.setExpression(FunctionDesc.FUNC_MAX); function.setParameter(parameterDesc); function.setReturnType(dataType); MeasureDesc result = new MeasureDesc(); result.setName(column + "_MAX"); result.setFunction(function); return result; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; MeasureDesc that = (MeasureDesc) o; if (!function.equals(that.getFunction())) return false; if (dependentMeasureRef != null && that.getDependentMeasureRef() == null || dependentMeasureRef == null && that.getDependentMeasureRef() != null) return false; if (dependentMeasureRef == null && that.getDependentMeasureRef() == null) return true; return dependentMeasureRef.equals(that.getDependentMeasureRef()); }
public Map<Integer, Integer> getDependentMetricsMap() { Map<Integer, Integer> result = Maps.newHashMap(); List<MeasureDesc> measures = cuboid.getCubeDesc().getMeasures(); for (MeasureDesc child : measures) { if (child.getDependentMeasureRef() != null) { boolean ok = false; for (MeasureDesc parent : measures) { if (parent.getName().equals(child.getDependentMeasureRef())) { int childIndex = getIndexOf(child.getFunction()); int parentIndex = getIndexOf(parent.getFunction()); result.put(childIndex, parentIndex); ok = true; break; } } if (!ok) throw new IllegalStateException("Cannot find dependent measure: " + child.getDependentMeasureRef()); } } return result.isEmpty() ? Collections.<Integer, Integer> emptyMap() : result; }
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, ",")); }
/** * @param measures */ private boolean validateMeasureNamesDuplicated(List<MeasureDesc> measures, ValidateContext context) { Set<String> nameSet = new HashSet<>(); for (MeasureDesc measure: measures){ if (nameSet.contains(measure.getName())){ context.addResult(ResultLevel.ERROR, "There is duplicated measure's name: " + measure.getName()); return true; } else { nameSet.add(measure.getName()); } } return false; } }
private MeasureDesc measure(String returnType) { MeasureDesc desc = new MeasureDesc(); FunctionDesc func = FunctionDesc.newInstance(null, null, returnType); desc.setFunction(func); return desc; } }
@Test public void testBadInit14() throws Exception { thrown.expect(IllegalStateException.class); CubeDesc cubeDesc = CubeDescManager.getInstance(getTestConfig()).getCubeDesc(CUBE_WITH_SLR_DESC); MeasureDesc measureForTransCnt = cubeDesc.getMeasures().get(3); Assert.assertEquals(measureForTransCnt.getName(), "TRANS_CNT"); String measureInfoForTransCnt = measureForTransCnt.toString(); thrown.expectMessage( "measure (" + measureInfoForTransCnt + ") does not exist in column family, or measure duplicates"); HBaseColumnDesc colDesc = new HBaseColumnDesc(); colDesc.setQualifier("M"); colDesc.setMeasureRefs(new String[] { "GMV_SUM", "GMV_MIN", "GMV_MAX", "ITEM_COUNT_SUM" }); cubeDesc.getHbaseMapping().getColumnFamily()[0].getColumns()[0] = colDesc; cubeDesc.initMeasureReferenceToColumnFamily(); }
List<String> largeMeasureList = Lists.newLinkedList(); for (MeasureDesc measureDesc : measureDescList) { if (measureDesc.getFunction().isCountDistinct() || measureDesc.getFunction().getExpression().equals(PercentileMeasureType.FUNC_PERCENTILE)) { largeMeasureList.add(measureDesc.getName()); } else { normalMeasureList.add(measureDesc.getName());
public MeasureAggregators(MeasureDesc... measureDescs) { descLength = measureDescs.length; aggs = new MeasureAggregator[descLength]; Map<String, Integer> measureIndexMap = new HashMap<String, Integer>(); for (int i = 0; i < descLength; i++) { FunctionDesc func = measureDescs[i].getFunction(); aggs[i] = func.getMeasureType().newAggregator(); measureIndexMap.put(measureDescs[i].getName(), i); } // fill back dependent aggregator for (int i = 0; i < descLength; i++) { String depMsrRef = measureDescs[i].getDependentMeasureRef(); if (depMsrRef != null) { int index = measureIndexMap.get(depMsrRef); aggs[i].setDependentAggregator(aggs[index]); } } }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; MeasureDesc that = (MeasureDesc) o; if (!function.equals(that.getFunction())) return false; if (dependentMeasureRef != null && that.getDependentMeasureRef() == null || dependentMeasureRef == null && that.getDependentMeasureRef() != null) return false; if (dependentMeasureRef == null && that.getDependentMeasureRef() == null) return true; return dependentMeasureRef.equals(that.getDependentMeasureRef()); }
private MeasureDesc measure(String returnType) { MeasureDesc desc = new MeasureDesc(); FunctionDesc func = new FunctionDesc(); func.setReturnType(returnType); desc.setFunction(func); return desc; } }
FunctionDesc findInMeasures(FunctionDesc aggFunc, List<MeasureDesc> measures) { for (MeasureDesc m : measures) { if (aggFunc.equals(m.getFunction())) return m.getFunction(); } return aggFunc; }
m.setName(m.getName().toUpperCase()); if (m.getDependentMeasureRef() != null) { m.setDependentMeasureRef(m.getDependentMeasureRef().toUpperCase()); FunctionDesc f = m.getFunction(); f.setExpression(f.getExpression().toUpperCase()); f.setReturnDataType(DataType.getInstance(f.getReturnType())); if (m.isHolisticCountDistinct() && StringUtils.isBlank(m.getDependentMeasureRef())) { throw new IllegalStateException(m + " is a holistic count distinct but it has no DependentMeasureRef defined!");
FunctionDesc func = measure.getFunction(); metrics2gt.put(func, gtColIdx); gtDataTypes.add(func.getReturnDataType()); for (HBaseColumnFamilyDesc familyDesc : cuboid.getCubeDesc().getHbaseMapping().getColumnFamily()) { for (HBaseColumnDesc hbaseColDesc : familyDesc.getColumns()) { if (hbaseColDesc.containsMeasure(measure.getName())) { metricsColBlocks.get(cbIdx).set(gtColIdx);
public MeasureAggregators(MeasureDesc... measureDescs) { descs = measureDescs; aggs = new MeasureAggregator[descs.length]; Map<String, Integer> measureIndexMap = new HashMap<String, Integer>(); for (int i = 0; i < descs.length; i++) { FunctionDesc func = descs[i].getFunction(); aggs[i] = MeasureAggregator.create(func.getExpression(), func.getReturnType()); measureIndexMap.put(descs[i].getName(), i); } // fill back dependent aggregator for (int i = 0; i < descs.length; i++) { String depMsrRef = descs[i].getDependentMeasureRef(); if (depMsrRef != null) { int index = measureIndexMap.get(depMsrRef); aggs[i].setDependentAggregator(aggs[index]); } } }
public static MeasureDesc getMeasureHLL(String column) { ParameterDesc parameterDesc = new ParameterDesc(); parameterDesc.setValue(column); parameterDesc.setType(FunctionDesc.PARAMETER_TYPE_COLUMN); FunctionDesc function = new FunctionDesc(); function.setExpression(FunctionDesc.FUNC_COUNT_DISTINCT); function.setParameter(parameterDesc); function.setReturnType("hllc12"); MeasureDesc result = new MeasureDesc(); result.setName(column + "_HLL"); result.setFunction(function); return result; }
private void validateColumnFamily(CubeDesc cubeDesc) { Set<String> columnFamilyMetricsSet = Sets.newHashSet(); for (HBaseColumnFamilyDesc hBaseColumnFamilyDesc : cubeDesc.getHbaseMapping().getColumnFamily()) { for (HBaseColumnDesc hBaseColumnDesc : hBaseColumnFamilyDesc.getColumns()) { for (String columnName : hBaseColumnDesc.getMeasureRefs()) { columnFamilyMetricsSet.add(columnName); } } } for (MeasureDesc measureDesc : cubeDesc.getMeasures()) { if (!columnFamilyMetricsSet.contains(measureDesc.getName())) { throw new BadRequestException("column family lack measure:" + measureDesc.getName()); } } if (cubeDesc.getMeasures().size() != columnFamilyMetricsSet.size()) { throw new BadRequestException( "the number of input measure and the number of measure defined in cubedesc are not consistent"); } }