2016-07-23 3 views
0

以下のハイブクエリを記述しました。ここでは、私のjoin節にMapデータ型の列(msg)を使用しようとしています。マップデータ型のハイブクエリが失敗します

select p.p_id, count(*) from prod_json n 
inner join res_pan p on n.msg["mid"] = p.id 
where n.cat='XYX' 
group by p.p_id limit 10; 

このクエリでは、常に私はこの問題を解決することができたと思うのエラーメッセージ

[Error getting row data with exception java.lang.ClassCastException: 
java.lang.String cannot be cast to org.openx.data.jsonserde.json.JSONObject at 
org.openx.data.jsonserde.objectinspector.JsonMapObjectInspector.getMap(Json 
MapObjectInspector.java:40) at 
org.apache.hadoop.hive.serde2.SerDeUtils.buildJSONString(SerDeUtils.java:317) at 
org.apache.hadoop.hive.serde2.SerDeUtils.buildJSONString(SerDeUtils.java:353) at 
org.apache.hadoop.hive.serde2.SerDeUtils.getJSONString(SerDeUtils.java:197) at 
org.apache.hadoop.hive.serde2.SerDeUtils.getJSONString(SerDeUtils.java:183) at 
org.apache.hadoop.hive.ql.exec.MapOperator.toErrorMessage(MapOperator.java: 
529) at 
org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:502) at 
org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:170) at 
org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54) at 
org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453) at 

答えて

0

で失敗します。 I

select t2.p_id, count(*) 
from (select cat, msg["mid"] as mid from prod_json) t1 
join (select id, p_id from res_pan) t2 
on t1.mid = t2.id 
where t1.cat = 'XYZ' 
group by t2.p_id 

として再書いた私のクエリは、したがって、基本的に直接マップ列を使用しようとしませんが、第一の内側のクエリを使用して列にマップをプラテンし、それらに参加します。

関連する問題