diff --git a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/PaimonSparkTableBase.scala b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/PaimonSparkTableBase.scala index bd69174be712..6be314cee847 100644 --- a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/PaimonSparkTableBase.scala +++ b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/paimon/spark/PaimonSparkTableBase.scala @@ -20,13 +20,14 @@ package org.apache.paimon.spark import org.apache.paimon.CoreOptions import org.apache.paimon.CoreOptions.BucketFunctionType +import org.apache.paimon.options.CatalogOptions.TABLE_TYPE import org.apache.paimon.options.Options import org.apache.paimon.spark.catalog.functions.BucketFunction import org.apache.paimon.spark.read.PaimonSplitScanBuilder import org.apache.paimon.spark.schema.PaimonMetadataColumn import org.apache.paimon.spark.util.OptionUtils import org.apache.paimon.spark.write.{PaimonV2WriteBuilder, PaimonWriteBuilder} -import org.apache.paimon.table.{Table, _} +import org.apache.paimon.table.{CatalogTableType, Table, _} import org.apache.paimon.table.BucketMode.{BUCKET_UNAWARE, HASH_FIXED, POSTPONE_MODE} import org.apache.spark.sql.connector.catalog._ @@ -84,6 +85,12 @@ abstract class PaimonSparkTableBase(val table: Table) if (properties.containsKey(CoreOptions.PATH.key())) { properties.put(TableCatalog.PROP_LOCATION, properties.get(CoreOptions.PATH.key())) } + if ( + CatalogTableType.EXTERNAL.toString.equalsIgnoreCase( + dataTable.options().get(TABLE_TYPE.key())) + ) { + properties.put(TableCatalog.PROP_EXTERNAL, "true") + } properties case _ => Collections.emptyMap() } diff --git a/paimon-spark/paimon-spark-ut/src/test/java/org/apache/paimon/spark/SparkCatalogWithHiveTest.java b/paimon-spark/paimon-spark-ut/src/test/java/org/apache/paimon/spark/SparkCatalogWithHiveTest.java index 583522822b9e..f71e5df3c08f 100644 --- a/paimon-spark/paimon-spark-ut/src/test/java/org/apache/paimon/spark/SparkCatalogWithHiveTest.java +++ b/paimon-spark/paimon-spark-ut/src/test/java/org/apache/paimon/spark/SparkCatalogWithHiveTest.java @@ -156,6 +156,30 @@ public void testCreateExternalTable() throws IOException { } } + @Test + public void testDescribeExternalAndManagedTableType() throws IOException { + try (SparkSession spark = createSessionBuilder().getOrCreate()) { + spark.sql("CREATE DATABASE IF NOT EXISTS type_test_db"); + spark.sql("USE spark_catalog.type_test_db"); + + spark.sql("CREATE EXTERNAL TABLE external_type_table (a INT, bb INT, c STRING)"); + assertThat( + spark.sql("DESC FORMATTED external_type_table") + .filter("col_name = 'Type'") + .head() + .getString(1)) + .isEqualTo("EXTERNAL"); + + spark.sql("CREATE TABLE managed_type_table (a INT)"); + assertThat( + spark.sql("DESC FORMATTED managed_type_table") + .filter("col_name = 'Type'") + .head() + .getString(1)) + .isEqualTo("MANAGED"); + } + } + private SparkSession.Builder createSessionBuilder() { Path warehousePath = new Path("file:" + tempDir.toString()); return SparkSession.builder()