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

zhangbutao pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/branch-4.1 by this push:
     new 5ec47759d5d HIVE-29083: Iceberg: Unable to create table using 
HadoopCatalog (#5959) (#5970)
5ec47759d5d is described below

commit 5ec47759d5db7b3a0570d4697225d8ca8054bdca
Author: Butao Zhang <zhangbu...@apache.org>
AuthorDate: Sun Jul 13 22:22:23 2025 +0800

    HIVE-29083: Iceberg: Unable to create table using HadoopCatalog (#5959) 
(#5970)
    
    Co-authored-by: Denys Kuzmenko <dkuzme...@apache.org>
---
 iceberg/checkstyle/checkstyle.xml                  |   1 +
 .../main/java/org/apache/iceberg/mr/Catalogs.java  |  14 +
 .../iceberg/mr/hive/HiveIcebergMetaHook.java       |  18 +-
 .../apache/iceberg/mr/hive/IcebergTableUtil.java   |  18 +
 .../hive/TestHiveIcebergStorageHandlerNoScan.java  |  17 +-
 .../queries/positive/hadoop_catalog_create_table.q |  83 ++++
 .../llap/hadoop_catalog_create_table.q.out         | 450 +++++++++++++++++++++
 .../test/resources/testconfiguration.properties    |   2 +
 8 files changed, 593 insertions(+), 10 deletions(-)

diff --git a/iceberg/checkstyle/checkstyle.xml 
b/iceberg/checkstyle/checkstyle.xml
index 84d205d44bf..89106a54a9d 100644
--- a/iceberg/checkstyle/checkstyle.xml
+++ b/iceberg/checkstyle/checkstyle.xml
@@ -135,6 +135,7 @@
                 org.apache.iceberg.SortDirection.*,
                 org.apache.iceberg.TableProperties.*,
                 org.apache.iceberg.SnapshotSummary.*,
+                org.apache.iceberg.mr.InputFormatConfig.*,
                 org.apache.iceberg.types.Type.*,
                 org.apache.iceberg.types.Types.NestedField.*,
                 org.apache.parquet.schema.OriginalType.*,
diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/Catalogs.java 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/Catalogs.java
index 5a219b58a08..f65ed35af5c 100644
--- a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/Catalogs.java
+++ b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/Catalogs.java
@@ -206,6 +206,20 @@ public static boolean hiveCatalog(Configuration conf, 
Properties props) {
     return getCatalogProperties(conf, 
catalogName).get(CatalogProperties.CATALOG_IMPL) == null;
   }
 
+  public static boolean hadoopCatalog(Configuration conf, Properties props) {
+    String catalogName = props.getProperty(InputFormatConfig.CATALOG_NAME);
+    String catalogType = getCatalogType(conf, catalogName);
+    if (catalogType != null) {
+      return 
CatalogUtil.ICEBERG_CATALOG_TYPE_HADOOP.equalsIgnoreCase(catalogType);
+    }
+    catalogType = getCatalogType(conf, ICEBERG_DEFAULT_CATALOG_NAME);
+    if (catalogType != null) {
+      return 
CatalogUtil.ICEBERG_CATALOG_TYPE_HADOOP.equalsIgnoreCase(catalogType);
+    }
+    return CatalogUtil.ICEBERG_CATALOG_HADOOP.equals(
+        getCatalogProperties(conf, 
catalogName).get(CatalogProperties.CATALOG_IMPL));
+  }
+
   /**
    * Register a table with the configured catalog if it does not exist.
    * @param conf a Hadoop conf
diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergMetaHook.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergMetaHook.java
index a06c294ddbf..842ab3a2ef9 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergMetaHook.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergMetaHook.java
@@ -242,16 +242,18 @@ public void preCreateTable(CreateTableRequest request) {
 
       // If not using HiveCatalog check for existing table
       try {
-
         this.icebergTable = IcebergTableUtil.getTable(conf, catalogProperties, 
true);
 
+        if (Catalogs.hadoopCatalog(conf, catalogProperties) && 
hmsTable.getSd() != null &&
+                hmsTable.getSd().getLocation() == null) {
+          hmsTable.getSd().setLocation(icebergTable.location());
+        }
         
Preconditions.checkArgument(catalogProperties.getProperty(InputFormatConfig.TABLE_SCHEMA)
 == null,
             "Iceberg table already created - can not use provided schema");
         
Preconditions.checkArgument(catalogProperties.getProperty(InputFormatConfig.PARTITION_SPEC)
 == null,
             "Iceberg table already created - can not use provided partition 
specification");
 
         LOG.info("Iceberg table already exists {}", icebergTable);
-
         return;
       } catch (NoSuchTableException nte) {
         // If the table does not exist we will create it below
@@ -815,10 +817,16 @@ private void assertFileFormat(String format) {
   }
 
   private void 
setCommonHmsTablePropertiesForIceberg(org.apache.hadoop.hive.metastore.api.Table
 hmsTable) {
-    // If the table is not managed by Hive catalog then the location should be 
set
+    // If the table is not managed by Hive or Hadoop catalog, then the 
location should be set
     if (!Catalogs.hiveCatalog(conf, catalogProperties)) {
-      Preconditions.checkArgument(hmsTable.getSd() != null && 
hmsTable.getSd().getLocation() != null,
-          "Table location not set");
+      String location = (hmsTable.getSd() != null) ? 
hmsTable.getSd().getLocation() : null;
+      if (location == null && Catalogs.hadoopCatalog(conf, catalogProperties)) 
{
+        location = IcebergTableUtil.defaultWarehouseLocation(
+            TableIdentifier.of(hmsTable.getDbName(), hmsTable.getTableName()),
+            conf, catalogProperties);
+        hmsTable.getSd().setLocation(location);
+      }
+      Preconditions.checkArgument(location != null, "Table location not set");
     }
 
     Map<String, String> hmsParams = hmsTable.getParameters();
diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergTableUtil.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergTableUtil.java
index 54b283527a1..b0a1cc919db 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergTableUtil.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergTableUtil.java
@@ -95,6 +95,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static org.apache.iceberg.mr.InputFormatConfig.CATALOG_NAME;
+import static 
org.apache.iceberg.mr.InputFormatConfig.CATALOG_WAREHOUSE_TEMPLATE;
+
 public class IcebergTableUtil {
 
   public static final int SPEC_IDX = 1;
@@ -562,4 +565,19 @@ public static ExecutorService newDeleteThreadPool(String 
completeName, int numTh
       return thread;
     });
   }
+
+  public static String defaultWarehouseLocation(TableIdentifier 
tableIdentifier,
+                                                Configuration conf, Properties 
catalogProperties) {
+    StringBuilder sb = new StringBuilder();
+    String warehouseLocation = conf.get(String.format(
+            CATALOG_WAREHOUSE_TEMPLATE, 
catalogProperties.getProperty(CATALOG_NAME))
+    );
+    sb.append(warehouseLocation).append('/');
+    for (String level : tableIdentifier.namespace().levels()) {
+      sb.append(level).append('/');
+    }
+    sb.append(tableIdentifier.name());
+    return sb.toString();
+  }
+
 }
diff --git 
a/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergStorageHandlerNoScan.java
 
b/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergStorageHandlerNoScan.java
index 818ee1e6014..c3282f9bddd 100644
--- 
a/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergStorageHandlerNoScan.java
+++ 
b/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergStorageHandlerNoScan.java
@@ -81,6 +81,7 @@
 import org.apache.iceberg.types.Types;
 import org.apache.parquet.hadoop.ParquetOutputFormat;
 import org.apache.thrift.TException;
+import org.assertj.core.api.AbstractThrowableAssert;
 import org.assertj.core.api.Assertions;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -684,7 +685,7 @@ public void testCreateTableError() {
 
     if (!testTables.locationForCreateTableSQL(identifier).isEmpty()) {
       // Only test this if the location is required
-      Assertions.assertThatThrownBy(
+      AbstractThrowableAssert<?, ? extends Throwable> assertThatThrownBy = 
Assertions.assertThatCode(
           () ->
                   shell.executeStatement(
                           "CREATE EXTERNAL TABLE withShell2 " +
@@ -697,10 +698,16 @@ public void testCreateTableError() {
                                   InputFormatConfig.CATALOG_NAME +
                                   "'='" +
                                   testTables.catalogName() +
-                                  "')"))
-          .isInstanceOf(IllegalArgumentException.class)
-          .hasMessageStartingWith("Failed to execute Hive query")
-          .hasMessageContaining("Table location not set");
+                                  "')"));
+      if (testTableType != TestTables.TestTableType.HADOOP_CATALOG) {
+        assertThatThrownBy
+            .isInstanceOf(IllegalArgumentException.class)
+            .hasMessageStartingWith("Failed to execute Hive query")
+            .hasMessageContaining("Table location not set");
+      } else {
+        assertThatThrownBy
+            .doesNotThrowAnyException();
+      }
     }
   }
 
diff --git 
a/iceberg/iceberg-handler/src/test/queries/positive/hadoop_catalog_create_table.q
 
b/iceberg/iceberg-handler/src/test/queries/positive/hadoop_catalog_create_table.q
new file mode 100644
index 00000000000..f5bf1c08566
--- /dev/null
+++ 
b/iceberg/iceberg-handler/src/test/queries/positive/hadoop_catalog_create_table.q
@@ -0,0 +1,83 @@
+drop table if exists orders;
+
+set iceberg.catalog.ice01.type=hadoop;
+set iceberg.catalog.ice01.warehouse=/tmp/iceberg;
+
+dfs -mkdir -p /tmp/iceberg/.tmp;
+dfs -rmr /tmp/iceberg/*;
+
+-- use HadoopCatalog
+
+CREATE EXTERNAL TABLE orders (orderid INT, quantity INT, itemid INT, tradets 
TIMESTAMP)
+    PARTITIONED BY (p1 STRING, p2 STRING)
+STORED BY ICEBERG STORED AS ORC
+TBLPROPERTIES('format-version'='2', 'iceberg.catalog'='ice01');
+
+INSERT INTO orders VALUES
+(0, 48, 5, timestamp('2000-06-04 19:55:46.129'), 'EU', 'DE'),
+(1, 12, 6, timestamp('2007-06-24 19:23:22.829'), 'US', 'TX'),
+(2, 76, 4, timestamp('2018-02-19 23:43:51.995'), 'EU', 'DE'),
+(3, 91, 5, timestamp('2000-07-15 09:09:11.587'), 'US', 'NJ'),
+(4, 18, 6, timestamp('2007-12-02 22:30:39.302'), 'EU', 'ES'),
+(5, 71, 5, timestamp('2010-02-08 20:31:23.430'), 'EU', 'DE'),
+(6, 78, 3, timestamp('2016-02-22 20:37:37.025'), 'EU', 'FR'),
+(7, 88, 0, timestamp('2020-03-26 18:47:40.611'), 'EU', 'FR'),
+(8, 87, 4, timestamp('2003-02-20 00:48:09.139'), 'EU', 'ES'),
+(9, 60, 6, timestamp('2012-08-28 01:35:54.283'), 'EU', 'IT'),
+(10, 24, 5, timestamp('2015-03-28 18:57:50.069'), 'US', 'NY'),
+(11, 42, 2, timestamp('2012-06-27 01:13:32.350'), 'EU', 'UK'),
+(12, 37, 4, timestamp('2020-08-09 01:18:50.153'), 'US', 'NY'),
+(13, 52, 1, timestamp('2019-09-04 01:46:19.558'), 'EU', 'UK'),
+(14, 96, 3, timestamp('2019-03-05 22:00:03.020'), 'US', 'NJ'),
+(15, 18, 3, timestamp('2001-09-11 00:14:12.687'), 'EU', 'FR'),
+(16, 46, 0, timestamp('2013-08-31 02:16:17.878'), 'EU', 'UK'),
+(17, 26, 5, timestamp('2001-02-01 20:05:32.317'), 'EU', 'FR'),
+(18, 68, 5, timestamp('2009-12-29 08:44:08.048'), 'EU', 'ES'),
+(19, 54, 6, timestamp('2015-08-15 01:59:22.177'), 'EU', 'HU'),
+(20, 10, 0, timestamp('2018-05-06 12:56:12.789'), 'US', 'CA');
+
+--check row count
+select count(*) from orders;
+describe formatted orders;
+
+--delete rows
+delete from orders where itemid = 6;
+delete from orders where itemid = 5;
+
+--check for updated row count
+select count(*) from orders;
+describe formatted orders;
+
+-- drop table metadata
+
+DROP TABLE orders;
+
+CREATE EXTERNAL TABLE orders (orderid INT, quantity INT, itemid INT, tradets 
TIMESTAMP)
+    PARTITIONED BY (p1 STRING, p2 STRING)
+STORED BY ICEBERG STORED AS ORC
+TBLPROPERTIES('format-version'='2', 'iceberg.catalog'='ice01');
+
+--check row count
+select count(*) from orders;
+describe formatted orders;
+
+-- use location-based HadoopTable
+
+CREATE EXTERNAL TABLE orders2 (orderid INT, quantity INT, itemid INT, tradets 
TIMESTAMP)
+    PARTITIONED BY (p1 STRING, p2 STRING)
+STORED BY ICEBERG STORED AS ORC
+LOCATION '/tmp/iceberg/orders2'
+TBLPROPERTIES('format-version'='2', 'iceberg.catalog'='location_based_table');
+
+INSERT INTO orders2 SELECT * FROM orders;
+
+--check row count
+select count(*) from orders2;
+describe formatted orders2;
+
+--delete rows
+delete from orders2 where itemid = 3;
+
+--check for updated row count
+select count(*) from orders2;
+describe formatted orders2;
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/hadoop_catalog_create_table.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/hadoop_catalog_create_table.q.out
new file mode 100644
index 00000000000..c6a7243ec96
--- /dev/null
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/hadoop_catalog_create_table.q.out
@@ -0,0 +1,450 @@
+PREHOOK: query: drop table if exists orders
+PREHOOK: type: DROPTABLE
+PREHOOK: Output: database:default
+POSTHOOK: query: drop table if exists orders
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Output: database:default
+#### A masked pattern was here ####
+PREHOOK: query: CREATE EXTERNAL TABLE orders (orderid INT, quantity INT, 
itemid INT, tradets TIMESTAMP)
+    PARTITIONED BY (p1 STRING, p2 STRING)
+STORED BY ICEBERG STORED AS ORC
+TBLPROPERTIES('format-version'='2', 'iceberg.catalog'='ice01')
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@orders
+POSTHOOK: query: CREATE EXTERNAL TABLE orders (orderid INT, quantity INT, 
itemid INT, tradets TIMESTAMP)
+    PARTITIONED BY (p1 STRING, p2 STRING)
+STORED BY ICEBERG STORED AS ORC
+TBLPROPERTIES('format-version'='2', 'iceberg.catalog'='ice01')
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@orders
+PREHOOK: query: INSERT INTO orders VALUES
+(0, 48, 5, timestamp('2000-06-04 19:55:46.129'), 'EU', 'DE'),
+(1, 12, 6, timestamp('2007-06-24 19:23:22.829'), 'US', 'TX'),
+(2, 76, 4, timestamp('2018-02-19 23:43:51.995'), 'EU', 'DE'),
+(3, 91, 5, timestamp('2000-07-15 09:09:11.587'), 'US', 'NJ'),
+(4, 18, 6, timestamp('2007-12-02 22:30:39.302'), 'EU', 'ES'),
+(5, 71, 5, timestamp('2010-02-08 20:31:23.430'), 'EU', 'DE'),
+(6, 78, 3, timestamp('2016-02-22 20:37:37.025'), 'EU', 'FR'),
+(7, 88, 0, timestamp('2020-03-26 18:47:40.611'), 'EU', 'FR'),
+(8, 87, 4, timestamp('2003-02-20 00:48:09.139'), 'EU', 'ES'),
+(9, 60, 6, timestamp('2012-08-28 01:35:54.283'), 'EU', 'IT'),
+(10, 24, 5, timestamp('2015-03-28 18:57:50.069'), 'US', 'NY'),
+(11, 42, 2, timestamp('2012-06-27 01:13:32.350'), 'EU', 'UK'),
+(12, 37, 4, timestamp('2020-08-09 01:18:50.153'), 'US', 'NY'),
+(13, 52, 1, timestamp('2019-09-04 01:46:19.558'), 'EU', 'UK'),
+(14, 96, 3, timestamp('2019-03-05 22:00:03.020'), 'US', 'NJ'),
+(15, 18, 3, timestamp('2001-09-11 00:14:12.687'), 'EU', 'FR'),
+(16, 46, 0, timestamp('2013-08-31 02:16:17.878'), 'EU', 'UK'),
+(17, 26, 5, timestamp('2001-02-01 20:05:32.317'), 'EU', 'FR'),
+(18, 68, 5, timestamp('2009-12-29 08:44:08.048'), 'EU', 'ES'),
+(19, 54, 6, timestamp('2015-08-15 01:59:22.177'), 'EU', 'HU'),
+(20, 10, 0, timestamp('2018-05-06 12:56:12.789'), 'US', 'CA')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@orders
+POSTHOOK: query: INSERT INTO orders VALUES
+(0, 48, 5, timestamp('2000-06-04 19:55:46.129'), 'EU', 'DE'),
+(1, 12, 6, timestamp('2007-06-24 19:23:22.829'), 'US', 'TX'),
+(2, 76, 4, timestamp('2018-02-19 23:43:51.995'), 'EU', 'DE'),
+(3, 91, 5, timestamp('2000-07-15 09:09:11.587'), 'US', 'NJ'),
+(4, 18, 6, timestamp('2007-12-02 22:30:39.302'), 'EU', 'ES'),
+(5, 71, 5, timestamp('2010-02-08 20:31:23.430'), 'EU', 'DE'),
+(6, 78, 3, timestamp('2016-02-22 20:37:37.025'), 'EU', 'FR'),
+(7, 88, 0, timestamp('2020-03-26 18:47:40.611'), 'EU', 'FR'),
+(8, 87, 4, timestamp('2003-02-20 00:48:09.139'), 'EU', 'ES'),
+(9, 60, 6, timestamp('2012-08-28 01:35:54.283'), 'EU', 'IT'),
+(10, 24, 5, timestamp('2015-03-28 18:57:50.069'), 'US', 'NY'),
+(11, 42, 2, timestamp('2012-06-27 01:13:32.350'), 'EU', 'UK'),
+(12, 37, 4, timestamp('2020-08-09 01:18:50.153'), 'US', 'NY'),
+(13, 52, 1, timestamp('2019-09-04 01:46:19.558'), 'EU', 'UK'),
+(14, 96, 3, timestamp('2019-03-05 22:00:03.020'), 'US', 'NJ'),
+(15, 18, 3, timestamp('2001-09-11 00:14:12.687'), 'EU', 'FR'),
+(16, 46, 0, timestamp('2013-08-31 02:16:17.878'), 'EU', 'UK'),
+(17, 26, 5, timestamp('2001-02-01 20:05:32.317'), 'EU', 'FR'),
+(18, 68, 5, timestamp('2009-12-29 08:44:08.048'), 'EU', 'ES'),
+(19, 54, 6, timestamp('2015-08-15 01:59:22.177'), 'EU', 'HU'),
+(20, 10, 0, timestamp('2018-05-06 12:56:12.789'), 'US', 'CA')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@orders
+PREHOOK: query: select count(*) from orders
+PREHOOK: type: QUERY
+PREHOOK: Input: default@orders
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from orders
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@orders
+#### A masked pattern was here ####
+21
+PREHOOK: query: describe formatted orders
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@orders
+POSTHOOK: query: describe formatted orders
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@orders
+# col_name             data_type               comment             
+orderid                int                                         
+quantity               int                                         
+itemid                 int                                         
+tradets                timestamp                                   
+p1                     string                                      
+p2                     string                                      
+                
+# Partition Transform Information               
+# col_name             transform_type           
+p1                     IDENTITY                 
+p2                     IDENTITY                 
+                
+# Detailed Table Information            
+Database:              default                  
+#### A masked pattern was here ####
+Retention:             0                        
+#### A masked pattern was here ####
+Table Type:            EXTERNAL_TABLE           
+Table Parameters:               
+       COLUMN_STATS_ACCURATE   
{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"itemid\":\"true\",\"orderid\":\"true\",\"p1\":\"true\",\"p2\":\"true\",\"quantity\":\"true\",\"tradets\":\"true\"}}
+       EXTERNAL                TRUE                
+       bucketing_version       2                   
+       format-version          2                   
+       iceberg.catalog         ice01               
+       iceberg.orc.files.only  true                
+       numFiles                10                  
+       numPartitions           10                  
+       numRows                 21                  
+       rawDataSize             0                   
+       storage_handler         
org.apache.iceberg.mr.hive.HiveIcebergStorageHandler
+       table_type              ICEBERG             
+       totalSize               #Masked#
+#### A masked pattern was here ####
+       write.delete.mode       merge-on-read       
+       write.merge.mode        merge-on-read       
+       write.update.mode       merge-on-read       
+                
+# Storage Information           
+SerDe Library:         org.apache.iceberg.mr.hive.HiveIcebergSerDe      
+InputFormat:           org.apache.iceberg.mr.hive.HiveIcebergInputFormat       
 
+OutputFormat:          org.apache.iceberg.mr.hive.HiveIcebergOutputFormat      
 
+Compressed:            No                       
+Sort Columns:          []                       
+Storage Desc Params:            
+       serialization.format    1                   
+       write.format.default    ORC                 
+PREHOOK: query: delete from orders where itemid = 6
+PREHOOK: type: QUERY
+PREHOOK: Input: default@orders
+PREHOOK: Output: default@orders
+POSTHOOK: query: delete from orders where itemid = 6
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@orders
+POSTHOOK: Output: default@orders
+PREHOOK: query: delete from orders where itemid = 5
+PREHOOK: type: QUERY
+PREHOOK: Input: default@orders
+PREHOOK: Output: default@orders
+POSTHOOK: query: delete from orders where itemid = 5
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@orders
+POSTHOOK: Output: default@orders
+PREHOOK: query: select count(*) from orders
+PREHOOK: type: QUERY
+PREHOOK: Input: default@orders
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from orders
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@orders
+#### A masked pattern was here ####
+21
+PREHOOK: query: describe formatted orders
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@orders
+POSTHOOK: query: describe formatted orders
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@orders
+# col_name             data_type               comment             
+orderid                int                                         
+quantity               int                                         
+itemid                 int                                         
+tradets                timestamp                                   
+p1                     string                                      
+p2                     string                                      
+                
+# Partition Transform Information               
+# col_name             transform_type           
+p1                     IDENTITY                 
+p2                     IDENTITY                 
+                
+# Detailed Table Information            
+Database:              default                  
+#### A masked pattern was here ####
+Retention:             0                        
+#### A masked pattern was here ####
+Table Type:            EXTERNAL_TABLE           
+Table Parameters:               
+       COLUMN_STATS_ACCURATE   {\"BASIC_STATS\":\"true\"}
+       EXTERNAL                TRUE                
+       bucketing_version       2                   
+       format-version          2                   
+       iceberg.catalog         ice01               
+       iceberg.orc.files.only  true                
+       numFiles                10                  
+       numPartitions           10                  
+       numRows                 21                  
+       rawDataSize             0                   
+       storage_handler         
org.apache.iceberg.mr.hive.HiveIcebergStorageHandler
+       table_type              ICEBERG             
+       totalSize               #Masked#
+#### A masked pattern was here ####
+       write.delete.mode       merge-on-read       
+       write.merge.mode        merge-on-read       
+       write.update.mode       merge-on-read       
+                
+# Storage Information           
+SerDe Library:         org.apache.iceberg.mr.hive.HiveIcebergSerDe      
+InputFormat:           org.apache.iceberg.mr.hive.HiveIcebergInputFormat       
 
+OutputFormat:          org.apache.iceberg.mr.hive.HiveIcebergOutputFormat      
 
+Compressed:            No                       
+Sort Columns:          []                       
+Storage Desc Params:            
+       serialization.format    1                   
+       write.format.default    ORC                 
+PREHOOK: query: DROP TABLE orders
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@orders
+PREHOOK: Output: database:default
+PREHOOK: Output: default@orders
+POSTHOOK: query: DROP TABLE orders
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@orders
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@orders
+PREHOOK: query: CREATE EXTERNAL TABLE orders (orderid INT, quantity INT, 
itemid INT, tradets TIMESTAMP)
+    PARTITIONED BY (p1 STRING, p2 STRING)
+STORED BY ICEBERG STORED AS ORC
+TBLPROPERTIES('format-version'='2', 'iceberg.catalog'='ice01')
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@orders
+POSTHOOK: query: CREATE EXTERNAL TABLE orders (orderid INT, quantity INT, 
itemid INT, tradets TIMESTAMP)
+    PARTITIONED BY (p1 STRING, p2 STRING)
+STORED BY ICEBERG STORED AS ORC
+TBLPROPERTIES('format-version'='2', 'iceberg.catalog'='ice01')
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@orders
+PREHOOK: query: select count(*) from orders
+PREHOOK: type: QUERY
+PREHOOK: Input: default@orders
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from orders
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@orders
+#### A masked pattern was here ####
+21
+PREHOOK: query: describe formatted orders
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@orders
+POSTHOOK: query: describe formatted orders
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@orders
+# col_name             data_type               comment             
+orderid                int                                         
+quantity               int                                         
+itemid                 int                                         
+tradets                timestamp                                   
+p1                     string                                      
+p2                     string                                      
+                
+# Partition Transform Information               
+# col_name             transform_type           
+p1                     IDENTITY                 
+p2                     IDENTITY                 
+                
+# Detailed Table Information            
+Database:              default                  
+#### A masked pattern was here ####
+Retention:             0                        
+#### A masked pattern was here ####
+Table Type:            EXTERNAL_TABLE           
+Table Parameters:               
+       COLUMN_STATS_ACCURATE   
{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"itemid\":\"true\",\"orderid\":\"true\",\"p1\":\"true\",\"p2\":\"true\",\"quantity\":\"true\",\"tradets\":\"true\"}}
+       EXTERNAL                TRUE                
+       bucketing_version       2                   
+       format-version          2                   
+       iceberg.catalog         ice01               
+       numFiles                10                  
+       numPartitions           10                  
+       numRows                 21                  
+       rawDataSize             0                   
+       storage_handler         
org.apache.iceberg.mr.hive.HiveIcebergStorageHandler
+       table_type              ICEBERG             
+       totalSize               #Masked#
+#### A masked pattern was here ####
+                
+# Storage Information           
+SerDe Library:         org.apache.iceberg.mr.hive.HiveIcebergSerDe      
+InputFormat:           org.apache.iceberg.mr.hive.HiveIcebergInputFormat       
 
+OutputFormat:          org.apache.iceberg.mr.hive.HiveIcebergOutputFormat      
 
+Compressed:            No                       
+Sort Columns:          []                       
+Storage Desc Params:            
+       serialization.format    1                   
+       write.format.default    ORC                 
+PREHOOK: query: CREATE EXTERNAL TABLE orders2 (orderid INT, quantity INT, 
itemid INT, tradets TIMESTAMP)
+    PARTITIONED BY (p1 STRING, p2 STRING)
+STORED BY ICEBERG STORED AS ORC
+#### A masked pattern was here ####
+TBLPROPERTIES('format-version'='2', 'iceberg.catalog'='location_based_table')
+PREHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+PREHOOK: Output: database:default
+PREHOOK: Output: default@orders2
+POSTHOOK: query: CREATE EXTERNAL TABLE orders2 (orderid INT, quantity INT, 
itemid INT, tradets TIMESTAMP)
+    PARTITIONED BY (p1 STRING, p2 STRING)
+STORED BY ICEBERG STORED AS ORC
+#### A masked pattern was here ####
+TBLPROPERTIES('format-version'='2', 'iceberg.catalog'='location_based_table')
+POSTHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@orders2
+PREHOOK: query: INSERT INTO orders2 SELECT * FROM orders
+PREHOOK: type: QUERY
+PREHOOK: Input: default@orders
+PREHOOK: Output: default@orders2
+POSTHOOK: query: INSERT INTO orders2 SELECT * FROM orders
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@orders
+POSTHOOK: Output: default@orders2
+PREHOOK: query: select count(*) from orders2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@orders2
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from orders2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@orders2
+#### A masked pattern was here ####
+21
+PREHOOK: query: describe formatted orders2
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@orders2
+POSTHOOK: query: describe formatted orders2
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@orders2
+# col_name             data_type               comment             
+orderid                int                                         
+quantity               int                                         
+itemid                 int                                         
+tradets                timestamp                                   
+p1                     string                                      
+p2                     string                                      
+                
+# Partition Transform Information               
+# col_name             transform_type           
+p1                     IDENTITY                 
+p2                     IDENTITY                 
+                
+# Detailed Table Information            
+Database:              default                  
+#### A masked pattern was here ####
+Retention:             0                        
+#### A masked pattern was here ####
+Table Type:            EXTERNAL_TABLE           
+Table Parameters:               
+       COLUMN_STATS_ACCURATE   
{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"itemid\":\"true\",\"orderid\":\"true\",\"p1\":\"true\",\"p2\":\"true\",\"quantity\":\"true\",\"tradets\":\"true\"}}
+       EXTERNAL                TRUE                
+       bucketing_version       2                   
+       format-version          2                   
+       iceberg.catalog         location_based_table
+       iceberg.orc.files.only  true                
+       numFiles                10                  
+       numPartitions           10                  
+       numRows                 21                  
+       rawDataSize             0                   
+       storage_handler         
org.apache.iceberg.mr.hive.HiveIcebergStorageHandler
+       table_type              ICEBERG             
+       totalSize               #Masked#
+#### A masked pattern was here ####
+       write.delete.mode       merge-on-read       
+       write.merge.mode        merge-on-read       
+       write.update.mode       merge-on-read       
+                
+# Storage Information           
+SerDe Library:         org.apache.iceberg.mr.hive.HiveIcebergSerDe      
+InputFormat:           org.apache.iceberg.mr.hive.HiveIcebergInputFormat       
 
+OutputFormat:          org.apache.iceberg.mr.hive.HiveIcebergOutputFormat      
 
+Compressed:            No                       
+Sort Columns:          []                       
+Storage Desc Params:            
+       serialization.format    1                   
+       write.format.default    ORC                 
+PREHOOK: query: delete from orders2 where itemid = 3
+PREHOOK: type: QUERY
+PREHOOK: Input: default@orders2
+#### A masked pattern was here ####
+POSTHOOK: query: delete from orders2 where itemid = 3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@orders2
+#### A masked pattern was here ####
+PREHOOK: query: select count(*) from orders2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@orders2
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from orders2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@orders2
+#### A masked pattern was here ####
+21
+PREHOOK: query: describe formatted orders2
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@orders2
+POSTHOOK: query: describe formatted orders2
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@orders2
+# col_name             data_type               comment             
+orderid                int                                         
+quantity               int                                         
+itemid                 int                                         
+tradets                timestamp                                   
+p1                     string                                      
+p2                     string                                      
+                
+# Partition Transform Information               
+# col_name             transform_type           
+p1                     IDENTITY                 
+p2                     IDENTITY                 
+                
+# Detailed Table Information            
+Database:              default                  
+#### A masked pattern was here ####
+Retention:             0                        
+#### A masked pattern was here ####
+Table Type:            EXTERNAL_TABLE           
+Table Parameters:               
+       COLUMN_STATS_ACCURATE   
{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"itemid\":\"true\",\"orderid\":\"true\",\"p1\":\"true\",\"p2\":\"true\",\"quantity\":\"true\",\"tradets\":\"true\"}}
+       EXTERNAL                TRUE                
+       bucketing_version       2                   
+       format-version          2                   
+       iceberg.catalog         location_based_table
+       iceberg.orc.files.only  true                
+       numFiles                10                  
+       numRows                 21                  
+       rawDataSize             0                   
+       storage_handler         
org.apache.iceberg.mr.hive.HiveIcebergStorageHandler
+       table_type              ICEBERG             
+       totalSize               #Masked#
+#### A masked pattern was here ####
+       write.delete.mode       merge-on-read       
+       write.merge.mode        merge-on-read       
+       write.update.mode       merge-on-read       
+                
+# Storage Information           
+SerDe Library:         org.apache.iceberg.mr.hive.HiveIcebergSerDe      
+InputFormat:           org.apache.iceberg.mr.hive.HiveIcebergInputFormat       
 
+OutputFormat:          org.apache.iceberg.mr.hive.HiveIcebergOutputFormat      
 
+Compressed:            No                       
+Sort Columns:          []                       
+Storage Desc Params:            
+       serialization.format    1                   
+       write.format.default    ORC                 
diff --git a/itests/src/test/resources/testconfiguration.properties 
b/itests/src/test/resources/testconfiguration.properties
index 4300ed89918..3f5b804bba3 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -415,6 +415,7 @@ erasurecoding.only.query.files=\
   erasure_simple.q
 
 iceberg.llap.query.files=\
+  hadoop_catalog_create_table.q,\
   iceberg_bucket_map_join_1.q,\
   iceberg_bucket_map_join_2.q,\
   iceberg_bucket_map_join_3.q,\
@@ -455,6 +456,7 @@ iceberg.llap.query.compactor.files=\
   iceberg_minor_compaction_unpartitioned.q
 
 iceberg.llap.only.query.files=\
+  hadoop_catalog_create_table.q,\
   iceberg_bucket_map_join_1.q,\
   iceberg_bucket_map_join_2.q,\
   iceberg_bucket_map_join_3.q,\

Reply via email to