【報錯】Hive:cannot be cast to org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector

Hive使用過程遇到報錯:

Caused by: java.lang.ClassCastException: org.apache.hadoop.hive.serde2.objectinspector.StandardStructObjectInspector cannot be cast to org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector
	at org.apache.hadoop.hive.ql.exec.JoinUtil.isFiltered(JoinUtil.java:241)
	at org.apache.hadoop.hive.ql.exec.CommonJoinOperator.createForwardJoinObject(CommonJoinOperator.java:504)
	at org.apache.hadoop.hive.ql.exec.CommonJoinOperator.genObject(CommonJoinOperator.java:647)
	at org.apache.hadoop.hive.ql.exec.CommonJoinOperator.genJoinObject(CommonJoinOperator.java:538)
	at org.apache.hadoop.hive.ql.exec.CommonJoinOperator.checkAndGenObject(CommonJoinOperator.java:940)
	at org.apache.hadoop.hive.ql.exec.JoinOperator.endGroup(JoinOperator.java:264)
	at org.apache.hadoop.hive.ql.exec.spark.SparkReduceRecordHandler.close(SparkReduceRecordHandler.java:442)
	... 12 more

解決:

排查後發現JOIN ON後面跟的多個條件鏈接字符是‘,’,改成‘and’即可。

類似這樣:

select
    id
    ,name
from table1
left join
select
    id
    ,name
from table2
on (table1.id=table2.id and table1.name=table2.name)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章