Hive" argmin"失败没有输出

时间:2015-10-23 16:35:03

标签: hive verbose

我目前正在尝试在看起来像

的表上运行请求
Key Desc1 Desc2 Val
1   Hello World 37
2   Alpha Beta  27
2   Gamma Kappa 28
1   Bjr   Mde   42

我的目标是按照" Key"并询问Val = min(Vals)的行(在组中)。对于上面的虚拟表,我希望像

Key Desc1 Desc2 Val
1   Hello World 37
2   Alpha Beta  27

为此,我使用以下请求:

select Key
       min(struct(Val,Desc1)).col2 as Desc1,
       min(struct(Val,Desc2)).col2 as Desc2,
       min(Val) as Val
from mytable;

当我尝试执行查询时,我在语法检查期间没有任何错误,但是hive只是在没有创建任何作业的情况下挂起。然后它失败并出现以下错误:

FAILED: SemanticException org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out

我不知道失败的确切原因。你在我的查询中看到一个明显的错误吗? (如果是这样,它应该在语法检查期间失败;请注意它失败"通常"如果我在查询中引入错误,如" col2" - >&#34 ; COL3&#34)

您知道我们是否可以强制配置单元显示有关错误的更多信息?我没见过"详细"模式,但我可能错过了....

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

使用Hive windowing functions这非常简单。只需在窗口上方min(),然后选择arg_minVal相等的行。

<强>查询

select Key, Desc1, Desc2, arg_min
from (
  select *
    , min(Val) over (partition by key) as arg_min
  from db.tbl ) x
where Val = arg_min

<强>输出

1    Hello    World    37
2    Alpha    Beta     27

答案 1 :(得分:1)

实际上,我的问题中提出的查询是正确且有效的(至少在hive 0.10中)。

问题是纯粹的&#34;超时&#34;可以通过如下设置配置来解决的问题:

set hive.metastore.client.socket.timeout=300;