2016-07-23 4 views
0

다음 하이브 쿼리를 작성했습니다. 여기에 조인 절에 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

실패합니다. 나는 그래서 기본적으로 내부 쿼리를 사용하여 열로지도 platten 직접하지만 먼저지도 열을 사용하려고하지 않는 다음 해당 조인

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 

로 내 쿼리를 다시 썼다.

관련 문제