/** * @param context * @param cube * @param value */ private void validateCostantParameter(ValidateContext context, CubeDesc cube, String value) { try { Integer.parseInt(value); } catch (Exception e) { context.addResult(ResultLevel.ERROR, "Parameter value must be number, but it is " + value); } }
@Override public void validate(CubeDesc cube, ValidateContext context) { RowKeyDesc row = cube.getRowkey(); if (row == null) { context.addResult(ResultLevel.ERROR, "Rowkey does not exist"); return; } RowKeyColDesc[] rcd = row.getRowKeyColumns(); if (rcd == null || rcd.length == 0) { context.addResult(ResultLevel.ERROR, "Rowkey columns do not exist"); return; } for (int i = 0; i < rcd.length; i++) { RowKeyColDesc rd = rcd[i]; if (rd.getColumn() == null || rd.getColumn().length() == 0) { context.addResult(ResultLevel.ERROR, "Rowkey column empty"); } } } }
/** * @param context * @param cube * @param value */ private void validateColumnParameter(ValidateContext context, CubeDesc cube, String value) { DataModelDesc model = cube.getModel(); try { model.findColumn(value); } catch (IllegalArgumentException e) { context.addResult(ResultLevel.ERROR, e.getMessage()); } }
/** * @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; } }
context.addResult(ResultLevel.ERROR, ERROR_DUPLICATE_DICTIONARY_COLUMN + dictCol); return; context.addResult(ResultLevel.ERROR, ERROR_REUSE_BUILDER_BOTH_SET + dictCol); return; context.addResult(ResultLevel.ERROR, ERROR_REUSE_BUILDER_BOTH_EMPTY + dictCol); return; context.addResult(ResultLevel.ERROR, ERROR_GLOBAL_DICTIONNARY_ONLY_MEASURE + dictCol); return; context.addResult(ResultLevel.ERROR, ERROR_TRANSITIVE_REUSE + dictDesc.getColumnRef()); return;
context.addResult(ResultLevel.ERROR, "Cube should have at least one Aggregation group."); return; for (AggregationGroup agg : cube.getAggregationGroups()) { if (agg.getIncludes() == null) { context.addResult(ResultLevel.ERROR, AGGREGATION_GROUP + index + " 'includes' field not set"); continue; context.addResult(ResultLevel.ERROR, AGGREGATION_GROUP + index + " 'select rule' field not set"); continue; context.addResult(ResultLevel.ERROR, AGGREGATION_GROUP + index + " 'includes' dimensions not include all the dimensions:" + notIncluded.toString()); continue; Set<String> intersection = new HashSet<>(mandatoryDims); intersection.retainAll(hierarchyDims); context.addResult(ResultLevel.ERROR, AGGREGATION_GROUP + index + " mandatory dimension has overlap with hierarchy dimension: " + intersection.toString()); continue; Set<String> intersection = new HashSet<>(mandatoryDims); intersection.retainAll(jointDims); context.addResult(ResultLevel.ERROR, AGGREGATION_GROUP + index + " mandatory dimension has overlap with joint dimension: " + intersection.toString()); continue; context.addResult(ResultLevel.ERROR, AGGREGATION_GROUP + index + " require at least 2 dimensions in a joint: " + oneJoint.toString()); continue; context.addResult(ResultLevel.ERROR, AGGREGATION_GROUP + index + " joint dimensions has overlap with more than 1 dimensions in same hierarchy: " + share.toString()); continue;
ParameterDesc parameter = func.getParameter(); if (parameter == null) { context.addResult(ResultLevel.ERROR, "Must define parameter for function " + func.getExpression() + " in " + measure.getName()); return; String value = func.getParameter().getValue(); if (StringUtils.isEmpty(type)) { context.addResult(ResultLevel.ERROR, "Must define type for parameter type " + func.getExpression() + " in " + measure.getName()); return; context.addResult(ResultLevel.ERROR, "Must define type for parameter value " + func.getExpression() + " in " + measure.getName()); return; context.addResult(ResultLevel.ERROR, "Must define return type for function " + func.getExpression() + " in " + measure.getName()); return; func.getMeasureType().validate(func); } catch (IllegalArgumentException ex) { context.addResult(ResultLevel.ERROR, ex.getMessage()); context.addResult(ResultLevel.ERROR, "Must define at least 2 parameters for function " + func.getExpression() + " in " + measure.getName()); return; context.addResult(ResultLevel.ERROR, "Must define one and only one count(1) function, but there are " + countFuncs.size() + " -- " + countFuncs);
@Override public void validate(CubeDesc cube, ValidateContext context) { DataModelDesc model = cube.getModel(); if (model.getRootFactTable().getTableDesc().getSourceType() != ISourceAware.ID_STREAMING) { return; } if (model.getPartitionDesc() == null || model.getPartitionDesc().getPartitionDateColumn() == null) { context.addResult(ResultLevel.ERROR, "Must define a partition column."); return; } final TblColRef partitionCol = model.getPartitionDesc().getPartitionDateColumnRef(); boolean found = false; for (DimensionDesc dimensionDesc : cube.getDimensions()) { for (TblColRef dimCol : dimensionDesc.getColumnRefs()) { if (dimCol.equals(partitionCol)) { found = true; break; } } } if (found == false) { context.addResult(ResultLevel.ERROR, "Partition column '" + partitionCol + "' isn't in dimension list."); return; } }
/** * @param context * @param cube * @param value */ private void validateCostantParameter(ValidateContext context, CubeDesc cube, String value) { try { Integer.parseInt(value); } catch (Exception e) { context.addResult(ResultLevel.ERROR, "Parameter value must be number, but it is " + value); } }
String factTable = cube.getFactTable(); if (StringUtils.isEmpty(factTable)) { context.addResult(ResultLevel.ERROR, "Fact table can not be null."); return; context.addResult(ResultLevel.ERROR, "Fact table can not be found: " + cube); return; context.addResult(ResultLevel.ERROR, "Column [" + item + "] does not exist in factable table" + factTable);
@Override public void validate(CubeDesc cube, ValidateContext context) { RowKeyDesc row = cube.getRowkey(); if (row == null) { context.addResult(ResultLevel.ERROR, "Rowkey does not exist"); return; } RowKeyColDesc[] rcd = row.getRowKeyColumns(); if (rcd == null) { context.addResult(ResultLevel.ERROR, "Rowkey columns do not exist"); return; } if(rcd.length == 0){ context.addResult(ResultLevel.ERROR, "Rowkey columns is empty"); return; } for (int i = 0; i < rcd.length; i++) { RowKeyColDesc rd = rcd[i]; if (rd.getLength() != 0 && (!StringUtils.isEmpty(rd.getDictionary())&&!rd.getDictionary().equals("false"))) { context.addResult(ResultLevel.ERROR, "Rowkey column " + rd.getColumn() + " must not have both 'length' and 'dictionary' attribute"); } if (rd.getLength() == 0 && (StringUtils.isEmpty(rd.getDictionary())||rd.getDictionary().equals("false"))) { context.addResult(ResultLevel.ERROR, "Rowkey column " + rd.getColumn() + " must not have both 'length' and 'dictionary' empty"); } } }
/** * @param cube * @param context */ private void innerValidateMaxSize(CubeDesc cube, ValidateContext context) { int maxSize = getMaxAgrGroupSize(); String[][] groups = cube.getRowkey().getAggregationGroups(); for (int i = 0; i < groups.length; i++) { String[] group = groups[i]; if (group.length >= maxSize) { context.addResult(ResultLevel.ERROR, "Length of the number " + i + " aggregation group's length should be less than " + maxSize); } } }
private void validateReturnType(ValidateContext context, CubeDesc cube, FunctionDesc funcDesc) { String func = funcDesc.getExpression(); DataType rtype = funcDesc.getReturnDataType(); if (funcDesc.isCount()) { if (rtype.isIntegerFamily() == false) { context.addResult(ResultLevel.ERROR, "Return type for function " + func + " must be one of " + DataType.INTEGER_FAMILY); } } else if (funcDesc.isCountDistinct()) { if (rtype.isHLLC() == false && funcDesc.isHolisticCountDistinct() == false) { context.addResult(ResultLevel.ERROR, "Return type for function " + func + " must be hllc(10), hllc(12) etc."); } } else if (funcDesc.isMax() || funcDesc.isMin() || funcDesc.isSum()) { if (rtype.isNumberFamily() == false) { context.addResult(ResultLevel.ERROR, "Return type for function " + func + " must be one of " + DataType.NUMBER_FAMILY); } } else { if (StringUtils.equalsIgnoreCase(KylinConfig.getInstanceFromEnv().getProperty(KEY_IGNORE_UNKNOWN_FUNC, "false"), "false")) { context.addResult(ResultLevel.ERROR, "Unrecognized function: [" + func + "]"); } } }
ParameterDesc parameter = func.getParameter(); if (parameter == null) { context.addResult(ResultLevel.ERROR, "Must define parameter for function " + func.getExpression() + " in " + measure.getName()); return; String value = func.getParameter().getValue(); if (StringUtils.isEmpty(type)) { context.addResult(ResultLevel.ERROR, "Must define type for parameter type " + func.getExpression() + " in " + measure.getName()); return; context.addResult(ResultLevel.ERROR, "Must define type for parameter value " + func.getExpression() + " in " + measure.getName()); return; context.addResult(ResultLevel.ERROR, "Must define return type for function " + func.getExpression() + " in " + measure.getName()); return; context.addResult(ResultLevel.ERROR, "Must define one and only one count(1) function, but there are " + countFuncs.size() + " -- " + countFuncs);
@Override public void validate(CubeDesc cube, ValidateContext context) { Set<String> mands = new HashSet<String>(); RowKeyColDesc[] cols = cube.getRowkey().getRowKeyColumns(); if (cols == null || cols.length == 0) { return; } for (int i = 0; i < cols.length; i++) { RowKeyColDesc rowKeyColDesc = cols[i]; if (rowKeyColDesc.isMandatory()) { mands.add(rowKeyColDesc.getColumn()); } } if (mands.isEmpty()) { return; } String[][] groups = cube.getRowkey().getAggregationGroups(); for (int i = 0; i < groups.length; i++) { String[] group = groups[i]; for (int j = 0; j < group.length; j++) { String col = group[j]; if (mands.contains(col)) { context.addResult(ResultLevel.ERROR, "mandatory column " + col + " must not be in aggregation group [" + ArrayUtils.toString(group) + "]"); } } } }
/** * @param context * @param cube * @param value */ private void validateCostantParameter(ValidateContext context, CubeDesc cube, String value) { try { Integer.parseInt(value); } catch (Exception e) { context.addResult(ResultLevel.ERROR, "Parameter value must be number, but it is " + value); } }
/** * @param context * @param cube * @param value */ private void validateCostantParameter(ValidateContext context, CubeDesc cube, String value) { try { Integer.parseInt(value); } catch (Exception e) { context.addResult(ResultLevel.ERROR, "Parameter value must be number, but it is " + value); } }
/** * @param context * @param cube * @param value */ private void validateColumnParameter(ValidateContext context, CubeDesc cube, String value) { DataModelDesc model = cube.getModel(); try { model.findColumn(value); } catch (IllegalArgumentException e) { context.addResult(ResultLevel.ERROR, e.getMessage()); } }
/** * @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; } }
/** * @param cube * @param context */ private void innerValidateMaxSize(CubeDesc cube, ValidateContext context) { int maxSize = getMaxAgrGroupSize(); String[][] groups = cube.getRowkey().getAggregationGroups(); for (int i = 0; i < groups.length; i++) { String[] group = groups[i]; if (group.length >= maxSize) { context.addResult(ResultLevel.ERROR, "Length of the number " + i + " aggregation group's length should be less than " + maxSize); } } }