protected void buildDimensionsAndMetrics(SQLDigest sqlDigest, Collection<TblColRef> dimensions, Collection<FunctionDesc> metrics) { for (FunctionDesc func : sqlDigest.aggregations) { if (!func.isDimensionAsMetric() && !FunctionDesc.FUNC_GROUPING.equalsIgnoreCase(func.getExpression())) { // use the FunctionDesc from cube desc as much as possible, that has more info such as HLLC precision metrics.add(findAggrFuncFromCubeDesc(func)); } } for (TblColRef column : sqlDigest.allColumns) { // skip measure columns if ((sqlDigest.metricColumns.contains(column) || sqlDigest.rtMetricColumns.contains(column)) && !(sqlDigest.groupbyColumns.contains(column) || sqlDigest.filterColumns.contains(column) || sqlDigest.rtDimensionColumns.contains(column))) { continue; } dimensions.add(column); } }
if (functionDesc.isDimensionAsMetric()) { storageLimitLevel = StorageLimitLevel.NO_LIMIT; logger.debug("storageLimitLevel set to NO_LIMIT because {0} isDimensionAsMetric ", functionDesc);
if (functionDesc.isDimensionAsMetric()) { logger.info("exactAggregation is false because has DimensionAsMetric"); return false;
void buildRewriteFieldsAndMetricsColumns() { ColumnRowType inputColumnRowType = ((OLAPRel) getInput()).getColumnRowType(); RelDataTypeFactory typeFactory = getCluster().getTypeFactory(); for (int i = 0; i < this.aggregations.size(); i++) { FunctionDesc aggFunc = this.aggregations.get(i); if (aggFunc.isDimensionAsMetric()) { addToContextGroupBy(aggFunc.getParameter().getColRefs()); continue; // skip rewrite, let calcite handle } if (aggFunc.needRewriteField()) { String rewriteFieldName = aggFunc.getRewriteFieldName(); RelDataType rewriteFieldType = OLAPTable.createSqlType(typeFactory, aggFunc.getRewriteFieldType(), true); this.context.rewriteFields.put(rewriteFieldName, rewriteFieldType); TblColRef column = buildRewriteColumn(aggFunc); this.context.metricsColumns.add(column); } AggregateCall aggCall = this.rewriteAggCalls.get(i); if (!aggCall.getArgList().isEmpty()) { for (Integer index : aggCall.getArgList()) { TblColRef column = inputColumnRowType.getColumnByIndex(index); if (!column.isInnerColumn() && this.context.belongToContextTables(column)) { this.context.metricsColumns.add(column); } } } } }
private void buildDimensionsAndMetrics(Collection<TblColRef> dimensions, Collection<FunctionDesc> metrics, SQLDigest sqlDigest) { for (FunctionDesc func : sqlDigest.aggregations) { if (!func.isDimensionAsMetric()) { metrics.add(func); } } for (TblColRef column : sqlDigest.allColumns) { // skip measure columns if (sqlDigest.metricColumns.contains(column)) { continue; } dimensions.add(column); } }
public boolean needRewrite() { return !isSum() && !isHolisticCountDistinct() && !isDimensionAsMetric(); }
private ITuple makeTuple(TableRecord tableRecord, List<Object> measureValues) { // groups List<String> columnValues = tableRecord.getOriginTableColumnValues(); for (int i = 0; i < columnNames.size(); i++) { TblColRef column = columns.get(i); if (!tuple.hasColumn(column)) { continue; } tuple.setDimensionValue(columnNames.get(i), columnValues.get(i)); } if (measureValues != null) { for (int i = 0; i < measures.size(); ++i) { if (!measures.get(i).isDimensionAsMetric()) { String fieldName = measures.get(i).getRewriteFieldName(); Object value = measureValues.get(i); String dataType = tuple.getDataType(fieldName); //TODO: currently in II all metrics except HLLC is returned as String if (dataType.toLowerCase().equalsIgnoreCase("hllc")) { value = Tuple.convertOptiqCellValue((String) value, dataType); } tuple.setMeasureValue(fieldName, value); } } } return tuple; } }
public static EndpointAggregators fromFunctions(TableRecordInfo tableInfo, List<FunctionDesc> metrics) { String[] funcNames = new String[metrics.size()]; String[] dataTypes = new String[metrics.size()]; MetricInfo[] metricInfos = new MetricInfo[metrics.size()]; for (int i = 0; i < metrics.size(); i++) { FunctionDesc functionDesc = metrics.get(i); //TODO: what if funcionDesc's type is different from tablDesc? cause scale difference funcNames[i] = functionDesc.getExpression(); dataTypes[i] = functionDesc.getReturnType(); if (functionDesc.isCount()) { metricInfos[i] = new MetricInfo(MetricType.Count); } else if (functionDesc.isDimensionAsMetric()) { metricInfos[i] = new MetricInfo(MetricType.DimensionAsMetric); } else { int index = tableInfo.findFactTableColumn(functionDesc.getParameter().getValue()); if (index < 0) { throw new IllegalStateException("Column " + functionDesc.getParameter().getValue() + " is not found in II"); } if (functionDesc.isCountDistinct()) { metricInfos[i] = new MetricInfo(MetricType.DistinctCount, index, functionDesc.getReturnDataType().getPrecision()); } else { metricInfos[i] = new MetricInfo(MetricType.Normal, index); } } } return new EndpointAggregators(funcNames, dataTypes, metricInfos, tableInfo.getDigest()); }
protected void buildDimensionsAndMetrics(SQLDigest sqlDigest, Collection<TblColRef> dimensions, Collection<FunctionDesc> metrics) { for (FunctionDesc func : sqlDigest.aggregations) { if (!func.isDimensionAsMetric() && !FunctionDesc.FUNC_GROUPING.equalsIgnoreCase(func.getExpression())) { // use the FunctionDesc from cube desc as much as possible, that has more info such as HLLC precision metrics.add(findAggrFuncFromCubeDesc(func)); } } for (TblColRef column : sqlDigest.allColumns) { // skip measure columns if ((sqlDigest.metricColumns.contains(column) || sqlDigest.rtMetricColumns.contains(column)) && !(sqlDigest.groupbyColumns.contains(column) || sqlDigest.filterColumns.contains(column) || sqlDigest.rtDimensionColumns.contains(column))) { continue; } dimensions.add(column); } }
if (functionDesc.isDimensionAsMetric()) { storageLimitLevel = StorageLimitLevel.NO_LIMIT; logger.debug("storageLimitLevel set to NO_LIMIT because {0} isDimensionAsMetric ", functionDesc);
if (functionDesc.isDimensionAsMetric()) { logger.info("exactAggregation is false because has DimensionAsMetric"); return false;
void buildRewriteFieldsAndMetricsColumns() { ColumnRowType inputColumnRowType = ((OLAPRel) getInput()).getColumnRowType(); RelDataTypeFactory typeFactory = getCluster().getTypeFactory(); for (int i = 0; i < this.aggregations.size(); i++) { FunctionDesc aggFunc = this.aggregations.get(i); if (aggFunc.isDimensionAsMetric()) { addToContextGroupBy(aggFunc.getParameter().getColRefs()); continue; // skip rewrite, let calcite handle } if (aggFunc.needRewriteField()) { String rewriteFieldName = aggFunc.getRewriteFieldName(); RelDataType rewriteFieldType = OLAPTable.createSqlType(typeFactory, aggFunc.getRewriteFieldType(), true); this.context.rewriteFields.put(rewriteFieldName, rewriteFieldType); TblColRef column = buildRewriteColumn(aggFunc); this.context.metricsColumns.add(column); } AggregateCall aggCall = this.rewriteAggCalls.get(i); if (!aggCall.getArgList().isEmpty()) { for (Integer index : aggCall.getArgList()) { TblColRef column = inputColumnRowType.getColumnByIndex(index); if (!column.isInnerColumn() && this.context.belongToContextTables(column)) { this.context.metricsColumns.add(column); } } } } }