Sql 配置单元中的第一个值(Oracle)等效值
我想为以下内容创建配置单元查询Sql 配置单元中的第一个值(Oracle)等效值,sql,oracle,hive,analytic-functions,Sql,Oracle,Hive,Analytic Functions,我想为以下内容创建配置单元查询 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 因为配置单元不支持第一个值。我想知道在第一个值函数的简单查
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
因为配置单元不支持第一个值。我想知道在第一个值函数的简单查询中什么是等价的。
任何建议???
hive0.11
都支持第一个值
但根据,存在一个未解决的问题,即在第一个\u值中不能有多个ORDER BY
列。您尚未报告所遇到的错误,但如果失败:基于SemanticException Range的窗口框架只能有1个排序键
,则必须修改ORDER BY
列
编辑:如果您没有使用HIVE 0.11
,那么我建议为第一个值安装UDF
。我想这是最简单的方法。您可能想看看。我对这里的oracle语义不太熟悉,但这不只是一个group by和arg min吗?配置单元中的结构按字段的顺序进行比较,因此可以执行以下操作:
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
我没有使用0.11。我如何在一个没有任何函数的简单查询中写下这句话呢。您可以安装一个UDF
并使用它,因为通过的SQL引擎使用Hive SQL的兴趣越来越大,值得注意的是Spark确实支持first\u value()
。