From f221c80490b42bdb54ef5f1d6babb59a332a55ca Mon Sep 17 00:00:00 2001 From: chaoyli Date: Mon, 6 May 2019 20:49:03 +0800 Subject: [PATCH 1/2] Support negative keyword in Broker Load --- fe/src/main/java/org/apache/doris/load/Load.java | 9 +++++++++ .../java/org/apache/doris/planner/BrokerScanNode.java | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/fe/src/main/java/org/apache/doris/load/Load.java b/fe/src/main/java/org/apache/doris/load/Load.java index d72f3aebae1470..5ed94b97a7f0a7 100644 --- a/fe/src/main/java/org/apache/doris/load/Load.java +++ b/fe/src/main/java/org/apache/doris/load/Load.java @@ -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,14 @@ public static void checkAndCreateSource(Database db, DataDescription dataDescrip throw new DdlException("Column has no default value. column: " + columnName); } + // check negative for sum aggreate type + for (Column column : tableSchema) { + if (!column.isKey() && column.getAggregationType() != AggregateType.SUM + && dataDescription.isNegative()) { + throw new DdlException("Column is not SUM AggreateType. column:" + column.getName()); + } + } + // check hll for (Column column : tableSchema) { if (column.getDataType() == PrimitiveType.HLL) { diff --git a/fe/src/main/java/org/apache/doris/planner/BrokerScanNode.java b/fe/src/main/java/org/apache/doris/planner/BrokerScanNode.java index 2db53ece1b8705..fbc6327d3d678d 100644 --- a/fe/src/main/java/org/apache/doris/planner/BrokerScanNode.java +++ b/fe/src/main/java/org/apache/doris/planner/BrokerScanNode.java @@ -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.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 @@ private void finalizeParams(ParamCreateContext context) throws UserException, An } } + boolean isNegative = context.fileGroup.isNegative(); for (SlotDescriptor destSlotDesc : desc.getSlots()) { if (!destSlotDesc.isMaterialized()) { continue; @@ -412,6 +416,10 @@ private void finalizeParams(ParamCreateContext context) throws UserException, An } } + 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()); } From 537a74adabb3cbfb92acf2974241ea6f6b97c2a5 Mon Sep 17 00:00:00 2001 From: chaoyli Date: Mon, 6 May 2019 21:02:35 +0800 Subject: [PATCH 2/2] Support negative keyword in Broker Load --- fe/src/main/java/org/apache/doris/load/Load.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fe/src/main/java/org/apache/doris/load/Load.java b/fe/src/main/java/org/apache/doris/load/Load.java index 5ed94b97a7f0a7..858ee51a155730 100644 --- a/fe/src/main/java/org/apache/doris/load/Load.java +++ b/fe/src/main/java/org/apache/doris/load/Load.java @@ -736,10 +736,11 @@ public static void checkAndCreateSource(Database db, DataDescription dataDescrip } // check negative for sum aggreate type - for (Column column : tableSchema) { - if (!column.isKey() && column.getAggregationType() != AggregateType.SUM - && dataDescription.isNegative()) { - throw new DdlException("Column is not SUM AggreateType. column:" + column.getName()); + 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()); + } } }