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);