This is an automated email from the ASF dual-hosted git repository.

lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new 58113a70a [hive] Drop a Hive external table only deletes metadata but 
not data files. (#2979)
58113a70a is described below

commit 58113a70a766170de1e2d632fdb055fc22d0ecbf
Author: Kerwin <[email protected]>
AuthorDate: Tue Mar 12 13:24:29 2024 +0800

    [hive] Drop a Hive external table only deletes metadata but not data files. 
(#2979)
---
 .../generated/jdbc_catalog_configuration.html      |  2 +-
 .../java/org/apache/paimon/jdbc/JdbcCatalog.java   |  3 +--
 .../org/apache/paimon/jdbc/JdbcCatalogOptions.java |  2 +-
 .../paimon/operation/AppendOnlyFileStoreRead.java  |  8 +++---
 .../org/apache/paimon/utils/BulkFormatMapping.java |  9 ++++---
 .../java/org/apache/paimon/hive/HiveCatalog.java   | 29 ++++++++--------------
 .../apache/paimon/hive/HiveCatalogITCaseBase.java  |  2 +-
 7 files changed, 24 insertions(+), 31 deletions(-)

diff --git a/docs/layouts/shortcodes/generated/jdbc_catalog_configuration.html 
b/docs/layouts/shortcodes/generated/jdbc_catalog_configuration.html
index 617018ce9..87939512b 100644
--- a/docs/layouts/shortcodes/generated/jdbc_catalog_configuration.html
+++ b/docs/layouts/shortcodes/generated/jdbc_catalog_configuration.html
@@ -28,7 +28,7 @@ under the License.
     <tbody>
         <tr>
             <td><h5>catalog-key</h5></td>
-            <td style="word-wrap: break-word;">(none)</td>
+            <td style="word-wrap: break-word;">"jdbc"</td>
             <td>String</td>
             <td>Custom jdbc catalog store key.</td>
         </tr>
diff --git a/paimon-core/src/main/java/org/apache/paimon/jdbc/JdbcCatalog.java 
b/paimon-core/src/main/java/org/apache/paimon/jdbc/JdbcCatalog.java
index 952b03607..61dc5959c 100644
--- a/paimon-core/src/main/java/org/apache/paimon/jdbc/JdbcCatalog.java
+++ b/paimon-core/src/main/java/org/apache/paimon/jdbc/JdbcCatalog.java
@@ -31,7 +31,6 @@ import org.apache.paimon.schema.SchemaChange;
 import org.apache.paimon.schema.SchemaManager;
 import org.apache.paimon.schema.TableSchema;
 import org.apache.paimon.utils.Preconditions;
-import org.apache.paimon.utils.StringUtils;
 
 import org.apache.paimon.shade.guava30.com.google.common.collect.ImmutableMap;
 import org.apache.paimon.shade.guava30.com.google.common.collect.Lists;
@@ -78,7 +77,7 @@ public class JdbcCatalog extends AbstractCatalog {
     protected JdbcCatalog(
             FileIO fileIO, String catalogKey, Map<String, String> config, 
String warehouse) {
         super(fileIO);
-        this.catalogKey = StringUtils.isBlank(catalogKey) ? "jdbc" : 
catalogKey;
+        this.catalogKey = catalogKey;
         this.options = config;
         this.warehouse = warehouse;
         Preconditions.checkNotNull(options, "Invalid catalog properties: 
null");
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/jdbc/JdbcCatalogOptions.java 
b/paimon-core/src/main/java/org/apache/paimon/jdbc/JdbcCatalogOptions.java
index dd4afd473..97828f7c8 100644
--- a/paimon-core/src/main/java/org/apache/paimon/jdbc/JdbcCatalogOptions.java
+++ b/paimon-core/src/main/java/org/apache/paimon/jdbc/JdbcCatalogOptions.java
@@ -27,7 +27,7 @@ public final class JdbcCatalogOptions {
     public static final ConfigOption<String> CATALOG_KEY =
             ConfigOptions.key("catalog-key")
                     .stringType()
-                    .defaultValue(null)
+                    .defaultValue("jdbc")
                     .withDescription("Custom jdbc catalog store key.");
 
     private JdbcCatalogOptions() {}
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/operation/AppendOnlyFileStoreRead.java
 
b/paimon-core/src/main/java/org/apache/paimon/operation/AppendOnlyFileStoreRead.java
index 93cecaa43..c06cce458 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/operation/AppendOnlyFileStoreRead.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/operation/AppendOnlyFileStoreRead.java
@@ -140,15 +140,15 @@ public class AppendOnlyFileStoreRead implements 
FileStoreRead<InternalRow> {
 
                                 Pair<int[], RowType> partitionPair = null;
                                 if (!dataSchema.partitionKeys().isEmpty()) {
-                                    Pair<int[], int[][]> partitionMappping =
+                                    Pair<int[], int[][]> partitionMapping =
                                             
PartitionUtils.constructPartitionMapping(
                                                     dataSchema, 
dataProjection);
                                     // if partition fields are not selected, 
we just do nothing
-                                    if (partitionMappping != null) {
-                                        dataProjection = 
partitionMappping.getRight();
+                                    if (partitionMapping != null) {
+                                        dataProjection = 
partitionMapping.getRight();
                                         partitionPair =
                                                 Pair.of(
-                                                        
partitionMappping.getLeft(),
+                                                        
partitionMapping.getLeft(),
                                                         
dataSchema.projectedLogicalRowType(
                                                                 
dataSchema.partitionKeys()));
                                     }
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/utils/BulkFormatMapping.java 
b/paimon-core/src/main/java/org/apache/paimon/utils/BulkFormatMapping.java
index 84476dac7..97c18d769 100644
--- a/paimon-core/src/main/java/org/apache/paimon/utils/BulkFormatMapping.java
+++ b/paimon-core/src/main/java/org/apache/paimon/utils/BulkFormatMapping.java
@@ -64,6 +64,7 @@ public class BulkFormatMapping {
         return castMapping;
     }
 
+    @Nullable
     public Pair<int[], RowType> getPartitionPair() {
         return partitionPair;
     }
@@ -166,15 +167,15 @@ public class BulkFormatMapping {
 
             Pair<int[], RowType> partitionPair = null;
             if (!dataSchema.partitionKeys().isEmpty()) {
-                Pair<int[], int[][]> partitionMappping =
+                Pair<int[], int[][]> partitionMapping =
                         PartitionUtils.constructPartitionMapping(
                                 dataRecordType, dataSchema.partitionKeys(), 
dataProjection);
                 // is partition fields are not selected, we just do nothing.
-                if (partitionMappping != null) {
-                    dataProjection = partitionMappping.getRight();
+                if (partitionMapping != null) {
+                    dataProjection = partitionMapping.getRight();
                     partitionPair =
                             Pair.of(
-                                    partitionMappping.getLeft(),
+                                    partitionMapping.getLeft(),
                                     
dataSchema.projectedLogicalRowType(dataSchema.partitionKeys()));
                 }
             }
diff --git 
a/paimon-hive/paimon-hive-catalog/src/main/java/org/apache/paimon/hive/HiveCatalog.java
 
b/paimon-hive/paimon-hive-catalog/src/main/java/org/apache/paimon/hive/HiveCatalog.java
index a2b1b82f0..024857976 100644
--- 
a/paimon-hive/paimon-hive-catalog/src/main/java/org/apache/paimon/hive/HiveCatalog.java
+++ 
b/paimon-hive/paimon-hive-catalog/src/main/java/org/apache/paimon/hive/HiveCatalog.java
@@ -87,7 +87,6 @@ import static 
org.apache.paimon.options.CatalogOptions.LOCK_ENABLED;
 import static org.apache.paimon.options.CatalogOptions.TABLE_TYPE;
 import static 
org.apache.paimon.options.OptionsUtils.convertToPropertiesPrefixKey;
 import static org.apache.paimon.utils.Preconditions.checkArgument;
-import static org.apache.paimon.utils.Preconditions.checkState;
 import static org.apache.paimon.utils.StringUtils.isNullOrWhitespaceOnly;
 
 /** A catalog implementation for Hive. */
@@ -349,6 +348,17 @@ public class HiveCatalog extends AbstractCatalog {
         try {
             client.dropTable(
                     identifier.getDatabaseName(), identifier.getObjectName(), 
true, false, true);
+
+            // When drop a Hive external table, only the hive metadata is 
deleted and the data files
+            // are not deleted.
+            TableType tableType =
+                    OptionsUtils.convertToEnum(
+                            hiveConf.get(TABLE_TYPE.key(), 
TableType.MANAGED.toString()),
+                            TableType.class);
+            if (TableType.EXTERNAL.equals(tableType)) {
+                return;
+            }
+
             // Deletes table directory to avoid schema in filesystem exists 
after dropping hive
             // table successfully to keep the table consistency between which 
in filesystem and
             // which in Hive metastore.
@@ -468,19 +478,6 @@ public class HiveCatalog extends AbstractCatalog {
         return warehouse;
     }
 
-    private void checkIdentifierUpperCase(Identifier identifier) {
-        checkState(
-                
identifier.getDatabaseName().equals(identifier.getDatabaseName().toLowerCase()),
-                String.format(
-                        "Database name[%s] cannot contain upper case in hive 
catalog",
-                        identifier.getDatabaseName()));
-        checkState(
-                
identifier.getObjectName().equals(identifier.getObjectName().toLowerCase()),
-                String.format(
-                        "Table name[%s] cannot contain upper case in hive 
catalog",
-                        identifier.getObjectName()));
-    }
-
     private Table newHmsTable(Identifier identifier, Map<String, String> 
tableParameters) {
         long currentTimeMillis = System.currentTimeMillis();
         TableType tableType =
@@ -587,10 +584,6 @@ public class HiveCatalog extends AbstractCatalog {
                 dataField.description());
     }
 
-    private boolean schemaFileExists(Identifier identifier) {
-        return new SchemaManager(fileIO, 
getDataTableLocation(identifier)).latest().isPresent();
-    }
-
     private SchemaManager schemaManager(Identifier identifier) {
         return new SchemaManager(fileIO, getDataTableLocation(identifier))
                 .withLock(lock(identifier));
diff --git 
a/paimon-hive/paimon-hive-connector-common/src/test/java/org/apache/paimon/hive/HiveCatalogITCaseBase.java
 
b/paimon-hive/paimon-hive-connector-common/src/test/java/org/apache/paimon/hive/HiveCatalogITCaseBase.java
index e830ed653..80d6c5460 100644
--- 
a/paimon-hive/paimon-hive-connector-common/src/test/java/org/apache/paimon/hive/HiveCatalogITCaseBase.java
+++ 
b/paimon-hive/paimon-hive-connector-common/src/test/java/org/apache/paimon/hive/HiveCatalogITCaseBase.java
@@ -277,7 +277,7 @@ public abstract class HiveCatalogITCaseBase {
                 .isTrue();
         tEnv.executeSql("DROP TABLE t").await();
         Path tablePath = new Path(path, "test_db.db/t");
-        assertThat(tablePath.getFileSystem().exists(tablePath)).isFalse();
+        assertThat(tablePath.getFileSystem().exists(tablePath)).isTrue();
     }
 
     @Test

Reply via email to