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时可用。