我想为以下内容创建hive查询
insert into tempTableName
select distinct col_a
, first_value(col_b)
over (partition by col_a
order by nvl(col_c,0) desc, length(col_b) asc, col_b asc)
from tableA
As hive不支持第一个值。我想知道什么可以是等效的简单查询first_value函数。有什么建议吗??
我不是很熟悉这里的oracle语义,但这不是一个组by和arg-min?hive中的结构按照字段的顺序进行比较,所以你可以这样做:
select col_a,
min(
named_struct(
'col_c', -coalesce(col_c, 0),
'len' , length(col_b),
'col_b', col_b
)
).col_b
from tableA
group by col_a
HIVE 0.11
不支持FIRST_VALUE
。
但根据HIVE JIRA,有一个开放的问题,你不能有一个以上的ORDER BY
列在first_value
。你还没有报告你得到什么错误,但如果它是FAILED: SemanticException Range based Window Frame can have only 1 Sort Key
,那么你必须修改ORDER BY
列。
编辑:
如果您不在HIVE 0.11
上,那么我建议为FIRST_VALUE
安装UDF
。我想这是最直接的方法。您可能想看一下这些UDFS。