HIVE中的LIMIT条款是否真的是随机的?

时间:2014-05-22 08:55:44

标签: sql hive hiveql shark-sql

HIVE LIMIT注明returns rows chosen at randomSELECT。我一直在一个800,000表上运行LIMIT 1个记录超过Shark的表,但它始终返回相同的记录。

我正在使用{{1}}发行版,我想知道这是否与此预期行为有关?任何想法都将不胜感激。

谢谢, Visakh

3 个答案:

答案 0 :(得分:9)

为了安全起见,您想要使用

  

从表格中选择*

     

按rand()分发

     

按rand()排序

     

限制10000;

答案 1 :(得分:6)

即使文档声明它随机返回行,但它实际上并不正确。

随机返回"选择的行"因为它出现在没有任何where / order by子句的数据库中。这意味着它并不像您想象的那样随机(或随机选择),只是确定返回行的顺序。

只要你在那里拍了一个order by x DESC limit 5,就会返回你要从中选择的最后5行。

要随机返回行,您需要使用类似:order by rand() LIMIT 1

的内容

但是,如果您的索引未正确设置,则会对速度产生影响。通常我会使用min / max来获取表格中的ID,然后在它们之间做一个随机数,然后选择那些记录(在你的情况下,只有1条记录),这往往比让数据库完成工作,特别是在大型数据集上

答案 2 :(得分:3)

由于此问题最初发布于2014年,因此文档可能已更新,但截至2017年12月,文档现已读取,"以下查询返回5个任意客户"。

在这种情况下,"任意"意味着选择方法不是确定性的,也可能不值得记录。换句话说,你不应该指望它作为获取特定记录子集的可靠方法(例如,用于采样)。如果您正在寻找权宜之计并希望尽快获得较小的结果集(例如,出于QA目的),则应仅使用不带Order By子句的Limit子句。否则,请根据需要使用Order By,Cluster By或Distribute By / Sort By之一。