Skip to content

Commit 29536fe

Browse files
committed
Collect NDV stats on all columns when replacing Iceberg tables
1 parent b3548cd commit 29536fe

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergMetadata.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2834,12 +2834,16 @@ public void dropNotNullConstraint(ConnectorSession session, ConnectorTableHandle
28342834
}
28352835

28362836
@Override
2837-
public TableStatisticsMetadata getStatisticsCollectionMetadataForWrite(ConnectorSession session, ConnectorTableMetadata tableMetadata)
2837+
public TableStatisticsMetadata getStatisticsCollectionMetadataForWrite(ConnectorSession session, ConnectorTableMetadata tableMetadata, boolean replace)
28382838
{
28392839
if (!isExtendedStatisticsEnabled(session) || !isCollectExtendedStatisticsOnWrite(session)) {
28402840
return TableStatisticsMetadata.empty();
28412841
}
28422842

2843+
if (replace) {
2844+
return getStatisticsCollectionMetadata(tableMetadata, Optional.empty(), _ -> {});
2845+
}
2846+
28432847
ConnectorTableHandle tableHandle = getTableHandle(session, tableMetadata.getTable(), Optional.empty(), Optional.empty());
28442848
if (tableHandle == null) {
28452849
// Assume new table (CTAS), collect NDV stats on all columns

plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/TestIcebergStatistics.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.trino.Session;
1919
import io.trino.testing.AbstractTestQueryFramework;
2020
import io.trino.testing.QueryRunner;
21+
import io.trino.testing.sql.TestTable;
2122
import org.junit.jupiter.api.Test;
2223
import org.junit.jupiter.params.ParameterizedTest;
2324
import org.junit.jupiter.params.provider.MethodSource;
@@ -972,6 +973,31 @@ public void testShowStatsAsOf()
972973
assertUpdate("DROP TABLE show_stats_as_of");
973974
}
974975

976+
@Test
977+
public void testShowStatsReplaceTable()
978+
{
979+
try (TestTable table = newTrinoTable("show_stats_after_replace_table_", "AS SELECT 1 a, 2 b")) {
980+
assertThat(query("SHOW STATS FOR " + table.getName()))
981+
.skippingTypesCheck()
982+
.matches("""
983+
VALUES
984+
('a', null, 1e0, 0e0, NULL, '1', '1'),
985+
('b', null, 1e0, 0e0, NULL, '2', '2'),
986+
(NULL, NULL, NULL, NULL, 1e0, NULL, NULL)
987+
""");
988+
989+
assertUpdate("CREATE OR REPLACE TABLE " + table.getName() + " AS SELECT 3 x, 4 y", 1);
990+
assertThat(query("SHOW STATS FOR " + table.getName()))
991+
.skippingTypesCheck()
992+
.matches("""
993+
VALUES
994+
('x', null, 1e0, 0e0, NULL, '3', '3'),
995+
('y', null, 1e0, 0e0, NULL, '4', '4'),
996+
(NULL, NULL, NULL, NULL, 1e0, NULL, NULL)
997+
""");
998+
}
999+
}
1000+
9751001
@Test
9761002
public void testShowStatsAfterExpiration()
9771003
{

plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseMetadata.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,9 +477,9 @@ public Optional<ConnectorTableLayout> getInsertLayout(ConnectorSession session,
477477
}
478478

479479
@Override
480-
public TableStatisticsMetadata getStatisticsCollectionMetadataForWrite(ConnectorSession session, ConnectorTableMetadata tableMetadata)
480+
public TableStatisticsMetadata getStatisticsCollectionMetadataForWrite(ConnectorSession session, ConnectorTableMetadata tableMetadata, boolean replace)
481481
{
482-
return forProperties(tableMetadata.getProperties()).getStatisticsCollectionMetadataForWrite(session, unwrapTableMetadata(tableMetadata));
482+
return forProperties(tableMetadata.getProperties()).getStatisticsCollectionMetadataForWrite(session, unwrapTableMetadata(tableMetadata), replace);
483483
}
484484

485485
@Override

0 commit comments

Comments
 (0)