HIVE
LIMIT
注明returns rows chosen at random
条SELECT
。我一直在一个800,000
表上运行LIMIT 1
个记录超过Shark
的表,但它始终返回相同的记录。
我正在使用{{1}}发行版,我想知道这是否与此预期行为有关?任何想法都将不胜感激。
谢谢, Visakh
答案 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之一。