一尘不染

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

sql

文件HIVE指出,LIMIT条款returnsrows chosen at random。我一直在一个SELECT表上运行一个表,该表中的800,000记录多于LIMIT 1,但是它总是返回相同的记录。

我正在使用Shark发行版,我想知道这是否与这种意外行为有关?任何想法将不胜感激。

谢谢,Visakh


阅读 564

收藏
2021-03-17

共1个答案

一尘不染

即使文档指出它随机返回行,但实际上并非如此。

它返回“随机选择的行”,因为它出现在数据库中而没有任何where / order
by子句。这意味着它并不是真正的随机(或随机选择),只是无法确定返回行的顺序。

一旦在上面拍了order by x DESC limit 5一下,它就会返回您从中选择的内容的最后5行。

要使行随机返回,您需要使用类似以下内容的代码: order by rand() LIMIT 1

但是,如果索引设置不正确,可能会对速度产生影响。通常,我做一个最小/最大来获取表上的ID,然后在它们之间做一个随机数,然后选择那些记录(在您的情况下,将是1条记录),这往往比数据库要快。工作,尤其是在大型数据集上

2021-03-17