3

タイトルに「セマンティックのエラー」と表示されている場合、構文エラーと見なされますか? もちろんそうではありません。何が起こったのかをお見せします。

hive> use android;
OK
Time taken: 0.223 seconds
hive> desc tb_user_basics;
OK
col_datetime    string  
col_is_day_new  string  
col_is_hour_new string  
col_ch  string  
...
p_date  string  
p_hourmin   string  
Time taken: 0.189 seconds
hive> select count(distinct col_udid) from android.tb_user_basics where p_date>='20121001' and p_date<='20121231';
FAILED: Error in semantic analysis: org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out
hive> 
> 
> select count(distinct col_udid) from android.tb_user_basics where p_date>='20121001' and p_date<='20121231';
FAILED: Error in semantic analysis: Unable to fetch table tb_user_basics

テーブルがデータベースandroidに存在すると確信しています。最初のステートメントが失敗した後、テーブルが欠落しているように見えます.(テーブル名に db プレフィックスを追加しても)

データ量が多いからなのか気になりますが、時間帯が [20121001, 20121231] になっていることにお気付きでしょうか。何度もコマンドを実行すると、常にこのエラーが発生します。しかし、条件を「p_date='20121001'」に変更すると、ステートメントは正常に実行できます。(ボリュームが小さいから?)

私はあなたの答えを待っています、ありがとう。

4

1 に答える 1

1

おそらくあなたは厳密なモードになっています。厳密モードの機能の 1 つは、パーティションを指定する必要があることです。これが原因で「p_date='20121001'」を含むクエリが機能する理由です。

非厳密モードを試してください:

set hive.mapred.mode=nonstrict;
于 2013-03-02T15:54:34.553 に答える