diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergTableOperations.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergTableOperations.java index 0302ee108373..e67e78214f84 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergTableOperations.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergTableOperations.java @@ -48,12 +48,9 @@ import static io.trino.plugin.iceberg.IcebergErrorCode.ICEBERG_INVALID_METADATA; import static io.trino.plugin.iceberg.catalog.glue.GlueIcebergUtil.getTableInput; import static java.lang.String.format; -import static java.util.Locale.ENGLISH; import static java.util.Objects.requireNonNull; -import static org.apache.iceberg.BaseMetastoreTableOperations.ICEBERG_TABLE_TYPE_VALUE; import static org.apache.iceberg.BaseMetastoreTableOperations.METADATA_LOCATION_PROP; import static org.apache.iceberg.BaseMetastoreTableOperations.PREVIOUS_METADATA_LOCATION_PROP; -import static org.apache.iceberg.BaseMetastoreTableOperations.TABLE_TYPE_PROP; public class GlueIcebergTableOperations extends AbstractIcebergTableOperations @@ -106,10 +103,7 @@ protected void commitNewTable(TableMetadata metadata) { verify(version == -1, "commitNewTable called on a table which already exists"); String newMetadataLocation = writeNewMetadata(metadata, 0); - TableInput tableInput = getTableInput(tableName, owner, ImmutableMap.builder() - .put(TABLE_TYPE_PROP, ICEBERG_TABLE_TYPE_VALUE.toUpperCase(ENGLISH)) - .put(METADATA_LOCATION_PROP, newMetadataLocation) - .buildOrThrow()); + TableInput tableInput = getTableInput(tableName, owner, ImmutableMap.of(METADATA_LOCATION_PROP, newMetadataLocation)); CreateTableRequest createTableRequest = new CreateTableRequest() .withDatabaseName(database) @@ -122,11 +116,12 @@ protected void commitNewTable(TableMetadata metadata) protected void commitToExistingTable(TableMetadata base, TableMetadata metadata) { String newMetadataLocation = writeNewMetadata(metadata, version + 1); - TableInput tableInput = getTableInput(tableName, owner, ImmutableMap.builder() - .put(TABLE_TYPE_PROP, ICEBERG_TABLE_TYPE_VALUE.toUpperCase(ENGLISH)) - .put(METADATA_LOCATION_PROP, newMetadataLocation) - .put(PREVIOUS_METADATA_LOCATION_PROP, currentMetadataLocation) - .buildOrThrow()); + TableInput tableInput = getTableInput( + tableName, + owner, + ImmutableMap.of( + METADATA_LOCATION_PROP, newMetadataLocation, + PREVIOUS_METADATA_LOCATION_PROP, currentMetadataLocation)); UpdateTableRequest updateTableRequest = new UpdateTableRequest() .withDatabaseName(database) diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergUtil.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergUtil.java index 96a187858314..f09c2f75a37e 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergUtil.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/glue/GlueIcebergUtil.java @@ -14,6 +14,7 @@ package io.trino.plugin.iceberg.catalog.glue; import com.amazonaws.services.glue.model.TableInput; +import com.google.common.collect.ImmutableMap; import javax.annotation.Nullable; @@ -22,8 +23,11 @@ import static io.trino.plugin.hive.HiveMetadata.PRESTO_VIEW_EXPANDED_TEXT_MARKER; import static io.trino.plugin.hive.ViewReaderUtil.ICEBERG_MATERIALIZED_VIEW_COMMENT; +import static java.util.Locale.ENGLISH; import static org.apache.hadoop.hive.metastore.TableType.EXTERNAL_TABLE; import static org.apache.hadoop.hive.metastore.TableType.VIRTUAL_VIEW; +import static org.apache.iceberg.BaseMetastoreTableOperations.ICEBERG_TABLE_TYPE_VALUE; +import static org.apache.iceberg.BaseMetastoreTableOperations.TABLE_TYPE_PROP; public final class GlueIcebergUtil { @@ -34,7 +38,10 @@ public static TableInput getTableInput(String tableName, Optional owner, return new TableInput() .withName(tableName) .withOwner(owner.orElse(null)) - .withParameters(parameters) + .withParameters(ImmutableMap.builder() + .putAll(parameters) + .put(TABLE_TYPE_PROP, ICEBERG_TABLE_TYPE_VALUE.toUpperCase(ENGLISH)) + .buildKeepingLast()) // Iceberg does not distinguish managed and external tables, all tables are treated the same and marked as EXTERNAL .withTableType(EXTERNAL_TABLE.name()); } 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 7c2f8271db72..400f70e01694 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 @@ -110,9 +110,7 @@ import static java.util.Locale.ENGLISH; import static java.util.Objects.requireNonNull; import static org.apache.hadoop.hive.metastore.TableType.VIRTUAL_VIEW; -import static org.apache.iceberg.BaseMetastoreTableOperations.ICEBERG_TABLE_TYPE_VALUE; import static org.apache.iceberg.BaseMetastoreTableOperations.METADATA_LOCATION_PROP; -import static org.apache.iceberg.BaseMetastoreTableOperations.TABLE_TYPE_PROP; import static org.apache.iceberg.CatalogUtil.dropTableData; public class TrinoGlueCatalog @@ -376,10 +374,7 @@ public Transaction newCreateTableTransaction( public void registerTable(ConnectorSession session, SchemaTableName schemaTableName, String tableLocation, String metadataLocation) throws TrinoException { - TableInput tableInput = getTableInput(schemaTableName.getTableName(), Optional.of(session.getUser()), ImmutableMap.builder() - .put(TABLE_TYPE_PROP, ICEBERG_TABLE_TYPE_VALUE.toUpperCase(ENGLISH)) - .put(METADATA_LOCATION_PROP, metadataLocation) - .buildOrThrow()); + TableInput tableInput = getTableInput(schemaTableName.getTableName(), Optional.of(session.getUser()), ImmutableMap.of(METADATA_LOCATION_PROP, metadataLocation)); createTable(schemaTableName.getSchemaName(), tableInput); }