hive聚合函数

nhhxz33t  于 2021-06-26  发布在  Hive
关注(0)|答案(0)|浏览(282)

我正在使用Hive1.2.0,因此不能在over子句中使用聚合函数,例如:

SELECT rank() OVER (ORDER BY sum(b))

因为它只能从Hive2.1开始使用。
如果没有这个功能,我就无法解决我的问题。
例如,我有一个这样的数据集,其中每一行都表示从商店中的客户\u id购买\u id:

| Date       |CLIENT_ID| STORE_ID |
| 2017-01-01 |       1 |       S1 |
| 2017-01-02 |       1 |       S2 |
| 2017-01-03 |       1 |       S2 |
| 2017-01-04 |       1 |       S3 |

我想为每个日期,每个客户的家庭商店,这是他在过去一年中购买最多的商店。如果两个商店有相同的值,我们取最近的。
这个例子的结果是:

| Date       |CLIENT_ID| STORE_ID | HOMESTORE |
| 2017-01-01 |       1 |       S1 |        S1 | -- S1 Because there is no other store before
| 2017-01-02 |       1 |       S2 |        S2 | -- 1 purchase in S1 and S2 but S2 is the most recent
| 2017-01-03 |       1 |       S2 |        S2 | -- 2 purchases in S2
| 2017-01-04 |       1 |       S3 |        S2 | -- 2 purchases in S2 vs 1 in S3

对于over子句中的聚合函数,可以用以下方法解决(尽管1年子句仍然缺失):

SELECT 
LAST_VALUE(STORE_ID) OVER(
    PARTITION BY CLIENT_ID
    ORDER BY COUNT(STORE_ID) ASC
    RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as homestore

你知道怎么解决这个问题吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题