Hive中的第一个值(Oracle)等价



我想为以下内容创建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。

相关内容

  • 没有找到相关文章

最新更新