【问题标题】:First value (Oracle) equivalent in HiveHive 中的第一个值 (Oracle) 等效项
【发布时间】:2014-05-28 06:59:02
【问题描述】:

我想为以下内容创建配置单元查询。

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

由于 hive 不支持第一个值。我想知道在 first_value 函数的简单查询中什么是等效的。 有什么建议吗??

【问题讨论】:

  • 随着人们对通过Apache Spark 的SQL 引擎使用Hive SQL 的兴趣日益浓厚,值得注意的是Spark 确实支持first_value()

标签: sql oracle hive analytic-functions


【解决方案1】:

我对这里的 oracle 语义不是很熟悉,但这不只是 group 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

【讨论】:

    【解决方案2】:

    HIVE 0.11 确实支持FIRST_VALUE

    但根据HIVE JIRA,存在一个未解决的问题,即first_value 中的ORDER BY 列不能超过一个。您还没有报告您遇到的错误,但如果是FAILED: SemanticException Range based Window Frame can have only 1 Sort Key,那么您必须修改ORDER BY 列。

    编辑:如果您不在HIVE 0.11,那么我建议为FIRST_VALUE 安装UDF。我想这将是做到这一点的直接方法。你可能想看看these UDFS

    【讨论】:

    • 我没有使用 0.11。如何在没有任何函数的简单查询中编写此代码
    • 编辑了我的答案。您可以安装 UDF 并使用它
    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多