在 Hive 中实现 Limit 查询
Posted
技术标签:
【中文标题】在 Hive 中实现 Limit 查询【英文标题】:Implementing Limit query in Hive 【发布时间】:2014-06-24 11:10:32 【问题描述】:对于我的要求,我必须在 hive 中实现上限和下限。为此,我正在尝试编写类似这样的查询
SELECT * FROM `your_table` LIMIT 0, 5
SELECT * FROM `your_table` LIMIT 5, 5
但是 hive 只支持 1 个限制,不支持上限和下限。我尝试使用其他替代方法通过使用 RANK()、ROWNUM() 来实现这一点,但没有成功。
谁能帮我解决这个问题。提前致谢。
【问题讨论】:
您可能必须使用 rank() 方法来执行此操作。您能否在 hive 中的数据结构以及用例中提供更多详细信息?另外,您使用的是什么版本的 hive? 【参考方案1】:您好,您可以使用 Facebook UDF 和 rownum 功能
从 GITHUB 下载 Facbook UDF https://github.com/brndnmtthws/facebook-hive-udfs
从 UDF 项目创建一个 jar 文件
您可以在 hive 控制台中从本地路径添加 jar 文件。
ADD JAR s3n://obfuscated-path/assets/jars/facebook-udfs-1.0.jar;
CREATE TEMPORARY FUNCTION NumberRows AS 'com.facebook.hive.udf.UDFNumberRows';
SELECT
A.product_id,
A.category,
A.product_name,
A.brand,
A.rank_score,
CAST(NumberRows(A.category) as FLOAT),
FROM (
SELECT
product_id,
category,
product_name,
brand,
A.rank_score
FROM
source_table
DISTRIBUTE BY
category
SORT BY
category, rank_score desc
) A ;
更多参考 https://issues.apache.org/jira/browse/HIVE-1545
How can I add row numbers for rows in PIG or HIVE?
【讨论】:
以上是关于在 Hive 中实现 Limit 查询的主要内容,如果未能解决你的问题,请参考以下文章