Support negative keyword in Broker Load (#1101)

This commit is contained in:
lichaoyong
2019-05-06 22:15:27 +08:00
committed by ZHAO Chun
parent 11be24df40
commit 0c62cb888f
2 changed files with 18 additions and 0 deletions

View File

@ -17,6 +17,7 @@
package org.apache.doris.load;
import org.apache.doris.catalog.AggregateType;
import org.apache.doris.analysis.BinaryPredicate;
import org.apache.doris.analysis.CancelLoadStmt;
import org.apache.doris.analysis.ColumnSeparator;
@ -734,6 +735,15 @@ public class Load {
throw new DdlException("Column has no default value. column: " + columnName);
}
// check negative for sum aggreate type
if (dataDescription.isNegative()) {
for (Column column : tableSchema) {
if (!column.isKey() && column.getAggregationType() != AggregateType.SUM) {
throw new DdlException("Column is not SUM AggreateType. column:" + column.getName());
}
}
}
// check hll
for (Column column : tableSchema) {
if (column.getDataType() == PrimitiveType.HLL) {

View File

@ -17,7 +17,9 @@
package org.apache.doris.planner;
import org.apache.doris.catalog.AggregateType;
import org.apache.doris.analysis.Analyzer;
import org.apache.doris.analysis.ArithmeticExpr;
import org.apache.doris.analysis.BinaryPredicate;
import org.apache.doris.analysis.BrokerDesc;
import org.apache.doris.analysis.Expr;
@ -25,6 +27,7 @@ import org.apache.doris.analysis.ExprSubstitutionMap;
import org.apache.doris.analysis.FunctionCallExpr;
import org.apache.doris.analysis.FunctionName;
import org.apache.doris.analysis.FunctionParams;
import org.apache.doris.analysis.IntLiteral;
import org.apache.doris.analysis.NullLiteral;
import org.apache.doris.analysis.SlotDescriptor;
import org.apache.doris.analysis.SlotRef;
@ -381,6 +384,7 @@ public class BrokerScanNode extends ScanNode {
}
}
boolean isNegative = context.fileGroup.isNegative();
for (SlotDescriptor destSlotDesc : desc.getSlots()) {
if (!destSlotDesc.isMaterialized()) {
continue;
@ -412,6 +416,10 @@ public class BrokerScanNode extends ScanNode {
}
}
if (isNegative && destSlotDesc.getColumn().getAggregationType() == AggregateType.SUM) {
expr = new ArithmeticExpr(ArithmeticExpr.Operator.MULTIPLY, expr, new IntLiteral(-1));
expr.analyze(analyzer);
}
expr = castToSlot(destSlotDesc, expr);
context.params.putToExpr_of_dest_slot(destSlotDesc.getId().asInt(), expr.treeToThrift());
}