Skip to content

Commit

Permalink
Change partial aggregation symbols for variance and standard deviatio…
Browse files Browse the repository at this point in the history
…n aggregators
  • Loading branch information
Sh-Zh-7 authored Jan 19, 2024
1 parent 0cb1499 commit f94f99a
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ public class AggregationUtil {

private static final int INVALID_END_TIME = -1;

private static final String PARTIAL_SUFFIX = "_partial";

private AggregationUtil() {
// Forbidding instantiation
}
Expand Down Expand Up @@ -254,4 +256,8 @@ public static long getOutputColumnSizePerLine(TSDataType tsDataType) {
throw new UnsupportedOperationException("Unknown data type " + tsDataType);
}
}

public static String addPartialSuffix(String aggregationName) {
return aggregationName + PARTIAL_SUFFIX;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@

package org.apache.iotdb.db.queryengine.plan.planner;

import org.apache.iotdb.common.rpc.thrift.TAggregationType;
import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
import org.apache.iotdb.common.rpc.thrift.TSchemaNode;
import org.apache.iotdb.commons.exception.IllegalPathException;
Expand Down Expand Up @@ -698,29 +697,27 @@ private LogicalPlanBuilder convergeAggregationSource(

public static void updateTypeProviderByPartialAggregation(
AggregationDescriptor aggregationDescriptor, TypeProvider typeProvider) {
List<TAggregationType> splitAggregations =
List<String> partialAggregationsNames =
SchemaUtils.splitPartialAggregation(aggregationDescriptor.getAggregationType());
String inputExpressionStr =
aggregationDescriptor.getInputExpressions().get(0).getExpressionString();
for (TAggregationType aggregation : splitAggregations) {
String functionName = aggregation.toString().toLowerCase();
TSDataType aggregationType = SchemaUtils.getAggregationType(functionName);
for (String partialAggregationName : partialAggregationsNames) {
TSDataType aggregationType = SchemaUtils.getAggregationType(partialAggregationName);
typeProvider.setType(
String.format("%s(%s)", functionName, inputExpressionStr),
String.format("%s(%s)", partialAggregationName, inputExpressionStr),
aggregationType == null ? typeProvider.getType(inputExpressionStr) : aggregationType);
}
}

public static void updateTypeProviderByPartialAggregation(
CrossSeriesAggregationDescriptor aggregationDescriptor, TypeProvider typeProvider) {
List<TAggregationType> splitAggregations =
List<String> partialAggregationsNames =
SchemaUtils.splitPartialAggregation(aggregationDescriptor.getAggregationType());
PartialPath path = ((TimeSeriesOperand) aggregationDescriptor.getOutputExpression()).getPath();
for (TAggregationType aggregationType : splitAggregations) {
String functionName = aggregationType.toString().toLowerCase();
for (String partialAggregationName : partialAggregationsNames) {
typeProvider.setType(
String.format("%s(%s)", functionName, path.getFullPath()),
SchemaUtils.getSeriesTypeByPath(path, functionName));
String.format("%s(%s)", partialAggregationName, path.getFullPath()),
SchemaUtils.getSeriesTypeByPath(path, partialAggregationName));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
import java.util.Map;
import java.util.Objects;

import static org.apache.iotdb.db.queryengine.execution.operator.AggregationUtil.addPartialSuffix;

public class AggregationDescriptor {

// aggregation function type
Expand Down Expand Up @@ -146,22 +148,22 @@ protected List<String> getActualAggregationNames(boolean isPartial) {
outputAggregationNames.add(SqlConstant.MIN_TIME);
break;
case STDDEV:
outputAggregationNames.add(SqlConstant.STDDEV);
outputAggregationNames.add(addPartialSuffix(SqlConstant.STDDEV));
break;
case STDDEV_POP:
outputAggregationNames.add(SqlConstant.STDDEV_POP);
outputAggregationNames.add(addPartialSuffix(SqlConstant.STDDEV_POP));
break;
case STDDEV_SAMP:
outputAggregationNames.add(SqlConstant.STDDEV_SAMP);
outputAggregationNames.add(addPartialSuffix(SqlConstant.STDDEV_SAMP));
break;
case VARIANCE:
outputAggregationNames.add(SqlConstant.VARIANCE);
outputAggregationNames.add(addPartialSuffix(SqlConstant.VARIANCE));
break;
case VAR_POP:
outputAggregationNames.add(SqlConstant.VAR_POP);
outputAggregationNames.add(addPartialSuffix(SqlConstant.VAR_POP));
break;
case VAR_SAMP:
outputAggregationNames.add(SqlConstant.VAR_SAMP);
outputAggregationNames.add(addPartialSuffix(SqlConstant.VAR_SAMP));
break;
default:
outputAggregationNames.add(aggregationFuncName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
import java.util.Map;
import java.util.Set;

import static org.apache.iotdb.db.queryengine.execution.operator.AggregationUtil.addPartialSuffix;

public class SchemaUtils {

private SchemaUtils() {}
Expand Down Expand Up @@ -136,8 +138,9 @@ public static TSDataType getAggregationType(String aggregation) {
case SqlConstant.MIN_VALUE:
case SqlConstant.MAX_VALUE:
case SqlConstant.MODE:
default:
return null;
default:
return TSDataType.TEXT;
}
}

Expand Down Expand Up @@ -184,28 +187,28 @@ public static void checkDataTypeWithEncoding(TSDataType dataType, TSEncoding enc
}
}

public static List<TAggregationType> splitPartialAggregation(TAggregationType aggregationType) {
public static List<String> splitPartialAggregation(TAggregationType aggregationType) {
switch (aggregationType) {
case FIRST_VALUE:
return Collections.singletonList(TAggregationType.MIN_TIME);
return Collections.singletonList(SqlConstant.MIN_TIME);
case LAST_VALUE:
return Collections.singletonList(TAggregationType.MAX_TIME);
return Collections.singletonList(SqlConstant.MAX_TIME);
case STDDEV:
return Collections.singletonList(TAggregationType.STDDEV);
return Collections.singletonList(addPartialSuffix(SqlConstant.STDDEV));
case STDDEV_POP:
return Collections.singletonList(TAggregationType.STDDEV_POP);
return Collections.singletonList(addPartialSuffix(SqlConstant.STDDEV_POP));
case STDDEV_SAMP:
return Collections.singletonList(TAggregationType.STDDEV_SAMP);
return Collections.singletonList(addPartialSuffix(SqlConstant.STDDEV_SAMP));
case VARIANCE:
return Collections.singletonList(TAggregationType.VARIANCE);
return Collections.singletonList(addPartialSuffix(SqlConstant.VARIANCE));
case VAR_POP:
return Collections.singletonList(TAggregationType.VAR_POP);
return Collections.singletonList(addPartialSuffix(SqlConstant.VAR_POP));
case VAR_SAMP:
return Collections.singletonList(TAggregationType.VAR_SAMP);
return Collections.singletonList(addPartialSuffix(SqlConstant.VAR_SAMP));
case AVG:
return Arrays.asList(TAggregationType.COUNT, TAggregationType.SUM);
return Arrays.asList(SqlConstant.COUNT, SqlConstant.SUM);
case TIME_DURATION:
return Arrays.asList(TAggregationType.MAX_TIME, TAggregationType.MIN_TIME);
return Arrays.asList(SqlConstant.MAX_TIME, SqlConstant.MIN_TIME);
case SUM:
case MIN_VALUE:
case MAX_VALUE:
Expand Down

0 comments on commit f94f99a

Please sign in to comment.