gpt4 book ai didi

sql - 在 HiveQL 中使用 RANK,动态限制

转载 作者:可可西里 更新时间:2023-11-01 16:42:30 24 4
gpt4 key购买 nike

尝试通过 rank 函数在 hive sql 中执行动态限制。

问题:我想使用表 A 对表 B 的限制来创建输出。示例如下。

表 A:

 ID   | Limit
------------
123 | 1
456 | 3
789 | 2

表 B:

ID   | User
-------
123 | ABC
123 | DEF
123 | GHI
456 | JKL
456 | MNO
789 | PQR
789 | RST

输出:

ID   | User
----------
123 | ABC
456 | JKL
456 | MNO
789 | PQR
789 | RST

不幸的是,您不能在配置单元 sql 中进行动态限制(据我所知)。所以我试图使用排名。我当前的查询如下所示:

SELECT c.id, c.users, c.rnk
FROM (
SELECT b.id, b.user, a.limit, rank() over (ORDER BY b.id DESC) as rnk
FROM a JOIN b
ON a.id = b.id
) c
WHERE rnk < c.limit;

目前我得到错误:

ParseException line 3:9 cannot recognize input near 'rank' '(' ')' in from source 0

有什么想法吗?或者更好的方法?

谢谢!

最佳答案

SELECT c.id, c.users, c.rnk
FROM (
SELECT b.id, b.user, a.limit, row_number() over (PARTITION by b.id ORDER BY b.id ) as rn
FROM a JOIN b
ON a.id = b.id
) c
WHERE rn <= c.limit;

在上面的查询中,row_number() 将在连接后对行进行编号,where 子句中的过滤器将作为限制。 ORDER BY 对于没有任何偏好的简单限制行不是必需的,将 ORDER BY 替换为您的规则,例如按用户排序。

关于sql - 在 HiveQL 中使用 RANK,动态限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39498179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com