Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions core/src/main/java/org/apache/iceberg/BaseEntriesTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,13 @@ static class ManifestReadTask extends BaseFileScanTask implements DataTask {
: new Schema();
}

@Override
public long estimatedRowsCount() {
return (long) manifest.addedFilesCount()
+ (long) manifest.deletedFilesCount()
+ (long) manifest.existingFilesCount();
}

@VisibleForTesting
ManifestFile manifest() {
return manifest;
Expand Down
7 changes: 7 additions & 0 deletions core/src/main/java/org/apache/iceberg/BaseFilesTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,13 @@ public CloseableIterable<StructLike> rows() {
}
}

@Override
public long estimatedRowsCount() {
return (long) manifest.addedFilesCount()
+ (long) manifest.deletedFilesCount()
+ (long) manifest.existingFilesCount();
}

private CloseableIterable<? extends ContentFile<?>> files(Schema fileProjection) {
switch (manifest.content()) {
case DATA:
Expand Down
32 changes: 32 additions & 0 deletions core/src/test/java/org/apache/iceberg/TestMetadataTableScans.java
Original file line number Diff line number Diff line change
Expand Up @@ -1753,4 +1753,36 @@ public void testPositionDeletesManyColumns() {
assertThat(scanTasks.get(0).file().path().toString()).isEqualTo("/path/to/delete1.parquet");
assertThat(scanTasks.get(1).file().path().toString()).isEqualTo("/path/to/delete2.parquet");
}

@TestTemplate
public void testFilesTableEstimateSize() throws Exception {
preparePartitionedTable(true);

assertEstimatedRowCount(new DataFilesTable(table), 4);
assertEstimatedRowCount(new AllDataFilesTable(table), 4);
assertEstimatedRowCount(new AllFilesTable(table), 4);

if (formatVersion == 2) {
assertEstimatedRowCount(new DeleteFilesTable(table), 4);
assertEstimatedRowCount(new AllDeleteFilesTable(table), 4);
}
}

@TestTemplate
public void testEntriesTableEstimateSize() throws Exception {
preparePartitionedTable(true);

assertEstimatedRowCount(new ManifestEntriesTable(table), 4);
assertEstimatedRowCount(new AllEntriesTable(table), 4);
}

private void assertEstimatedRowCount(Table metadataTable, int size) throws Exception {
TableScan scan = metadataTable.newScan();

try (CloseableIterable<FileScanTask> tasks = scan.planFiles()) {
List<FileScanTask> taskList = Lists.newArrayList(tasks);
assertThat(taskList.size()).isGreaterThan(0);
taskList.forEach(task -> assertThat(task.estimatedRowsCount()).isEqualTo(size));
}
}
}