Dear hive users:

Quick question about hive longwritable convert to long.

I have a generic udf called protected_column, which works well as following:


Select protect_column(auction_id_64, ‘auction_id_64’, vp_bitmap) from table ;

And works well when I run

Select * from ( select protect_column(auction_id_64, ‘auction_id_64', 
vp_bitmap) from tableA union all select protect_column(auction_id_64, 
‘auction_id_64', vp_bitmap) from tableB) tmp ;


However, the generic udf would fail if I use it in the join.




SELECT *
FROM   (SELECT Protect_column(auction_id_64, 'auction_id_64', vp_bitmap)
        FROM   view_agg_dw_impressions_tmp t
               LEFT OUTER JOIN table_A pub
                            ON ( pub.id = t.publisher_id )
               LEFT OUTER JOIN table_B inv
                            ON ( inv.id = t.inventory_source_id )
        WHERE  t.buyer_member_id = 1541
               AND dh = '2014-09-19 12') feed;



... 8 more

Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Unxpected 
exception: Unxpected exception: org.apache.hadoop.io.LongWritable cannot be 
cast to java.lang.Long

at 
org.apache.hadoop.hive.ql.exec.MapJoinOperator.processOp(MapJoinOperator.java:234)

at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:504)

at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:847)

at 
org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:87)

at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:504)

at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:847)

at 
org.apache.hadoop.hive.ql.exec.FilterOperator.processOp(FilterOperator.java:136)

at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:504)

at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:847)

at 
org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:91)

at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:504)

at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:847)

at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:519)


It fails if I run the following too.



SELECT Protect_column(auction_id_64, 'auction_id_64', vp_bitmap)
FROM   (SELECT auction_id_64, vp_bitmap
        FROM   view_agg_dw_impressions_tmp t
               LEFT OUTER JOIN table_A pub
                            ON ( pub.id = t.publisher_id )
               LEFT OUTER JOIN table_B inv
                            ON ( inv.id = t.inventory_source_id )
        WHERE  t.buyer_member_id = 1541
               AND dh = '2014-09-19 12') feed;


Any one can help explaining why hive wanna convert longwritable to long and why 
the udf works fine on select query and union all query but not join queries ?


Thanks


Dan

Reply via email to