Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -697,29 +696,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