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

mbod pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new b7b1902b3c0 HIVE-26156: Iceberg delete writer should handle deleting 
from old partition specs (#3225) (Marton Bod, reviewed by Adam Szita)
b7b1902b3c0 is described below

commit b7b1902b3c0081454fc14b8866ad93bf716c73c9
Author: Marton Bod <[email protected]>
AuthorDate: Thu Apr 21 09:32:51 2022 +0200

    HIVE-26156: Iceberg delete writer should handle deleting from old partition 
specs (#3225) (Marton Bod, reviewed by Adam Szita)
---
 .../iceberg/mr/hive/HiveIcebergDeleteWriter.java   |  8 ++--
 .../iceberg/mr/hive/HiveIcebergOutputFormat.java   | 10 ++---
 .../iceberg/mr/hive/HiveIcebergRecordWriter.java   | 11 ++++--
 .../iceberg/mr/hive/HiveIcebergStorageHandler.java | 14 ++++++-
 .../apache/iceberg/mr/hive/HiveIcebergWriter.java  | 20 +++++-----
 .../apache/iceberg/mr/hive/IcebergAcidUtil.java    | 11 +++---
 .../mr/hive/TestHiveIcebergOutputCommitter.java    |  5 +--
 .../apache/iceberg/mr/hive/TestHiveIcebergV2.java  | 44 ++++++++++++++++++++++
 .../positive/delete_iceberg_partitioned_avro.q.out |  4 +-
 .../positive/delete_iceberg_partitioned_orc.q.out  |  4 +-
 .../delete_iceberg_partitioned_parquet.q.out       |  4 +-
 11 files changed, 97 insertions(+), 38 deletions(-)

diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergDeleteWriter.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergDeleteWriter.java
index 5e92ae4cff6..a03a1ee1dd6 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergDeleteWriter.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergDeleteWriter.java
@@ -21,6 +21,7 @@ package org.apache.iceberg.mr.hive;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 import org.apache.hadoop.io.Writable;
 import org.apache.hadoop.mapred.TaskAttemptID;
 import org.apache.iceberg.DeleteFile;
@@ -41,10 +42,10 @@ public class HiveIcebergDeleteWriter extends 
HiveIcebergWriter {
 
   private final GenericRecord rowDataTemplate;
 
-  HiveIcebergDeleteWriter(Schema schema, PartitionSpec spec, FileFormat 
fileFormat,
+  HiveIcebergDeleteWriter(Schema schema, Map<Integer, PartitionSpec> specs, 
FileFormat fileFormat,
       FileWriterFactory<Record> writerFactory, OutputFileFactory fileFactory, 
FileIO io, long targetFileSize,
       TaskAttemptID taskAttemptID, String tableName) {
-    super(schema, spec, io, taskAttemptID, tableName,
+    super(schema, specs, io, taskAttemptID, tableName,
         new ClusteredPositionDeleteWriter<>(writerFactory, fileFactory, io, 
fileFormat, targetFileSize));
     rowDataTemplate = GenericRecord.create(schema);
   }
@@ -53,7 +54,8 @@ public class HiveIcebergDeleteWriter extends 
HiveIcebergWriter {
   public void write(Writable row) throws IOException {
     Record rec = ((Container<Record>) row).get();
     PositionDelete<Record> positionDelete = 
IcebergAcidUtil.getPositionDelete(rec, rowDataTemplate);
-    writer.write(positionDelete, spec, partition(positionDelete.row()));
+    int specId = IcebergAcidUtil.parseSpecId(rec);
+    writer.write(positionDelete, specs.get(specId), 
partition(positionDelete.row(), specId));
   }
 
   @Override
diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergOutputFormat.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergOutputFormat.java
index 1400d2b0b40..8cb378c470e 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergOutputFormat.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergOutputFormat.java
@@ -33,7 +33,6 @@ import org.apache.hadoop.mapred.OutputFormat;
 import org.apache.hadoop.mapred.TaskAttemptID;
 import org.apache.hadoop.util.Progressable;
 import org.apache.iceberg.FileFormat;
-import org.apache.iceberg.PartitionSpec;
 import org.apache.iceberg.Schema;
 import org.apache.iceberg.Table;
 import org.apache.iceberg.TableProperties;
@@ -69,7 +68,6 @@ public class HiveIcebergOutputFormat<T> implements 
OutputFormat<NullWritable, Co
     // It gets the config from the FileSinkOperator which has its own config 
for every target table
     Table table = HiveIcebergStorageHandler.table(jc, 
jc.get(hive_metastoreConstants.META_TABLE_NAME));
     Schema schema = HiveIcebergStorageHandler.schema(jc);
-    PartitionSpec spec = table.spec();
     FileFormat fileFormat = 
FileFormat.valueOf(PropertyUtil.propertyAsString(table.properties(),
         TableProperties.DEFAULT_FILE_FORMAT, 
TableProperties.DEFAULT_FILE_FORMAT_DEFAULT).toUpperCase(Locale.ENGLISH));
     long targetFileSize = PropertyUtil.propertyAsLong(table.properties(), 
TableProperties.WRITE_TARGET_FILE_SIZE_BYTES,
@@ -86,11 +84,11 @@ public class HiveIcebergOutputFormat<T> implements 
OutputFormat<NullWritable, Co
     HiveFileWriterFactory writerFactory = new HiveFileWriterFactory(table, 
fileFormat, schema, null, fileFormat,
         null, null, null, schema);
     if (HiveIcebergStorageHandler.isDelete(jc, tableName)) {
-      return new HiveIcebergDeleteWriter(schema, spec, fileFormat, 
writerFactory, outputFileFactory, io, targetFileSize,
-          taskAttemptID, tableName);
+      return new HiveIcebergDeleteWriter(schema, table.specs(), fileFormat, 
writerFactory, outputFileFactory, io,
+          targetFileSize, taskAttemptID, tableName);
     } else {
-      return new HiveIcebergRecordWriter(schema, spec, fileFormat, 
writerFactory, outputFileFactory, io, targetFileSize,
-          taskAttemptID, tableName);
+      return new HiveIcebergRecordWriter(schema, table.specs(), 
table.spec().specId(), fileFormat, writerFactory,
+          outputFileFactory, io, targetFileSize, taskAttemptID, tableName);
     }
   }
 }
diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergRecordWriter.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergRecordWriter.java
index 6fc26c0526b..f12b1fda20b 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergRecordWriter.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergRecordWriter.java
@@ -21,6 +21,7 @@ package org.apache.iceberg.mr.hive;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 import org.apache.hadoop.io.Writable;
 import org.apache.hadoop.mapred.TaskAttemptID;
 import org.apache.iceberg.DataFile;
@@ -37,17 +38,21 @@ import org.apache.iceberg.mr.mapred.Container;
 
 class HiveIcebergRecordWriter extends HiveIcebergWriter {
 
-  HiveIcebergRecordWriter(Schema schema, PartitionSpec spec, FileFormat format,
+  private final int currentSpecId;
+
+  HiveIcebergRecordWriter(
+      Schema schema, Map<Integer, PartitionSpec> specs, int currentSpecId, 
FileFormat format,
       FileWriterFactory<Record> fileWriterFactory, OutputFileFactory 
fileFactory, FileIO io, long targetFileSize,
       TaskAttemptID taskAttemptID, String tableName) {
-    super(schema, spec, io, taskAttemptID, tableName,
+    super(schema, specs, io, taskAttemptID, tableName,
         new ClusteredDataWriter<>(fileWriterFactory, fileFactory, io, format, 
targetFileSize));
+    this.currentSpecId = currentSpecId;
   }
 
   @Override
   public void write(Writable row) throws IOException {
     Record record = ((Container<Record>) row).get();
-    writer.write(record, spec, partition(record));
+    writer.write(record, specs.get(currentSpecId), partition(record, 
currentSpecId));
   }
 
   @Override
diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java
index 4c82eb78cd7..f23b0d16c10 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java
@@ -178,8 +178,7 @@ public class HiveIcebergStorageHandler implements 
HiveStoragePredicateHandler, H
     // For Tez, setting the committer here is enough to make sure it'll be 
part of the jobConf
     map.put("mapred.output.committer.class", 
HiveIcebergNoJobCommitter.class.getName());
     // For MR, the jobConf is set only in configureJobConf, so we're setting 
the write key here to detect it over there
-    String opType = SessionStateUtil.getProperty(conf, 
Context.Operation.class.getSimpleName())
-        .orElse(Context.Operation.OTHER.name());
+    String opType = getOperationType();
     map.put(InputFormatConfig.OPERATION_TYPE_PREFIX + 
tableDesc.getTableName(), opType);
     // Putting the key into the table props as well, so that projection 
pushdown can be determined on a
     // table-level and skipped only for output tables in HiveIcebergSerde. 
Properties from the map will be present in
@@ -353,6 +352,12 @@ public class HiveIcebergStorageHandler implements 
HiveStoragePredicateHandler, H
   @Override
   public DynamicPartitionCtx createDPContext(HiveConf hiveConf, 
org.apache.hadoop.hive.ql.metadata.Table hmsTable)
       throws SemanticException {
+    // delete records are already clustered by partition spec id and the hash 
of the partition struct
+    // there is no need to do any additional sorting based on partition columns
+    if (getOperationType().equals(Context.Operation.DELETE.name())) {
+      return null;
+    }
+
     TableDesc tableDesc = Utilities.getTableDesc(hmsTable);
     Table table = IcebergTableUtil.getTable(conf, tableDesc.getProperties());
     if (table.spec().isUnpartitioned()) {
@@ -772,6 +777,11 @@ public class HiveIcebergStorageHandler implements 
HiveStoragePredicateHandler, H
     }
   }
 
+  private String getOperationType() {
+    return SessionStateUtil.getProperty(conf, 
Context.Operation.class.getSimpleName())
+        .orElse(Context.Operation.OTHER.name());
+  }
+
   private static class NonSerializingConfig implements Serializable {
 
     private final transient Configuration conf;
diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergWriter.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergWriter.java
index 42f7ea43a5c..57c13f31cb8 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergWriter.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergWriter.java
@@ -53,18 +53,18 @@ public abstract class HiveIcebergWriter implements 
FileSinkOperator.RecordWriter
     return writers.get(taskAttemptID);
   }
 
-  protected final PartitionKey currentKey;
   protected final FileIO io;
   protected final InternalRecordWrapper wrapper;
-  protected final PartitionSpec spec;
+  protected final Map<Integer, PartitionSpec> specs;
+  protected final Map<Integer, PartitionKey> partitionKeys;
   protected final PartitioningWriter writer;
 
-  protected HiveIcebergWriter(Schema schema, PartitionSpec spec, FileIO io, 
TaskAttemptID attemptID, String tableName,
-      PartitioningWriter writer) {
+  protected HiveIcebergWriter(Schema schema, Map<Integer, PartitionSpec> 
specs, FileIO io, TaskAttemptID attemptID,
+      String tableName, PartitioningWriter writer) {
     this.io = io;
-    this.currentKey = new PartitionKey(spec, schema);
     this.wrapper = new InternalRecordWrapper(schema.asStruct());
-    this.spec = spec;
+    this.specs = specs;
+    this.partitionKeys = Maps.newHashMapWithExpectedSize(specs.size());
     this.writer = writer;
     writers.putIfAbsent(attemptID, Maps.newConcurrentMap());
     writers.get(attemptID).put(tableName, this);
@@ -100,8 +100,10 @@ public abstract class HiveIcebergWriter implements 
FileSinkOperator.RecordWriter
         result.dataFiles().size(), result.deleteFiles().size());
   }
 
-  protected PartitionKey partition(Record row) {
-    currentKey.partition(wrapper.wrap(row));
-    return currentKey;
+  protected PartitionKey partition(Record row, int specId) {
+    PartitionKey partitionKey = partitionKeys.computeIfAbsent(specId,
+        id -> new PartitionKey(specs.get(id), specs.get(id).schema()));
+    partitionKey.partition(wrapper.wrap(row));
+    return partitionKey;
   }
 }
diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergAcidUtil.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergAcidUtil.java
index bf59c675f2d..2a358f4fe40 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergAcidUtil.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergAcidUtil.java
@@ -25,7 +25,6 @@ import java.util.Objects;
 import org.apache.iceberg.MetadataColumns;
 import org.apache.iceberg.Schema;
 import org.apache.iceberg.Table;
-import org.apache.iceberg.data.GenericRecord;
 import org.apache.iceberg.data.Record;
 import org.apache.iceberg.deletes.PositionDelete;
 import org.apache.iceberg.relocated.com.google.common.collect.Lists;
@@ -93,7 +92,7 @@ public class IcebergAcidUtil {
    * @param rowData The record object to populate with the rowData fields only
    * @return The position delete object
    */
-  public static PositionDelete<Record> getPositionDelete(Record rec, 
GenericRecord rowData) {
+  public static PositionDelete<Record> getPositionDelete(Record rec, Record 
rowData) {
     PositionDelete<Record> positionDelete = PositionDelete.create();
     String filePath = 
rec.get(DELETE_SERDE_META_COLS.get(MetadataColumns.FILE_PATH), String.class);
     long filePosition = 
rec.get(DELETE_SERDE_META_COLS.get(MetadataColumns.ROW_POSITION), Long.class);
@@ -107,21 +106,21 @@ public class IcebergAcidUtil {
     return positionDelete;
   }
 
-  public static int parseSpecId(GenericRecord rec) {
+  public static int parseSpecId(Record rec) {
     return rec.get(DELETE_FILE_READ_META_COLS.get(MetadataColumns.SPEC_ID), 
Integer.class);
   }
 
-  public static long computePartitionHash(GenericRecord rec) {
+  public static long computePartitionHash(Record rec) {
     StructProjection part = 
rec.get(DELETE_FILE_READ_META_COLS.get(PARTITION_STRUCT_META_COL), 
StructProjection.class);
     // we need to compute a hash value for the partition struct so that it can 
be used as a sorting key
     return computeHash(part);
   }
 
-  public static String parseFilePath(GenericRecord rec) {
+  public static String parseFilePath(Record rec) {
     return rec.get(DELETE_FILE_READ_META_COLS.get(MetadataColumns.FILE_PATH), 
String.class);
   }
 
-  public static long parseFilePosition(GenericRecord rec) {
+  public static long parseFilePosition(Record rec) {
     return 
rec.get(DELETE_FILE_READ_META_COLS.get(MetadataColumns.ROW_POSITION), 
Long.class);
   }
 
diff --git 
a/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergOutputCommitter.java
 
b/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergOutputCommitter.java
index b72e338a516..4896f0899e3 100644
--- 
a/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergOutputCommitter.java
+++ 
b/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergOutputCommitter.java
@@ -266,7 +266,6 @@ public class TestHiveIcebergOutputCommitter {
     Table table = HiveIcebergStorageHandler.table(conf, name);
     FileIO io = table.io();
     Schema schema = HiveIcebergStorageHandler.schema(conf);
-    PartitionSpec spec = table.spec();
 
     for (int i = 0; i < taskNum; ++i) {
       List<Record> records = TestHelper.generateRandomRecords(schema, 
RECORD_NUM, i + attemptNum);
@@ -287,8 +286,8 @@ public class TestHiveIcebergOutputCommitter {
           null, fileFormat, null, null, null, null);
 
 
-      HiveIcebergRecordWriter testWriter = new HiveIcebergRecordWriter(schema, 
spec, fileFormat,
-          hfwf, outputFileFactory, io, TARGET_FILE_SIZE,
+      HiveIcebergRecordWriter testWriter = new HiveIcebergRecordWriter(schema, 
table.specs(),
+          table.spec().specId(), fileFormat, hfwf, outputFileFactory, io, 
TARGET_FILE_SIZE,
           TezUtil.taskAttemptWrapper(taskId), conf.get(Catalogs.NAME));
 
       Container<Record> container = new Container<>();
diff --git 
a/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergV2.java
 
b/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergV2.java
index 3d9c07204d4..569a9d3fc3e 100644
--- 
a/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergV2.java
+++ 
b/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergV2.java
@@ -310,6 +310,50 @@ public class TestHiveIcebergV2 extends 
HiveIcebergStorageHandlerWithEngineBase {
         
HiveIcebergTestUtils.valueForRow(HiveIcebergStorageHandlerTestUtils.CUSTOMER_SCHEMA,
 objects), 0);
   }
 
+  @Test
+  public void testDeleteStatementWithPartitionAndSchemaEvolution() {
+    PartitionSpec spec = 
PartitionSpec.builderFor(HiveIcebergStorageHandlerTestUtils.CUSTOMER_SCHEMA)
+        .identity("last_name").bucket("customer_id", 16).build();
+
+    // create and insert an initial batch of records
+    testTables.createTable(shell, "customers", 
HiveIcebergStorageHandlerTestUtils.CUSTOMER_SCHEMA,
+        spec, fileFormat, 
HiveIcebergStorageHandlerTestUtils.OTHER_CUSTOMER_RECORDS_2, 2);
+    // insert one more batch so that we have multiple data files within the 
same partition
+    
shell.executeStatement(testTables.getInsertQuery(HiveIcebergStorageHandlerTestUtils.OTHER_CUSTOMER_RECORDS_1,
+        TableIdentifier.of("default", "customers"), false));
+
+    // change the partition spec + schema, and insert some new records
+    shell.executeStatement("ALTER TABLE customers SET PARTITION SPEC 
(bucket(64, last_name))");
+    shell.executeStatement("ALTER TABLE customers ADD COLUMNS (department 
string)");
+    shell.executeStatement("ALTER TABLE customers CHANGE COLUMN first_name 
given_name string first");
+    shell.executeStatement("INSERT INTO customers VALUES ('Natalie', 20, 
'Bloom', 'Finance'), ('Joanna', 22, " +
+        "'Huberman', 'Operations')");
+
+    // the delete should handle deleting records both from older specs and 
from the new spec without problems
+    // there are records with Joanna in both the old and new spec, as well as 
the old and new schema
+    shell.executeStatement("DELETE FROM customers WHERE customer_id=3 or 
given_name='Joanna'");
+
+    List<Object[]> objects = shell.executeStatement("SELECT * FROM customers 
ORDER BY customer_id, last_name");
+    Assert.assertEquals(7, objects.size());
+
+    Schema newSchema = new Schema(
+        optional(2, "given_name", Types.StringType.get()),
+        optional(1, "customer_id", Types.LongType.get()),
+        optional(3, "last_name", Types.StringType.get(), "This is last name"),
+        optional(4, "department", Types.StringType.get())
+    );
+    List<Record> expected = TestHelper.RecordsBuilder.newInstance(newSchema)
+        .add("Sharon", 1L, "Taylor", null)
+        .add("Jake", 2L, "Donnel", null)
+        .add("Susan", 2L, "Morrison", null)
+        .add("Bob", 2L, "Silver", null)
+        .add("Laci", 4L, "Zold", null)
+        .add("Peti", 5L, "Rozsaszin", null)
+        .add("Natalie", 20L, "Bloom", "Finance")
+        .build();
+    HiveIcebergTestUtils.validateData(expected, 
HiveIcebergTestUtils.valueForRow(newSchema, objects), 0);
+  }
+
   private static <T> PositionDelete<T> positionDelete(CharSequence path, long 
pos, T row) {
     PositionDelete<T> positionDelete = PositionDelete.create();
     return positionDelete.set(path, pos, row);
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_avro.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_avro.q.out
index 58d06018287..2a6ca684edb 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_avro.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_avro.q.out
@@ -46,8 +46,8 @@ POSTHOOK: query: insert into tbl_ice values (444, 'hola', 
800), (555, 'schola',
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
 POSTHOOK: Output: default@tbl_ice
-Warning: Shuffle Join MERGEJOIN[57][tables = [$hdt$_0, $hdt$_1]] in Stage 
'Reducer 2' is a cross product
-Warning: Shuffle Join MERGEJOIN[59][tables = [$hdt$_0, $hdt$_1, $hdt$_2, 
$hdt$_3]] in Stage 'Reducer 4' is a cross product
+Warning: Shuffle Join MERGEJOIN[55][tables = [$hdt$_0, $hdt$_1]] in Stage 
'Reducer 2' is a cross product
+Warning: Shuffle Join MERGEJOIN[57][tables = [$hdt$_0, $hdt$_1, $hdt$_2, 
$hdt$_3]] in Stage 'Reducer 4' is a cross product
 PREHOOK: query: delete from tbl_ice where a in (select a from tbl_ice where a 
<= 5) or c in (select c from tbl_ice where c > 800)
 PREHOOK: type: QUERY
 PREHOOK: Input: default@tbl_ice
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_orc.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_orc.q.out
index 1bd035cdad6..b31e6322a2f 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_orc.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_orc.q.out
@@ -46,8 +46,8 @@ POSTHOOK: query: insert into tbl_ice values (444, 'hola', 
800), (555, 'schola',
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
 POSTHOOK: Output: default@tbl_ice
-Warning: Shuffle Join MERGEJOIN[57][tables = [$hdt$_0, $hdt$_1]] in Stage 
'Reducer 2' is a cross product
-Warning: Shuffle Join MERGEJOIN[59][tables = [$hdt$_0, $hdt$_1, $hdt$_2, 
$hdt$_3]] in Stage 'Reducer 4' is a cross product
+Warning: Shuffle Join MERGEJOIN[55][tables = [$hdt$_0, $hdt$_1]] in Stage 
'Reducer 2' is a cross product
+Warning: Shuffle Join MERGEJOIN[57][tables = [$hdt$_0, $hdt$_1, $hdt$_2, 
$hdt$_3]] in Stage 'Reducer 4' is a cross product
 PREHOOK: query: delete from tbl_ice where a in (select a from tbl_ice where a 
<= 5) or c in (select c from tbl_ice where c > 800)
 PREHOOK: type: QUERY
 PREHOOK: Input: default@tbl_ice
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_parquet.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_parquet.q.out
index c2278872824..5535baa16a0 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_parquet.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_parquet.q.out
@@ -46,8 +46,8 @@ POSTHOOK: query: insert into tbl_ice values (444, 'hola', 
800), (555, 'schola',
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
 POSTHOOK: Output: default@tbl_ice
-Warning: Shuffle Join MERGEJOIN[57][tables = [$hdt$_0, $hdt$_1]] in Stage 
'Reducer 2' is a cross product
-Warning: Shuffle Join MERGEJOIN[59][tables = [$hdt$_0, $hdt$_1, $hdt$_2, 
$hdt$_3]] in Stage 'Reducer 4' is a cross product
+Warning: Shuffle Join MERGEJOIN[55][tables = [$hdt$_0, $hdt$_1]] in Stage 
'Reducer 2' is a cross product
+Warning: Shuffle Join MERGEJOIN[57][tables = [$hdt$_0, $hdt$_1, $hdt$_2, 
$hdt$_3]] in Stage 'Reducer 4' is a cross product
 PREHOOK: query: delete from tbl_ice where a in (select a from tbl_ice where a 
<= 5) or c in (select c from tbl_ice where c > 800)
 PREHOOK: type: QUERY
 PREHOOK: Input: default@tbl_ice

Reply via email to