我在hive中有一个表格,如下所示
fruit value
apple 2
apple 3
apple 4
plum 2
plum 3
plum 4
我想循环遍历表并比较之前的值和水果,并根据循环创建一个新列(总计)。这将是逻辑
if [fruit] = previous[fruit] then total = prev[fruit]
新表应如下所示
fruit value total
apple 2
apple 3 2
apple 4 3
plum 2
plum 3 2
plum 4 3
如何在Hive中使用SQL实现此目的? 此外,我已在我的查询中对结果进行了排序,因此按水果和升序值分组
答案 0 :(得分:1)
SQL表代表无序集。没有"之前"除非列指定排序。假设您有这样一个列,那么您可以使用lag()
:
select t.*,
lag(value) over (partition by fruit order by ?) as prev_value
from t;
?
用于指定排序的列的名称。
答案 1 :(得分:1)
添加到上一个答案,您可以通过写入如下的临时表来人为地创建订单:
create table #holding (rowid int identity, fruit varchar(max), value int)
insert #holding
select fruit, value from your table
order by fruit, value
这将重新创建原始表格中的顺序,并允许您执行Gordon上面所说的