Hive 蜂巢;argmin";失败而无输出

Hive 蜂巢;argmin";失败而无输出,hive,verbose,Hive,Verbose,我当前正在尝试对如下表运行请求 Key Desc1 Desc2 Val 1 Hello World 37 2 Alpha Beta 27 2 Gamma Kappa 28 1 Bjr Mde 42 我的目标是按“键”分组,并询问Val=min(Val)所在的行(在组中)。对于上面的虚拟表,我希望 Key Desc1 Desc2 Val 1 Hello World 37 2 Alpha Beta 27 为此,我使用以下请求: select Key

我当前正在尝试对如下表运行请求

Key Desc1 Desc2 Val
1   Hello World 37
2   Alpha Beta  27
2   Gamma Kappa 28
1   Bjr   Mde   42
我的目标是按“键”分组,并询问Val=min(Val)所在的行(在组中)。对于上面的虚拟表,我希望

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;
当我尝试执行查询时,在语法检查期间没有任何错误,但是配置单元只是挂起,没有创建任何作业。然后它会失败,并出现以下错误:

FAILED: SemanticException org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out
我不知道失败的确切原因。你认为我的问题有明显的错误吗? (如果是这样,它应该在语法检查期间失败;请注意,如果我在查询中引入了“col2”->“col3”这样的错误,它将“正常”失败)

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


非常感谢您的帮助。

这是非常简单的使用方法。只需将
min()
置于窗口上方,然后选择
arg\u min
Val
相等的行

查询

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
输出

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

事实上,我的问题中提出的查询是正确的并且有效(至少在Hive0.10中)

该问题是一个纯粹的“超时”问题,可以通过如下设置配置来解决:

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

+1了解使用窗口的这一有用的解决方案。但是请注意,这仅在配置单元>0.11时可用。