Athena 中大小为 N 的随机样本

问题描述 投票:0回答:2

我正在尝试从 Athena 获取

N
行的随机样本。但由于我想从中绘制这个样本的表格很大,所以天真

SELECT
id
FROM mytable
ORDER BY RANDOM()
LIMIT 100

需要永远运行,大概是因为

ORDER BY
要求将所有数据发送到单个节点,然后该节点对数据进行洗牌和排序。

我知道

TABLESAMPLE
但这允许人们对一定百分比的行而不是一定数量的行进行采样。有更好的方法吗?

presto amazon-athena
2个回答
57
投票

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

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

SELECT id FROM mytable TABLESAMPLE BERNOULLI(10)

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


0
投票

使用 TABLESAMPLE 的最佳答案非常有效,但有一个小警告:结果表的行按照与原始表相同的顺序排序。

本页上的原始问题(以及我本人)似乎希望新表具有随机排序的行。我在最后实现了一个小的额外子句:

SELECT id FROM mytable TABLESAMPLE BERNOULLI(10) ORDER BY random()

© www.soinside.com 2019 - 2024. All rights reserved.