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 <88836971+kamalshar...@users.noreply.github.com> 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 <sank...@apache.org> 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