【问题标题】:random sample of size N in AthenaAthena 中大小为 N 的随机样本
【发布时间】:2017-11-14 14:17:29
【问题描述】:

我正在尝试从 Athena 获取N 行的随机样本。但是由于我想从中提取这个样本的表格很大,所以很天真

SELECT
id
FROM mytable
ORDER BY RANDOM()
LIMIT 100

运行需要很长时间,大概是因为ORDER BY 要求将所有数据发送到单个节点,然后该节点对数据进行打乱和排序。

我知道TABLESAMPLE,但这允许人们对一定百分比的行进行采样,而不是对其中的一些行进行采样。有更好的方法吗?

【问题讨论】:

  • 您使用的是什么类型的连接器?在蜂巢连接器上,每次运行简单的SELECT * FROM t LIMIT 10 时,我得到的行略有不同。我认为它偏向于更新的数据,因为不同的节点赢得了每次返回结果的“竞赛”。您的样本需要做到多公正?

标签: presto amazon-athena


【解决方案1】:

Athena 实际上落后于 Presto。您可以使用 TABLESAMPLE 获取表的随机样本。

假设您想要 10% 的表样本,您的查询将类似于:

SELECT id FROM mytable TABLESAMPLE BERNOULLI(10)

注意有 BERNOULLI 和 SYSTEM 采样。 Here 是它的文档。

【讨论】:

  • Athena 仅支持BERNOULLI 采样。控制台测试显示TABLESAMPLE SYSTEM 是空操作。
猜你喜欢
  • 2019-03-28
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 2016-10-16
  • 1970-01-01
相关资源
最近更新 更多