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

可能您处于严格模式。严格模式功能之一是必须指定分区,所以这就是为什么使用“p_date='20121001'”的查询在哪里起作用的原因。

请尝试非严格模式:

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