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

ayushsaxena 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 8d711b3fa45 HIVE-29540: Iceberg: [V3] Support filtering with ROW 
LINEAGE columns (#6403)
8d711b3fa45 is described below

commit 8d711b3fa4501fc8ca7e021da9577f89adf93aa7
Author: Ayush Saxena <[email protected]>
AuthorDate: Fri Apr 3 02:46:17 2026 +0530

    HIVE-29540: Iceberg: [V3] Support filtering with ROW LINEAGE columns (#6403)
---
 .../iceberg/mr/hive/HiveIcebergStorageHandler.java |  7 +++-
 .../src/test/queries/positive/row_lineage.q        |  7 ++++
 .../src/test/results/positive/row_lineage.q.out    | 48 ++++++++++++++++++++++
 3 files changed, 60 insertions(+), 2 deletions(-)

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 042ffbba192..1c48407bf68 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
@@ -210,9 +210,11 @@
 import org.slf4j.LoggerFactory;
 
 import static org.apache.hadoop.hive.ql.metadata.VirtualColumn.FILE_PATH;
+import static 
org.apache.hadoop.hive.ql.metadata.VirtualColumn.LAST_UPDATED_SEQUENCE_NUMBER;
 import static org.apache.hadoop.hive.ql.metadata.VirtualColumn.PARTITION_HASH;
 import static 
org.apache.hadoop.hive.ql.metadata.VirtualColumn.PARTITION_PROJECTION;
 import static 
org.apache.hadoop.hive.ql.metadata.VirtualColumn.PARTITION_SPEC_ID;
+import static org.apache.hadoop.hive.ql.metadata.VirtualColumn.ROW_LINEAGE_ID;
 import static org.apache.hadoop.hive.ql.metadata.VirtualColumn.ROW_POSITION;
 import static org.apache.iceberg.SnapshotSummary.ADDED_RECORDS_PROP;
 import static org.apache.iceberg.SnapshotSummary.DELETED_RECORDS_PROP;
@@ -392,8 +394,9 @@ public DecomposedPredicate decomposePredicate(JobConf 
jobConf, Deserializer dese
     ExprNodeDesc pushedPredicate = exprNodeDesc.clone();
 
     List<ExprNodeDesc> subExprNodes = pushedPredicate.getChildren();
-    Set<String> skipList = Stream.of(FILE_PATH, PARTITION_SPEC_ID, 
PARTITION_HASH)
-        .map(VirtualColumn::getName).collect(Collectors.toSet());
+    Set<String> skipList =
+        Stream.of(FILE_PATH, PARTITION_SPEC_ID, PARTITION_HASH, 
ROW_LINEAGE_ID, LAST_UPDATED_SEQUENCE_NUMBER)
+            .map(VirtualColumn::getName).collect(Collectors.toSet());
 
     if (subExprNodes.removeIf(nodeDesc -> nodeDesc.getCols() != null &&
           nodeDesc.getCols().stream().anyMatch(skipList::contains))) {
diff --git a/iceberg/iceberg-handler/src/test/queries/positive/row_lineage.q 
b/iceberg/iceberg-handler/src/test/queries/positive/row_lineage.q
index 446feb11041..8e44b8a5ef6 100644
--- a/iceberg/iceberg-handler/src/test/queries/positive/row_lineage.q
+++ b/iceberg/iceberg-handler/src/test/queries/positive/row_lineage.q
@@ -6,6 +6,13 @@ update ice_t set balance = 500 where id = 2;
 
 select id, name, balance, ROW__LINEAGE__ID, LAST__UPDATED__SEQUENCE__NUMBER 
from ice_t order by id;
 
+-- Test filtering with row lineage columns
+select id, name, ROW__LINEAGE__ID, LAST__UPDATED__SEQUENCE__NUMBER from ice_t 
where ROW__LINEAGE__ID = 1;
+select id, name, balance, ROW__LINEAGE__ID, LAST__UPDATED__SEQUENCE__NUMBER 
from ice_t where LAST__UPDATED__SEQUENCE__NUMBER = 1;
+select *, ROW__LINEAGE__ID, LAST__UPDATED__SEQUENCE__NUMBER from ice_t where 
LAST__UPDATED__SEQUENCE__NUMBER = 2 OR ROW__LINEAGE__ID = 1;
+delete from ice_t where ROW__LINEAGE__ID = 1 OR 
LAST__UPDATED__SEQUENCE__NUMBER = 2;
+select id, name, balance, ROW__LINEAGE__ID, LAST__UPDATED__SEQUENCE__NUMBER 
from ice_t order by id;
+
 -- copy-on-write
 create table ice_t_cow (id int, name string, balance int) stored by iceberg 
TBLPROPERTIES ('format-version'='3', 'write.update.mode'='copy-on-write');
 insert into ice_t_cow values (1, 'aaa', 25),(2, 'bbb', 35),(3, 'ccc', 82),(4, 
'ddd', 91);
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/row_lineage.q.out 
b/iceberg/iceberg-handler/src/test/results/positive/row_lineage.q.out
index 4350e994417..046576fa9bf 100644
--- a/iceberg/iceberg-handler/src/test/results/positive/row_lineage.q.out
+++ b/iceberg/iceberg-handler/src/test/results/positive/row_lineage.q.out
@@ -48,6 +48,54 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
 2      bbb     500     1       2
 3      ccc     82      2       1
 4      ddd     91      3       1
+PREHOOK: query: select id, name, ROW__LINEAGE__ID, 
LAST__UPDATED__SEQUENCE__NUMBER from ice_t where ROW__LINEAGE__ID = 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ice_t
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select id, name, ROW__LINEAGE__ID, 
LAST__UPDATED__SEQUENCE__NUMBER from ice_t where ROW__LINEAGE__ID = 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ice_t
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2      bbb     1       2
+PREHOOK: query: select id, name, balance, ROW__LINEAGE__ID, 
LAST__UPDATED__SEQUENCE__NUMBER from ice_t where 
LAST__UPDATED__SEQUENCE__NUMBER = 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ice_t
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select id, name, balance, ROW__LINEAGE__ID, 
LAST__UPDATED__SEQUENCE__NUMBER from ice_t where 
LAST__UPDATED__SEQUENCE__NUMBER = 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ice_t
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1      aaa     25      0       1
+3      ccc     82      2       1
+4      ddd     91      3       1
+PREHOOK: query: select *, ROW__LINEAGE__ID, LAST__UPDATED__SEQUENCE__NUMBER 
from ice_t where LAST__UPDATED__SEQUENCE__NUMBER = 2 OR ROW__LINEAGE__ID = 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ice_t
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select *, ROW__LINEAGE__ID, LAST__UPDATED__SEQUENCE__NUMBER 
from ice_t where LAST__UPDATED__SEQUENCE__NUMBER = 2 OR ROW__LINEAGE__ID = 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ice_t
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2      bbb     500     1       2
+PREHOOK: query: delete from ice_t where ROW__LINEAGE__ID = 1 OR 
LAST__UPDATED__SEQUENCE__NUMBER = 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ice_t
+PREHOOK: Output: default@ice_t
+POSTHOOK: query: delete from ice_t where ROW__LINEAGE__ID = 1 OR 
LAST__UPDATED__SEQUENCE__NUMBER = 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ice_t
+POSTHOOK: Output: default@ice_t
+PREHOOK: query: select id, name, balance, ROW__LINEAGE__ID, 
LAST__UPDATED__SEQUENCE__NUMBER from ice_t order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ice_t
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select id, name, balance, ROW__LINEAGE__ID, 
LAST__UPDATED__SEQUENCE__NUMBER from ice_t order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ice_t
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1      aaa     25      0       1
+3      ccc     82      2       1
+4      ddd     91      3       1
 PREHOOK: query: create table ice_t_cow (id int, name string, balance int) 
stored by iceberg TBLPROPERTIES ('format-version'='3', 
'write.update.mode'='copy-on-write')
 PREHOOK: type: CREATETABLE
 PREHOOK: Output: database:default

Reply via email to