说明该条款的文档。我一直在一个表上运行一个表,其中包含多个记录,但它总是返回相同的记录。HIVE
LIMIT
returns rows chosen at random
SELECT
800,000
LIMIT 1
我正在使用该Shark
发行版,我想知道这是否与这种意外行为有关?任何想法将不胜感激。
谢谢,维沙赫
尽管文档声明它随机返回行,但实际上并非如此。
它返回“随机选择的行”,因为它出现在数据库中,没有任何 where/order by 子句。这意味着它并不像您想象的那样真正随机(或随机选择),只是无法确定返回行的顺序。
只要你order by x DESC limit 5
在那里打 a,它就会返回你选择的任何内容的最后 5 行。
要随机返回行,您需要使用以下内容:order by rand() LIMIT 1
但是,如果您的索引设置不正确,它可能会对速度产生影响。通常我会做一个最小/最大来获取表上的 ID,然后在它们之间做一个随机数,然后选择那些记录(在你的情况下,只有 1 条记录),这往往比让数据库更快这项工作,尤其是在大型数据集上
为了安全起见,您要使用
从表中选择 *
通过 rand() 分发
按 rand() 排序
限制10000;
自此问题最初于 2014 年发布以来,文档可能已更新,但截至 2017 年 12 月,文档现在显示为“以下查询返回 5 个任意客户”。
在这种情况下,“任意”意味着选择方法不是确定性的,或者可能不值得麻烦记录。换句话说,您不应该将其视为获取特定记录子集(例如,用于采样)的可靠方法。如果您正在寻找权宜之计并希望尽快获得一个小的结果集(例如,出于 QA 目的),您应该只使用没有 Order By 子句的 Limit 子句。否则,请酌情使用 Order By、Cluster By 或 Distribute By/Sort By 之一。