2016-05-03 20 views
0

を投げ、私はハイブ(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_DESC1String型であることに注意してください。

例外

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:テーブル定義の例を追加しました。

答えて

0

Hive datatype implicit conversionsが表示されている場合、String to Boolean変換は許可されません。

とは、クエリで、where t1.TRANS_DESC1それはあなたのテーブル構造をアップロードして、すべてのデータ型が同じデータ型の変換があるしなければならないことを確認してくださいjava.lang.ClassCastException

+0

私はこれを理解することができません。 Hiveは評価時にテーブルのスキーマを知っていたので、その式がブール値にならないことは容易に推論できます。だから、なぜ実行時エラーを報告するために実行まで待ったのですか? – gyan

-1

をスロー理由です、TRANS_DESC1としてブールタイプを読み取ろうとします適用できません 。

+0

テーブル定義を追加しました。 – gyan

関連する問題