This is an automated email from the ASF dual-hosted git repository.
sankarh pushed a commit to branch branch-3
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/branch-3 by this push:
new a0e3411c01a HIVE-27708: Backport of HIVE-21104 to branch-3 (#4717)
a0e3411c01a is described below
commit a0e3411c01ae0ed4ac09c17bead143718387db19
Author: Kamal Sharma <[email protected]>
AuthorDate: Tue Oct 31 11:32:21 2023 +0530
HIVE-27708: Backport of HIVE-21104 to branch-3 (#4717)
HIVE-21104: PTF with nested structure throws ClassCastException (Rajesh
Balamohan reviewed by Gopal V)
Signed-off-by: Sankar Hariappan <[email protected]>
Closes (#4717)
---
.../hive/ql/udf/ptf/WindowingTableFunction.java | 2 ++
ql/src/test/queries/clientpositive/windowing.q | 6 +++++
.../results/clientpositive/llap/windowing.q.out | 31 ++++++++++++++++++++++
.../results/clientpositive/spark/windowing.q.out | 31 ++++++++++++++++++++++
4 files changed, 70 insertions(+)
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java
b/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java
index 5f9009c484d..827e50fe63b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java
@@ -388,6 +388,8 @@ public class WindowingTableFunction extends
TableFunctionEvaluator {
}
streamingState.rollingPart.append(row);
+ //Get back converted row
+ row = streamingState.rollingPart.getAt(streamingState.rollingPart.size()
-1);
WindowTableFunctionDef tabDef = (WindowTableFunctionDef) tableDef;
diff --git a/ql/src/test/queries/clientpositive/windowing.q
b/ql/src/test/queries/clientpositive/windowing.q
index 5de2b0e4733..4278dddf8e0 100644
--- a/ql/src/test/queries/clientpositive/windowing.q
+++ b/ql/src/test/queries/clientpositive/windowing.q
@@ -441,3 +441,9 @@ where p_mfgr='Manufacturer#1';
-- 47. empty partition
select sum(p_size) over (partition by p_mfgr )
from part where p_mfgr = 'm1';
+
+-- 48. nested tables (HIVE-21104)
+DROP TABLE IF EXISTS struct_table_example;
+CREATE TABLE struct_table_example (a int, s1 struct<f1: boolean, f2: string,
f3: int, f4: int> ) STORED AS ORC;
+INSERT INTO TABLE struct_table_example SELECT 1, named_struct('f1', false,
'f2', 'test', 'f3', 3, 'f4', 4) FROM part limit 1;
+select s1.f1, s1.f2, rank() over (partition by s1.f2 order by s1.f4) from
struct_table_example;
diff --git a/ql/src/test/results/clientpositive/llap/windowing.q.out
b/ql/src/test/results/clientpositive/llap/windowing.q.out
index ffd21abb4c0..37e9470780f 100644
--- a/ql/src/test/results/clientpositive/llap/windowing.q.out
+++ b/ql/src/test/results/clientpositive/llap/windowing.q.out
@@ -2350,3 +2350,34 @@ from part where p_mfgr = 'm1'
POSTHOOK: type: QUERY
POSTHOOK: Input: default@part
#### A masked pattern was here ####
+PREHOOK: query: DROP TABLE IF EXISTS struct_table_example
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS struct_table_example
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE struct_table_example (a int, s1 struct<f1:
boolean, f2: string, f3: int, f4: int> ) STORED AS ORC
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@struct_table_example
+POSTHOOK: query: CREATE TABLE struct_table_example (a int, s1 struct<f1:
boolean, f2: string, f3: int, f4: int> ) STORED AS ORC
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@struct_table_example
+PREHOOK: query: INSERT INTO TABLE struct_table_example SELECT 1,
named_struct('f1', false, 'f2', 'test', 'f3', 3, 'f4', 4) FROM part limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+PREHOOK: Output: default@struct_table_example
+POSTHOOK: query: INSERT INTO TABLE struct_table_example SELECT 1,
named_struct('f1', false, 'f2', 'test', 'f3', 3, 'f4', 4) FROM part limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+POSTHOOK: Output: default@struct_table_example
+POSTHOOK: Lineage: struct_table_example.a SIMPLE []
+POSTHOOK: Lineage: struct_table_example.s1 EXPRESSION []
+PREHOOK: query: select s1.f1, s1.f2, rank() over (partition by s1.f2 order by
s1.f4) from struct_table_example
+PREHOOK: type: QUERY
+PREHOOK: Input: default@struct_table_example
+#### A masked pattern was here ####
+POSTHOOK: query: select s1.f1, s1.f2, rank() over (partition by s1.f2 order by
s1.f4) from struct_table_example
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@struct_table_example
+#### A masked pattern was here ####
+false test 1
diff --git a/ql/src/test/results/clientpositive/spark/windowing.q.out
b/ql/src/test/results/clientpositive/spark/windowing.q.out
index be458f1755d..5c2cce73970 100644
--- a/ql/src/test/results/clientpositive/spark/windowing.q.out
+++ b/ql/src/test/results/clientpositive/spark/windowing.q.out
@@ -2347,3 +2347,34 @@ from part where p_mfgr = 'm1'
POSTHOOK: type: QUERY
POSTHOOK: Input: default@part
#### A masked pattern was here ####
+PREHOOK: query: DROP TABLE IF EXISTS struct_table_example
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS struct_table_example
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE struct_table_example (a int, s1 struct<f1:
boolean, f2: string, f3: int, f4: int> ) STORED AS ORC
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@struct_table_example
+POSTHOOK: query: CREATE TABLE struct_table_example (a int, s1 struct<f1:
boolean, f2: string, f3: int, f4: int> ) STORED AS ORC
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@struct_table_example
+PREHOOK: query: INSERT INTO TABLE struct_table_example SELECT 1,
named_struct('f1', false, 'f2', 'test', 'f3', 3, 'f4', 4) FROM part limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+PREHOOK: Output: default@struct_table_example
+POSTHOOK: query: INSERT INTO TABLE struct_table_example SELECT 1,
named_struct('f1', false, 'f2', 'test', 'f3', 3, 'f4', 4) FROM part limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+POSTHOOK: Output: default@struct_table_example
+POSTHOOK: Lineage: struct_table_example.a SIMPLE []
+POSTHOOK: Lineage: struct_table_example.s1 EXPRESSION []
+PREHOOK: query: select s1.f1, s1.f2, rank() over (partition by s1.f2 order by
s1.f4) from struct_table_example
+PREHOOK: type: QUERY
+PREHOOK: Input: default@struct_table_example
+#### A masked pattern was here ####
+POSTHOOK: query: select s1.f1, s1.f2, rank() over (partition by s1.f2 order by
s1.f4) from struct_table_example
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@struct_table_example
+#### A masked pattern was here ####
+false test 1