diff --git a/core/src/main/java/org/apache/iceberg/StatsUtil.java b/core/src/main/java/org/apache/iceberg/StatsUtil.java index bef7cc41c189..a541f21ccecd 100644 --- a/core/src/main/java/org/apache/iceberg/StatsUtil.java +++ b/core/src/main/java/org/apache/iceberg/StatsUtil.java @@ -261,7 +261,23 @@ private static Types.NestedField upperBoundField(Type type, int baseId) { @VisibleForTesting static Types.StructType fieldStatsStruct(Type type, int baseId, MetricsModes.MetricsMode mode) { - if (null == mode || mode == MetricsModes.None.get() || type.isNestedType() || baseId < 0) { + if (null == mode || mode == MetricsModes.None.get() || baseId < 0) { + return null; + } + + if (type.isStructType()) { + return Types.StructType.of( + optional( + baseId + VALUE_COUNT_OFFSET, + "value_count", + Types.LongType.get(), + "Number of values (including null)"), + optional( + baseId + NULL_VALUE_COUNT_OFFSET, + "null_value_count", + Types.LongType.get(), + "Number of null values")); + } else if (type.isNestedType()) { return null; } diff --git a/orc/src/main/java/org/apache/iceberg/orc/OrcMetrics.java b/orc/src/main/java/org/apache/iceberg/orc/OrcMetrics.java index 7498d6e1558f..62278d446964 100644 --- a/orc/src/main/java/org/apache/iceberg/orc/OrcMetrics.java +++ b/orc/src/main/java/org/apache/iceberg/orc/OrcMetrics.java @@ -388,6 +388,7 @@ public Set record( .filter(Optional::isPresent) .map(Optional::get) .forEach(result::add); + ORCSchemaUtil.icebergID(record).ifPresent(result::add); return result.build(); } }