This is an automated email from the ASF dual-hosted git repository.

roryqi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new bfe9201e00 [#8821] feat(core,server): Supports to query all partition 
statisitics (#8894)
bfe9201e00 is described below

commit bfe9201e00bb33b4d1c415a0d2d7ced07827ab19
Author: roryqi <[email protected]>
AuthorDate: Fri Oct 24 20:44:51 2025 +0800

    [#8821] feat(core,server): Supports to query all partition statisitics 
(#8894)
    
    ### What changes were proposed in this pull request?
    
     Supports to query all partition statisitics
    
    ### Why are the changes needed?
    
    Fix: #8821
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Added IT.
---
 .../java/org/apache/gravitino/stats/PartitionRange.java   |  3 +++
 .../gravitino/client/integration/test/StatisticIT.java    | 15 +++++++++++++++
 .../gravitino/server/web/rest/StatisticOperations.java    |  9 +++------
 3 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/api/src/main/java/org/apache/gravitino/stats/PartitionRange.java 
b/api/src/main/java/org/apache/gravitino/stats/PartitionRange.java
index 207a3f1f3a..07dd80462a 100644
--- a/api/src/main/java/org/apache/gravitino/stats/PartitionRange.java
+++ b/api/src/main/java/org/apache/gravitino/stats/PartitionRange.java
@@ -38,6 +38,9 @@ public class PartitionRange {
 
   private PartitionRange() {}
 
+  /** A PartitionRange that includes all partitions. */
+  public static final PartitionRange ALL_PARTITIONS = new PartitionRange();
+
   /**
    * Creates a PartitionRange which only has upper bound partition name.
    *
diff --git 
a/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/StatisticIT.java
 
b/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/StatisticIT.java
index f182952cea..e3d3b255b1 100644
--- 
a/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/StatisticIT.java
+++ 
b/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/StatisticIT.java
@@ -167,6 +167,7 @@ public class StatisticIT extends BaseIT {
     statisticsToUpdate.add(PartitionStatisticsModification.update("p1", 
stats));
     
table.supportsPartitionStatistics().updatePartitionStatistics(statisticsToUpdate);
 
+    // Test range partitions
     List<PartitionStatistics> listedStats =
         table.supportsPartitionStatistics().listPartitionStatistics(range);
     Assertions.assertEquals(1, listedStats.size());
@@ -180,6 +181,20 @@ public class StatisticIT extends BaseIT {
     Assertions.assertEquals(statistics[1].name(), "custom-k2");
     Assertions.assertEquals(statistics[1].value().get(), 
StatisticValues.stringValue("v2"));
 
+    // Test list all partitions
+    listedStats =
+        
table.supportsPartitionStatistics().listPartitionStatistics(PartitionRange.ALL_PARTITIONS);
+    Assertions.assertEquals(1, listedStats.size());
+    partitionStatistics = listedStats.get(0);
+    Assertions.assertEquals("p1", partitionStatistics.partitionName());
+    statistics = partitionStatistics.statistics();
+    Assertions.assertEquals(2, statistics.length);
+    Arrays.sort(statistics, Comparator.comparing(Statistic::name));
+    Assertions.assertEquals(statistics[0].name(), "custom-k1");
+    Assertions.assertEquals(statistics[0].value().get(), 
StatisticValues.stringValue("v1"));
+    Assertions.assertEquals(statistics[1].name(), "custom-k2");
+    Assertions.assertEquals(statistics[1].value().get(), 
StatisticValues.stringValue("v2"));
+
     // update partial partition statistics
     statisticsToUpdate.clear();
     stats.clear();
diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/rest/StatisticOperations.java
 
b/server/src/main/java/org/apache/gravitino/server/web/rest/StatisticOperations.java
index 76426cdb7d..ce35d859a2 100644
--- 
a/server/src/main/java/org/apache/gravitino/server/web/rest/StatisticOperations.java
+++ 
b/server/src/main/java/org/apache/gravitino/server/web/rest/StatisticOperations.java
@@ -283,17 +283,14 @@ public class StatisticOperations {
                   "Listing partition statistics is only supported for tables 
now.");
             }
 
-            if (fromPartitionName == null && toPartitionName == null) {
-              throw new IllegalArgumentException(
-                  "Both 'from' and 'to' parameters cannot be null at the same 
time.");
-            }
-
             MetadataObjectUtil.checkMetadataObject(metalake, object);
 
             PartitionRange range;
             PartitionRange.BoundType fromBoundType = 
getFromBoundType(fromInclusive);
             PartitionRange.BoundType toBoundType = 
getFromBoundType(toInclusive);
-            if (fromPartitionName != null && toPartitionName != null) {
+            if (fromPartitionName == null && toPartitionName == null) {
+              range = PartitionRange.ALL_PARTITIONS;
+            } else if (fromPartitionName != null && toPartitionName != null) {
               range =
                   PartitionRange.between(
                       fromPartitionName, fromBoundType, toPartitionName, 
toBoundType);

Reply via email to