diff --git a/data/src/test/java/org/apache/iceberg/io/TestWriterMetrics.java b/data/src/test/java/org/apache/iceberg/io/TestWriterMetrics.java index e4f6c028bc8e..7846b1f639be 100644 --- a/data/src/test/java/org/apache/iceberg/io/TestWriterMetrics.java +++ b/data/src/test/java/org/apache/iceberg/io/TestWriterMetrics.java @@ -241,6 +241,46 @@ public void testPositionDeleteMetricsCoveringMultipleDataFiles() throws IOExcept .isEqualTo(3L); } + @TestTemplate + public void testMaxColumnsBounded() throws IOException { + File tableDir = Files.createTempDirectory(tempDir.toPath(), "table").toFile(); + assertThat(tableDir.delete()).isTrue(); + + List fields = Arrays.asList(ID_FIELD, DATA_FIELD, STRUCT_FIELD); + + Schema maxColSchema = new Schema(fields); + + Table maxColumnTable = + TestTables.create( + tableDir, + "max_col_table", + maxColSchema, + PartitionSpec.unpartitioned(), + SortOrder.unsorted(), + FORMAT_V2); + + long maxInferredColumns = 3; + + maxColumnTable + .updateProperties() + .set( + TableProperties.METRICS_MAX_INFERRED_COLUMN_DEFAULTS, + String.valueOf(maxInferredColumns)) + .commit(); + + OutputFileFactory maxColFactory = + OutputFileFactory.builderFor(maxColumnTable, 1, 1).format(fileFormat).build(); + + T row = toRow(1, "data", false, Long.MAX_VALUE); + DataWriter dataWriter = + newWriterFactory(maxColumnTable) + .newDataWriter(maxColFactory.newOutputFile(), PartitionSpec.unpartitioned(), null); + dataWriter.write(row); + dataWriter.close(); + DataFile dataFile = dataWriter.toDataFile(); + assertThat(dataFile.upperBounds().keySet().size()).isEqualTo(maxInferredColumns); + } + @TestTemplate public void testMaxColumns() throws IOException { File tableDir = Files.createTempDirectory(tempDir.toPath(), "table").toFile();