在 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 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在变量中获得蜂巢输出?

JPQL 中的 LIMIT 子句替代方案是啥?

Athena 在某些查询中忽略 LIMIT

我们如何在sql CTE中实现动态查询?

hive 高级查询1

在 PDO 中实现 LIKE 查询