を投げ、私はハイブ(MAPR分布ハイブ0.13.0-MAPR-1508から21228)ハイブが無効なクエリを受け入れ、今日のRuntimeException
表の定義との奇妙な行動を得ましたクエリが実行されると、同じことを受け入れてRuntimeExceptionをスローしました。
select * from gd_temp_test.rate_merchants_test t1 where t1.TRANS_DESC1 limit 1;
問合せの表が外部表で、TRANS_DESC1
がString
型であることに注意してください。
例外
at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:195)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:435)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1566)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row .................
... 8 more
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
at org.apache.hadoop.hive.ql.exec.FilterOperator.processOp(FilterOperator.java:134)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:796)
at org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:92)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:796)
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:540)
... 9 more
私はそれを実行するための計画を解析または評価の権利を拒否するように期待していました。私はこのクエリを説明することができました
explain select * from gd_temp_test.rate_merchants_test t1 where t1.TRANS_DESC1 limit 1;
、クエリを説明しました 。
Explain
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 is a root stage
STAGE PLANS:
Stage: Stage-1
Map Reduce
Map Operator Tree:
TableScan
alias: t1
Statistics: Num rows: 344 Data size: 1238497 Basic stats: COMPLETE Column stats: NONE
Filter Operator
predicate: trans_desc1 (type: string)
Statistics: Num rows: 172 Data size: 619248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: row_key (type: string), trans_desc1 (type: string), trans_desc2 (type: string), trans_desc3 (type: string), trans_id (type: string)
outputColumnNames: _col0, _col1, _col2, _col3, _col4
Statistics: Num rows: 172 Data size: 619248 Basic stats: COMPLETE Column stats: NONE
Limit
Number of rows: 1
Statistics: Num rows: 1 Data size: 3600 Basic stats: COMPLETE Column stats: NONE
File Output Operator
compressed: false
Statistics: Num rows: 1 Data size: 3600 Basic stats: COMPLETE Column stats: NONE
table:
input format: org.apache.hadoop.mapred.TextInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
Stage: Stage-0
Fetch Operator
limit: 1
Time taken: 0.196 seconds, Fetched: 33 row(s)
何が原因で、これがランタイムまで待っていた可能性がありますか?それは正常な動作です。
EDIT 1:テーブル定義の例を追加しました。
私はこれを理解することができません。 Hiveは評価時にテーブルのスキーマを知っていたので、その式がブール値にならないことは容易に推論できます。だから、なぜ実行時エラーを報告するために実行まで待ったのですか? – gyan