我正在使用 Hive 1.2.0,因此不能在 over 子句中使用聚合函数,例如:
SELECT rank() OVER (ORDER BY sum(b))
因为它仅在 hive 2.1 开始可用。
我被困在没有这个功能的情况下试图解决我的问题。
例如,我有一个这样的数据集,其中每一行代表从 store_id 中的 client_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 |
我想获取每个日期,每个客户的 homestore,这是他在过去一年中购买最多的商店。如果 2 个商店有相同的值,我们取最近的。
这个例子的结果是:
| 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
你知道如何解决这个问题吗?