TblColRef buildRewriteColumn(FunctionDesc aggFunc) { TblColRef colRef; if (aggFunc.needRewriteField()) { String colName = aggFunc.getRewriteFieldName(); colRef = this.context.firstTableScan.makeRewriteColumn(colName); } else { throw new IllegalStateException("buildRewriteColumn on a aggrFunc that does not need rewrite " + aggFunc); } return colRef; }
@SuppressWarnings("unused") MeasureDesc findMeasure(TblColRef col) { for (MeasureDesc measure : this.context.realization.getMeasures()) { if (col.getName().equals(measure.getFunction().getRewriteFieldName())) { return measure; } } return null; }
private List<ColumnDesc> listSourceColumns() { ProjectManager mgr = ProjectManager.getInstance(olapSchema.getConfig()); List<ColumnDesc> tableColumns = mgr.listExposedColumns(olapSchema.getProjectName(), sourceTable, exposeMore); List<ColumnDesc> metricColumns = Lists.newArrayList(); List<MeasureDesc> countMeasures = mgr.listEffectiveRewriteMeasures(olapSchema.getProjectName(), sourceTable.getIdentity()); HashSet<String> metFields = new HashSet<String>(); for (MeasureDesc m : countMeasures) { FunctionDesc func = m.getFunction(); String fieldName = func.getRewriteFieldName(); if (!metFields.contains(fieldName)) { metFields.add(fieldName); ColumnDesc fakeCountCol = func.newFakeRewriteColumn(sourceTable); metricColumns.add(fakeCountCol); } } Collections.sort(tableColumns, new Comparator<ColumnDesc>() { @Override public int compare(ColumnDesc o1, ColumnDesc o2) { return o1.getZeroBasedIndex() - o2.getZeroBasedIndex(); } }); return Lists.newArrayList(Iterables.concat(tableColumns, metricColumns)); }
String aggOutName; if (aggFunc != null) { aggOutName = aggFunc.getRewriteFieldName(); } else { AggregateCall aggCall = this.rewriteAggCalls.get(i);
String rewriteFieldName = metric.getRewriteFieldName(); tupleIdx[i] = tupleInfo.hasField(rewriteFieldName) ? tupleInfo.getFieldIndex(rewriteFieldName) : -1; } else {
RelDataTypeField field = getInput().getRowType().getField(func.getRewriteFieldName(), true, false); if (newArgList.isEmpty()) { newArgList.add(field.getIndex());
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); } } } } }
public ColumnDesc newFakeRewriteColumn(TableDesc sourceTable) { ColumnDesc fakeCol = new ColumnDesc(); fakeCol.setName(getRewriteFieldName()); fakeCol.setDatatype(getRewriteFieldType().toString()); if (isCount()) fakeCol.setNullable(false); fakeCol.init(sourceTable); return fakeCol; }
FunctionDesc sumFunc = FunctionDesc.newInstance(FunctionDesc.FUNC_SUM, ParameterDesc.newInstance(numericCol), numericCol.getType().toString()); String sumFieldName = sumFunc.getRewriteFieldName(); numericTupleIdx = tupleInfo.hasField(sumFieldName) ? tupleInfo.getFieldIndex(sumFieldName) : -1; } else { FunctionDesc countFunction = FunctionDesc.newInstance(FunctionDesc.FUNC_COUNT, ParameterDesc.newInstance("1"), "bigint"); numericTupleIdx = tupleInfo.getFieldIndex(countFunction.getRewriteFieldName());
private static void convertAggregationToDimension(OLAPContext olapContext, Collection<FunctionDesc> availableAggregations, String factTableName) { Iterator<FunctionDesc> it = olapContext.aggregations.iterator(); while (it.hasNext()) { FunctionDesc functionDesc = it.next(); if (!availableAggregations.contains(functionDesc)) { // try to convert the metric to dimension to see if it works TblColRef col = functionDesc.selectTblColRef(olapContext.metricsColumns, factTableName); functionDesc.setDimensionAsMetric(true); olapContext.rewriteFields.remove(functionDesc.getRewriteFieldName()); if (col != null) { olapContext.metricsColumns.remove(col); olapContext.groupByColumns.add(col); } logger.info("Adjust OLAPContext for " + functionDesc); } } }
public RowValueDecoder(HBaseColumnDesc hbaseColumn) { this.hbaseColumn = hbaseColumn; this.projectionIndex = new BitSet(); this.names = new ArrayList<String>(); this.measures = hbaseColumn.getMeasures(); for (MeasureDesc measure : measures) { this.names.add(measure.getFunction().getRewriteFieldName()); } this.codec = new MeasureCodec(measures); this.values = new Object[measures.length]; }
private TupleInfo buildTupleInfo() { TupleInfo info = new TupleInfo(); int index = 0; for (int i = 0; i < columns.size(); i++) { TblColRef column = columns.get(i); // if (!dimensions.contains(column)) { // continue; // } info.setField(columnNames.get(i), columns.get(i), columns.get(i).getType().getName(), index++); } for (FunctionDesc measure : measures) { info.setField(measure.getRewriteFieldName(), null, measure.getSQLType(), index++); } return info; }
public RowValueDecoder(RowValueDecoder rowValueDecoder) { this.hbaseColumn = rowValueDecoder.getHBaseColumn(); this.projectionIndex = rowValueDecoder.getProjectionIndex(); this.names = new ArrayList<String>(); this.measures = hbaseColumn.getMeasures(); for (MeasureDesc measure : measures) { this.names.add(measure.getFunction().getRewriteFieldName()); } this.codec = new MeasureCodec(measures); this.values = new Object[measures.length]; }
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; } }
TblColRef buildRewriteColumn(FunctionDesc aggFunc) { TblColRef colRef; if (aggFunc.needRewriteField()) { String colName = aggFunc.getRewriteFieldName(); colRef = this.context.firstTableScan.makeRewriteColumn(colName); } else { throw new IllegalStateException("buildRewriteColumn on a aggrFunc that does not need rewrite " + aggFunc); } return colRef; }
public RowValueDecoder(HBaseColumnDesc hbaseColumn) { this.hbaseColumn = hbaseColumn; this.projectionIndex = new BitSet(); this.names = new ArrayList<String>(); this.measures = hbaseColumn.getMeasures(); for (MeasureDesc measure : measures) { this.names.add(measure.getFunction().getRewriteFieldName()); } this.codec = new MeasureCodec(measures); this.values = new Object[measures.length]; }
@SuppressWarnings("unused") MeasureDesc findMeasure(TblColRef col) { for (MeasureDesc measure : this.context.realization.getMeasures()) { if (col.getName().equals(measure.getFunction().getRewriteFieldName())) { return measure; } } return null; }
public RowValueDecoder(RowValueDecoder rowValueDecoder) { this.hbaseColumn = rowValueDecoder.getHBaseColumn(); this.projectionIndex = rowValueDecoder.getProjectionIndex(); this.names = new ArrayList<String>(); this.measures = hbaseColumn.getMeasures(); for (MeasureDesc measure : measures) { this.names.add(measure.getFunction().getRewriteFieldName()); } this.codec = new MeasureCodec(measures); this.values = new Object[measures.length]; }
private List<ColumnDesc> listSourceColumns() { ProjectManager mgr = ProjectManager.getInstance(olapSchema.getConfig()); List<ColumnDesc> tableColumns = mgr.listExposedColumns(olapSchema.getProjectName(), sourceTable, exposeMore); List<ColumnDesc> metricColumns = Lists.newArrayList(); List<MeasureDesc> countMeasures = mgr.listEffectiveRewriteMeasures(olapSchema.getProjectName(), sourceTable.getIdentity()); HashSet<String> metFields = new HashSet<String>(); for (MeasureDesc m : countMeasures) { FunctionDesc func = m.getFunction(); String fieldName = func.getRewriteFieldName(); if (!metFields.contains(fieldName)) { metFields.add(fieldName); ColumnDesc fakeCountCol = func.newFakeRewriteColumn(sourceTable); metricColumns.add(fakeCountCol); } } Collections.sort(tableColumns, new Comparator<ColumnDesc>() { @Override public int compare(ColumnDesc o1, ColumnDesc o2) { return o1.getZeroBasedIndex() - o2.getZeroBasedIndex(); } }); return Lists.newArrayList(Iterables.concat(tableColumns, metricColumns)); }
public ColumnDesc newFakeRewriteColumn(TableDesc sourceTable) { ColumnDesc fakeCol = new ColumnDesc(); fakeCol.setName(getRewriteFieldName()); fakeCol.setDatatype(getRewriteFieldType().toString()); if (isCount()) fakeCol.setNullable(false); fakeCol.init(sourceTable); return fakeCol; }