[
https://issues.apache.org/jira/browse/HIVE-30043?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated HIVE-30043:
----------------------------------
Labels: pull-request-available (was: )
> FULL OUTER MapJoin (dynamic partitioned hash join) throws ClassCastException:
> LongWritable cannot be cast to ShortWritable
> --------------------------------------------------------------------------------------------------------------------------
>
> Key: HIVE-30043
> URL: https://issues.apache.org/jira/browse/HIVE-30043
> Project: Hive
> Issue Type: Bug
> Reporter: Indhumathi Muthumurugesh
> Assignee: Indhumathi Muthumurugesh
> Priority: Major
> Labels: pull-request-available
>
> With {{hive.optimize.dynamic.partition.hashjoin=true}} and a query shape that
> forces row-mode (non-vectorized) execution of a {{MapJoinOperator}}
> implementing a {{{}FULL OUTER JOIN{}}}, the query fails with:
> {code:java}
> java.lang.ClassCastException: class org.apache.hadoop.io.LongWritable cannot
> be cast to
> class org.apache.hadoop.hive.serde2.io.ShortWritable {code}
> The crash lands on a BIGINT column (derived from count(1)) that is being
> misinterpreted as SMALLINT. The same query, same data, and same settings run
> correctly when the plan is fully vectorized instead
> (hive.vectorized.adaptor.usage.mode=all), or when the
> dynamic-partitioned-hash-join conversion is disabled.
> h2. Stack Trace
> {code:java}
> ERROR : FAILED: Execution Error, return code 2 from
> org.apache.hadoop.hive.ql.exec.tez.TezTask.Vertex failed, vertexName=Reducer
> 8, ...Caused by: java.lang.RuntimeException:
> org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while
> processing row at
> org.apache.hadoop.hive.ql.exec.tez.ReduceRecordSource.pushRecord(ReduceRecordSource.java:313)
> at
> org.apache.hadoop.hive.ql.exec.tez.ReduceRecordProcessor.run(ReduceRecordProcessor.java:291)
> at
> org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:293)
> ... 16 moreCaused by: org.apache.hadoop.hive.ql.metadata.HiveException:
> Hive Runtime Error while processing row at
> org.apache.hadoop.hive.ql.exec.tez.ReduceRecordSource$GroupIterator.next(ReduceRecordSource.java:387)
> at
> org.apache.hadoop.hive.ql.exec.tez.ReduceRecordSource.pushRecord(ReduceRecordSource.java:303)
> ... 18 moreCaused by:
> org.apache.hadoop.hive.ql.metadata.HiveException: Unexpected exception from
> MapJoinOperator : Error evaluating if(_col22 is not null, _col22, 0L) at
> org.apache.hadoop.hive.ql.exec.MapJoinOperator.process(MapJoinOperator.java:599)
> at
> org.apache.hadoop.hive.ql.exec.tez.ReduceRecordSource$GroupIterator.next(ReduceRecordSource.java:372)
> ... 19 moreCaused by:
> org.apache.hadoop.hive.ql.metadata.HiveException: Error evaluating if(_col22
> is not null, _col22, 0L) at
> org.apache.hadoop.hive.ql.exec.SelectOperator.process(SelectOperator.java:92)
> at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:888)
> at
> org.apache.hadoop.hive.ql.exec.CommonJoinOperator.internalForward(CommonJoinOperator.java:889)
> at
> org.apache.hadoop.hive.ql.exec.CommonJoinOperator.genAllOneUniqueJoinObject(CommonJoinOperator.java:921)
> at
> org.apache.hadoop.hive.ql.exec.CommonJoinOperator.checkAndGenObject(CommonJoinOperator.java:1015)
> at
> org.apache.hadoop.hive.ql.exec.MapJoinOperator.process(MapJoinOperator.java:586)
> ... 20 moreCaused by: java.lang.ClassCastException: class
> org.apache.hadoop.io.LongWritable cannot be cast to class
> org.apache.hadoop.hive.serde2.io.ShortWritable
> (org.apache.hadoop.io.LongWritable and
> org.apache.hadoop.hive.serde2.io.ShortWritable are in unnamed module of
> loader 'app') at
> org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableShortObjectInspector.get(WritableShortObjectInspector.java:36)
> at
> org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.getLong(PrimitiveObjectInspectorUtils.java:777)
> at
> org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorConverter$LongConverter.convert(PrimitiveObjectInspectorConverter.java:183)
> at
> org.apache.hadoop.hive.ql.udf.generic.GenericUDFUtils$ReturnObjectInspectorResolver.convertIfNecessary(GenericUDFUtils.java:247)
> at
> org.apache.hadoop.hive.ql.udf.generic.GenericUDFUtils$ReturnObjectInspectorResolver.convertIfNecessary(GenericUDFUtils.java:213)
> at
> org.apache.hadoop.hive.ql.udf.generic.GenericUDFIf.evaluate(GenericUDFIf.java:168)
> at
> org.apache.hadoop.hive.ql.exec.ExprNodeGenericFuncEvaluator._evaluate(ExprNodeGenericFuncEvaluator.java:231)
> at
> org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator.evaluate(ExprNodeEvaluator.java:80)
> at
> org.apache.hadoop.hive.ql.exec.ExprNodeEvaluatorHead._evaluate(ExprNodeEvaluatorHead.java:44)
> at
> org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator.evaluate(ExprNodeEvaluator.java:80)
> at
> org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator.evaluate(ExprNodeEvaluator.java:68)
> at
> org.apache.hadoop.hive.ql.exec.SelectOperator.process(SelectOperator.java:87)
> ... 25 more {code}
> h2. Steps to Reproduce
> {code:java}
> set hive.execution.engine=tez;
> set hive.auto.convert.join=true;
> set hive.optimize.dynamic.partition.hashjoin=true;
> set hive.vectorized.adaptor.usage.mode=chosen;DROP TABLE IF EXISTS t_base;
> CREATE TABLE t_base (
> entity_id STRING,
> proc_type STRING,
> event_dt STRING,
> code_list STRING,
> notif_cd STRING,
> category_cd STRING,
> status_cd STRING,
> amount_usd DOUBLE,
> flag_ind STRING,
> flag_cnt SMALLINT
> ) STORED AS ORC;INSERT INTO TABLE t_base VALUES
> ('BIN001','EDIT','20260101','045','1','0','C',100.00,'N',CAST(0 AS
> SMALLINT)),
> ('BIN001','EDIT','20260101','045','1','1','C',200.00,'N',CAST(0 AS
> SMALLINT)),
> ('BIN001','EDIT','20260101','000','3','2','W',50.00,'N',CAST(0 AS
> SMALLINT)),
> ('BIN001','EDIT','20260101','000','1','0','A',75.00,'N',CAST(0 AS
> SMALLINT)),
> ('BIN001','EDIT','20260101','000','1','3','S',10.00,'N',CAST(0 AS
> SMALLINT)),
> ('BIN002','EDIT','20260101','000','1','1','C',300.00,'N',CAST(0 AS
> SMALLINT)),
> ('BIN002','EDIT','20260101','000','1','0','U',20.00,'N',CAST(0 AS
> SMALLINT)),
> ('BIN002','EDIT','20260101','000','1','4','T',5.00,'N',CAST(0 AS SMALLINT)),
> ('BIN003','EDIT','20260101','000','1','5','C',400.00,'Y',CAST(1 AS
> SMALLINT)),
> ('BIN003','EDIT','20260101','000','1','6','C',150.00,'Y',CAST(1 AS
> SMALLINT)),
> ('BIN003','EDIT','20260101','000','1','0','A',60.00,'N',CAST(0 AS
> SMALLINT)),
> ('BIN003','EDIT','20260101','000','1','1','W',30.00,'N',CAST(0 AS
> SMALLINT));CREATE TEMPORARY FUNCTION test_uuid AS
> 'org.apache.hadoop.hive.ql.udf.UDFUUID';SELECT coalesce(join_a.entity_id,
> join_b.entity_id) as entity_id,
> coalesce(join_a.warn_code_1, '000') as warn_code_1,
> coalesce(join_a.warn_1_total, 0) as warn_1_total,
> coalesce(join_a.notif_1_total, 0) as notif_1_total,
> coalesce(join_b.cat_0_tran_count, 0) as cat_0_tran_count,
> coalesce(if(join_b.cat_0_dollar_total > 9999999999.99, 9999999999.99,
> join_b.cat_0_dollar_total), 0) as cat_0_dollar_total,
> COALESCE(join_b.flag_cnt, 0) as flag_cnt,
> test_uuid() as row_id
> FROM
> (select warn_agg.entity_id,
> warn_agg.warn_code_1,
> warn_agg.warn_1_total,
> notif_agg.notif_1_total
> from
> (Select d.entity_id,
> COALESCE(d.code_list[0], '000') as warn_code_1,
> cast(COALESCE(d.count_list[0], 0) as int) as warn_1_total
> from
> (SELECT c.entity_id, collect_list(c.code) as code_list,
> collect_list(c.count) as count_list
> FROM
> (select b.entity_id, b.code, count(1) as count
> from (
> select entity_id, trim(code) as code
> from (
> select entity_id,
> split(CONCAT(SUBSTR(RPAD(TRIM(regexp_replace(code_list,'=','0')),6,'0'),0,3),'-',SUBSTR(RPAD(TRIM(regexp_replace(code_list,'=','0')),6,'0'),4,3)),
> '-') as code_array
> from t_base where proc_type = 'EDIT' and event_dt
> in ('20260101')) a
> lateral view explode(a.code_array) exploded as code) b
> where b.code != '000'
> group by b.entity_id, b.code) c
> GROUP BY c.entity_id order by c.entity_id) d) warn_agg
> join
> (Select e.entity_id,
> cast(COALESCE(e.count_list[0], 0) as int) as notif_1_total
> from
> (SELECT d.entity_id, collect_list(d.notif_cd) as notif_cd_list,
> collect_list(d.count) as count_list
> FROM
> (select b.entity_id, b.notif_cd, COALESCE(a.count, 0) as
> count
> from
> (select entity_id, trim(notif_cd) as notif_cd
> from (
> select distinct entity_id,
> split(CONCAT(SUBSTR('13',1,1),'-',SUBSTR('13',2,1)), '-') as notif_cd_array
> from t_base where proc_type = 'EDIT' and
> event_dt in ('20260101')) a
> lateral view explode(a.notif_cd_array) exploded as
> notif_cd) b
> left outer join
> (SELECT c.entity_id, c.notif_cd, count(1) as count
> FROM (select entity_id, notif_cd from t_base
> where proc_type = 'EDIT' and event_dt in
> ('20260101')) c
> group by c.entity_id, c.notif_cd order by
> c.notif_cd) a
> on a.entity_id = b.entity_id and a.notif_cd = b.notif_cd
> order by b.entity_id, b.notif_cd) d
> GROUP BY d.entity_id) e) notif_agg
> on warn_agg.entity_id = notif_agg.entity_id) join_a
> full outer join
> (Select d.entity_id,
> cast(d.count_list[0] as int) as cat_0_tran_count,
> cast(d.amount_usd_list[0] as double) as cat_0_dollar_total,
> flag_agg.flag_cnt
> FROM
> (SELECT c.entity_id, collect_list(c.category_code) as
> category_code_list, collect_list(c.count) as count_list,
> collect_list(cast(c.amount_usd as string)) as amount_usd_list
> FROM
> (select b.entity_id, b.category_code, COALESCE(a.count, 0) as
> count, COALESCE(a.amount_usd, 0.0) as amount_usd
> from
> (select entity_id, trim(category_code) as category_code
> from (
> select distinct entity_id,
> split(CONCAT(SUBSTR('01',1,1),'-',SUBSTR('01',2,1)), '-') as
> category_code_array
> from t_base where proc_type = 'EDIT' and event_dt in
> ('20260101')) a
> lateral view explode(a.category_code_array) exploded as
> category_code) b
> left outer join
> (select entity_id, category_cd, count(1) as count,
> sum(case when status_cd in
> ('C','W','A','S','U','T') then amount_usd else 0 end) as amount_usd
> from t_base where proc_type = 'EDIT' and event_dt in
> ('20260101')
> group by entity_id, category_cd order by category_cd) a
> on a.entity_id = b.entity_id and a.category_cd =
> b.category_code
> order by b.entity_id, b.category_code) c
> GROUP BY c.entity_id) d
> left outer join
> (select entity_id, count(1) as flag_cnt from t_base
> where proc_type = 'EDIT' and event_dt in ('20260101') and flag_ind
> = 'Y'
> group by entity_id) flag_agg
> on d.entity_id = flag_agg.entity_id
> ) join_b
> on join_a.entity_id = join_b.entity_id; {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)