This is an automated email from the ASF dual-hosted git repository.
JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new 7277b77b84 [flink] Fix decimal column analysis with null statistics
(#9469)
7277b77b84 is described below
commit 7277b77b84795f003f430eb3a1bad637cb4d8e96
Author: Arnav Balyan <[email protected]>
AuthorDate: Sun Aug 30 12:47:28 2026 +0530
[flink] Fix decimal column analysis with null statistics (#9469)
---
.../java/org/apache/paimon/flink/utils/TableStatsUtil.java | 14 ++++++++++----
.../org/apache/paimon/flink/FlinkAnalyzeTableITCase.java | 11 +++++++++++
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/utils/TableStatsUtil.java
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/utils/TableStatsUtil.java
index fe10fa63c0..aadcd0e30f 100644
---
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/utils/TableStatsUtil.java
+++
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/utils/TableStatsUtil.java
@@ -212,17 +212,23 @@ public class TableStatsUtil {
null,
null);
} else if (typeRoot.equals(DataTypeRoot.DECIMAL)) {
- BigDecimal max =
BigDecimal.valueOf(doubleColumnStatsData.getMax());
- BigDecimal min =
BigDecimal.valueOf(doubleColumnStatsData.getMin());
+ BigDecimal max =
+ doubleColumnStatsData.getMax() == null
+ ? null
+ :
BigDecimal.valueOf(doubleColumnStatsData.getMax());
+ BigDecimal min =
+ doubleColumnStatsData.getMin() == null
+ ? null
+ :
BigDecimal.valueOf(doubleColumnStatsData.getMin());
return ColStats.newColStats(
field.id(),
null != doubleColumnStatsData.getNdv()
? doubleColumnStatsData.getNdv()
: null,
- null != doubleColumnStatsData.getMin()
+ min != null
? Decimal.fromBigDecimal(min, min.precision(),
min.scale())
: null,
- null != doubleColumnStatsData.getMax()
+ max != null
? Decimal.fromBigDecimal(max, max.precision(),
max.scale())
: null,
null != doubleColumnStatsData.getNullCount()
diff --git
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/FlinkAnalyzeTableITCase.java
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/FlinkAnalyzeTableITCase.java
index e186080d9f..5a99925de5 100644
---
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/FlinkAnalyzeTableITCase.java
+++
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/FlinkAnalyzeTableITCase.java
@@ -75,6 +75,17 @@ public class FlinkAnalyzeTableITCase extends
CatalogITCaseBase {
assertThat(newStats.get()).isSameAs(stats);
}
+ @Test
+ public void testAnalyzeAllNullDecimalColumn() throws
Catalog.TableNotExistException {
+ sql("CREATE TABLE T (id INT, amount DECIMAL(10, 2))");
+ sql("INSERT INTO T VALUES (1, CAST(NULL AS DECIMAL(10, 2)))");
+
+ sql("ANALYZE TABLE T COMPUTE STATISTICS FOR ALL COLUMNS");
+
+ ColStats<?> decimalStats =
paimonTable("T").statistics().get().colStats().get("amount");
+ assertThat(decimalStats).isEqualTo(ColStats.newColStats(1, 0L, null,
null, 1L, null, null));
+ }
+
@Test
public void testAnalyzeTableColumn() throws Catalog.TableNotExistException
{
sql(