You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by bl...@apache.org on 2026/04/14 20:05:19 UTC
(iceberg) branch main updated: API, Core: Move stats classes to core as package-private (#15971)
This is an automated email from the ASF dual-hosted git repository.
blue pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/main by this push:
new ffb095db0c API, Core: Move stats classes to core as package-private (#15971)
ffb095db0c is described below
commit ffb095db0c5f0bf9962a89a13f0a1953c740d90a
Author: Eduard Tudenhoefner <et...@gmail.com>
AuthorDate: Tue Apr 14 22:05:11 2026 +0200
API, Core: Move stats classes to core as package-private (#15971)
This moves all stats related code into iceberg-core to avoid any potential API breakages before the spec has been finalized.
It also moves all classes under the org.apache.iceberg package for usability/visibility in other classes v4-related classes.
---
.../iceberg/{stats => }/BaseContentStats.java | 7 +++----
.../apache/iceberg/{stats => }/BaseFieldStats.java | 4 ++--
.../java/org/apache/iceberg}/ContentStats.java | 5 ++---
.../java/org/apache/iceberg}/FieldStatistic.java | 4 ++--
.../main/java/org/apache/iceberg}/FieldStats.java | 5 ++---
.../main/java/org/apache/iceberg/MetricsUtil.java | 5 +----
.../main/java/org/apache/iceberg}/StatsUtil.java | 5 ++---
.../main/java/org/apache/iceberg/TrackedFile.java | 1 -
.../iceberg/{stats => }/TestContentStats.java | 23 +++++++++++-----------
.../apache/iceberg/{stats => }/TestFieldStats.java | 21 ++++++++++----------
.../test/java/org/apache/iceberg/TestMetrics.java | 2 --
.../java/org/apache/iceberg}/TestStatsUtil.java | 19 +++++++++---------
.../java/org/apache/iceberg/TestTrackedFile.java | 1 -
13 files changed, 44 insertions(+), 58 deletions(-)
diff --git a/core/src/main/java/org/apache/iceberg/stats/BaseContentStats.java b/core/src/main/java/org/apache/iceberg/BaseContentStats.java
similarity index 98%
rename from core/src/main/java/org/apache/iceberg/stats/BaseContentStats.java
rename to core/src/main/java/org/apache/iceberg/BaseContentStats.java
index be56c411b6..45900b03e2 100644
--- a/core/src/main/java/org/apache/iceberg/stats/BaseContentStats.java
+++ b/core/src/main/java/org/apache/iceberg/BaseContentStats.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.iceberg.stats;
+package org.apache.iceberg;
import java.io.Serializable;
import java.util.List;
@@ -24,7 +24,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
-import org.apache.iceberg.Schema;
import org.apache.iceberg.data.GenericRecord;
import org.apache.iceberg.relocated.com.google.common.base.MoreObjects;
import org.apache.iceberg.relocated.com.google.common.base.Preconditions;
@@ -33,14 +32,14 @@ import org.apache.iceberg.relocated.com.google.common.collect.Maps;
import org.apache.iceberg.types.Type;
import org.apache.iceberg.types.Types;
-public class BaseContentStats implements ContentStats, Serializable {
+class BaseContentStats implements ContentStats, Serializable {
private final List<FieldStats<?>> fieldStats;
private final Map<Integer, FieldStats<?>> fieldStatsById;
private final Types.StructType statsStruct;
/** Used by Avro reflection to instantiate this class when reading manifest files. */
- public BaseContentStats(Types.StructType projection) {
+ BaseContentStats(Types.StructType projection) {
this.statsStruct = projection;
this.fieldStats = Lists.newArrayListWithCapacity(projection.fields().size());
this.fieldStatsById = Maps.newLinkedHashMapWithExpectedSize(projection.fields().size());
diff --git a/core/src/main/java/org/apache/iceberg/stats/BaseFieldStats.java b/core/src/main/java/org/apache/iceberg/BaseFieldStats.java
similarity index 98%
rename from core/src/main/java/org/apache/iceberg/stats/BaseFieldStats.java
rename to core/src/main/java/org/apache/iceberg/BaseFieldStats.java
index 470303179b..11da570b8f 100644
--- a/core/src/main/java/org/apache/iceberg/stats/BaseFieldStats.java
+++ b/core/src/main/java/org/apache/iceberg/BaseFieldStats.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.iceberg.stats;
+package org.apache.iceberg;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
@@ -28,7 +28,7 @@ import org.apache.iceberg.types.Type;
import org.apache.iceberg.types.Types;
import org.apache.iceberg.util.ByteBuffers;
-public class BaseFieldStats<T> extends SupportsIndexProjection implements FieldStats<T> {
+class BaseFieldStats<T> extends SupportsIndexProjection implements FieldStats<T> {
private static final int[] IDENTITY_MAPPING = identityMapping();
private final int fieldId;
private final Type type;
diff --git a/api/src/main/java/org/apache/iceberg/stats/ContentStats.java b/core/src/main/java/org/apache/iceberg/ContentStats.java
similarity index 92%
rename from api/src/main/java/org/apache/iceberg/stats/ContentStats.java
rename to core/src/main/java/org/apache/iceberg/ContentStats.java
index b39db25651..623a8eb39b 100644
--- a/api/src/main/java/org/apache/iceberg/stats/ContentStats.java
+++ b/core/src/main/java/org/apache/iceberg/ContentStats.java
@@ -16,13 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.iceberg.stats;
+package org.apache.iceberg;
import java.util.List;
-import org.apache.iceberg.StructLike;
import org.apache.iceberg.types.Types;
-public interface ContentStats extends StructLike {
+interface ContentStats extends StructLike {
/** A list of all the {@link FieldStats} */
List<FieldStats<?>> fieldStats();
diff --git a/api/src/main/java/org/apache/iceberg/stats/FieldStatistic.java b/core/src/main/java/org/apache/iceberg/FieldStatistic.java
similarity index 98%
rename from api/src/main/java/org/apache/iceberg/stats/FieldStatistic.java
rename to core/src/main/java/org/apache/iceberg/FieldStatistic.java
index e3fd26a927..8571238425 100644
--- a/api/src/main/java/org/apache/iceberg/stats/FieldStatistic.java
+++ b/core/src/main/java/org/apache/iceberg/FieldStatistic.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.iceberg.stats;
+package org.apache.iceberg;
import static org.apache.iceberg.types.Types.NestedField.optional;
@@ -25,7 +25,7 @@ import org.apache.iceberg.relocated.com.google.common.collect.Lists;
import org.apache.iceberg.types.Type;
import org.apache.iceberg.types.Types;
-public enum FieldStatistic {
+enum FieldStatistic {
VALUE_COUNT(1, "value_count"),
NULL_VALUE_COUNT(2, "null_value_count"),
NAN_VALUE_COUNT(3, "nan_value_count"),
diff --git a/api/src/main/java/org/apache/iceberg/stats/FieldStats.java b/core/src/main/java/org/apache/iceberg/FieldStats.java
similarity index 92%
rename from api/src/main/java/org/apache/iceberg/stats/FieldStats.java
rename to core/src/main/java/org/apache/iceberg/FieldStats.java
index 6411b479af..e42d774c7c 100644
--- a/api/src/main/java/org/apache/iceberg/stats/FieldStats.java
+++ b/core/src/main/java/org/apache/iceberg/FieldStats.java
@@ -16,12 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.iceberg.stats;
+package org.apache.iceberg;
-import org.apache.iceberg.StructLike;
import org.apache.iceberg.types.Type;
-public interface FieldStats<T> extends StructLike {
+interface FieldStats<T> extends StructLike {
/** The field ID of the statistic */
int fieldId();
diff --git a/core/src/main/java/org/apache/iceberg/MetricsUtil.java b/core/src/main/java/org/apache/iceberg/MetricsUtil.java
index 944e833b31..72c57a8beb 100644
--- a/core/src/main/java/org/apache/iceberg/MetricsUtil.java
+++ b/core/src/main/java/org/apache/iceberg/MetricsUtil.java
@@ -34,9 +34,6 @@ import org.apache.iceberg.relocated.com.google.common.collect.ImmutableList;
import org.apache.iceberg.relocated.com.google.common.collect.Lists;
import org.apache.iceberg.relocated.com.google.common.collect.Maps;
import org.apache.iceberg.relocated.com.google.common.collect.Sets;
-import org.apache.iceberg.stats.BaseContentStats;
-import org.apache.iceberg.stats.BaseFieldStats;
-import org.apache.iceberg.stats.ContentStats;
import org.apache.iceberg.types.Conversions;
import org.apache.iceberg.types.Type;
import org.apache.iceberg.types.TypeUtil;
@@ -482,7 +479,7 @@ public class MetricsUtil {
}
}
- public static ContentStats fromMetrics(Schema schema, Metrics metrics) {
+ static ContentStats fromMetrics(Schema schema, Metrics metrics) {
if (null == metrics) {
return null;
}
diff --git a/api/src/main/java/org/apache/iceberg/stats/StatsUtil.java b/core/src/main/java/org/apache/iceberg/StatsUtil.java
similarity index 98%
rename from api/src/main/java/org/apache/iceberg/stats/StatsUtil.java
rename to core/src/main/java/org/apache/iceberg/StatsUtil.java
index 2ff52f92bd..39fef3d372 100644
--- a/api/src/main/java/org/apache/iceberg/stats/StatsUtil.java
+++ b/core/src/main/java/org/apache/iceberg/StatsUtil.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.iceberg.stats;
+package org.apache.iceberg;
import static org.apache.iceberg.types.Types.NestedField.optional;
@@ -25,7 +25,6 @@ import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
-import org.apache.iceberg.Schema;
import org.apache.iceberg.relocated.com.google.common.collect.Lists;
import org.apache.iceberg.relocated.com.google.common.collect.Sets;
import org.apache.iceberg.types.TypeUtil;
@@ -33,7 +32,7 @@ import org.apache.iceberg.types.Types;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class StatsUtil {
+class StatsUtil {
private static final Logger LOG = LoggerFactory.getLogger(StatsUtil.class);
// the number of reserved field IDs from the reserved field ID space as defined in
// https://iceberg.apache.org/spec/#reserved-field-ids
diff --git a/core/src/main/java/org/apache/iceberg/TrackedFile.java b/core/src/main/java/org/apache/iceberg/TrackedFile.java
index 78bb7e5288..d15f9e582c 100644
--- a/core/src/main/java/org/apache/iceberg/TrackedFile.java
+++ b/core/src/main/java/org/apache/iceberg/TrackedFile.java
@@ -22,7 +22,6 @@ import java.nio.ByteBuffer;
import java.util.Collections;
import java.util.List;
import java.util.Set;
-import org.apache.iceberg.stats.ContentStats;
import org.apache.iceberg.types.Types;
/** A file tracked by a manifest. */
diff --git a/core/src/test/java/org/apache/iceberg/stats/TestContentStats.java b/core/src/test/java/org/apache/iceberg/TestContentStats.java
similarity index 95%
rename from core/src/test/java/org/apache/iceberg/stats/TestContentStats.java
rename to core/src/test/java/org/apache/iceberg/TestContentStats.java
index 6baff7dfe6..0f06276d45 100644
--- a/core/src/test/java/org/apache/iceberg/stats/TestContentStats.java
+++ b/core/src/test/java/org/apache/iceberg/TestContentStats.java
@@ -16,22 +16,21 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.iceberg.stats;
-
-import static org.apache.iceberg.stats.FieldStatistic.AVG_VALUE_SIZE;
-import static org.apache.iceberg.stats.FieldStatistic.EXACT_BOUNDS;
-import static org.apache.iceberg.stats.FieldStatistic.LOWER_BOUND;
-import static org.apache.iceberg.stats.FieldStatistic.MAX_VALUE_SIZE;
-import static org.apache.iceberg.stats.FieldStatistic.NAN_VALUE_COUNT;
-import static org.apache.iceberg.stats.FieldStatistic.NULL_VALUE_COUNT;
-import static org.apache.iceberg.stats.FieldStatistic.UPPER_BOUND;
-import static org.apache.iceberg.stats.FieldStatistic.VALUE_COUNT;
+package org.apache.iceberg;
+
+import static org.apache.iceberg.FieldStatistic.AVG_VALUE_SIZE;
+import static org.apache.iceberg.FieldStatistic.EXACT_BOUNDS;
+import static org.apache.iceberg.FieldStatistic.LOWER_BOUND;
+import static org.apache.iceberg.FieldStatistic.MAX_VALUE_SIZE;
+import static org.apache.iceberg.FieldStatistic.NAN_VALUE_COUNT;
+import static org.apache.iceberg.FieldStatistic.NULL_VALUE_COUNT;
+import static org.apache.iceberg.FieldStatistic.UPPER_BOUND;
+import static org.apache.iceberg.FieldStatistic.VALUE_COUNT;
import static org.apache.iceberg.types.Types.NestedField.optional;
import static org.apache.iceberg.types.Types.NestedField.required;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import org.apache.iceberg.Schema;
import org.apache.iceberg.data.GenericRecord;
import org.apache.iceberg.relocated.com.google.common.collect.ImmutableSet;
import org.apache.iceberg.types.Types;
@@ -154,7 +153,7 @@ public class TestContentStats {
assertThatThrownBy(() -> stats.get(0, Long.class))
.isInstanceOf(IllegalArgumentException.class)
.hasMessageContaining(
- "Wrong class, expected java.lang.Long but was org.apache.iceberg.stats.BaseFieldStats for object:");
+ "Wrong class, expected java.lang.Long but was org.apache.iceberg.BaseFieldStats for object:");
}
@Test
diff --git a/core/src/test/java/org/apache/iceberg/stats/TestFieldStats.java b/core/src/test/java/org/apache/iceberg/TestFieldStats.java
similarity index 94%
rename from core/src/test/java/org/apache/iceberg/stats/TestFieldStats.java
rename to core/src/test/java/org/apache/iceberg/TestFieldStats.java
index be5f316694..c703a3044f 100644
--- a/core/src/test/java/org/apache/iceberg/stats/TestFieldStats.java
+++ b/core/src/test/java/org/apache/iceberg/TestFieldStats.java
@@ -16,16 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.iceberg.stats;
-
-import static org.apache.iceberg.stats.FieldStatistic.AVG_VALUE_SIZE;
-import static org.apache.iceberg.stats.FieldStatistic.EXACT_BOUNDS;
-import static org.apache.iceberg.stats.FieldStatistic.LOWER_BOUND;
-import static org.apache.iceberg.stats.FieldStatistic.MAX_VALUE_SIZE;
-import static org.apache.iceberg.stats.FieldStatistic.NAN_VALUE_COUNT;
-import static org.apache.iceberg.stats.FieldStatistic.NULL_VALUE_COUNT;
-import static org.apache.iceberg.stats.FieldStatistic.UPPER_BOUND;
-import static org.apache.iceberg.stats.FieldStatistic.VALUE_COUNT;
+package org.apache.iceberg;
+
+import static org.apache.iceberg.FieldStatistic.AVG_VALUE_SIZE;
+import static org.apache.iceberg.FieldStatistic.EXACT_BOUNDS;
+import static org.apache.iceberg.FieldStatistic.LOWER_BOUND;
+import static org.apache.iceberg.FieldStatistic.MAX_VALUE_SIZE;
+import static org.apache.iceberg.FieldStatistic.NAN_VALUE_COUNT;
+import static org.apache.iceberg.FieldStatistic.NULL_VALUE_COUNT;
+import static org.apache.iceberg.FieldStatistic.UPPER_BOUND;
+import static org.apache.iceberg.FieldStatistic.VALUE_COUNT;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -33,7 +33,6 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.stream.Stream;
-import org.apache.iceberg.TestHelpers;
import org.apache.iceberg.types.Type;
import org.apache.iceberg.types.Types;
import org.junit.jupiter.api.Test;
diff --git a/core/src/test/java/org/apache/iceberg/TestMetrics.java b/core/src/test/java/org/apache/iceberg/TestMetrics.java
index d9048a5d5e..874bb6d74d 100644
--- a/core/src/test/java/org/apache/iceberg/TestMetrics.java
+++ b/core/src/test/java/org/apache/iceberg/TestMetrics.java
@@ -41,8 +41,6 @@ import org.apache.iceberg.io.OutputFile;
import org.apache.iceberg.relocated.com.google.common.collect.ImmutableMap;
import org.apache.iceberg.relocated.com.google.common.collect.Lists;
import org.apache.iceberg.relocated.com.google.common.collect.Maps;
-import org.apache.iceberg.stats.ContentStats;
-import org.apache.iceberg.stats.FieldStats;
import org.apache.iceberg.types.Type;
import org.apache.iceberg.types.Types;
import org.apache.iceberg.types.Types.BinaryType;
diff --git a/api/src/test/java/org/apache/iceberg/stats/TestStatsUtil.java b/core/src/test/java/org/apache/iceberg/TestStatsUtil.java
similarity index 95%
rename from api/src/test/java/org/apache/iceberg/stats/TestStatsUtil.java
rename to core/src/test/java/org/apache/iceberg/TestStatsUtil.java
index 62c7c0ea75..54db9e5d20 100644
--- a/api/src/test/java/org/apache/iceberg/stats/TestStatsUtil.java
+++ b/core/src/test/java/org/apache/iceberg/TestStatsUtil.java
@@ -16,23 +16,22 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.iceberg.stats;
+package org.apache.iceberg;
-import static org.apache.iceberg.stats.FieldStatistic.AVG_VALUE_SIZE;
-import static org.apache.iceberg.stats.FieldStatistic.EXACT_BOUNDS;
-import static org.apache.iceberg.stats.FieldStatistic.LOWER_BOUND;
-import static org.apache.iceberg.stats.FieldStatistic.MAX_VALUE_SIZE;
-import static org.apache.iceberg.stats.FieldStatistic.NAN_VALUE_COUNT;
-import static org.apache.iceberg.stats.FieldStatistic.NULL_VALUE_COUNT;
-import static org.apache.iceberg.stats.FieldStatistic.UPPER_BOUND;
-import static org.apache.iceberg.stats.FieldStatistic.VALUE_COUNT;
+import static org.apache.iceberg.FieldStatistic.AVG_VALUE_SIZE;
+import static org.apache.iceberg.FieldStatistic.EXACT_BOUNDS;
+import static org.apache.iceberg.FieldStatistic.LOWER_BOUND;
+import static org.apache.iceberg.FieldStatistic.MAX_VALUE_SIZE;
+import static org.apache.iceberg.FieldStatistic.NAN_VALUE_COUNT;
+import static org.apache.iceberg.FieldStatistic.NULL_VALUE_COUNT;
+import static org.apache.iceberg.FieldStatistic.UPPER_BOUND;
+import static org.apache.iceberg.FieldStatistic.VALUE_COUNT;
import static org.apache.iceberg.types.Types.NestedField.optional;
import static org.apache.iceberg.types.Types.NestedField.required;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
-import org.apache.iceberg.Schema;
import org.apache.iceberg.types.Types;
import org.junit.jupiter.api.Test;
diff --git a/core/src/test/java/org/apache/iceberg/TestTrackedFile.java b/core/src/test/java/org/apache/iceberg/TestTrackedFile.java
index d468c9352d..6d84fd5423 100644
--- a/core/src/test/java/org/apache/iceberg/TestTrackedFile.java
+++ b/core/src/test/java/org/apache/iceberg/TestTrackedFile.java
@@ -22,7 +22,6 @@ import static org.apache.iceberg.types.Types.NestedField.optional;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
-import org.apache.iceberg.stats.StatsUtil;
import org.apache.iceberg.types.Types;
import org.junit.jupiter.api.Test;