You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@paimon.apache.org by lz...@apache.org on 2024/01/08 07:58:26 UTC
(incubator-paimon) branch master updated: [core] FieldIgnoreRetractAgg should implement the reset method by calling the wrapped aggregator (#2653)
This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-paimon.git
The following commit(s) were added to refs/heads/master by this push:
new b767e8315 [core] FieldIgnoreRetractAgg should implement the reset method by calling the wrapped aggregator (#2653)
b767e8315 is described below
commit b767e83150363128de452821a901038aff1ae807
Author: tsreaper <ts...@gmail.com>
AuthorDate: Mon Jan 8 15:58:21 2024 +0800
[core] FieldIgnoreRetractAgg should implement the reset method by calling the wrapped aggregator (#2653)
---
.../compact/aggregate/FieldIgnoreRetractAgg.java | 5 ++++
.../apache/paimon/flink/PreAggregationITCase.java | 33 +++++++++++++++++++++-
2 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/aggregate/FieldIgnoreRetractAgg.java b/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/aggregate/FieldIgnoreRetractAgg.java
index 449b55fba..7fe531378 100644
--- a/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/aggregate/FieldIgnoreRetractAgg.java
+++ b/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/aggregate/FieldIgnoreRetractAgg.java
@@ -38,6 +38,11 @@ public class FieldIgnoreRetractAgg extends FieldAggregator {
return aggregator.agg(accumulator, inputField);
}
+ @Override
+ public void reset() {
+ aggregator.reset();
+ }
+
@Override
public Object retract(Object accumulator, Object retractField) {
return accumulator;
diff --git a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PreAggregationITCase.java b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PreAggregationITCase.java
index d2233a63e..33e0b4cab 100644
--- a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PreAggregationITCase.java
+++ b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PreAggregationITCase.java
@@ -40,6 +40,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -1054,7 +1055,7 @@ public class PreAggregationITCase {
public static class FirstValueAggregation extends CatalogITCaseBase {
@Override
protected List<String> ddl() {
- return Collections.singletonList(
+ return Arrays.asList(
"CREATE TABLE T ("
+ "k INT,"
+ "a INT,"
@@ -1066,6 +1067,15 @@ public class PreAggregationITCase {
+ "'fields.b.aggregate-function'='first_value',"
+ "'fields.c.aggregate-function'='first_not_null_value',"
+ "'sequence.field'='a'"
+ + ");",
+ "CREATE TABLE T2 ("
+ + "k INT,"
+ + "v STRING,"
+ + "PRIMARY KEY (k) NOT ENFORCED)"
+ + "WITH ("
+ + "'merge-engine' = 'aggregation',"
+ + "'fields.v.aggregate-function' = 'first_value',"
+ + "'fields.v.ignore-retract' = 'true'"
+ ");");
}
@@ -1109,6 +1119,27 @@ public class PreAggregationITCase {
assertThat(result)
.containsExactlyInAnyOrder(Row.of(1, 2, null, "1"), Row.of(2, 2, "2", "2"));
}
+
+ @Test
+ public void testAggregatorResetWhenIgnoringRetract() {
+ int numRows = 100;
+ batchSql(
+ "INSERT INTO T2 VALUES "
+ + IntStream.range(0, numRows)
+ .mapToObj(i -> String.format("(%d, '%d')", i, i))
+ .collect(Collectors.joining(", ")));
+ batchSql(
+ "INSERT INTO T2 VALUES "
+ + IntStream.range(numRows / 2, numRows)
+ .mapToObj(i -> String.format("(%d, '%d')", i, i + numRows))
+ .collect(Collectors.joining(", ")));
+ List<Row> result = batchSql("SELECT * FROM T2");
+ assertThat(result)
+ .containsExactlyInAnyOrder(
+ IntStream.range(0, numRows)
+ .mapToObj(i -> Row.of(i, String.valueOf(i)))
+ .toArray(Row[]::new));
+ }
}
/** IT Test for aggregation merge engine. */