This is an automated email from the ASF dual-hosted git repository.
kasakrisz 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 8383222af76 HIVE-30054: Iceberg: metadata delete optimization allows
users without DELETE permission to bypass authorization (#6786)
8383222af76 is described below
commit 8383222af76b9e5e5eca0c5beb324234903069ac
Author: Krisztian Kasa <[email protected]>
AuthorDate: Wed Sep 16 13:57:46 2026 +0200
HIVE-30054: Iceberg: metadata delete optimization allows users without
DELETE permission to bypass authorization (#6786)
---
.../iceberg_authorization_delete_via_metadata.q | 20 ++++++++++++++
...iceberg_authorization_delete_via_metadata.q.out | 31 ++++++++++++++++++++++
.../src/test/results/positive/col_stats.q.out | 2 ++
.../delete_iceberg_copy_on_write_partitioned.q.out | 4 +++
.../positive/delete_iceberg_partitioned_orc.q.out | 2 ++
.../delete_iceberg_partitioned_parquet.q.out | 2 ++
.../positive/iceberg_atomic_merge_update.q.out | 2 ++
.../llap/hadoop_catalog_create_table.q.out | 2 ++
...berg_major_compaction_partition_evolution.q.out | 2 ++
...erg_major_compaction_partition_evolution2.q.out | 4 +++
.../iceberg_major_compaction_partitioned.q.out | 4 +++
...iceberg_major_compaction_schema_evolution.q.out | 2 ++
...iceberg_major_compaction_single_partition.q.out | 2 ++
.../iceberg_major_compaction_unpartitioned.q.out | 2 ++
...g_major_compaction_unpartitioned_w_filter.q.out | 2 ++
.../positive/llap/llap_iceberg_read_orc.q.out | 2 ++
.../test/results/positive/metadata_delete.q.out | 4 +++
.../positive/vectorized_iceberg_merge_mixed.q.out | 2 ++
.../hive/ql/parse/DeleteSemanticAnalyzer.java | 7 +++--
19 files changed, 96 insertions(+), 2 deletions(-)
diff --git
a/iceberg/iceberg-handler/src/test/queries/negative/iceberg_authorization_delete_via_metadata.q
b/iceberg/iceberg-handler/src/test/queries/negative/iceberg_authorization_delete_via_metadata.q
new file mode 100644
index 00000000000..e406a634a3b
--- /dev/null
+++
b/iceberg/iceberg-handler/src/test/queries/negative/iceberg_authorization_delete_via_metadata.q
@@ -0,0 +1,20 @@
+set hive.test.authz.sstd.hs2.mode=true;
+set
hive.security.authorization.manager=org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactoryForTest;
+set
hive.security.authenticator.manager=org.apache.hadoop.hive.ql.security.SessionStateConfigUserAuthenticator;
+set hive.security.authorization.enabled=true;
+
+set user.name=owner_user;
+
+drop table if exists ice_tbl;
+
+create table ice_tbl (id int, val string) partitioned by (p int) stored by
iceberg stored as orc tblproperties ('format-version'='2');
+
+insert into ice_tbl values
+(1, 'a', 10), (2, 'b', 10), (3, 'c', 20), (4, 'd', 20);
+
+grant select on table ice_tbl to user read_only_user;
+
+set user.name=read_only_user;
+set hive.optimize.delete.metadata.only=true;
+
+delete from ice_tbl where p = 10;
diff --git
a/iceberg/iceberg-handler/src/test/results/negative/iceberg_authorization_delete_via_metadata.q.out
b/iceberg/iceberg-handler/src/test/results/negative/iceberg_authorization_delete_via_metadata.q.out
new file mode 100644
index 00000000000..72974813081
--- /dev/null
+++
b/iceberg/iceberg-handler/src/test/results/negative/iceberg_authorization_delete_via_metadata.q.out
@@ -0,0 +1,31 @@
+PREHOOK: query: drop table if exists ice_tbl
+PREHOOK: type: DROPTABLE
+PREHOOK: Output: database:default
+POSTHOOK: query: drop table if exists ice_tbl
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Output: database:default
+PREHOOK: query: create table ice_tbl (id int, val string) partitioned by (p
int) stored by iceberg stored as orc tblproperties ('format-version'='2')
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@ice_tbl
+POSTHOOK: query: create table ice_tbl (id int, val string) partitioned by (p
int) stored by iceberg stored as orc tblproperties ('format-version'='2')
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@ice_tbl
+PREHOOK: query: insert into ice_tbl values
+(1, 'a', 10), (2, 'b', 10), (3, 'c', 20), (4, 'd', 20)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@ice_tbl
+POSTHOOK: query: insert into ice_tbl values
+(1, 'a', 10), (2, 'b', 10), (3, 'c', 20), (4, 'd', 20)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@ice_tbl
+PREHOOK: query: grant select on table ice_tbl to user read_only_user
+PREHOOK: type: GRANT_PRIVILEGE
+PREHOOK: Output: default@ice_tbl
+POSTHOOK: query: grant select on table ice_tbl to user read_only_user
+POSTHOOK: type: GRANT_PRIVILEGE
+POSTHOOK: Output: default@ice_tbl
+FAILED: HiveAccessControlException Permission denied: Principal
[name=read_only_user, type=USER] does not have following privileges for
operation QUERY [[DELETE] on Object [type=TABLE_OR_VIEW,
name=hive.default.ice_tbl]]
diff --git a/iceberg/iceberg-handler/src/test/results/positive/col_stats.q.out
b/iceberg/iceberg-handler/src/test/results/positive/col_stats.q.out
index c9684a22807..bbe17a56676 100644
--- a/iceberg/iceberg-handler/src/test/results/positive/col_stats.q.out
+++ b/iceberg/iceberg-handler/src/test/results/positive/col_stats.q.out
@@ -277,10 +277,12 @@ POSTHOOK: Output: default@tbl_ice_puffin
PREHOOK: query: delete from tbl_ice_puffin where a <= 2
PREHOOK: type: QUERY
PREHOOK: Input: default@tbl_ice_puffin
+PREHOOK: Output: default@tbl_ice_puffin
PREHOOK: Output: hdfs://### HDFS PATH ###
POSTHOOK: query: delete from tbl_ice_puffin where a <= 2
POSTHOOK: type: QUERY
POSTHOOK: Input: default@tbl_ice_puffin
+POSTHOOK: Output: default@tbl_ice_puffin
POSTHOOK: Output: hdfs://### HDFS PATH ###
PREHOOK: query: analyze table tbl_ice_puffin compute statistics for columns A,
C
PREHOOK: type: ANALYZE_TABLE
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_copy_on_write_partitioned.q.out
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_copy_on_write_partitioned.q.out
index 2f1e38fbe1a..b8799678873 100644
---
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_copy_on_write_partitioned.q.out
+++
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_copy_on_write_partitioned.q.out
@@ -23,10 +23,12 @@ POSTHOOK: Output: default@tbl_ice
PREHOOK: query: explain delete from tbl_ice where b in ('one', 'four') or a =
22
PREHOOK: type: QUERY
PREHOOK: Input: default@tbl_ice
+PREHOOK: Output: default@tbl_ice
PREHOOK: Output: hdfs://### HDFS PATH ###
POSTHOOK: query: explain delete from tbl_ice where b in ('one', 'four') or a =
22
POSTHOOK: type: QUERY
POSTHOOK: Input: default@tbl_ice
+POSTHOOK: Output: default@tbl_ice
POSTHOOK: Output: hdfs://### HDFS PATH ###
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -40,10 +42,12 @@ STAGE PLANS:
PREHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
PREHOOK: type: QUERY
PREHOOK: Input: default@tbl_ice
+PREHOOK: Output: default@tbl_ice
PREHOOK: Output: hdfs://### HDFS PATH ###
POSTHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
POSTHOOK: type: QUERY
POSTHOOK: Input: default@tbl_ice
+POSTHOOK: Output: default@tbl_ice
POSTHOOK: Output: hdfs://### HDFS PATH ###
PREHOOK: query: select * from tbl_ice order by a
PREHOOK: type: QUERY
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 b17ea857b98..9ade323c2a9 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
@@ -23,10 +23,12 @@ POSTHOOK: Output: default@tbl_ice
PREHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
PREHOOK: type: QUERY
PREHOOK: Input: default@tbl_ice
+PREHOOK: Output: default@tbl_ice
PREHOOK: Output: hdfs://### HDFS PATH ###
POSTHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
POSTHOOK: type: QUERY
POSTHOOK: Input: default@tbl_ice
+POSTHOOK: Output: default@tbl_ice
POSTHOOK: Output: hdfs://### HDFS PATH ###
PREHOOK: query: select * from tbl_ice order by a
PREHOOK: type: QUERY
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 d02e9896b0e..7df47675766 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
@@ -23,10 +23,12 @@ POSTHOOK: Output: default@tbl_ice
PREHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
PREHOOK: type: QUERY
PREHOOK: Input: default@tbl_ice
+PREHOOK: Output: default@tbl_ice
PREHOOK: Output: hdfs://### HDFS PATH ###
POSTHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
POSTHOOK: type: QUERY
POSTHOOK: Input: default@tbl_ice
+POSTHOOK: Output: default@tbl_ice
POSTHOOK: Output: hdfs://### HDFS PATH ###
PREHOOK: query: select * from tbl_ice order by a
PREHOOK: type: QUERY
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/iceberg_atomic_merge_update.q.out
b/iceberg/iceberg-handler/src/test/results/positive/iceberg_atomic_merge_update.q.out
index 2aa1b4f56cc..0be99a5a2bf 100644
---
a/iceberg/iceberg-handler/src/test/results/positive/iceberg_atomic_merge_update.q.out
+++
b/iceberg/iceberg-handler/src/test/results/positive/iceberg_atomic_merge_update.q.out
@@ -217,10 +217,12 @@ POSTHOOK: Output: default@calls_v2
PREHOOK: query: delete from calls_v2 where year=2024
PREHOOK: type: QUERY
PREHOOK: Input: default@calls_v2
+PREHOOK: Output: default@calls_v2
PREHOOK: Output: hdfs://### HDFS PATH ###
POSTHOOK: query: delete from calls_v2 where year=2024
POSTHOOK: type: QUERY
POSTHOOK: Input: default@calls_v2
+POSTHOOK: Output: default@calls_v2
POSTHOOK: Output: hdfs://### HDFS PATH ###
PREHOOK: query: select s.operation, s.summary['added-records'],
s.summary['deleted-records'] from default.calls_v2.snapshots s
order by s.snapshot_id
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
index 3e3f7761f05..7f1a6c5ba6b 100644
---
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
@@ -391,10 +391,12 @@ Storage Desc Params:
PREHOOK: query: delete from orders2 where itemid = 3
PREHOOK: type: QUERY
PREHOOK: Input: default@orders2
+PREHOOK: Output: default@orders2
#### A masked pattern was here ####
POSTHOOK: query: delete from orders2 where itemid = 3
POSTHOOK: type: QUERY
POSTHOOK: Input: default@orders2
+POSTHOOK: Output: default@orders2
#### A masked pattern was here ####
PREHOOK: query: select count(*) from orders2
PREHOOK: type: QUERY
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
index 9167ce44f8a..13889cdb0e7 100644
---
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
+++
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
@@ -232,10 +232,12 @@ POSTHOOK: Output: default@ice_orc
PREHOOK: query: delete from ice_orc where last_name in ('ln1a', 'ln8a')
PREHOOK: type: QUERY
PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
#### A masked pattern was here ####
POSTHOOK: query: delete from ice_orc where last_name in ('ln1a', 'ln8a')
POSTHOOK: type: QUERY
POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
#### A masked pattern was here ####
PREHOOK: query: alter table ice_orc create tag v4
PREHOOK: type: ALTERTABLE_CREATETAG
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution2.q.out
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution2.q.out
index 3e8bda76a61..9a0f3545ca2 100644
---
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution2.q.out
+++
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution2.q.out
@@ -66,10 +66,12 @@ PREHOOK: query: delete from ice_orc where last_name in
('ln3', 'ln4')
PREHOOK: type: QUERY
PREHOOK: Input: ice_comp@ice_orc
#### A masked pattern was here ####
+PREHOOK: Output: ice_comp@ice_orc
POSTHOOK: query: delete from ice_orc where last_name in ('ln3', 'ln4')
POSTHOOK: type: QUERY
POSTHOOK: Input: ice_comp@ice_orc
#### A masked pattern was here ####
+POSTHOOK: Output: ice_comp@ice_orc
PREHOOK: query: alter table ice_orc set partition spec(dept_id)
PREHOOK: type: ALTERTABLE_SETPARTSPEC
PREHOOK: Input: ice_comp@ice_orc
@@ -113,10 +115,12 @@ PREHOOK: query: delete from ice_orc where last_name in
('ln7', 'ln8')
PREHOOK: type: QUERY
PREHOOK: Input: ice_comp@ice_orc
#### A masked pattern was here ####
+PREHOOK: Output: ice_comp@ice_orc
POSTHOOK: query: delete from ice_orc where last_name in ('ln7', 'ln8')
POSTHOOK: type: QUERY
POSTHOOK: Input: ice_comp@ice_orc
#### A masked pattern was here ####
+POSTHOOK: Output: ice_comp@ice_orc
PREHOOK: query: select * from ice_orc
PREHOOK: type: QUERY
PREHOOK: Input: ice_comp@ice_orc
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partitioned.q.out
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partitioned.q.out
index d45278ef903..1cc01b5684c 100644
---
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partitioned.q.out
+++
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partitioned.q.out
@@ -147,10 +147,12 @@ POSTHOOK: Output: default@ice_orc
PREHOOK: query: delete from ice_orc where last_name in ('ln1a', 'ln2a', 'ln7a')
PREHOOK: type: QUERY
PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
#### A masked pattern was here ####
POSTHOOK: query: delete from ice_orc where last_name in ('ln1a', 'ln2a',
'ln7a')
POSTHOOK: type: QUERY
POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
#### A masked pattern was here ####
PREHOOK: query: select * from ice_orc
PREHOOK: type: QUERY
@@ -480,10 +482,12 @@ POSTHOOK: Output: default@ice_orc
PREHOOK: query: delete from ice_orc where last_name in ('ln11a', 'ln12a',
'ln17a', 'ln18a')
PREHOOK: type: QUERY
PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
#### A masked pattern was here ####
POSTHOOK: query: delete from ice_orc where last_name in ('ln11a', 'ln12a',
'ln17a', 'ln18a')
POSTHOOK: type: QUERY
POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
#### A masked pattern was here ####
PREHOOK: query: select * from ice_orc
PREHOOK: type: QUERY
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_schema_evolution.q.out
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_schema_evolution.q.out
index 6c2dc4ae8d7..c6297aa188e 100644
---
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_schema_evolution.q.out
+++
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_schema_evolution.q.out
@@ -181,10 +181,12 @@ POSTHOOK: Output: default@ice_orc
PREHOOK: query: delete from ice_orc where fname in ('fn1', 'fn3', 'fn7')
PREHOOK: type: QUERY
PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
#### A masked pattern was here ####
POSTHOOK: query: delete from ice_orc where fname in ('fn1', 'fn3', 'fn7')
POSTHOOK: type: QUERY
POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
#### A masked pattern was here ####
PREHOOK: query: select * from ice_orc
PREHOOK: type: QUERY
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_single_partition.q.out
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_single_partition.q.out
index 1a97fee77ba..b5934788ee1 100644
---
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_single_partition.q.out
+++
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_single_partition.q.out
@@ -151,10 +151,12 @@ POSTHOOK: Output: default@ice_orc_wo_evo
PREHOOK: query: delete from ice_orc_wo_evo where last_name in ('ln1a', 'ln2a',
'ln7a')
PREHOOK: type: QUERY
PREHOOK: Input: default@ice_orc_wo_evo
+PREHOOK: Output: default@ice_orc_wo_evo
#### A masked pattern was here ####
POSTHOOK: query: delete from ice_orc_wo_evo where last_name in ('ln1a',
'ln2a', 'ln7a')
POSTHOOK: type: QUERY
POSTHOOK: Input: default@ice_orc_wo_evo
+POSTHOOK: Output: default@ice_orc_wo_evo
#### A masked pattern was here ####
PREHOOK: query: select * from ice_orc_wo_evo
PREHOOK: type: QUERY
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned.q.out
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned.q.out
index 111e45c495e..d09415a492c 100644
---
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned.q.out
+++
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned.q.out
@@ -145,10 +145,12 @@ POSTHOOK: Output: default@ice_orc
PREHOOK: query: delete from ice_orc where last_name in ('ln5a', 'ln6a', 'ln7a')
PREHOOK: type: QUERY
PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
#### A masked pattern was here ####
POSTHOOK: query: delete from ice_orc where last_name in ('ln5a', 'ln6a',
'ln7a')
POSTHOOK: type: QUERY
POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
#### A masked pattern was here ####
PREHOOK: query: select * from ice_orc
PREHOOK: type: QUERY
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned_w_filter.q.out
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned_w_filter.q.out
index b35895c710d..8b03da98bca 100644
---
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned_w_filter.q.out
+++
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned_w_filter.q.out
@@ -145,10 +145,12 @@ POSTHOOK: Output: default@ice_orc
PREHOOK: query: delete from ice_orc where last_name in ('ln5a', 'ln6a', 'ln7a')
PREHOOK: type: QUERY
PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
#### A masked pattern was here ####
POSTHOOK: query: delete from ice_orc where last_name in ('ln5a', 'ln6a',
'ln7a')
POSTHOOK: type: QUERY
POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
#### A masked pattern was here ####
PREHOOK: query: select * from ice_orc
PREHOOK: type: QUERY
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/llap/llap_iceberg_read_orc.q.out
b/iceberg/iceberg-handler/src/test/results/positive/llap/llap_iceberg_read_orc.q.out
index cefa4effc89..1abb38c8bb8 100644
---
a/iceberg/iceberg-handler/src/test/results/positive/llap/llap_iceberg_read_orc.q.out
+++
b/iceberg/iceberg-handler/src/test/results/positive/llap/llap_iceberg_read_orc.q.out
@@ -211,10 +211,12 @@ POSTHOOK: Output: default@target_ice
PREHOOK: query: DELETE FROM target_ice WHERE a = 1
PREHOOK: type: QUERY
PREHOOK: Input: default@target_ice
+PREHOOK: Output: default@target_ice
#### A masked pattern was here ####
POSTHOOK: query: DELETE FROM target_ice WHERE a = 1
POSTHOOK: type: QUERY
POSTHOOK: Input: default@target_ice
+POSTHOOK: Output: default@target_ice
#### A masked pattern was here ####
PREHOOK: query: SELECT * FROM target_ice
PREHOOK: type: QUERY
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out
b/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out
index d37561e23c5..f9a7dd49751 100644
--- a/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out
+++ b/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out
@@ -33,10 +33,12 @@ POSTHOOK: Output: default@ice_date
PREHOOK: query: delete from ice_date where a = 1 and b = '2021-01-01'
PREHOOK: type: QUERY
PREHOOK: Input: default@ice_date
+PREHOOK: Output: default@ice_date
PREHOOK: Output: hdfs://### HDFS PATH ###
POSTHOOK: query: delete from ice_date where a = 1 and b = '2021-01-01'
POSTHOOK: type: QUERY
POSTHOOK: Input: default@ice_date
+POSTHOOK: Output: default@ice_date
POSTHOOK: Output: hdfs://### HDFS PATH ###
PREHOOK: query: select * from ice_date
PREHOOK: type: QUERY
@@ -330,10 +332,12 @@ POSTHOOK: Output: default@test_delete_config
PREHOOK: query: explain delete from test_delete_config where b < 5
PREHOOK: type: QUERY
PREHOOK: Input: default@test_delete_config
+PREHOOK: Output: default@test_delete_config
PREHOOK: Output: hdfs://### HDFS PATH ###
POSTHOOK: query: explain delete from test_delete_config where b < 5
POSTHOOK: type: QUERY
POSTHOOK: Input: default@test_delete_config
+POSTHOOK: Output: default@test_delete_config
POSTHOOK: Output: hdfs://### HDFS PATH ###
STAGE DEPENDENCIES:
Stage-1 is a root stage
diff --git
a/iceberg/iceberg-handler/src/test/results/positive/vectorized_iceberg_merge_mixed.q.out
b/iceberg/iceberg-handler/src/test/results/positive/vectorized_iceberg_merge_mixed.q.out
index 2bcb7017013..fd79d6b888e 100644
---
a/iceberg/iceberg-handler/src/test/results/positive/vectorized_iceberg_merge_mixed.q.out
+++
b/iceberg/iceberg-handler/src/test/results/positive/vectorized_iceberg_merge_mixed.q.out
@@ -83,10 +83,12 @@ POSTHOOK: Output: default@store_sales
PREHOOK: query: delete from store_sales where ss_customer_sk > 2
PREHOOK: type: QUERY
PREHOOK: Input: default@store_sales
+PREHOOK: Output: default@store_sales
PREHOOK: Output: hdfs://### HDFS PATH ###
POSTHOOK: query: delete from store_sales where ss_customer_sk > 2
POSTHOOK: type: QUERY
POSTHOOK: Input: default@store_sales
+POSTHOOK: Output: default@store_sales
POSTHOOK: Output: hdfs://### HDFS PATH ###
PREHOOK: query: select count(*) from store_sales
PREHOOK: type: QUERY
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/parse/DeleteSemanticAnalyzer.java
b/ql/src/java/org/apache/hadoop/hive/ql/parse/DeleteSemanticAnalyzer.java
index 12386371627..ea49952971f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DeleteSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DeleteSemanticAnalyzer.java
@@ -28,6 +28,7 @@
import org.apache.hadoop.hive.ql.ddl.table.execute.AlterTableExecuteDesc;
import org.apache.hadoop.hive.ql.exec.TableScanOperator;
import org.apache.hadoop.hive.ql.exec.TaskFactory;
+import org.apache.hadoop.hive.ql.hooks.WriteEntity;
import org.apache.hadoop.hive.ql.io.sarg.ConvertAstToSearchArg;
import org.apache.hadoop.hive.ql.io.sarg.SearchArgument;
import org.apache.hadoop.hive.ql.lib.Node;
@@ -132,10 +133,12 @@ private boolean tryMetadataUpdate(Table table, ASTNode
tabNameNode, ASTNode wher
return false;
}
- DDLWork ddlWork = createDDLWorkOfMetadataUpdate(tableName, sarg);
- rootTasks = Collections.singletonList(TaskFactory.get(ddlWork));
inputs = sem.getAllInputs();
outputs = sem.getOutputs();
+ outputs.add(new WriteEntity(table, WriteEntity.WriteType.DELETE));
+
+ DDLWork ddlWork = createDDLWorkOfMetadataUpdate(tableName, sarg);
+ rootTasks = Collections.singletonList(TaskFactory.get(ddlWork));
updateOutputs(table);
return true;
}