From 0d00c6ab0c247867c438afef9f7627974854bfdd Mon Sep 17 00:00:00 2001 From: Yuya Ebihara Date: Fri, 7 Feb 2025 21:43:38 +0900 Subject: [PATCH] Return BaseTable in TrinoCatalog.loadTable --- .../trino/plugin/iceberg/IcebergMetadata.java | 18 +++++++++--------- .../io/trino/plugin/iceberg/IcebergUtil.java | 8 ++++---- .../iceberg/catalog/AbstractTrinoCatalog.java | 4 ++-- .../plugin/iceberg/catalog/TrinoCatalog.java | 2 +- .../iceberg/catalog/glue/TrinoGlueCatalog.java | 5 ++--- .../iceberg/catalog/hms/TrinoHiveCatalog.java | 7 +++---- .../iceberg/catalog/jdbc/TrinoJdbcCatalog.java | 7 +++---- .../catalog/nessie/TrinoNessieCatalog.java | 3 +-- .../iceberg/catalog/rest/TrinoRestCatalog.java | 4 ++-- .../snowflake/TrinoSnowflakeCatalog.java | 2 +- .../trino/plugin/iceberg/IcebergTestUtils.java | 2 +- ...cebergPolarisCatalogConnectorSmokeTest.java | 4 ++-- 12 files changed, 31 insertions(+), 35 deletions(-) diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergMetadata.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergMetadata.java index 1b41cb6cf4ad..316b793c24b6 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergMetadata.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergMetadata.java @@ -527,7 +527,7 @@ public ConnectorTableHandle getTableHandle( BaseTable table; try { - table = (BaseTable) catalog.loadTable(session, new SchemaTableName(tableName.getSchemaName(), tableName.getTableName())); + table = catalog.loadTable(session, new SchemaTableName(tableName.getSchemaName(), tableName.getTableName())); } catch (TableNotFoundException e) { return null; @@ -883,7 +883,7 @@ public ConnectorTableMetadata getTableMetadata(ConnectorSession session, Connect IcebergTableHandle tableHandle = checkValidTableHandle(table); // This method does not calculate column metadata for the projected columns checkArgument(tableHandle.getProjectedColumns().isEmpty(), "Unexpected projected columns"); - Table icebergTable = catalog.loadTable(session, tableHandle.getSchemaTableName()); + BaseTable icebergTable = catalog.loadTable(session, tableHandle.getSchemaTableName()); List columns = getColumnMetadatas(SchemaParser.fromJson(tableHandle.getTableSchemaJson()), typeManager); return new ConnectorTableMetadata(tableHandle.getSchemaTableName(), columns, getIcebergTableProperties(icebergTable), getTableComment(icebergTable)); } @@ -1858,11 +1858,11 @@ private BeginTableExecuteResult OPTIMIZE_MAX_SUPPORTED_TABLE_VERSION) { throw new TrinoException(NOT_SUPPORTED, format( "%s is not supported for Iceberg table format version > %d. Table %s format version is %s.", @@ -2056,7 +2056,7 @@ private void executeOptimizeManifests(ConnectorSession session, IcebergTableExec { checkArgument(executeHandle.procedureHandle() instanceof IcebergOptimizeManifestsHandle, "Unexpected procedure handle %s", executeHandle.procedureHandle()); - BaseTable icebergTable = (BaseTable) catalog.loadTable(session, executeHandle.schemaTableName()); + BaseTable icebergTable = catalog.loadTable(session, executeHandle.schemaTableName()); List manifests = icebergTable.currentSnapshot().allManifests(icebergTable.io()); if (manifests.isEmpty()) { return; @@ -2100,7 +2100,7 @@ private void executeExpireSnapshots(ConnectorSession session, IcebergTableExecut { IcebergExpireSnapshotsHandle expireSnapshotsHandle = (IcebergExpireSnapshotsHandle) executeHandle.procedureHandle(); - Table table = catalog.loadTable(session, executeHandle.schemaTableName()); + BaseTable table = catalog.loadTable(session, executeHandle.schemaTableName()); Duration retention = requireNonNull(expireSnapshotsHandle.retentionThreshold(), "retention is null"); validateTableExecuteParameters( table, @@ -2142,7 +2142,7 @@ private void executeExpireSnapshots(ConnectorSession session, IcebergTableExecut } private static void validateTableExecuteParameters( - Table table, + BaseTable table, SchemaTableName schemaTableName, String procedureName, Duration retentionThreshold, @@ -2150,7 +2150,7 @@ private static void validateTableExecuteParameters( String minRetentionParameterName, String sessionMinRetentionParameterName) { - int tableFormatVersion = ((BaseTable) table).operations().current().formatVersion(); + int tableFormatVersion = table.operations().current().formatVersion(); if (tableFormatVersion > CLEANING_UP_PROCEDURES_MAX_SUPPORTED_TABLE_VERSION) { // It is not known if future version won't bring any new kind of metadata or data files // because of the way procedures are implemented it is safer to fail here than to potentially remove @@ -2182,7 +2182,7 @@ public void executeRemoveOrphanFiles(ConnectorSession session, IcebergTableExecu { IcebergRemoveOrphanFilesHandle removeOrphanFilesHandle = (IcebergRemoveOrphanFilesHandle) executeHandle.procedureHandle(); - Table table = catalog.loadTable(session, executeHandle.schemaTableName()); + BaseTable table = catalog.loadTable(session, executeHandle.schemaTableName()); Duration retention = requireNonNull(removeOrphanFilesHandle.retentionThreshold(), "retention is null"); validateTableExecuteParameters( table, diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergUtil.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergUtil.java index 3aaf9f4913c1..6b0b0ec51387 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergUtil.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergUtil.java @@ -217,7 +217,7 @@ public final class IcebergUtil private IcebergUtil() {} - public static Table loadIcebergTable(TrinoCatalog catalog, IcebergTableOperationsProvider tableOperationsProvider, ConnectorSession session, SchemaTableName table) + public static BaseTable loadIcebergTable(TrinoCatalog catalog, IcebergTableOperationsProvider tableOperationsProvider, ConnectorSession session, SchemaTableName table) { TableOperations operations = tableOperationsProvider.createTableOperations( catalog, @@ -229,7 +229,7 @@ public static Table loadIcebergTable(TrinoCatalog catalog, IcebergTableOperation return new BaseTable(operations, quotedTableName(table), TRINO_METRICS_REPORTER); } - public static Table getIcebergTableWithMetadata( + public static BaseTable getIcebergTableWithMetadata( TrinoCatalog catalog, IcebergTableOperationsProvider tableOperationsProvider, ConnectorSession session, @@ -299,7 +299,7 @@ public static List buildPath(Map indexParents, int fi return ImmutableList.copyOf(path.reversed()); } - public static Map getIcebergTableProperties(Table icebergTable) + public static Map getIcebergTableProperties(BaseTable icebergTable) { ImmutableMap.Builder properties = ImmutableMap.builder(); properties.put(FILE_FORMAT_PROPERTY, getFileFormat(icebergTable)); @@ -318,7 +318,7 @@ public static Map getIcebergTableProperties(Table icebergTable) properties.put(LOCATION_PROPERTY, icebergTable.location()); } - int formatVersion = ((BaseTable) icebergTable).operations().current().formatVersion(); + int formatVersion = icebergTable.operations().current().formatVersion(); properties.put(FORMAT_VERSION_PROPERTY, formatVersion); if (icebergTable.properties().containsKey(COMMIT_NUM_RETRIES)) { diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractTrinoCatalog.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractTrinoCatalog.java index 55406ef7c86d..83c8cca7e537 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractTrinoCatalog.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractTrinoCatalog.java @@ -201,7 +201,7 @@ public Map getMaterializedViewProperties(ConnectorSession sessio .getSchemaTableName(); try { - Table storageTable = loadTable(session, definition.getStorageTable().orElseThrow().getSchemaTableName()); + BaseTable storageTable = loadTable(session, definition.getStorageTable().orElseThrow().getSchemaTableName()); return ImmutableMap.builder() .putAll(getIcebergTableProperties(storageTable)) .put(STORAGE_SCHEMA, storageTableName.getSchemaName()) @@ -246,7 +246,7 @@ protected Transaction newCreateOrReplaceTableTransaction( BaseTable table; Optional metadata = Optional.empty(); try { - table = (BaseTable) loadTable(session, new SchemaTableName(schemaTableName.getSchemaName(), schemaTableName.getTableName())); + table = loadTable(session, new SchemaTableName(schemaTableName.getSchemaName(), schemaTableName.getTableName())); metadata = Optional.of(table.operations().current()); } catch (TableNotFoundException _) { diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/TrinoCatalog.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/TrinoCatalog.java index c7370d65d810..ffab19f2c1b8 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/TrinoCatalog.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/TrinoCatalog.java @@ -146,7 +146,7 @@ Transaction newCreateOrReplaceTableTransaction( * @return Iceberg table loaded * @throws UnknownTableTypeException if table is not of Iceberg type in the metastore */ - Table loadTable(ConnectorSession session, SchemaTableName schemaTableName); + BaseTable loadTable(ConnectorSession session, SchemaTableName schemaTableName); /** * Bulk load column metadata. The returned map may contain fewer entries then asked for. diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/TrinoGlueCatalog.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/TrinoGlueCatalog.java index 12782f9957ea..d43e7130d377 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/TrinoGlueCatalog.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/TrinoGlueCatalog.java @@ -82,7 +82,6 @@ import org.apache.iceberg.PartitionSpec; import org.apache.iceberg.Schema; import org.apache.iceberg.SortOrder; -import org.apache.iceberg.Table; import org.apache.iceberg.TableMetadata; import org.apache.iceberg.TableMetadataParser; import org.apache.iceberg.TableOperations; @@ -598,7 +597,7 @@ private void getCommentsFromIcebergMetadata( } @Override - public Table loadTable(ConnectorSession session, SchemaTableName table) + public BaseTable loadTable(ConnectorSession session, SchemaTableName table) { if (viewCache.asMap().containsKey(table) || materializedViewCache.asMap().containsKey(table)) { throw new TableNotFoundException(table); @@ -711,7 +710,7 @@ private Optional> getCachedColumnMetadata(com.amazonaws.ser @Override public void dropTable(ConnectorSession session, SchemaTableName schemaTableName) { - BaseTable table = (BaseTable) loadTable(session, schemaTableName); + BaseTable table = loadTable(session, schemaTableName); try { deleteTable(schemaTableName.getSchemaName(), schemaTableName.getTableName()); } diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/TrinoHiveCatalog.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/TrinoHiveCatalog.java index 665a050f69b3..9e85eb1011b4 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/TrinoHiveCatalog.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/hms/TrinoHiveCatalog.java @@ -59,7 +59,6 @@ import org.apache.iceberg.PartitionSpec; import org.apache.iceberg.Schema; import org.apache.iceberg.SortOrder; -import org.apache.iceberg.Table; import org.apache.iceberg.TableMetadata; import org.apache.iceberg.TableMetadataParser; import org.apache.iceberg.Transaction; @@ -421,7 +420,7 @@ public Optional> streamRelationComments( @Override public void dropTable(ConnectorSession session, SchemaTableName schemaTableName) { - BaseTable table = (BaseTable) loadTable(session, schemaTableName); + BaseTable table = loadTable(session, schemaTableName); TableMetadata metadata = table.operations().current(); io.trino.metastore.Table metastoreTable = metastore.getTable(schemaTableName.getSchemaName(), schemaTableName.getTableName()) @@ -475,14 +474,14 @@ public void renameTable(ConnectorSession session, SchemaTableName from, SchemaTa } @Override - public Table loadTable(ConnectorSession session, SchemaTableName schemaTableName) + public BaseTable loadTable(ConnectorSession session, SchemaTableName schemaTableName) { TableMetadata metadata; try { metadata = uncheckedCacheGet( tableMetadataCache, schemaTableName, - () -> ((BaseTable) loadIcebergTable(this, tableOperationsProvider, session, schemaTableName)).operations().current()); + () -> loadIcebergTable(this, tableOperationsProvider, session, schemaTableName).operations().current()); } catch (UncheckedExecutionException e) { throwIfUnchecked(e.getCause()); diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/jdbc/TrinoJdbcCatalog.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/jdbc/TrinoJdbcCatalog.java index 0e5c401c8ba5..97a6b0183439 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/jdbc/TrinoJdbcCatalog.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/jdbc/TrinoJdbcCatalog.java @@ -42,7 +42,6 @@ import org.apache.iceberg.PartitionSpec; import org.apache.iceberg.Schema; import org.apache.iceberg.SortOrder; -import org.apache.iceberg.Table; import org.apache.iceberg.TableMetadata; import org.apache.iceberg.Transaction; import org.apache.iceberg.catalog.Namespace; @@ -338,7 +337,7 @@ public void unregisterTable(ConnectorSession session, SchemaTableName tableName) @Override public void dropTable(ConnectorSession session, SchemaTableName schemaTableName) { - BaseTable table = (BaseTable) loadTable(session, schemaTableName); + BaseTable table = loadTable(session, schemaTableName); jdbcCatalog.dropTable(toIdentifier(schemaTableName), false); try { @@ -381,14 +380,14 @@ public void renameTable(ConnectorSession session, SchemaTableName from, SchemaTa } @Override - public Table loadTable(ConnectorSession session, SchemaTableName schemaTableName) + public BaseTable loadTable(ConnectorSession session, SchemaTableName schemaTableName) { TableMetadata metadata; try { metadata = uncheckedCacheGet( tableMetadataCache, schemaTableName, - () -> ((BaseTable) loadIcebergTable(this, tableOperationsProvider, session, schemaTableName)).operations().current()); + () -> loadIcebergTable(this, tableOperationsProvider, session, schemaTableName).operations().current()); } catch (UncheckedExecutionException e) { throwIfUnchecked(e.getCause()); diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/nessie/TrinoNessieCatalog.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/nessie/TrinoNessieCatalog.java index ed7be861fd9f..dad39b8d28fa 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/nessie/TrinoNessieCatalog.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/nessie/TrinoNessieCatalog.java @@ -40,7 +40,6 @@ import org.apache.iceberg.PartitionSpec; import org.apache.iceberg.Schema; import org.apache.iceberg.SortOrder; -import org.apache.iceberg.Table; import org.apache.iceberg.TableMetadata; import org.apache.iceberg.TableOperations; import org.apache.iceberg.Transaction; @@ -199,7 +198,7 @@ public Optional> streamRelationComments( } @Override - public Table loadTable(ConnectorSession session, SchemaTableName table) + public BaseTable loadTable(ConnectorSession session, SchemaTableName table) { TableMetadata metadata; try { diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/rest/TrinoRestCatalog.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/rest/TrinoRestCatalog.java index 1ab12b1ee824..275e23596bc6 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/rest/TrinoRestCatalog.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/rest/TrinoRestCatalog.java @@ -119,7 +119,7 @@ public class TrinoRestCatalog private final Cache remoteNamespaceMappingCache; private final Cache remoteTableMappingCache; - private final Cache tableCache = EvictableCacheBuilder.newBuilder() + private final Cache tableCache = EvictableCacheBuilder.newBuilder() .maximumSize(PER_QUERY_CACHE_SIZE) .build(); @@ -489,7 +489,7 @@ public void renameTable(ConnectorSession session, SchemaTableName from, SchemaTa } @Override - public Table loadTable(ConnectorSession session, SchemaTableName schemaTableName) + public BaseTable loadTable(ConnectorSession session, SchemaTableName schemaTableName) { Namespace namespace = toNamespace(schemaTableName.getSchemaName()); try { diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/snowflake/TrinoSnowflakeCatalog.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/snowflake/TrinoSnowflakeCatalog.java index 2f58396e6c69..fbe3ef737121 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/snowflake/TrinoSnowflakeCatalog.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/snowflake/TrinoSnowflakeCatalog.java @@ -263,7 +263,7 @@ public void renameTable(ConnectorSession session, SchemaTableName from, SchemaTa } @Override - public Table loadTable(ConnectorSession session, SchemaTableName schemaTableName) + public BaseTable loadTable(ConnectorSession session, SchemaTableName schemaTableName) { TableMetadata metadata; try { diff --git a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/IcebergTestUtils.java b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/IcebergTestUtils.java index 3078e25694f1..f5e10c1d48a9 100644 --- a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/IcebergTestUtils.java +++ b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/IcebergTestUtils.java @@ -196,7 +196,7 @@ public static BaseTable loadTable(String tableName, false, new IcebergConfig().isHideMaterializedViewStorageTable(), directExecutor()); - return (BaseTable) loadIcebergTable(catalog, tableOperationsProvider, SESSION, new SchemaTableName(schemaName, tableName)); + return loadIcebergTable(catalog, tableOperationsProvider, SESSION, new SchemaTableName(schemaName, tableName)); } public static Map getMetadataFileAndUpdatedMillis(TrinoFileSystem trinoFileSystem, String tableLocation) diff --git a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/rest/TestIcebergPolarisCatalogConnectorSmokeTest.java b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/rest/TestIcebergPolarisCatalogConnectorSmokeTest.java index 0ccb0d3d4b4e..6d700474b7b7 100644 --- a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/rest/TestIcebergPolarisCatalogConnectorSmokeTest.java +++ b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/rest/TestIcebergPolarisCatalogConnectorSmokeTest.java @@ -106,7 +106,7 @@ protected String getMetadataLocation(String tableName) { TrinoCatalogFactory catalogFactory = ((IcebergConnector) getQueryRunner().getCoordinator().getConnector("iceberg")).getInjector().getInstance(TrinoCatalogFactory.class); TrinoCatalog trinoCatalog = catalogFactory.create(getSession().getIdentity().toConnectorIdentity()); - BaseTable table = (BaseTable) trinoCatalog.loadTable(getSession().toConnectorSession(), new SchemaTableName(getSession().getSchema().orElseThrow(), tableName)); + BaseTable table = trinoCatalog.loadTable(getSession().toConnectorSession(), new SchemaTableName(getSession().getSchema().orElseThrow(), tableName)); return table.operations().current().metadataFileLocation(); } @@ -115,7 +115,7 @@ protected String getTableLocation(String tableName) { TrinoCatalogFactory catalogFactory = ((IcebergConnector) getQueryRunner().getCoordinator().getConnector("iceberg")).getInjector().getInstance(TrinoCatalogFactory.class); TrinoCatalog trinoCatalog = catalogFactory.create(getSession().getIdentity().toConnectorIdentity()); - BaseTable table = (BaseTable) trinoCatalog.loadTable(getSession().toConnectorSession(), new SchemaTableName(getSession().getSchema().orElseThrow(), tableName)); + BaseTable table = trinoCatalog.loadTable(getSession().toConnectorSession(), new SchemaTableName(getSession().getSchema().orElseThrow(), tableName)); return table.operations().current().location(); }