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
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.common.StatsSetupConst;
import org.apache.hadoop.hive.metastore.HiveMetaStoreClient;
Expand Down Expand Up @@ -186,7 +188,15 @@ protected void doCommit(TableMetadata base, TableMetadata metadata) {
baseMetadataLocation, metadataLocation, database, tableName);
}

setHmsTableParameters(newMetadataLocation, tbl, metadata.properties(), hiveEngineEnabled);
// get Iceberg props that have been removed
Set<String> removedProps = Collections.emptySet();
if (base != null) {
removedProps = base.properties().keySet().stream()
.filter(key -> !metadata.properties().containsKey(key))
.collect(Collectors.toSet());
}

setHmsTableParameters(newMetadataLocation, tbl, metadata.properties(), removedProps, hiveEngineEnabled);

persistTable(tbl, updateHiveTable);
threw = false;
Expand Down Expand Up @@ -258,7 +268,7 @@ private Table newHmsTable() {
}

private void setHmsTableParameters(String newMetadataLocation, Table tbl, Map<String, String> icebergTableProps,
boolean hiveEngineEnabled) {
Set<String> obsoleteProps, boolean hiveEngineEnabled) {
Map<String, String> parameters = tbl.getParameters();

if (parameters == null) {
Expand All @@ -268,6 +278,9 @@ private void setHmsTableParameters(String newMetadataLocation, Table tbl, Map<St
// push all Iceberg table properties into HMS
icebergTableProps.forEach(parameters::put);

// remove any props from HMS that are no longer present in Iceberg table props
obsoleteProps.forEach(parameters::remove);

parameters.put(TABLE_TYPE_PROP, ICEBERG_TABLE_TYPE_VALUE.toUpperCase(Locale.ENGLISH));
parameters.put(METADATA_LOCATION_PROP, newMetadataLocation);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,21 @@ public void testIcebergAndHmsTableProperties() throws TException, InterruptedExc
} else {
Assert.assertEquals(7, hmsParams.size());
}

// Remove some Iceberg props and see if they're removed from HMS table props as well
if (Catalogs.hiveCatalog(shell.getHiveConf())) {
icebergTable.updateProperties()
.remove("custom_property")
.remove("new_prop_1")
.commit();
hmsParams = shell.metastore().getTable("default", "customers").getParameters()
.entrySet().stream()
.filter(e -> !IGNORED_PARAMS.contains(e.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Assert.assertFalse(hmsParams.containsKey("custom_property"));
Assert.assertFalse(hmsParams.containsKey("new_prop_1"));
Assert.assertTrue(hmsParams.containsKey("new_prop_2"));
}
}

@Test
Expand Down