如何在蜂巢中获取最新和最新信息

时间:2018-11-30 15:40:02

标签: hive hql

我有一个名为signal的表,其中有以下列

  1. entity_id
  2. item_id
  3. month_id
  4. signal_count

输入表:

| entity_id | item_id | month_id | signal_count |

     101         3        2015           2
     104         4        2017           1
     101         1        2017           1
     104         2        2016           0
     107         2        2011           1
     107         0        2011           2

我需要signal_count和item_id的总和为oldest_item_id和newest_item_id(基于month_id并按实体ID分组)

和month_id相同,则取item_id的最小值

预期结果如下:

| entity_id | oldest_item_id | newest_month_id | signal_count |

     101             3                1               3 
     104             2                4               1
     107             0                0               3

1 个答案:

答案 0 :(得分:1)

根据所需的month_id顺序,使用<script src=somecode/js/chunk-vendors.40fba41b.js> 窗口函数获取每个entity_id的总和,并使用sum获得最旧和最新的item_id。

first_value

要打破平局并获得最少的item_id,以防每个实体_id中有多个具有相同month_id的行,请在select distinct entity_id,oldest_item_id,newest_item_id,signal_count_sum from (select t.* ,sum(signal_count) over(partition by entity_id) as signal_sum ,first_value(item_id) over(partition by entity_id order by month_id) as oldest_item_id ,first_value(item_id) over(partition by entity_id order by month_id desc) as newest_item_id from tbl t ) t 规范中将item_id添加到order by

rows