[HUDI-2990] Sync to HMS when deleting partitions (#4291)
This commit is contained in:
@@ -20,16 +20,18 @@ package org.apache.hudi.sync.common;
|
||||
|
||||
import org.apache.hudi.common.engine.HoodieLocalEngineContext;
|
||||
import org.apache.hudi.common.fs.FSUtils;
|
||||
import org.apache.hudi.common.model.HoodieCommitMetadata;
|
||||
import org.apache.hudi.common.model.HoodieTableType;
|
||||
import org.apache.hudi.common.model.WriteOperationType;
|
||||
import org.apache.hudi.common.table.HoodieTableMetaClient;
|
||||
import org.apache.hudi.common.table.TableSchemaResolver;
|
||||
import org.apache.hudi.common.table.timeline.HoodieInstant;
|
||||
import org.apache.hudi.common.table.timeline.TimelineUtils;
|
||||
import org.apache.hudi.common.util.Option;
|
||||
import org.apache.hudi.common.util.ValidationUtils;
|
||||
|
||||
import org.apache.hadoop.fs.FileSystem;
|
||||
import org.apache.hadoop.fs.Path;
|
||||
import org.apache.hudi.common.util.ValidationUtils;
|
||||
import org.apache.log4j.LogManager;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.parquet.schema.MessageType;
|
||||
@@ -98,6 +100,8 @@ public abstract class AbstractSyncHoodieClient {
|
||||
|
||||
public abstract void updatePartitionsToTable(String tableName, List<String> changedPartitions);
|
||||
|
||||
public abstract void dropPartitionsToTable(String tableName, List<String> partitionsToDrop);
|
||||
|
||||
public void updateTableProperties(String tableName, Map<String, String> tableProperties) {}
|
||||
|
||||
public abstract Map<String, String> getTableSchema(String tableName);
|
||||
@@ -155,6 +159,25 @@ public abstract class AbstractSyncHoodieClient {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isDropPartition() {
|
||||
try {
|
||||
Option<HoodieCommitMetadata> hoodieCommitMetadata;
|
||||
if (withOperationField) {
|
||||
hoodieCommitMetadata = new TableSchemaResolver(metaClient, true).getLatestCommitMetadata();
|
||||
} else {
|
||||
hoodieCommitMetadata = new TableSchemaResolver(metaClient).getLatestCommitMetadata();
|
||||
}
|
||||
|
||||
if (hoodieCommitMetadata.isPresent()
|
||||
&& hoodieCommitMetadata.get().getOperationType().equals(WriteOperationType.DELETE_PARTITION)) {
|
||||
return true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new HoodieSyncException("Failed to read data schema", e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
|
||||
public List<String> getPartitionsWrittenToSince(Option<String> lastCommitTimeSynced) {
|
||||
if (!lastCommitTimeSynced.isPresent()) {
|
||||
@@ -224,7 +247,7 @@ public abstract class AbstractSyncHoodieClient {
|
||||
public static class PartitionEvent {
|
||||
|
||||
public enum PartitionEventType {
|
||||
ADD, UPDATE
|
||||
ADD, UPDATE, DROP
|
||||
}
|
||||
|
||||
public PartitionEventType eventType;
|
||||
@@ -242,5 +265,9 @@ public abstract class AbstractSyncHoodieClient {
|
||||
public static PartitionEvent newPartitionUpdateEvent(String storagePartition) {
|
||||
return new PartitionEvent(PartitionEventType.UPDATE, storagePartition);
|
||||
}
|
||||
|
||||
public static PartitionEvent newPartitionDropEvent(String storagePartition) {
|
||||
return new PartitionEvent(PartitionEventType.DROP, storagePartition);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user